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

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

4
「仮説」とはどういう意味ですか?
関数の引数が仮引数と呼ばれているのはどういう意味ですか?私はこの用語をFortran以外で使用したことはありませんが、コンピューターサイエンスの一般用語ですか?ダミーとして渡され、ダミーとして渡されない引数の例は何ですか? 私はこの定義を見つけましたが、わかりませんが、仮引数は参照によって渡される変数のようです。この場合、Fortranではすべての変数がダミー変数ですか?(混乱) 編集:私は次のエッセイに出くわしただけで、Fortranの引数/関数呼び出しのテモノロジーをよりよく理解するのに役立ちました:Dortor Fortran:引数のためにここに来ました

1
新しいドメイン固有のプログラミング言語を正式に説明する
私は社会学習の慣習を表現するためにドメイン固有の言語を実装しようとしています。実装の一部は、言語の正式な記述-その「計算」、記号、および論理式です。 私のアプローチは、文法を記述することによって言語を記述することですが、関係、対話、より理論的なアプローチを必要とする期待やロジックの説明などの概念もあります。 この説明に役立つ例と参考文献(論文、本)をお願いしたいと思います。私はこのタスクに比較的有能に近づいていると感じているので、完全な手持ちを求めているわけではありませんが、この分野の理論家の助けをいただければ幸いです。

1
俳優モデルのチューリングマシンのような形式
チューリングマシンには、正式なシンボルアルファベット、状態、および遷移規則に基づいて、計算の実行方法が記述されています。 アクターモデルは、チューリングマシンよりも強力な計算モデルと呼ばれることがあります(計算できるものではなく、他の側面)。 アクターモデルは、計算モデルとしての本格的なターニングマシンの代替品ですか? アクターモデルにも、チューリングマシンに似たシンボルベースの正式な計算の説明がありますか? アクターはチューリングマシンと同等と見なされますか?各メッセージは順次(そしてアトミックに)処理されるためですか? チューリング機械に基づく多くの理論的な結果があります。たとえば、停止問題、決定可能性、ゲーデルの不完全性定理との関係などです。 これらの証明は、俳優モデルに正式に一般化できますか?これは行われましたか?

3
ポリモーフィックリストからポリモーフィックリストへのML関数
私はML(OCaml)でプログラミングを学んでいます。以前に、タイプのML関数'a -> 'bについて質問しました。今、私はタイプの関数で少し実験しています'a list -> 'b list。明らかな簡単な例がいくつかあります。 let rec loop l = loop l let return_empty l = [] let rec loop_if_not_empty = function [] -> [] | l -> loop_if_not_empty l (ライブラリ関数を使用せずに)空のリストまたはループを返す以外のことを行う関数を作成する方法がわかりません。これはできますか?空でないリストを返す方法はありますか? 編集:はい、私がtypeの関数を持っている場合は、'a -> 'b別の関数またはtypeの関数を作成できますが'a list -> 'b list、ここで私が疑問に思っているのは、最初の関数を作成する方法です。

3
プログラミングモデルとプログラミングパラダイムの違い?
プログラミングモデルとプログラミングパラダイムの関係と違いは何ですか?(特に、プログラミングモデルとプログラミング言語のプログラミングパラダイムについて話すとき。) ウィキペディア は1で私の質問に答えようとします: プログラミングパラダイムは、コンピューターシステムを抽象化したプログラミングモデルと比較することもできます。たとえば、「フォンノイマンモデル」は、従来のシーケンシャルコンピュータで使用されているプログラミングモデルです。並列計算の場合、通常、プロセッサを相互接続するさまざまな方法を反映した多くの可能なモデルがあります。最も一般的なものは、共有メモリ、メッセージパッシング付きの分散メモリ、またはこの2つのハイブリッドに基づいています。 しかし、私はそれを理解していません: フォンノイマンモデルはhttps://en.wikipedia.org/wiki/Von_Neumann_architectureの建築モデルであることを理解しているため、ウィキペディアの引用に「「フォンノイマンモデル」はプログラミングモデルである」と記載されているのは間違い ですか。 並列プログラミングモデルは「通常、プロセッサを相互接続するさまざまな方法を反映していますか」?それとも、代わりに「プロセッサを相互接続するさまざまな方法を反映した」並列アーキテクチャモデルですか? 1の質問に答えるために、プログラミングモデルとは何かを明確にできますか? プログラミング言語またはAPIライブラリによって提供/実装されたプログラミングモデルであり、そのような実装は一意ではないのは正しいですか。 Rauberの並列プログラミングの本、「プログラミング・モデル」、「アーキテクチャ・モデル」以上の順番である「計算モデル(すなわち計算モデル)」上記の抽象化です。プログラミングモデルは、並列コンピューティングで使用されるだけでなく、プログラミング言語またはAPIライブラリでも使用されていると思います。

