タグ付けされた質問 「language-design」

プログラミング言語の設計と構造に関する質問。


4
PHPが完全にUnicodeをサポートできないのはなぜですか?
PHPにはUnicodeに問題があることは誰もが知っています。Unicodeの実装が困難なため、バージョン6は事実上放棄されています。しかし、正確な理由は何か知っているのだろうか?アーキテクチャ/設計の問題、パフォーマンスの問題、コミュニティの問題(私は違います)、他に何か?

3
.NETs Select(Map)およびAggregate(Reduce)の命名の背後にある理由は何ですか?
他のプログラミング言語では、MapとReduceを見てきましたが、それらは関数型プログラミングの基礎です。LINQがAggregate(と同じReduce)およびSelect(と同じ)を持つ理由や歴史を見つけることができませんでしたMapか? 私が尋ねているのは、それが同じことだと理解するのに時間がかかったからです。そして、私はこの理由を知りたいのです。

4
C ++のようなconstを言語に組み込む際の問題は何ですか?
私はC ++のようなconst特定の実行ではなく(キャストアウトのようなconst)のアイデアに興味があります。 たとえば、C#を考えてみましょう。C++のようなconstがなく、その理由は通常の人と時間です。さらに、C#チームはC ++の実行を見て、constCLRをマーケティングし、この時点で十分でした(c#およびconstパラメーターにconstメンバーメソッドがない理由を参照してください;ありがとうSvick)。ことがあれば、我々はさらにそれよりも移動し、何かありますか? もっと深いものはありますか?例えば、多重継承を考えてみてください-通常、(ユーザーにとって)把握するのは難しいと見られているため、言語に追加されません(ダイヤモンドの問題のように)。 言語にそれを避ける方が良いという問題を引き起こす自然の何かがありconstますか?const深さを浅くするか浅くするかを決定するようなものです(constコンテナがあるため、新しい要素を追加したり、既存の要素を変更したりできません。要素が参照型の場合はどうなりますか)。 更新:私はC#について言及しているため、歴史的な観点constから、言語の潜在的な問題の性質に興味があります。 これは言語の挑戦ではありません。現在の傾向や人気などの要因を無視してください-私は技術的な問題にのみ興味があります-ありがとうございます。

5
PythonがJavaより遅いが、PHPより速いのはなぜですか[非公開]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 特定のタスクで多くの言語がどのように機能するかを示すさまざまなベンチマークを見てきました。 これらのベンチマークは、PythonがJavaよりも遅く、PHPよりも速いことを常に明らかにしています。なぜそうなのか疑問に思います。 Java、Python、およびPHPは仮想マシン内で実行されます 3つの言語はすべて、プログラムをOS 上で実行されるカスタムバイトコードに変換するため、ネイティブで実行されるものはありません JavaとPythonは両方とも「コンパイル」できますが(.pycPythonの場合)、Pythonの__main__モジュールはコンパイルされません。 PythonとPHPは動的に型付けされ、Javaは静的に型付けされます-これがJavaの方が高速である理由です。 また、dynamic-vs-static引数が正しい場合でも、PHPがPythonより遅い理由は説明できません-両方とも動的言語であるためです。 いくつかのベンチマークはこちらとこちら、そしてこちらでご覧いただけます

