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

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

8
プログラミング言語の「速度」を決定するものは何ですか?
プログラムが2つの異なる言語で記述されているとします。それらを言語Xと言語Yとします。コンパイラーが同じバイトコードを生成する場合、なぜ言語Yの代わりに言語Xを使用する必要がありますか?1つの言語が他の言語よりも高速であることを定義するものは何ですか? 「Cが最も速い言語であり、ATSはCと同じくらい速い言語である」というようなことを人々がよく目にするので、これを尋ねます。プログラミング言語の「高速」の定義を理解しようとしていました。

2
イドリスはチューリングの完全性をあきらめることで何ができないのでしょうか?
Idrisには依存型があることは知っていますが、完全にはチューリングしていません。チューリングの完全性をあきらめることで何ができませんか?これは依存型を持つことに関連していますか? これは非常に具体的な質問だと思いますが、依存型と関連する型システムについてはあまり知りません。

13
最初のプログラミングコースの言語選択の基準
大学レベルのCS教育者として、最初のプログラミングコースでどのプログラミング言語を教えるかという問題がしばしば議論の対象になります。数千の言語から選択することができ、ある言語キャンプを別の言語キャンプよりも多くの宗教的な熱(または熱意)が支えています。各プログラミング言語を取り巻くこの主観的なバイアスはすべて、教育者が言語を選択することを非常に困難にします。 私の質問は: 教育者はどのような客観的な基準を使用して、大学の1年生のプログラミングコースの基礎として使用するプログラミング言語を選択できますか?これらの基準の根拠は何ですか? 注:プログラミング言語のリストと、それらが使用するのに最適な理由を知りたくありません。問題は最高の言語ではなく、言語を選択するための基準です。ただし、特定のポイントを説明するためにプログラミング言語を使用することもできます。 この質問は、トピック外とみなされた別の質問https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-languageに触発されました。

10
ビジュアルプログラミング言語
私たちのほとんどは、Basic、C / C ++、Javaなどの「テキスト」プログラミング言語を使用してプログラミングを学びました。人間が視覚的に考える方が自然で効率的だと思います。ビジュアルプログラミングにより、開発者はグラフィカル要素を操作してプログラムを作成できます。ビジュアルプログラミングを使用すると、コードの品質が向上し、プログラミングのバグが減少するはずです。App Inventor、Scratch、LabViewなどのいくつかの視覚言語を知っています。 開発者向けの主流の汎用視覚言語がないのはなぜですか?ビジュアルプログラミングの長所と短所は何ですか?

2
「計算科学を本当に教えることの残酷さについて」
ダイクストラは、コンピューティングサイエンスを実際に教えることの残酷さについてのエッセイで、入門的なプログラミングコースについて次の提案を行っています。 一方では、述語計算のように見えるものを教えますが、哲学者とは非常に異なって行います。初心者プログラマーに未解釈の式の操作を訓練するために、論理代数のすべての代数的特性に学生を慣れさせるブール代数としてそれをもっと教えます。直感へのリンクをさらに切断するために、ブールドメインの値{true、false}の名前を{black、white}に変更します。 一方、スキップと複数の割り当てを基本ステートメントとして、ローカル変数のブロック構造、ステートメント構成の演算子としてのセミコロン、素敵な代替構成、素敵な、シンプルでクリーンな命令型プログラミング言語を教えます必要に応じて、プロシージャコールを繰り返します。これに、ブール値、整数、文字、文字列などの最小限のデータ型を追加します。本質的なことは、導入するものが何であれ、対応するセマンティクスはそれに付随する証明ルールによって定義されるということです。 最初から、そしてコース全体を通して、プログラマーのタスクはプログラムを書き留めることだけではなく、彼の主なタスクは、彼が提案するプログラムが同様に正式な機能仕様を満たしていることを正式に証明することであることを強調します。証明とプログラムを手に取りながら設計している間、学生は述語計算で操作の敏a性を完璧にする十分な機会を得ます。最後に、この入門プログラミングコースは主に正式な数学のコースであるというメッセージを伝えるために、問題のプログラミング言語がキャンパスで実装されていないため、学生はプログラムをテストする誘惑から保護されています。 彼はこれは深刻な提案であることを強調し、彼の考えが「全く非現実的」で「非常に難しすぎる」など、考えられるさまざまな異議を概説しています。 しかし、そのkitは仮定のためにも飛ぶことはありません。間違っていることが証明されています。[私の経験では、これは一度だけでは不十分だと言っているので、前の文を少なくとももう2回繰り返す必要があります。] ダイクストラはどのコースを参照していますか?また、それについて説明している他の文献はありますか? エッセイは1988年にダイクストラがテキサス大学オースティンの大学にいたときに登場しました。これはおそらく手がかりです-彼らはダイクストラのアーカイブをホストしていますが、それは巨大であり、私はこのコースについて他の人から特に興味があります。 ここでは、ダイクストラのアイデアが良いか現実的かを議論したくありません。これをcstheory.seまたはcs.seに投稿することを検討しましたが、a)教育者のコミュニティには簡単に答えられる人がいる可能性が高いため、b)ダイクストラ自身が彼のコースは「主に正式な数学。」同意しない場合は、移行のフラグを設定してください。

