問題タブ [rakudo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
raku - Apocalypse #1 で導入された「セマンティック モデル」とは何ですか?
Apocalypse #1で、ラリーは次のように書いています。
Raku は、単一のセマンティック モデルに対応する複数の構文をサポートします。次に、その単一のセマンティック モデルが複数のプラットフォームにマップされます。
ラリーが「単一のセマンティックモデル」を書いたときに何を意味していたのかについて、私が持っているいくつかの漠然とした考えは次のとおりです。
チューリング完全言語/オートマトン; および/または
6モデルになったもの; および/または
NQP/nqpになったもの。
(私はググっていくつかの議論を見つけました。たとえば、これは slashdotにありますが、それらは同様に漠然としていました。)
おそらく、彼が考えていたことに対する答えよりも重要なのは、何が実現したかということです。
彼の定式化は、 NQP および/または nqp (Raku / NQP/nqp / NQP バックエンド アーキテクチャの中間) にマッピングされる可能性があるように聞こえます。
(もしそうなら、おそらくそのモデルは nqp の Raku のローストに相当するものによって「指定」されていますか?)
または、Liz++、QAST、または RAST ごとに?
私の主要な質問 (タイトル) に最もよく答えることができると思う人は知っていますが、おそらく他の誰かが知っていますか?
documentation - Raku のイントロスペクションは、異なるファイル/モジュールにまたがるすべてのマルチ候補を一覧表示できますか?
proto と multi が同じモジュールで定義されている場合、Type.^lookup('method').candidates
すべての multi 候補のリストを返します。ただし、プロトがマルチとは異なるファイル/モジュールにある場合、これは機能しないようです。
Raku の内省を通じて、複数候補の完全なリストを見つける方法はありますか? または、ソース コードを grep する以外に方法はありませんか? (特定のプロトに適用可能な複数の候補の完全なリストがあると、文書化の目的に役立つため、お願いします。)
compilation - 実行されていないコンパイル時のコードによって Raku のバイトコード サイズが増加するのはなぜですか? 実行時のパフォーマンスが低下しますか?
次の 2 つのプログラムを検討してください。
と
単純に、両方のプログラムがまったく同じバイトコードにコンパイルされることを期待していました。CHECK
ブロックは、コンパイルの最後に実行するコードを指定します。変数をチェックしてから何もしないことは、プログラムの実行時の動作に影響を与えないため、コンパイルされたバイトコードに含める必要はありません。
ただし、これら 2 つのプログラムをコンパイルしても、同じバイトコードにはなりません。具体的には、CHECK
ブロックを使用しないバージョンをコンパイルすると、24K のバイトコードが作成されますが、ブロックを使用するバージョンでは 60K が作成されます。これら 2 つのバージョンでバイトコードが異なるのはなぜですか? このバイトコードの違いには、ランタイム コストがありますか (または潜在的に) ありますか? (そうしなければならないように思えますが、私は確信したいのです)。
そして、もう 1 つの関連する質問:DOC CHECK
ブロックはどのように上記に適合しますか? 私の理解では、フラグを指定して実行されていない場合、コンパイラDOC CHECK
でさえブロックをスキップします。--doc
それと一致して、hello-world プログラムのバイトコードは、上記のようなブロックが与えられたときにサイズが増加しません。DOC CHECK
ただし、ブロックにステートメントが含まれている場合はサイズが大きくなります。そのことから、それはどういうわけか特殊なケースであり、ブロック内でも実行されるuse
と結論付けています。あれは正しいですか?もしそうなら、私が知っておくべき他の同様に特別なケースのフォームはありますか?use
DOC CHECK