10
コンピュータプログラムとアルゴリズム
プログラムにはアルゴリズムが含まれていると言われていますが、その定義を参照すると、アルゴリズムは特定のタスクを実行するために記述された一連の命令であり、コンピュータープログラムはコンピューターで(一部の)タスクを実行するための一連の命令でもあります。 では、プログラムとアルゴリズムの違いは何ですか?これも一種のアルゴリズムですか? 実際、私はアルゴリズムとコンピュータープログラムの正式な定義を探しているので、それらを互いに区別したり、プログラム内でアルゴリズムを識別したりできます。 更新:私はウィキペディアで非公式な定義(少なくとも構文的には)によってプログラムがアルゴリズムであることに気付きました。 非公式の定義は、「一連の操作を正確に定義する一連のルール」とすることができます。これには、数値計算を実行しないプログラムを含むすべてのコンピュータプログラムが含まれます。一般に、プログラムは最終的に停止する場合のアルゴリズムにすぎません。

7
基本的なプログラミングを教えるための言語
私は中学生にプログラミングを教えることに興味があります。次の基準を備えたプログラミング言語が欲しいのですが。 シンプル -コードを多用せずに高度なプログラミングをサポートするために必要な最低限の数にまで削減。そのため、この言語では、ポインターには興味がなく、オブジェクト指向にうんざりしています(関数は優れていますが)。 パワフル -グラフィックス、ネットワーキング、分散処理など、21世紀の要素をプログラミングできるようになりたいです。 デバッグ可能 -人間が読めるデバッガを備えたエレガントな統合開発環境が必要です(つまり、スタックトレース付きの奇妙なエラーメッセージではなく、平均的な中学生がコードの何が悪いのかを判断するために使用できる明確な説明) 。 標準プログラミング言語(C、C ++、C#、Java)は、最初の基準を満たしていません。Scratchなどの基本的なプログラミング言語は、2番目(場合によっては3番目)の基準を満たしていません。スクリプト言語(perl、python、php)は最後の基準を満たしていません。 誰かがそのような獣を知っているかどうか知りたいのですが、座る前に自分で作ります。

2
関数型プログラミングは、変装した命令型プログラミングではありませんか?
私が見ていたYouTubeビデオでは、命令型プログラミングと関数型プログラミングの違いについて、JavaとHaskellでそれぞれ1to からtoまでの数を10合計する方法を説明することで説明しました。 Javaでは、各ステップを明示的に記述し、各ステップの結果を変数に割り当てる必要があります-次のようなもの int total = 0; for (int i = 1; i <= 10; i++){ total = total + i; } return total; Haskellでは、次のように簡単に言うことができます。 sum(1..10) 私の質問は次のとおりです。関数型言語のバックグラウンドで何かが起こっていることは明らかであり、その何かはある種の命令型プロセスでなければなりません。関数型言語は、実際には一種の命令型言語のAPIのようです。たとえばsum(int start, int end)、Javaでメソッドを定義することにより、関数型言語の一部を作成できます。私は本当に新しいタイプの言語をすぐに作成しましたか、それとも命令命令をユーザーから隠す一連の命令メソッド呼び出しを定義しただけですか? 私が理解するのに苦労していることがはっきりしているといいのですが。

4
科学計算用の高速で無駄のないJavaScript:どの機能を維持する必要がありますか?
ここで私は数学教育の障壁を下げることに本当に興味があります。 目標: 私はJavaScriptコミュニティ用に作成されてほしいと思います。これは、Pythonベースの/リンクされた科学的および高性能なコンピューティングライブラリに相当します(それらのすばらしいリストはSageなどから入手できます)。そして私はそれを望んでいます。なぜなら、私は、JavaScriptを学ぶ人々が、Python(および会社)を学ぶ必要なく、科学的および数値計算に簡単に入ることができるようにしたいからです。(基本的にはいつかPythonを習得したので、Pythonを学ぶのは簡単ですが、これはおそらく、JavaScriptの制限されたサブセットをPythonにコンパイルするのが簡単になることを示唆しています。) 仮説法: 私がターゲットとしている市場(「人間のコンパイラー」)はすでにJavaScriptを知っているプログラマーであるため、私は主にJavaScriptとの違いが最小限の新しい言語に興味があります。私がそれらの人々をターゲットにしたいのは、RPythonとCythonがPythonで行うように、より高速なCにコンパイルするコードを書くための最小限の異なる言語を彼らに与えることです。私はたくさんのJavaScript機能を放棄するつもりです。最小限の機能を追加するように注意してください。Lua、Dart、ECMA Harmony(正式なリリース日はありません)を確実に調べます。 、または私は間違っていますか?)など。これらはすべて、JavaScriptの現在の(2012)実装に非常によく似ているためです。 疑わしい動機: 私は個人的に、物事をより速く実行できる言語/ツールセットを学びたいと思っています(このため、Erlangを自分で学習しています)が、ここでは特に、そのようなことをしていない他の人のためにバー(申し訳ありません)を下げることに興味があります意欲。これは、「ケーキを手に入れて食べたいので、問題の調査に時間をかけている」状況の1つにすぎません。私はコンピュータ言語設計の経験が非常に限られていますが、生態系のハッキングの観点から見ると、この問題は研究するのに十分興味深いと思われるので、すぐにもっと多くのことをしたいと思っています。

