問題タブ [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.
c++ - なぜコンパイルに時間がかかるのですか?
私はプログラミング言語を設計していますが、私が考えていた問題の1つは、プログラミング言語のコンパイルに時間がかかる理由でした。c ++は、ファイルをコンパイルするたびにヘッダーを解析してコンパイルする必要があるため、長い時間がかかると想定されています。しかし、プリコンパイル済みヘッダーは同じくらい時間がかかりますか?この問題を抱えている言語はc++だけではないと思います。
language-design - プログラミング言語について話すとき、マジックの定義は何ですか?
「魔法」という言葉は、「言語 X には魔法が多すぎる」、「プラットフォーム Y は一般的に魔法を避ける」などの文脈でよく使われます。ただし、この用語の定義はかなり不十分であり、人々が見ればわかるものです。たとえば、Java には魔法がほとんど含まれていないと言われていますが、Java のガベージ コレクターは多くのことをプログラマーから隠しています。魔法が単純に詳細を隠す抽象化を意味する場合、アセンブリ言語で大規模なプログラムを作成する人がもういないことを考えると、魔法が悪いことと見なされるのはなぜでしょうか? 魔法がそれ以上の意味を持つとすれば、それは何を意味するのでしょうか?
actionscript-3 - 不変コレクション Actionscript 3
私は最近、AS3 でクリーンなコーディング手法を実装しようと試みています。これらの 1 つは、包含オブジェクトから配列への参照を渡さないことです。ポイントは、私が 1 つのクラスからの追加と削除を制御し、アレイの他のすべてのユーザーが読み取り専用バージョンを受け取ることです。
現時点では、読み取り専用バージョンは私が作成したArrayIteratorクラスであり、典型的なIteratorインターフェイス (hasNext、getNext) を実装しています。また、Proxyを拡張するので、Array と同じようにfor eachループで使用できます。
だから私の質問は、これは多くの言語の基本的な機能であってはならないということですか? コレクションのビューのみを読み取るために参照を渡す機能はありますか?
また、AS3 のコレクションの型安全性がVectorクラスの形で改善されたので、VectorIteratorで Vector をラップすると、不変性のために入力が失われます。AS3 で不変性とタイピングという 2 つの欲求を実装する方法はありますか?
c++ - 人々が C++ から離れるには何が必要でしょうか?
C++ が好きなほとんどの人でさえ、C++ にはシステム/パフォーマンス プログラミング言語としてのニッチとは関係のない欠点がたくさんあることを認めています。これらには、時代遅れのモジュール管理システム (ヘッダー ファイル)、前方宣言の要件、文法を決定不能にする構文の癖 (テンプレート宣言の <> 山括弧など)、実際の言語ではなくテキスト レベルで動作するマクロの組み込みが含まれます。マクロが使用されるものに対処する機能、配列や文字列 (これらの型の STL および C バージョン) などの機能の重複、事実上シンタックス シュガーがないこと、スレッド化、ガベージ コレクション、デリゲート/クロージャなどの最新の機能の一般的な欠如など (注: はい、メモリが非常に制約されている環境やリアルタイム環境では、ガベージ コレクションを望まない正当な理由があるかもしれません。
一方、C++ は、コードを効率的かつ金属に近い形で記述できる唯一の主流言語ですが、少なくともある程度の高レベルの抽象化も提供します。成熟し、標準化されており、大量のコンパイラの実装とライブラリ、および大規模なレガシー コードベースがあります。
C++ をメイン言語として使用している皆さん、C++ の疣贅を我慢する価値があると個人的に判断した理由は何ですか? 考えを変えて、この種の疣贅の少ない新しい言語を使用することを決定するには、何が必要でしょうか? あなたは C++ を本当に気に入っているから使っていますか?それともレガシーの問題やニッチ向けの成熟した主流の言語が他に存在しないためにしぶしぶ使っていますか?
javascript - javascript のプロトタイプ モデルから学べる教訓は何ですか?
質問は、言語設計の観点からです。
状況について少し説明する必要があります。私はプロトタイプをサポートしない JavaScript バリアントに取り組んでいますが、適切な型システム (最も重要なのは instanceof のサポート) が遅れています。ecmascript の仕様は重要ではないので、別のより適したものを自由に実装できます。
バリアントでは: -
- でコンストラクターを宣言する
function foo()
のではなく、コンストラクターはテンプレート ファイルで宣言されます。つまり、コンストラクターは名前空間に存在します (ファイルのパスによって決定されます)。 - 現在、動作のすべての継承はテンプレートを適用することによって行われます。つまり、すべての共有関数が個々のオブジェクトにコピーされます (結局のところ、プロトタイプはありません)。
Web 開発者になったことがない私は、プロトタイプを怒って使用したことがないという、少し奇妙な立場に置かれています。これは私がそれらについて意見を述べるのを止めていませんが。
私が理解しているように、プロトタイプモデルに関する私の主な問題は
- オブジェクトの名前空間、obj.prototype、obj.constructor の不必要なポイ捨て (オブジェクトをマップとして扱う能力を保持しようとする未熟な反論ですか?)
- 追加レベルの間接化を直接使用する方が簡単な場合、実行時に共有動作を変更する機能は不要に思えます
obj.shared.foo()
。特に、それはかなり大きな実装上の頭痛の種です - 人々は、プロトタイプとコンストラクターの違いなど、プロトタイプを一般的によく理解していないようです。
したがって、これらを回避するために、特別な演算子コンストラクターを使用することを考えています。基本的には、各オブジェクトにはコンストラクターのリストがあり、それらにアクセスする必要がある場合があります。
すべてのフィードバックに感謝します。伝えたいことがたくさんあるので、私の視点を理解するのは難しいかもしれませんが、それは重要な決定であり、専門家の意見は非常に貴重です.
- プロトタイプ モデルの良い点も悪い点も、私の理解を深めることができれば何でも構いません。
- 私の提案に対する考え
ありがとう、
マイク
編集:提案がうまくいけば、今は理にかなっています。
regex - 正規表現で文字の代わりにキーワードを使用できないのはなぜですか?
さて、正規表現の基本はほとんど理解できませんが、暗号化されたワイルドカード文字や記号の代わりにキーワード (SQL など) を使用するように設計できなかったのはなぜでしょうか?
正規表現は実行時に解釈/解析されるため、パフォーマンスのためですか? (未コンパイル)
それとも、書き込み速度のためですか?いくつかの「単純な」文字の組み合わせを学ぶと、キーワードの代わりに 1 文字を入力する方が簡単になると考えていますか?
.net - VB.NET のオプションのクラス属性の構文がおかしいのはなぜですか?
VB.NET のクラス/プロパティ属性に、次のような奇妙なオプションの構文がある理由に興味があります。
VB.NET では、このようなオプションのパラメーターを設定して、注文の制限を回避することができます (これは素晴らしいことです) が、この場合はそれを強制しています。
たとえば、これは不可能です。
パラメータは元の定義と同じ順序ですが。
これには正当な理由がありますか?それとも、単に .NET の設計者がこの件に関して怠惰だったのでしょうか?
c# - VB.NETのforeachはc#よりも高速ですか?
私の同僚は、以前のインタビューで、foreachがc#のforeachよりもVB.Netの方が速いことを知ったと言いました。これは、両方のCLRの実装が異なるためだと彼は言われました。
C ++の観点からすると、これがなぜなのか興味があり、最初にCLRについて調べる必要があると言われました。foreachとCLRをグーグルで検索しても、理解するのに役立ちません。
foreachがC#よりもVB.Netの方が速い理由について誰かが良い説明をしていますか?それとも私の同僚は誤った情報を与えられましたか?
c# - 文字列にnullを追加することが合法なのはなぜですか?
String Basicsに関するMSDNの記事は、これを示しています。
nullと連結すると、null参照例外がスローされないのはなぜですか?連結の前にnullをチェックする必要がないように、プログラマーの生活を楽にするためですか?