ikasoba
ikasoba
That problem also occurred on my server.
失敗に失敗を重ねてPRを作成しました m(_ \_)m
それなら任意の値をキーに設定する構文をJSの計算プロパティ名に合わせたほうが良さそう?(/ω・\)チラッ https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer#:~:text=%E8%A8%88%E7%AE%97%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E5%90%8D こんなふうな構文です ``` &{ hoge: 1234 // hogeはキー名として設定される [obj]: ... // objは変数として評価され、中に入っている値がキーに設定される [1 + 1]: ... // [ ... ] で囲まれたキーは式として評価される } ```
(今の段階ではないけど)引数に変更されるオブジェクトを入れる場合も対応できるように、Rubyっぽく識別子にわかりやすく記号付けるのも良さそう? (この場合だと論理否定とわかりずらくなりそうかもしれないけど) ```js [].reverse!() // 配列のオブジェクトが変更される [].reverse() // 新しく反転された配列が返される @rename!(obj, newName) { obj.name = newName } let user = { name: "blobdog" } rename!(user, "nyanpuppu-") rename // !は識別子の一部なので参照エラー ```
> ユーザーの関数定義では!が末尾についた時だけ参照渡しが使え、std関数等もそれに倣う、みたいな感じですか? 個人的には、Rubyでは特に引数について制約が付くわけではないらしいので、注釈程度に考えていました。 引数について制約を付けるのも面白そうですね。
実装する際、レジスタと変数をどう割り当てるのか難しそうですね レジスタは有限にしかないので、スコープとかが合わさってくるとより複雑になりそう・・・😵 luaはレジスタが256個あってそれを超える数の変数を定義しようとするとエラーになるらしいです それなら単純そうだし、luaのスコープ周りの挙動がわかれば意外と実装できそうな気もするかもしれない?:thinking: ただ、変数をより多く作りたいケースもあるかもしれない・・・?:thinking:
そんな感じですね、単にASTをバイト列にシリアライズすれば良いわけではないのが難しい所です
evalでスコープが生成されるからそのスコープの外からはfuncは参照できないし大丈夫そう
あ~詰めが甘いとありそう 新しいブロックとかで参照される変数は開放するのを除外すれば行けそうかな:thinking:
うーん、配列やオブジェクトだと値を参照するので、レジスタからの読み取りは発生しないはずなので、関数のみで良さそう?(JavaScript上にランタイムを実装するのであれば) ただ、配列やオブジェクトの構造の中身も確認しないといけなさそうですね