問題タブ [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.

0 投票する
14 に答える
100874 参照

programming-languages - 戻り値の型による関数のオーバーロード?

より主流の静的型付け言語が、戻り値の型による関数/メソッドのオーバーロードをサポートしないのはなぜですか? 私は何も考えられません。パラメーターの型によるオーバーロードのサポートと同じくらい有用で合理的です。あまり人気がないのはどうしてですか?

0 投票する
13 に答える
27031 参照

c# - C# が読み取り専用のローカル変数を許可しないのはなぜですか?

これについて同僚と友好的な議論をしています。私たちはこれについていくつかの考えを持っていますが、SOの群衆はこれについてどう思っているのでしょうか?

0 投票する
13 に答える
11494 参照

computer-science - 言語の「チューリング完全性」を評価するための実用的なガイドラインは何ですか?

「チューリング完全とは」とウィキペディアのページを読みましたが、チューリング完全であることの実際的な意味よりも、正式な証明には興味がありません。

私が実際に決めようとしているのは、私が設計したおもちゃの言語が汎用言語として使用できるかどうかです。それを使ってチューリングマシンを書くことができれば、それを証明できることはわかっています。しかし、成功することがかなり確実になるまで、その演習を実行したくありません.

チューリングの完全性が不可能な最小限の機能セットはありますか? 完全性を事実上保証する一連の機能はありますか?

(私の推測では、条件付き分岐と読み取り/書き込み可能なメモリ ストアがあれば、ほとんどの場合そこにたどり着くことができます)


編集:

「チューリング完全」と言ったことで、ちょっと話が逸れてしまったように思います。私は、特定の機能セットを備えた新しく発明された言語 (または、特定の命令セットを備えた VM) が計算に値するものなら何でも計算できると、合理的な自信を持って推測しようとしています。それを使ってチューリング マシンを構築できることを証明することは 1 つの方法ですが、唯一の方法ではありません。

私が望んでいたのは、「X、Y、および Z を実行できる場合、おそらく何でも実行できる」という一連のガイドラインでした。

0 投票する
3 に答える
936 参照

actionscript-3 - AVM2 への言語の追加

AVM2 で実行する言語を作成することに興味があり、どこから始めればよいかアドバイスを求めています。これは決して簡単な作業ではないことは承知していますが、試してみたいと思います。少なくとも、途中で言語の実装についてもっと学びたいと思います。

私は ANTLR をいじり、言語開発のための構文の問題を調べてきました。私が探しているのは、進むべき道についてのアドバイス、または有用な参考文献/本です。

たとえば、非常に単純な AVM2 バイトコードを (スクリプト/手動で) 生成し、それを VM 上で実行したいと考えています。

ありがとう

0 投票する
6 に答える
1692 参照

python - 解析のための部分評価

私は Python 用のマクロ システムに取り組んでおり (ここで議論されているように)、私が検討してきたことの 1 つは測定単位です。測定単位はマクロを使用せずに実装することも、静的マクロを使用して実装することもできますが (たとえば、事前にすべての単位を定義するなど)、実行時に構文を動的に拡張できるようにするというアイデアをいじっています。

これを行うために、コンパイル時にコードに対して一種の部分評価を使用することを検討しています。構文のマクロが使用できないために特定の式の解析が失敗した場合、コンパイラは関数/ブロックの評価を停止し、未知の式があるスタブを使用して既に持っているコードを生成します。このスタブが実行時にヒットすると、関数は現在のマクロ セットに対して再コンパイルされます。このコンパイルが失敗すると、実行を続行できないため、解析エラーがスローされます。コンパイルが成功すると、古い関数が新しい関数に置き換えられ、実行が続行されます。

私が目にする最大の問題は、影響を受けるコードが実行されるまで解析エラーが見つからないことです。ただし、これは多くの場合には影響しません。たとえば、[]、{}、()、および `` などのグループ演算子は、ペアにする必要があります (トークナイザー/リスト パーサーの要件)、およびクラスや関数などのトップレベルの構文「実行時間」は実際にはロード時間であり、構文が評価され、オブジェクトが生成されるため、影響を受けません。

上記の実装の難しさと問題以外に、このアイデアにはどのような問題がありますか?

0 投票する
5 に答える
1077 参照

c++ - C ++ 0xの実装は推測しますか?

C++0x標準は完成に向かっています。これまでC++に手を出していましたが、他の言語で台無しにされてきた多くの最新機能が欠けているように思われるため、完全に学ぶことは避けました。しかし、私は多くの苦情に対処するC++0xに非常に興味があります。標準が承認された後、主要なコンパイラベンダーが合理的に完全な本番品質の実装を提供するのにどれくらいの時間がかかるかについての推測はありますか?C ++の人気の低下を逆転させるのに十分早く起こるのでしょうか、それとも少なすぎるのでしょうか、遅すぎるのでしょうか。C ++0xが数年以内に「C++」になると思いますか、それともほとんどの人が実際には以前の標準に固執し、C++0xはやや野蛮な継子になると思いますか。 C99?

0 投票する
19 に答える
5014 参照

java - Java++ は必要ですか?

いくつかの点で、Java は C がしばらく前にあった場所にあるように思えます。どちらも当時としてはかなり最小限の言語であり、比較的クリーンでシンプルなコアを構築することができます。(ここでは、ライブラリではなく、コア言語について言及しています。) どちらも非常に人気があります。どちらも共通語であり、レガシー コードが大量に含まれています。どちらも、他の言語のプログラマーが見逃しがちないくつかの最新の生産性機能を欠いています/欠いていました。どちらも非常に慣性に支配されており、変化する世界への適応が遅いようです。

C++ が C にあるように、Java のおおよそのスーパーセットである Java++ を作成することは合理的であるように私には思えます。絶対に必要な場合にのみマイナーな方法を使用し、プレーンな古い Java には欠けている多くの最新の機能を追加し、後で標準化について心配します。良いアイデアと思われる機能は次のとおりです。

  1. ファースト クラスの関数、デリゲート。
  2. 閉鎖。
  3. varC# やautoDと同様の静的型推論。
  4. 演算子のオーバーロード。
  5. C# や D などのクラスとは異なる値型としての構造体。
  6. プロパティ。
  7. チェック例外を無視するオプション。
  8. ファイルで複数の最上位パブリック クラスを宣言する機能。
  9. 追加などを可能にする、より強力な組み込み配列。
  10. より良いジェネリック/実際のテンプレート。
  11. C# 4.0 の dynamic キーワードのようなもので、一般的に静的な言語で必要に応じてダック タイピングを行うことができます。
  12. Java は主に VM 言語であるため、特定の目的のためにオンザフライでコードを生成するなどのハードコアなメタプログラミング機能が含まれている可能性があります。

そのような言語の需要があると思いますか? そんなことが成功すると思いますか?

編集:ランタイム/バイトコード レベルでの互換性について話しているのではなく、ソースレベルでの Java との互換性について話しているのです。また、はい、Java 7 はこれらのいくつかを追加できますが、Java に機能を追加するための「公式」プロセスは非常に保守的であるようです。本当のポイントは、安定性/標準化よりも革新に重点が置かれている場合に、Java をブランチにフォークするというアイデアです。

0 投票する
6 に答える
2782 参照

programming-languages - 1 つのプロジェクトで複数の言語を使用する

言語設計について私が行った議論によると、多くの人が「1 つの真の言語」は存在せず、今後も存在しないと主張しているようです。これらの人々によると、別の方法は、いくつかの言語に精通し、仕事に適したツールを選択することです。 これは、非常に狭く明確に定義されたインターフェースを介してプロジェクトの残りの部分とやり取りするだけでよいプロジェクト全体または大規模なサブプロジェクトのレベルで完全に理にかなっています。

一方で、多くの小さなサブ問題をエレガントに解決しようとすると、多くの異なる言語を使用することは非常に厄介なことのように思えます。言い換えれば、IMHO、すべてに適した汎用言語は依然として重要です。些細な例として、次のことを行う必要があるとしましょう。

  1. ファイルから任意の形式で一連のデータを読み取ります。エラーなどがないかチェックしてください (Perl などで行うのが最適です)。
  2. このデータを行列にロードし、一連のハードコアな行列演算を実行します (Matlab などで行うのが最適です)。
  3. その上で、高速でスペース効率の高いカスタムの計算集約型ルーチンを実行します (C または C++ で実行するのが最適です)。

これはかなり単純なプロジェクトであり、計算量の多いカスタム マトリックス処理ルーチンを作成することを除けば、どの言語を使用するかについての唯一の適切な答えは、すべてにおいてまともな汎用言語であるように思われます。

ここで何が欠けていますか?複数の言語を効果的に使用して、それぞれの長所を活用するにはどうすればよいでしょうか?

0 投票する
3 に答える
3751 参照

vb6 - ショートサーキットが VB のデフォルトの動作ではないのはなぜですか?

VB には演算子AndAlsoOrElseがあり、短絡論理積を実行します。

ショートサーキットはあらゆる場合に役立つため、これがAndおよびOr式のデフォルトの動作ではないのはなぜですか。

奇妙なことに、これは&&||を使用するほとんどの言語とは対照的です。短絡を行います。

0 投票する
13 に答える
1447 参照

python - 動的言語の用途

現在、私の主要な言語は D です。また、受講しているコースで Python が必要になるため、Python を学習中です。型推論やテンプレートを使わずに静的言語でプログラミングする人々にとって、動的言語が新鮮な空気の息吹になる理由は理解できますが (私見のテンプレートは、コンパイル時のダックタイピングが大部分を占めています)、動的言語の利点が何であるかに興味があります。あなたがそれらを持っていても。

要するに、私が Python を学ぶつもりなら、単に Python で D を書くのではなく、プログラミングに対する私の考え方を本当に変えるような方法で学びたいということです。私はかなり初心者のプログラマーだったので動的言語を使用しておらず、動的言語が提供すると思われる柔軟性を理解できず、今それらを最大限に活用する方法を学びたいと思っています。テンプレート、ポリモーフィズム、静的型推論、そしておそらく実行時リフレクションを使用しても、静的言語では扱いにくい、または不可能な、動的に型付けされたインタープリター言語で簡単/エレガントに実行できることは何ですか?