1
コンパイラのA正規化とK正規化の違いは何ですか?
管理標準形式は、各中間命令に名前が付いているプログラム中間表現です。GHCとOCamlで使用されます。 K正規化形式は、各命令が1つの割り当てと演算で構成される中間表現です。MLKit、Min-Caml、およびGoCamlで使用されます。 A正規化とK 正規化の両方に、継続を伴うlet式の生成が含まれます。 A正規化とK正規化は、まったく同じ変換のようです。それらが異なる名前に値するようなそれらの違いは何ですか?

2
Java(または一般的な命令型言語)の正式な実行モデル
いくつかの厳しい制限の下でJavaプログラムの実行に関するいくつかのステートメントを証明しようとしています(基本的に、2つのメソッドが特定の入力の一連の制約を満たす場合、それらは同等であると推測されます(つまり、戻り値と後の状態)実行は同じです)。これを証明するために、私はこれについて話すことができるある種の形式主義を探しています。 私は関数型言語の操作上のセマンティクスに精通しており、forループ/ whileループを再帰的な関数に変換できる可能性があります...これを行うのではなく、いくつかの機械を用意して命令型の土地に留まることができるとよいでしょう。 より具体的には、実行のk番目のステップでのメソッドの状態について推論したいと思います。これには、グローバルな状態が含まれます。 this.field = 2クラスの状態を更新するような呼び出し パラメータを変更する呼び出しは、メソッドの外部で状態を更新します。 myParam.setFoo(...) myParam.x = y 静的メソッドの呼び出し Blah.static_side_effects() これはすべて確定的であると想定しています。つまり、状態に対するこれらのグローバル更新のいずれかが2つのメソッドで発生し、その両方のグローバル実行状態とローカル実行状態が同じである場合、新しい状態も同じになるという仮定を正式化したいと思います-計算の各ステップが決定されるということです正確には、グローバル状態とローカル状態によって。これは明らかにRNGと並列処理を排除します(ただし、これは後で処理する可能性があります...)。 これにどのように取り組むことができるかについてのアイデアや情報源はありますか?私の唯一の考えは、メソッドをステートメントのリストとして扱い、ステートメントのセマンティクスを正式に記述しようとすることです。 できれば、JVMレベルではなく、Java言語レベルでこれを実行したいと思います。これは現実的ではないかもしれませんが、今の私の目標は、運用上のセマンティクスについていくつかの合理的な仮定を行い、そこからそれを取得することです。 ああ、最後のメモです。この質問をどのように改善できるかについての提案があれば、大歓迎です。私は質問をするのに適切な言語を見つけようとするのにちょっと気まぐれになっていて、用語を乱用しているかどうか(ローカル/グローバル実行状態など)は、これを修正したいです。