5
通常の言語はチューリング完全にできますか?
私はイオタとジョットについて読んでいたが、このセクションは混乱を招くことがわかった。 Iotaは、文字列の構文ツリーが左または右に分岐できるのとは異なり、Jot構文は一様に左分岐です。その結果、Iotaは厳密にコンテキストに依存しませんが、Jotは通常の言語です。 私の理解では、イオタとジョットはチューリング完全です。しかし、明らかに、1つはコンテキストに依存せず、もう1つは規則的です!確かに通常の言語はチューリングを完全にすることはできませんか?

2
プログラミング言語と数学の基礎はどのように関係していますか?
基本的に私は数学の3つの基礎を知っています 集合論 型理論 カテゴリー理論 それでは、プログラミング言語と数学の基礎はどのように関係していますか? 編集 元の質問は「数学の基礎に基づいたプログラミング言語」でした 追加されたパラガルフ そして理論の実装 1. Coqの型理論 2. SETLの集合論 3. Haskellのカテゴリー理論 提案に基づいて、これは「プログラミング言語と数学の基礎はどのように関係しているのか」に変更されました。 これは私が尋ねていることについて十分に知らなかったが何かを学びたいと思った質問の1つであるため、質問を変更して、学習や他の人にとってより価値のあるものにしますが、Andrej Bauerによる現在の答えは話題から外れているようです。 これまでのすべてのコメントと回答に感謝し、私はそれらから学んでいます。

6
2つの言語間でソースコードを「翻訳」できるプログラムはありますか?
2つの言語間でソースコードを「翻訳」できるプログラムはありますか(翻訳者が必要なライブラリにアクセスできると仮定します)? ある場合、それらはどのように機能しますか(使用される技術、必要な知識など)?それらはどのように実行可能に構築されますか? そうでない場合、開発を妨げる制限は何ですか?これはAIの完全な問題ですか(自然言語の翻訳は1つとしてリストされています)? EDIT 変換は、言語に同じ表現力があり、同じ種類の問題を解決でき、変換されるコードが宛先言語で表現できる場合にのみ予想されます。(たとえば、シェルスクリプトからMATLABへの変換は想定されていません)。

4
固定小数点コンビネーター(Yコンビネーター)の明確で直感的な派生?
(型なし)ラムダ計算()の固定小数点コンビネータFIX(別名Yコンビネータ)は次のように定義されます:λλ\lambda FIX≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))\triangleq \lambda f.(\lambda x. f~(\lambda y. x~x~y))~(\lambda x. f~(\lambda y. x~x~y)) 私はその目的を理解しており、アプリケーションの実行を完全にトレースできます。最初の原理からFIXを導き出す方法を理解したいです。 ここに私がそれを自分で導き出そうとしたときに得られる限りです: FIXは関数です:FIX ≜λ…≜λ…\triangleq \lambda_\ldots FIXは、別の関数fffを使用して再帰的にします。FIX ≜λf.…≜λf.…\triangleq \lambda f._\ldots 関数fの最初の引数は、関数fffの「名前」であり、再帰的アプリケーションが意図されている場合に使用されます。したがって、fの最初の引数の出現はすべてfff関数で置き換えられる必要があり、この関数はfの残りの引数を期待する必要がありますfff(fffが1つの引数を取ると仮定しましょう):FIX ≜λf.…f (λy.…y)≜λf.…f (λy.…y)\triangleq \lambda f._\ldots f~(\lambda y. _\ldots y) これは、推論の「一歩を踏み出す」方法がわからない場所です。小さな楕円は、FIXがどこに欠けているかを示します(ただし、それを「実際の」FIXと比較することによってしか知ることができません)。 私は既にタイプとプログラミング言語を読んでいますが、それは直接派生しようとせず、代わりに派生物についてリトルスキーマーを読者に紹介しています。私もそれを読みましたが、その「派生」はあまり役に立ちませんでした。さらに、直接的な派生ではなく、非常に具体的な例の使用と、\ lambdaに適切な再帰関数を記述するためのアドホックな試みλλ\lambdaです。

