タグ付けされた質問 「programming-languages」

プログラミング言語の設計、実装、および分析に関する質問。このサイトのトピックから外れている、プログラミング方法に関する質問は対象外です。

10
コンパイラがCで記述されている言語は、Cよりも高速になりますか?
見撮影ジュリアのウェブページを、あなたは、いくつかのアルゴリズム(タイミングは、以下に示す)間でいくつかの言語のいくつかのベンチマークを見ることができます。もともとCで書かれたコンパイラーを備えた言語は、Cコードよりも優れているのでしょうか? 図:Cに対するベンチマーク時間(小さいほど良い、Cパフォーマンス= 1.0)。

12
なぜそんなに多くのプログラミング言語があるのですか?
私はC / C ++にかなり堪能であり、さまざまなスクリプト言語(awk / sed / perl)を回避できます。pythonを使用し始めたのは、C ++の気の利いた側面の一部とawk / sed / perlのスクリプト機能を組み合わせたためです。 しかし、なぜそんなに多くの異なるプログラミング言語があるのでしょうか?これらのすべての言語で同じことができると思うので、なぜ1つの言語に固執してそれをコンピューターのプログラミングに使用しないのですか?特に、コンピュータープログラマーとして関数型言語を知っておくべき理由はありますか? 関連する読み物: なぜ新しいプログラミング言語が成功するのか、失敗するのか? プログラミング言語で行うべき研究はまだありますか?

6
カテゴリー理論は関数型プログラミングの学習に役立ちますか?
私はHaskellを学んでおり、その言語に魅了されています。しかし、私には深刻な数学やCSのバックグラウンドはありません。しかし、私は経験豊富なソフトウェアプログラマです。 Haskellでより良くなるために、カテゴリー理論を学びたいです。 Haskellを理解するための良い基礎を提供するために、カテゴリー理論のどのトピックを学ぶべきですか?

5
一部のプログラミング言語が他のプログラミング言語よりも「高速」または「低速」なのはなぜですか?
プログラミング言語で構築された一部のアプリケーションまたはアルゴリズム、たとえばC ++ / Rustは、同じマシンで実行されているJava / Node.jsなどで構築されたものよりも高速または高速に動作することに気付きました。これに関していくつか質問があります。 なぜこれが起こるのですか? プログラミング言語の「速度」を支配するものは何ですか? これはメモリ管理と関係がありますか? 誰かが私のためにこれを壊してくれたら本当に感謝しています。

9
プログラミング言語のどのプロパティがコンパイルを不可能にしますか?
質問: 「プログラミング言語の特定のプロパティでは、コードに記述されたコードを実行するための唯一の方法は解釈によるものです。つまり、従来のCPUのネイティブマシンコードへのコンパイルは不可能です。これらのプロパティは何ですか?」 コンパイラ:Parag H. DaveおよびHimanshu B. Daveによる原則と実践(2012年5月2日) 本は答えについての手がかりを与えません。プログラミング言語の概念(SEBESTA)で答えを見つけようとしましたが、役に立ちませんでした。ウェブ検索もあまり役に立ちませんでした。手がかりはありますか?

6
実際の正式なプログラム検証
ソフトウェアエンジニアとして、工業製品用のコードをたくさん書いています。クラス、スレッド、いくつかの設計作業、およびパフォーマンスの妥協を伴う比較的複雑なもの。私は多くのテストを行い、テストにうんざりしているので、Coq、Isabelleなどの正式な証明ツールに興味を持ちました...これらのいずれかを使用して、コードにバグがないことを正式に証明できますか?それと?-しかし、これらのツールの1つをチェックアウトするたびに、日常のソフトウェアエンジニアリングに使用できると確信せずに立ち去ります。今、それは私だけである可能性があり、私はそれについてのポインタ/意見/アイデアを探しています:-) 特に、これらのツールの1つを機能させるには、検討中のプログラムのオブジェクト、メソッドなどを証明者に適切に定義するために莫大な投資が必要になるという印象を受けます。それから、証明者は、対処しなければならないすべてのサイズを考えると、蒸気が尽きないのではないかと思います。または、副作用を取り除く必要があるかもしれません(これらの証明ツールは宣言型言語で本当にうまくいくようです)、それが高速ではないため使用できない「実証済みのコード」になるかどうか疑問に思います十分に小さい。また、使用する言語を変更する余裕はありません。JavaまたはC ++である必要があります。OXXXmlでコードを作成するのは上司に伝えることはできません。コードの正確性を証明できます... フォーマルプルーフツールの経験が豊富な人はコメントできますか?再び-私なりLOVE正式な証明ツールを使用して、私は彼らが素晴らしいと思いますが、私は彼らが私は、Java / C ++の卑しい溝から到達することはできません象牙の塔にいるという印象を持っている...(PS:IまたLOVEハスケル、OCamlは...間違った考え方得ることはありません:私は、宣言型言語や形式的な証明のファンですが、私は)私は現実的ソフトウェア工学にその便利を作ることができる方法を確認しようとしています 更新:これはかなり広いので、次のより具体的な質問を試してみましょう:1)証明者を使用して産業用Java / C ++プログラムの正確性を証明する例はありますか?2)Coqはそのタスクに適していますか?3)Coqが適切な場合、最初にCoqでプログラムを作成し、次にCoqからC ++ / Javaを生成する必要がありますか?4)このアプローチは、スレッド化とパフォーマンスの最適化を処理できますか?