1
多重継承オブジェクト指向言語でのメソッド解決のためのC3線形化アルゴリズム:実装の詳細の正当化の探求
この Pythonのメソッド解決順序(mro)、別名C3線形化の説明によれば、アルゴリズムは次のように再帰的に説明できます。 L(O) = <O> L(C) = <C> + merge(L(B1),..., L(Bn), <B1,...,Bn>) どこ O すべてのクラスが継承するクラスです。 Cは、、B1...、から直接Bnこの順序で継承するクラスです。 <および>リスト区切り文字です。 + リスト連結演算子です。 merge 以下で説明する方法で、そのリスト引数を単一のリストにマージします。 上記は単語で言い換えることができます(上記のPythonドキュメントから引用): Cの線形化は、Cと、親の線形化と親のリストのマージの合計です。 merge(本質的にPythonのドキュメントから引用したが、わずかに言い換え)以下のようなアルゴリズムが記載されています。 最初のリストの先頭、つまりL(B1)[0]を検討します。それが良い先頭である場合、つまり他のリストの適切な末尾にない場合は、Cの線形化に追加して削除しますマージのすべてのリストから。そうでない場合は、次のリストの頭などを検討します。クラスがなくなるか、頭がなくなるまで繰り返します。後者の場合、マージを構築することは不可能です。 次の例は、説明のためのものです。仮定Aから直接継承するBとC、このために、との線形化したとするBとCしています L(B) = <B, D, E, O> L(C) = <C, D, F, O> 次に、A線形化は L(A) = <A> + merge(<B,D,E,O>, <C,D,F,O>, <B,C>) = <A, B> + …

2
明示的なアプリケーションまたはサブタイプなしの上位の多態性?
したがって、言語でより高いランクのポリモーフィズムを持つ2つの主な戦略に精通しています。 System-Fスタイルのポリモーフィズム。関数は明示的に型指定され、インスタンス化は型アプリケーションを通じて明示的に行われます。これらのシステムは命令的である場合があります。 サブタイピングベースのポリモーフィズム。ポリモーフィックタイプは、そのすべてのインスタンス化のサブタイプです。決定可能なサブタイピングを行うには、ポリモーフィズムが予測的でなければなりません。このペーパーでは、そのようなシステムの例を示します。 ただし、Haskellのような一部の言語では、明示的な型アプリケーションを使用せずに、命令的に高いランクの多態性を持っています。 これはどのようにして可能ですか?明示的なインスタンス化またはキャストなしで、サブタイプの概念なしで型をインスタンス化する場合、型チェックは「知る」ことができますか? または、そのようなシステムではタイプチェックは決定可能ですか?これは、Haskellのような言語が、ほとんどの人のユースケースでうまく機能する決定不能なものを実装するケースですか? 編集: 明確にするために、私は多態的に型付けされた値の定義ではなく使用に興味があります。 たとえば、次のように仮定します。 f : forall a . a -> a g : (forall a . a -> a) -> Int val = (g f, f True, f 'a') f引数として与えられたときではなく、それが適用されたときにインスタンス化する必要があることをどのようにして知ることができますか? または、関数型から自分自身を分離するには: f : forall a . a g : (forall a . a) -> …

1
行多態性と有界多態性の違いは?
私は最近、Brian McKennaが行のポリモーフィズムを説明しているこのブログ投稿を見つけました。これは私にとっては素晴らしいアイデアのように見えましたが、その後、制限付きパラメトリック多態性のようなひどいにおいがすることに気付きました。 行ポリモーフィズムの場合: sum: {x: int, y: int | rho} -> int function sum r = r.x + r.y 制限付きパラメトリック多態性: sum: forall a <: {x: int, y: int}. a -> int function sum r = r.x + r.y 誰かがこれらの2つのアプローチの多型性の違いを明確にできますか?

2
プログラムを逆方向に実行する
プログラムを逆方向に実行できるデバッガーを使用したことはありませんが、使用したいと思います。さて、逆方向実行可能プログラミングについて多くの証拠と理論があるのか​​、いつ、なぜプログラムを逆方向に実行できるのか、いつ、なぜそうしないのか? 直感的には、プログラムが逆方向に実行されることがわかっているため、プログラムが逆方向に実行されると、コンピューターがプログラムを逆方向に実行できるはずです。 デバッグは実際の例にすぎません。私はまた、可逆性の理論のためにそれに興味があります。プログラムを逆方向に実行できる場合、プログラムが行うことは可逆的ですよね。

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