9
プログラミング言語は自然言語に似てきていますか?
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 6年前に移行され ました。 言語学の文脈でプログラミング言語を勉強できますか?プログラミング言語は自然言語と同様の方法で自然に進化しますか? プログラミング言語には完全な合理性と数学的な一貫性が不可欠ですが、人間にとって読みやすく快適なものにする必要があります(特に現代の言語)。 プログラミング言語は進化し、より言語的になり、より自然になりましたか?たとえば、マシンコード、パンチカード、およびアセンブリ言語は、RubyやPythonなどのより読みやすい言語に取って代わりました。 コンピューター言語がより自然になっていると言うとき、「英語で持っている単語」がより多く含まれているわけではなく、文法の複雑さと意味を表現する能力の点で、自然言語のようになっているようです(たとえば、合理的かつ人間が理解できる方法でデータベースからのクエリを雄弁に説明できること)。 皆さんはどう思いますか?プログラミング言語は自然言語のようになり、言語学の法則に適用できるようになりましたか? あるいは、言語はスペクトル上に存在し、一方には極端に合理的な言語があり、他方には創造性があります。たぶん、プログラミング言語と自然言語は同一であり、両方ともこの言語の範囲内にあるだけです(その唯一の違いは、おそらく彼らが意味を与えようとしている「もの」であることです)。 人間の言語とコンピューター言語の分離(バベルタワー効果)の間に関係はありますか?同じ理由(すなわち、進化し続けるコンピューターシステム/文化システムなどのさまざまな問題を解決するため)で、それらはより多様になりますか?

7
ガベージコレクションされた言語のオブジェクトデストラクターパラダイムがなぜ普及しないのですか?
ガベージコレクションされた言語設計に関する決定についての洞察を探しています。おそらく、言語の専門家が私を啓発できるでしょうか?私はC ++のバックグラウンドを持っているので、この領域は私を困惑させます。 Ruby、Javascript / ES6 / ES7、Actionscript、LuaなどのOOPyオブジェクトをサポートするほとんどすべてのガベージコレクション言語は、デストラクタ/ファイナライズパラダイムを完全に省略しているようです。Pythonは、そのclass __del__()メソッドを持つ唯一のものであるようです。どうしてこれなの?オブジェクトのデストラクタ/ファイナライズメソッドの効果的な実装を妨げる自動ガベージコレクションを使用する言語には、機能的/理論的な制限がありますか? これらの言語がメモリを管理する価値のある唯一のリソースと見なしていることは非常に欠けていると思います。ソケット、ファイルハンドル、アプリケーションの状態はどうですか?オブジェクトファイナライズの非メモリリソースと状態をクリーンアップするカスタムロジックを実装する機能がない場合、アプリケーションにカスタムmyObject.destroy()スタイルの呼び出しを散らかし、クリーンアップロジックを「クラス」の外に配置し、カプセル化を中断し、 gcによって自動的に処理されるのではなく、人的エラーによるリソースリークへのアプリケーション。 これらの言語がオブジェクト破棄のカスタムロジックを実行する方法を持たないことにつながる言語設計の決定は何ですか?正当な理由があると想像しなければなりません。これらの言語がオブジェクトの破壊/最終化をサポートしなくなった技術的および理論的な決定をよりよく理解したいと思います。 更新: おそらく私の質問を表現するより良い方法: なぜ言語には、カスタムインスタンス化(コンストラクター)とともにクラスまたはクラスに似た構造を持つオブジェクトインスタンスの組み込みコンセプトがありますが、完全に破棄/ファイナライズ機能を省略しますか?自動ガベージコレクションを提供する言語は、オブジェクトが使用されなくなったときに100%の確実性でわかるように、オブジェクトの破壊/最終化をサポートする主要な候補のようです。しかし、これらの言語のほとんどはサポートしていません。 私は、デストラクタが呼び出されることは決してないだろうとは思わない。それは、gcsが回避するように設計されているコアメモリリークだからだ。デストラクタ/ファイナライザは、将来の不確定な時間まで呼び出されないかもしれないが、JavaまたはPythonが機能をサポートするのを止めなかったという議論を見ることができました。 オブジェクトのファイナライズをサポートしない理由は、言語設計の中核となる理由は何ですか?

7
アセンブリ言語が必要なのはなぜですか?
私たちは主に高レベル言語でプログラムを書きます。それで勉強しながらアセンブリ言語に出会いました。したがって、アセンブラーはアセンブリー言語を機械語に変換し、コンパイラーは高水準言語でも同じことを行います。アセンブリ言語には、move r1 r3、move a 5などの指示があります。勉強するのはかなり難しいです。では、なぜアセンブリ言語が作成されたのでしょうか?コンピューター工学のクラスでアセンブラーについて勉強するのはなぜですか?