14
プログラミング言語を勉強していることを両親に説明するにはどうすればよいですか?
現在、コンピューターサイエンスの修士号を取得しています。プログラミング言語、特に型システムに興味があります。私はこの分野の研究に興味を持ち、次の学期にこのテーマの博士号を取得します。 さて、ここに本当の質問があります。コンピューターサイエンスや関連分野の知識がまったくない人に、私が(したい)ことをどうやって説明できるのでしょうか。 タイトルは、私が自分のしていることを両親や友人などに説明することさえできないという事実から来ています。ええ、「全体のポイントはソフトウェア開発者がより良いソフトウェアを書くのを助けることです」と言うことができますが、私はそれが本当に役に立つとは思いません。私は中世の人にとって自動車整備士だと言っているように感じます。彼らは単に私が何を話しているのか知らず、それを改善する方法は言うまでもありません。 誰も現実世界と良い類似性を持っていますか?「a-ha」の瞬間を引き起こす啓発的な例は?コンピューターサイエンス(または学術)の経験がない60歳以上に、短くてシンプルなコードスニペットを実際に見せるべきですか?その場合、どの言語を使用すればよいですか?ここの誰かが同様の問題に直面しましたか?

10
Ruby / Pythonのような動的言語は、パフォーマンスのようなC / C ++に到達できますか?
Rubyのような動的言語用のコンパイラをビルドして、C / C ++と同等の性能を比較することは可能でしょうか?私がコンパイラについて理解していることから、Rubyを例にとると、Rubyがリフレクションを処理する方法、整数から大きな整数への自動型変換などの機能、および静的型付けの欠如が効率的なコンパイラを構築するため、Rubyコードのコンパイルは効率的ではありませんRubyの場合は非常に困難です。 Rubyやその他の動的言語をC / C ++に非常に近い性能を発揮するバイナリにコンパイルできるコンパイラを構築することは可能ですか?PyPy / RubiniusなどのJITコンパイラが最終的にパフォーマンスでC / C ++と一致する、または一致しないという根本的な理由はありますか? 注:「パフォーマンス」はあいまいになる可能性があることを理解しているので、それを明確にするために、パフォーマンスYでC / C ++でXを実行できる場合、Yに近いパフォーマンスでRuby / PythonでXを実行できますか?Xは、デバイスドライバーやOSコードからWebアプリケーションまですべてです。

3
依存型と改良型
誰かが依存型と絞り込み型の違いを説明できますか?私が理解しているように、絞り込み型には、述語を満たす型のすべての値が含まれます。それらを区別する依存型の機能はありますか? それが役立つ場合、Liquid Haskellプロジェクトを介して洗練された型、CoqおよびAgdaを介して依存型に出会いました。とはいえ、私は理論がどのように異なるかについての説明を探しています。

6
プログラミング言語がチューリング完全であるための最低限の基準はありますか?
プログラミング言語をチューリング完全と見なすために、プログラミング言語にプログラミング言語構成体のセットが存在しますか? wikipediaから言えることから、言語は再帰をサポートする必要があります。または、一見、停止せずに実行できる必要があります。これですべてですか?

9
安全なプログラミング言語とは何ですか?
安全なプログラミング言語(PL)が人気を集めています。安全なPLの正式な定義は何でしょうか。たとえば、Cは安全ではありませんが、Javaは安全です。PL自体ではなく、PL実装にプロパティ「safe」を適用する必要があると思います。もしそうなら、安全なPL実装の定義について議論しましょう。この概念を正式にしようとする私自身の試みは奇妙な結果をもたらしたので、他の意見を聞きたいと思います。すべてのPLに安全でないコマンドがあると言ってはいけません。安全なサブセットをいつでも取得できます。