3
後から考えると、XAMLをXMLに基づいているのは間違いですか、それとも良いアプローチですか?
XAMLは基本的にXMLのサブセットです。XMLに基づいたXAMLの主な利点の1つは、既存のツールで解析できることです。また、(構文的には重要ではない)属性値はテキスト形式のままであり、さらに解析する必要がありますが、かなりの程度まで可能です。 XML派生言語でGUIを記述するための2つの主要な代替手段があります。1つは、WinFormsが行ったことを実行し、それを実際のコードで記述することです。これには多くの問題がありますが、完全にアドバンテージがないわけではありません(このアプローチとXAMLを比較する質問)。他の主要な代替手段は、手元のタスクに合わせて特別に調整された完全に新しい構文を設計することです。これは、一般的にドメイン固有の言語として知られています。 それで、後知恵で、そして将来の世代への教訓として、XAMLをXMLに基づいたものにするのは良い考えでしたか、それともカスタム設計のドメイン固有言語としてより良いものでしたか?さらに優れたUIフレームワークを設計している場合、XMLまたはカスタムDSLを選択する必要がありますか? それは現状維持、かなりのコミュニティに好かれ、特に1について積極的に考えるのは非常に簡単ですので、私はXMLの上に構築する理由の理由は、いくつかの例をあげるかもしれない間違いと見なされます。 XMLを基に言語を作成することには1つのことがあります:解析がはるかに簡単(コアパーサーが既に利用可能)であり、設計作業がはるかに少なくてすみます。 しかし、結果として生じる言語は、さまざまな点で不満になる可能性があります。かなり冗長です。何かのタイプを変更する場合は、終了タグで変更する必要があります。コメントに対するサポートは非​​常に貧弱です。属性をコメント化することはできません。XMLによる属性のコンテンツには制限があります。マークアップ拡張機能は、XML構文の「最上部」に構築する必要があり、XML構文に深く、うまく統合されていません。そして、私の個人的なお気に入りは、属性を介して何かを設定する場合、コンテンツプロパティとまったく同じものを設定する場合とはまったく異なる構文を使用することです。 また、誰もがXMLを知っているため、XAMLの学習はそれほど必要ではないと言われています。厳密に言えばこれは事実ですが、構文の学習は、新しいUIフレームワークの学習に費やす時間のほんの一部です。曲線を急にするのはフレームワークの概念です。その上、XMLベースの言語の特異性は、実際に「学習が必要」なバスケットに追加される可能性があります。 これらの不利な点は、解析の容易さによって重くされていますか?次のクールなフレームワークは伝統を続けるべきでしょうか、それとも既存のツールでは解析できず、誰もが構文を学ぶ必要のある素晴らしいDSLを設計するために時間を投資すべきでしょうか? PS誰もがXAMLとWPFを混同しているわけではありませんが、一部は混同しています。XAMLはXMLのようなものです。WPFは、バインディング、テーマ設定、ハードウェアアクセラレーション、その他多くの優れた機能をサポートするフレームワークです。

8
なぜC ++はまだ「ハイブリッド」なのか
関連する C ++は多くの点でCとの互換性はありませんなぜ疑問、それは明らかにされています。ただし、C ++は依然として「ハイブリッド」*言語です。残念ながら、多くのプログラマーはまだC ++を「ストリームと組み込み文字列を含むC」と見なしています。その結果、コードが非常に悪くなり、C ++でもCでもありません。IMHO、言語/コンパイラーがある程度プログラマーにより洗練されたコードを書くことを強制した方が良いでしょう。では、最新のC ++(たとえばC ++ 0xと将来のバージョン)をハイブリッドに保つ理由はありますか? *ハイブリッドとは、標準の文字列とストリーム、クラス、デフォルト以外の名前空間などを使用するかどうかを決定するのはプログラマ次第であることを意味します。