7
すべてのチューリング完全言語は交換可能ですか
プログラミングの方法は知っていますが、CS理論の初心者です。 この答えによると チューリング完全性は、計算可能性の抽象的な概念です。言語がチューリング完全である場合、他のチューリング完全言語が実行できる計算を実行できます。 そして、チューリング完全言語で書かれたプログラムは、別のプログラムで書き直すことができます。 OK。意味あり。Cをアセンブリに翻訳(コンパイル)できます(そして、私は毎日それを行います!)。また、アセンブリをCに翻訳できます(Cで仮想マシンを書くことができます)。同じことが他の言語にも当てはまります。任意の言語をアセンブリにコンパイルし、別の言語で記述されたVMで実行できます。 しかし、チューリング完全言語で書かれたプログラムを別のプログラムで書き直すことはできますか? アセンブリにLIGHTBUTTONオペコードがある場合はどうなりますか?私は物理的に電球のないシステム(言語)でその言語をエミュレートすることはできません。 OK。つまり、コンピューター理論を扱っているので、物理的なデバイスの制限については話していません。 しかし、乗算を持たないデバイスはどうでしょうか?分割?私の知る限り(これはmath.SEの問題ですが)、加算と減算を使用して乗算をエミュレートすることはできません(もちろん、除算はエミュレートできません)[1]。 では、「完全な言語のチューリング」(加算、減算、およびジャンプが可能)は、加算、減算、乗算、およびジャンプが可能な別の言語をどのようにエミュレートしますか? 編集 [1]。任意の実数上。

3
ビジュアルプログラミングツール、なぜASTと直接連携しないのですか?
Blocklyや友人などのオープンソースのビジュアルプログラミングツール、およびGithubでホストされている他のプロジェクトをいくつか見つけましたが、抽象構文ツリーで直接機能するものは見つかりませんでした。 何故ですか? 私が尋ねているのは、すべてのコンパイラがコンパイルプロセスにソースコードをASTに解析する段階があることを発見した後、いくつかの視覚的なプログラミングツールがこれを利用してプログラマに方法を与えることができることは明らかだったからですASTを視覚的な方法で直接編集し、ソースからノードグラフへのラウンドトリップを行い、必要に応じてソースに再び戻すこともできます。 たとえば、人は JavaScript AST Visualizerから実際のJavaSriptビジュアルプログラミングツールまで、それほど大きな違いはない。 だから、私は何が欠けていますか?

6
プログラミング言語、正規表現、形式言語の関係は何ですか
この質問に対する答えをネットで探しましたが、私以外の誰もが暗黙のうちに答えを知っているようです。おそらくこれは、関心のある唯一の人がその主題について高等教育を受けた人だからです。一方、私は高校での宿題の最後に投げ込まれました。 私の質問は、プログラミング言語はどのくらい正確に正式言語に関連していますか?私が読むところはどこでも、「プログラミング言語の文法を定義するために形式言語が使用されている」という言葉があります。 今、私が集めたものから、正式な言語とは、特定の記号セット(言語のアルファベット)に適用される一連の生産規則です。これらの生産ルールは、次のような一連の変換を定義します。 b -> a aaa->c これは次のように適用できます。 abab->aaaa aaaa-> ca 補足として、正式な言語のアルファベットを{a、b、c}と定義すると、aとbは非終端であり、cは変換できないため終端です(間違っている場合は修正してください)それ)。 それを考えると、これはプログラミング言語にどのように当てはまるのでしょうか?また、正規表現を使用してテキスト形式の言語を解析し、文法が正しいことを確認することもよくあります。意味あり。その後、正規表現は正式な言語によって定義されると述べられています。正規表現は、正規表現を表す有限状態オートマトンがゴールポイントに到達したかどうかに応じて、(少なくとも私の経験では)trueまたはfalseを返します。私が見る限り、それは変換とは関係ありません*。 プログラム自体のコンパイルについては、正式な言語がコードを連続的に低レベルのコードに変換し、最終的にハードウェアが理解できる複雑なルールセットを介してアセンブリに到達できると思います。 だからそれは私の混乱した観点からのものです。おそらく、私が言ったことには根本的に間違っていることがたくさんあります。だから私は助けを求めています。 * (a|b)*b*c->trueプロダクションルールのようなものを検討しない限り、その場合、ルールには有限状態オートマトン(つまり、正規表現)が必要です。先ほど言ったように、これは意味がありません

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