問題タブ [language-design]
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.
scripting - ゲームのスクリプト作成に必要な言語機能は?
私はゲーム スクリプト言語の設計を検討しており、ゲーム業界で働く人々が優れたゲーム スクリプト言語に不可欠なアイテム/プロパティと見なすものは何なのか疑問に思っていました。これには次のようなものが含まれます。
- 静的タイプと動的タイプ
- 誰を対象とすべきでしょうか: プログラマーですか、それともデザイナーですか?
- 構文 (C のように見える必要がありますか?)
- どのくらいのレベルにすればいいですか?(たとえば、C vs Lisp -- または命令型 vs 関数型)
- それは何をすることができなければなりません。どのくらい速くする必要がありますか?
また、いくつかのソースから、スクリプトはプログラマーよりもデザイナーによって書かれることが多いため、スクリプトは非常に単純になる傾向があると聞いています。これは事実ですか?
php - PHPの全体的な設計哲学は何ですか?
私は最近、クライアント用の Drupal アプリケーションを通じて PHP (5) に初めて出会いました。使いこなしてみて特に難しいことはありませんでしたが(たとえば、ドキュメントが充実しているなど)、「これは賢い!」「これは使っていて楽しい!」と思った瞬間はありませんでした。さらに、関数がどのように命名されるかを正確に予測することも、従うべき指針を確認することもできませんでした。
これは、たとえば Ruby とは対照的です。Ruby では、すべてがオブジェクトであり、メソッドは予測可能で疑似ポリモーフィックであり、ブロックは (いくつかの例を挙げると) 使用するのが楽しくなります。対照的な他の言語のハイライト: Python のリスト内包表記は、反復に対する考え方を変えます。C は、ポインターとビット操作を使用してハードウェアに戻ります。javascript は、名前のない関数とハッシュの高度なサポートを備えており、驚くほど優れています。無愛想さは、データに感謝し、関連性を考慮してデータについて考えるように強制します。
それを念頭に置いて、phpのハイライトは何ですか? そして、言語の全体的な設計哲学は何ですか? PHP が全体的にあまり評判がよくないことは承知していますが、多くのプロではない開発者がコードのコピーと貼り付けを行っているため、それは認識の問題であるといつも聞いていました。
編集:
さて、コンセンサスは、PHP は Web プログラマーのモンキー レンチであるということです。私はそれを受け入れることができます。私はただ洞察を探していましたが、私はすでにそれを持っていたと思います. たとえば、mod_php/libphp を高く評価しています。また、php の経験がなくても 2 週間でアプリケーションを完成させることができました。
投稿ありがとうございます。
c++ - C ++のように宣言と定義を分離することの長所と短所は何ですか?
C ++では、関数、変数、定数の宣言と定義は次のように分離できます。
実際、クラスの定義では、これがよくあることです。クラスは通常、そのメンバーを使用して.hファイルで宣言され、対応する.Cファイルで定義されます。
このアプローチの長所と短所は何ですか?
c - C マクロは何に役立ちますか?
私は C を少し書いたことがあり、C が何をしているのかを理解するのに十分なほど十分に読むことができます。マクロが何であるかを覚えておき、読みながら頭の中で代用する必要があります。私が出会った直感的で分かりやすいものは、いつも小さな小さな機能のようなものでした.
プリプロセッサでデバッグまたはクロスプラットフォーム ビルド用にさまざまなビルド タイプを定義する必要があることは理解できますが、任意の置換を定義する機能は、すでに難しい言語をさらに理解しにくくするためにのみ役立つようです。
C にこのような複雑なプリプロセッサが導入されたのはなぜですか? そして、単純な if #debug スタイルの条件付きコンパイル以外の目的でまだ使用されているように見える理由を理解できる使用例はありますか?
編集:
いくつかの回答を読んでも、まだわかりません。最も一般的な答えは、コードをインライン化することです。inline キーワードがそれを行わない場合は、それを行わない正当な理由があるか、実装を修正する必要があります。「このコードを実際にインライン化する」ことを意味するまったく異なるメカニズムが必要な理由がわかりません(インライン化の前に書かれたコードは別として)。また、「関数に入れるにはばかげている場合」という考えも理解できません。確かに、入力を受け取って出力を生成するコードは、関数に入れるのが最適です。私は C 言語のマイクロ最適化に慣れていないので、理解できないかもしれませんが、プリプロセッサは、いくつかの単純な問題に対する複雑な解決策のように感じます。
c# - 非整数列挙型がないのはなぜですか?
非整数列挙型を作成できないのはなぜですか? これが言語設計上の決定なのか、それともコンパイラでの実装に問題があるのかを知りたいです。
言い換えれば、非整数列挙型を言語に実装することは可能ですが、正当な必要性はありませんか? または、それが実現可能ではないが正当化できる場合、どのような障害が妨げになっていますか?
誰かが、これを C# で使用できない理由または理論的根拠を教えてください。かなりお願いします。
python - Python 仮想マシン アーキテクチャの図とリファレンス
Python VM のアーキテクチャに関する入門ドキュメントを見つけることができるサイト/本を誰かが指摘できますか?
私は C 版に興味がありますが、他の実装に関するわかりやすい参考文献があれば、それも役立つかもしれません。
プレーンなソース コードよりも高レベルのあらゆる種類のリソースを見つけようとしています (ただし、UML ダイアグラムまたはそのようなものはいいでしょう) また、さまざまな要因 (パフォーマンス、安定性) 間のトレードオフを含む、関連する設計上の決定に関する情報、単純さ)。
memory-management - リージョンベースのメモリ管理
私は高水準言語を設計しており、C++ の速度 (LLVM を使用します) を持ちながら、C# のように安全で高水準であることを望んでいます。ガベージ コレクションは遅く、新規作成/削除は安全ではありません。「領域ベースのメモリ管理」を使用することにしました (Web 上には、主に関数型言語に関する論文がいくつかあります)。それを使用する唯一の「便利な」言語は Cyclone ですが、GC もあります。基本的に、オブジェクトはレキシカル スタックに割り当てられ、ブロックが閉じると解放されます。オブジェクトは、ダングリング参照を防ぐために、同じリージョンまたはそれ以上のリージョンにある他のオブジェクトのみを参照できます。これをより柔軟にするために、スタックを上下に移動でき、ループを通じて保持できる並列領域を追加しました。ほとんどの場合、型システムは割り当てを検証できますが、
元:
これは実用的ですか?非レキシカル スコープの参照カウント領域を追加する必要がありますか? 任意のオブジェクトを参照できる弱い変数を追加する必要がありますが、領域の削除をチェックする必要がありますか? このシステムで使用するのが難しい、または漏洩する可能性のあるアルゴリズムは何か考えられますか?
language-design - 可変または不変のクロージャ
命令型のオブジェクト指向言語では、ミュータブルまたはイミュータブルなクロージャーを持つ方が理にかなっていますか?
例えば:
クロージャーが変更可能な場合、これは次のように出力されます。
不変の場合は、次のように出力されます。
不変のクロージャーを使用しても、これを実行できることを認識しています。
では、ミュータブルまたはイミュータブルなクロージャーを用意した方がよいでしょうか、それとも両方のオプションを用意したほうがよいのでしょうか? イミュータブル クロージャは実装しやすいように思われるので、現時点では、そうしない正当な理由がない限り、それを使用すると思います。