9
キャリアアドバイス:プログラミング言語の理論の博士号[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 私はプログラミング言語の理論に非常に興味があり、このトピックで博士号を適用しますが、大学院教育後のキャリアについてもっと知りたいです。教授であることに加えて、どのような職業に就くことができますか?

10
関数のオーバーロード?はいまたはいいえ[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私は静的に強く型付けされたコンパイル済み言語を開発しており、言語の機能として関数のオーバーロードを含めるかどうかの考えを再検討しています。主にC[++|#]バックグラウンドから来て、私は少し偏っていることに気づきました。 最も説得力のある引数何であるためと反対言語でのオーバーロード機能を含めては? 編集:反対意見を持っている人は誰もいませんか? Bertrand Meyer(1985/1986年にエッフェルの作成者)は、これをオーバーロードするメソッドを呼び出します:(ソース) オブジェクト指向言語のセマンティックパワーには何ももたらさないが、読みやすさを妨げ、全員のタスクを複雑にするバニティメカニズム 今、それらは抜本的な一般化ですが、彼は賢い人ですので、必要に応じてそれらをバックアップできると言っても安全だと思います。実際、ブラッドエイブラムス(CLSv1開発者の1人)は、.NETがメソッドのオーバーロードをサポートしてはならないと確信していました。(ソース)それはいくつかの強力なものです。誰もが彼の考えに光を当てることができ、彼の視点が25年後もまだ正当化されるかどうか?

3
Rubyクリエイターがシンボルの概念を使用することを選んだのはなぜですか?
tl; dr:シンボルの言語に依存しない定義と、他の言語でそれらを使用する理由はありますか? では、なぜRubyの作成者symbolsは言語の概念を使用したのですか? これは、ルビーではないプログラマーの観点からお願いします。私は他の多くの言語を学びましたが、どれにもRubyが呼んでいるものを扱っているかどうかを指定する必要があることを知りませんでしたsymbols。 主な質問は、symbolsRuby の概念はパフォーマンスのために存在するのか、それとも言語の記述方法のために必要なものなのか、ということです。 Rubyのプログラムは、PythonやJavascriptの対応物よりも軽量または高速、あるいはその両方でしょうか?もしそうなら、それは原因symbolsでしょうか? Rubyの目的の1つは人間が読み書きしやすいことであるため、作成者はインタープリター自体に(他の言語の場合と同様に)これらの改善を実装することでコーディングのプロセスを緩和できませんでしたか? symbolsそもそもなぜ彼らがそこにいるのかではなく、何がどのように使われているのかを誰もが知りたいようです。

5
定義がソースコードの最後に記述されているときに、C言語でデータと関数の*宣言*が必要なのはなぜですか?
次の「C」コードを検討してください。 #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()はソースコードの最後に定義され、で使用する前に宣言は提供されませんmain()。コンパイラがFunc_i()入っmain()てきたまさにその時に、それは出てきてmain()見つけ出しFunc_i()ます。コンパイラは、どういうわけかによって返された値を見つけ、Func_i()それをに渡しprintf()ます。また、コンパイラはの戻り値の型を見つけることができないことも知っていますFunc_i()。それは、デフォルトでは、(guesses?)の戻り値の型を取りFunc_i()ますint。つまり、コードにfloat Func_i()エラーがあった場合、コンパイラは次のエラーを出しFunc_i()ます。 上記の議論から、次のことがわかります。 コンパイラは、によって返された値を見つけることができますFunc_i()。 コンパイラがFunc_i()出てmain()きてソースコードを検索することによって返された値を見つけることができる場合、明示的に言及されているFunc_i()のタイプを見つけることができないのはなぜですか。 コンパイラFunc_i()は、それがfloat型であることを認識している必要があります。そのため、競合する型のエラーが発生します。 コンパイラがそれFunc_iがfloat型であることを知っている場合、なぜFunc_i()int型であると仮定して、競合する型のエラーを与えるのですか?強制的にFunc_i()float型にしないでください。 変数宣言にも同じ疑問があります。次の「C」コードを検討してください。 #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; コンパイラーはエラーを示します:'Data_i' undeclared(この関数で最初に使用)。 コンパイラがを見るとFunc_i()、Func_()によって返された値を見つけるためにソースコードに行きます。コンパイラが変数Data_iに対して同じことをできないのはなぜですか? 編集: コンパイラ、アセンブラ、プロセッサなどの内部動作の詳細はわかりません。私の質問の基本的な考え方は、使用後にソースコード内の関数の戻り値を伝える(書き込む)とその関数の「C」言語により、コンピューターはエラーなしでその値を見つけることができます。さて、なぜコンピューターは同様にタイプを見つけることができません。Func_i()の戻り値が見つかったため、Data_iのタイプが見つからないのはなぜですか。extern data-type …

1
GroovyはTennentの通信原理に従っていますか?
Tennent's Correspondence Principleの興味深い議論と、Neal Gafterの簡単な説明を以下に示します。 原則では、式またはステートメントは、クロージャーにラップされてすぐに呼び出されたときに、クロージャーにラップされる前と同じ意味を持つ必要があります。クロージャでコードをラップするときのセマンティクスの変更は、おそらく言語の欠陥です。 Groovy言語はこの原則に従っていますか?

3
静的型システムは、プロトタイプベースの言語の設計にどのように影響しますか?
プロトタイプベースの言語でWikipediaの記事は、次の段落が含まれています。 ほとんどすべてのプロトタイプベースのシステムは、インタープリター型および動的型付け言語に基づいています。ただし、静的に型付けされた言語に基づくシステムは技術的に実現可能です。 静的型システムは、どのように制限を課すか、プロトタイプベースの言語に複雑さをもたらしますか?そして、なぜ動的に型付けされたプロトタイプ言語があるのですか?

2
マイクロソフトは、C#での 'var'の使用を推奨していませんか?(VS2017)
私は来たるVisual Studio 2017を見ています。 Boosted Productivityというタイトルのセクションの下に、すべてのvarの出現を明示的な型に置き換えるために使用されているVisual Studioのイメージがあります。 このコードには、Visual Studioが「修正が必要」と特定したいくつかの問題があるようです。 C#でのvarの使用に関する理解を再確認したかったので、Eric Lippertによる2011年の暗黙的な型指定の使用と誤用に関する記事を読みました。 エリック言う: 必要な場合はvarを使用します。匿名型を使用している場合。 宣言のタイプが初期化子から明らかな場合、特にオブジェクト作成の場合は、varを使用します。これにより、冗長性がなくなります。 コードが変数のセマンティック「ビジネス目的」を強調し、そのストレージの「機械的」詳細を軽視する場合は、varの使用を検討してください。 コードを正しく理解して維持するために必要な場合は、明示的な型を使用します。 「var」を使用するかどうかに関係なく、説明的な変数名を使用します。変数名は、ストレージの詳細ではなく、変数のセマンティクスを表す必要があります。「decimalRate」は悪いです。「interestRate」は良いです。 コードでのvarの使用のほとんどはおそらく大丈夫だと思います。読み取るビットにvarを使用しないでよいと思います... var tweetReady = workouts [ ... ] ...多分、それが何であるかが100%すぐにわかるわけではないかもしれませんが、それでも私はそれがaであることをかなり早く知っていbooleanます。 この部分の変数の使用... var listOfTweets = new List<string>(); ... varの適切な使用方法とまったく同じように見えます。なぜなら、次のことを行うのは冗長だと思うからです List<string> listOfTweets = new List<string>(); Ericが言ったことに基づいていますが、変数はおそらくlistOfTweetsではなくツイートでなければなりません。 varここですべての使用を変更する理由は何でしょうか?このコードに何か間違っていることがありますか?

7
Javaで、保護されたメンバーが同じパッケージのクラスにアクセスできるようになったのはなぜですか?
公式文書から... モディファイヤクラスパッケージサブクラスワールド パブリックYYYY 保護されたYYYN 修飾子なしYYNN プライベートYNNN 問題は、同じパッケージ内のクラスから保護されたメンバーにアクセスする必要があるユースケースを覚えていないことです。 この実装の背後にある理由は何ですか? 編集:明確にするために、同じパッケージ内のサブクラスとクラスの両方が保護されたフィールドまたはメソッドにアクセスする必要がある特定のユースケースを探しています。 package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); } } package some.package; public class C …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.