8
変数はプログラムスタックにどのように格納され、そこから取得されますか?
この質問の素朴さに謝罪します。私は50歳のアーティストで、初めてコンピューターを正しく理解しようとしています。だからここに行きます。 私は、データ型と変数がコンパイラによってどのように処理されるかを理解しようとしています(非常に一般的な意味で、私はそれがたくさんあることを知っています)。「スタック」のストレージと値型、および「ヒープ」のストレージと参照型の関係についての理解が不足しています(引用符は、これらの用語が抽象化であって、私がこの質問を組み立てているように、そのような単純化されたコンテキストで文字通りに取られすぎます)。とにかく、私の単純なアイデアは、ブールや整数のような型は「スタック」に行くということです。なぜなら、それらはストレージスペースの観点から既知のエンティティであり、スコープはそれに応じて簡単に制御できるからです。 しかし、スタック上の変数がアプリケーションによって読み取られる方法はわかりませんx-たとえばx = 3、宣言して整数として割り当て、ストレージがスタック上に予約され、その値が3そこに格納され、次に同じ機能Iを宣言し、アサインy言う、など4そして、私はその後、使用することを、次のx別の表現では、(と言うz = 5 + xプログラムを読むことができるか)xを評価するためにz、それは以下であるときyスタックに?私は明らかに何かが欠けています。スタック上の場所は変数の有効期間/スコープにすぎず、スタック全体が常にプログラムから実際にアクセス可能であるということですか?もしそうなら、値を取得できるようにスタック上の変数のアドレスのみを保持する他のインデックスがあることを意味しますか?しかし、その後、スタックのポイントは、値が変数アドレスと同じ場所に格納されていることだと思いましたか?私のちっぽけな心では、この他のインデックスがある場合、私たちはよりヒープのようなものについて話しているようです?私は明らかに非常に混乱しており、単純な質問に対する簡単な答えがあることを望んでいます。 ここまで読んでくれてありがとう。

9
一部のプログラミング言語は完全なチューリングですが、他の言語のいくつかの機能が欠けているのはなぜですか?
外部プログラム/関数にフックする(すべき)インタープリターを作成するときに奇妙な問題に遭遇しました: 'C'および 'C ++'の関数は可変引数関数をフックできません。たとえば、 'printf'を呼び出す関数を作成できません取得した引数とまったく同じ引数を使用し、代わりに可変個のオブジェクトを取る代替バージョンを呼び出す必要があります。匿名フックを保持するオブジェクトを作成できるようにしたいので、これは非常に問題です。 だから、Forth、JavaScript、そしておそらく他の多くの言語がアセンブリ言語/マシンコードに頼ることなくこれを非常に簡単に行うことができるので、これは奇妙だと思った。他の言語はこれを非常に簡単に行うことができるので、各プログラミング言語が解決できる問題のクラスは、これらの言語がすべてチューリング完全であっても、実際には言語によって異なりますか?

2
Tarjanの擬似コードはどのように機能しますか(CまたはJavaに詳しい人に説明されています)?
短編小説 有名なコンピューター科学者、タージャンは数年前に本を書きました。絶対に奇妙な擬似コードが含まれています。誰か説明していただけますか? ロングストーリー タージャンは、彼がスプレーツリーの共同発明者であったという事実を含む、多くの成果で知られています。彼は1980年代に「データ構造とネットワークアルゴリズム」という本を出版しました。 Tarjanの本のすべての擬似コードは、彼自身が考案した言語で書かれています。擬似コードの規則は非常に統制されています。それはほとんど真の言語であり、そのためのコンパイラを書くことを想像することができます。Tarjanは、彼の言語は次の3つに基づいていると書いています。 ダイクストラの保護されたコマンド言語 SETL アルゴール 上記の言語の1つまたは2つ、またはタージャンの仕事に精通している人が私の質問に答えられることを望んでいます。 Tarjanの言語で書かれた関数の例を以下に示します。 heap function mesh (heap nodes h1, h2); if key(h1) > key(h2) → h1 ⟷ h2 fi; right (h1) := if right(h1) = null → h2 |right(h1) ≠ null → mesh (right(h1), h2) fi; if rank (left (h1)) < rank (right …

2
世代別ガベージコレクターは本質的にキャッシュフレンドリーですか?
典型的な世代別ガベージコレクタは、最近割り当てられたデータを別のメモリ領域に保持します。典型的なプログラムでは、多くのデータは短命であるため、若いガベージ(マイナーGCサイクル)を頻繁に収集し、古いガベージを頻繁に収集しないことは、メモリオーバーヘッドとGCの実行時間の適切な妥協点です。 直感的には、若いリージョンのデータに頻繁にアクセスし、すべてを1か所に保持するため、キャッシュに対するメインメモリの待機時間比率が増加すると、単一リージョンコレクターと比較した世代別ガベージコレクターの利点が大きくなります。実験結果はこの直感を裏付けていますか?

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