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

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

3
バイナリデータにレクサー/パーサーを使用するのはなぜ間違っているのですか?
私はしばしばパーサーコンビネーターとは対照的にレクサー / パーサーで作業し、解析でクラスを取ったことがない人を見て、バイナリデータの解析について尋ねます。通常、データはバイナリであるだけでなく、コンテキスト依存でもあります。これは基本的に、1種類のトークン(バイト用トークン)のみを持つことになります。 レクサー/パーサーによるバイナリデータの解析が、解析クラスを受講していないが、理論に基づいたCS学生にとって十分に明確である理由を誰かが説明できますか?

3
コードブロックを定義するためにインデントを使用しているPythonと前身以外のプログラミング言語はどれですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Computer Science Stack Exchangeで話題になるようにします。 9か月前に閉鎖されました。 Pythonは、コードブロックを構文的に定義するためにインデントを使用することで有名です。(Python言語リファレンスの複合ステートメントを参照してください)。Pythonを何年も使用した後も、この構文機能に興味を持ち、非常に気に入っています。 しかし、私は疑問に思います:Pythonとその「前身」(*)言語ABC は別として、コードブロックの定義にインデントを使用する他のプログラミング言語がありますか?コードブロックとは、ここでは「何らかの方法で1つのコンポーネントとして扱われる複数のステートメント」を意味します。 私は特に実用的なプログラミング言語に興味がありますが、難解な言語にも言及する価値があります。 (*): " Predecessor "は、ここでより良い単語を知るというデフォルトの単語の選択です。グイド・ヴァンロッサム、パイソンの作成者は、PythonとABCに関するインデントとの関係を説明したインタビューで、このような「グループ化するためのインデントの選択は、Pythonで新しい概念ではありませんでした。私はABCからこれを継承しました。」

1
IOモナドは技術的に間違っていますか?
haskell wikiには、IOモナドの条件付き使用の次の例があります(こちらを参照)。 when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) この例では、の定義はすべてをより理解しやすくするためのものであるIO aことRealWorld -> (a, RealWorld)に注意してください。 このスニペットは、IOモナドで条件付きでアクションを実行します。さて、それconditionがFalseであると仮定すると、アクションactionは決して実行されるべきではありません。遅延セマンティクスを使用すると、これが実際に当てはまります。ただし、ここではHaskellが技術的に厳密ではないことに注意してください。これは、たとえば、コンパイラーがaction world別のスレッドでプリエンプティブに実行することを許可され、後で必要でないことが判明したときにその計算を破棄することを意味します。ただし、その時点までに副作用はすでに発生しています。 さて、プログラム全体が終了したときにのみ副作用が伝播されるようにIOモナドを実装し、どの副作用を実行すべきかを正確に知ることができます。ただし、これはそうではありません。Haskellで無限のプログラムを作成することが可能であるため、明らかに中間の副作用があります。 これは、IOモナドが技術的に間違っていることを意味しますか、またはこれを防ぐ他の何かがありますか?

1
コンパイル時間の保証に向けてさらに調査しないのはなぜですか?
私はそれがすべてコンパイル時間であり、プログラムをコンパイルするとその実行について多くの保証が行われるという考えが大好きです。一般的に、静的型システム(Has​​kell、C ++など)は、動的型システムよりも強力なコンパイル時保証を提供するようです。 私が理解していることから、Adaはコンパイル時のチェックに関してさらに進んでおり、実行前にさまざまなバグを検出することができます。また、ある時点で、デリケートなフィールド(プログラミングエラーが人命にかかわる可能性がある場合)に選択されたことを考えると、かなり安全だと考えられています。 今、私は疑問に思う:より強力な静的保証が、より文書化され安全なコードにつながるなら、なぜ私たちはその方向でもっと研究しないのか? 欠落しているように見えるものの例はint、基礎となるアーキテクチャのビット数によって決定される範囲を持つジェネリック型を定義する代わりに、範囲を持つことができる言語です(次の例でInt [a..b]は、 aおよびbを含む): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int [-23..11] または(これをAdaから): a : Int [mod 24] b : Int [mod 24] a + b : Int [mod …

2
ラムダ計算:コンテキストと評価コンテキストの違い
まず、以下のテキストにエラーが含まれている可能性があると言いたいので、質問の定式化の誤りをお気軽に指摘してください。 次の構文で用語が指定されているブール値とif文を含む型なしラムダ計算について考えてみましょう。 t ::= v | t t | if t t t | x v ::= \x.t | #t | #f この場合のコンテキストCは、次の構文に従って与えられます。 C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C …

3
ラッセル型理論と型システムの関係
私は最近、例えばHaskellに見られるように、ラッセル型の理論と型システムの間に何らかの関係があることに気付きました。実際、Haskellの型の表記法の一部には、型理論の先駆者がいるようです。しかし、1908年のIMHO、ラッセルの動機はラッセルのパラドックスを避けることであり、それがコンピュータサイエンスの型システムにどのように関係しているかはわかりません。 ラッセルのパラドックスは、たとえば、特定の言語で適切な型システムがなかった場合など、心配しなければならない何らかの形ですか?

4
誰かが、文脈依存の文法の単純ではあるがおもちゃではない例を与えることができますか?
文脈依存文法を理解しようとしています。 言語が好きな理由がわかります {ww∣w∈A∗}{ww∣w∈A∗}\{ww \mid w \in A^*\} {anbncn∣n∈N}{anbncn∣n∈N}\{a^n b^n c^n \mid n\in\mathbb{N}\} 文脈自由ではないが、型付けされていないラムダ計算に似た言語が文脈依存であるかどうかを知りたい。 シンプルだが、おもちゃではない例(上記のおもちゃの例を検討します)、いくつかの生産規則のために、たとえば記号の文字列の有無を伝えることができる文脈依存文法の例を見てみたい現在スコープ内にあります(たとえば、関数の本体を生成する場合)。 文脈依存文法は、未定義/未宣言/非バインド変数を構文上の(意味ではなく)エラーにするほど強力ですか?

4
「null」と「Maybe」の両方の概念を持つことは意味がありますか?
C#でWeb APIのクライアントを作成しているときに、null2つの異なるものを表す値として問題が発生しました。 何もありません。たとえばfoo、bar 不明:デフォルトでは、API応答にはプロパティのサブセットのみが含まれます。必要な追加のプロパティを指定する必要があります。したがって、不明とは、プロパティがAPIからリクエストされなかったことを意味します。 Maybe(またはOption)タイプ、関数型言語での使用方法、およびユーザーに値の不在について考えさせることによりnull逆参照の問題を「解決」する方法について調べたところ、次のことがわかりました。しかし、私が遭遇したすべてのリソースはnullをMaybeで置き換えることについて話しました。私は3値的論理についての言及をいくつか見つけましたが、私はそれを完全には理解していません。ほとんどの場合、その言及は「それは悪いこと」の文脈で行われていました。 nullとMaybeの両方の概念を持ち、それぞれ未知数と何も表現しないことが理にかなっているのではないかと思っています。これは私が読んだ3値論理ですか、それとも別の名前ですか?または、多分多分に多分をネストするための意図された方法ですか?

1
プログラミング言語セマンティクスプロトタイピングツール
プログラミング言語のセマンティクスと型システムのプロトタイプを作成するためのツールはありますか?また、これにより、型の健全性など、標準プロパティの何らかのモデルチェックが可能になりますか? Alloyについての本を読んでおり、リレーショナルロジックを使用して表現されたモデルに対して、私が望んでいる正確な機能を提供しているので、これを質問します。 私はOttを知っていますが、証明アシスタントシステム用のコードの生成に重点を置いているため、このような「モデルチェック」機能はありません。 そのようなツールの存在についての参照があればよいでしょう。

4
なぜ抽象化と速度を犠牲にする必要があるのですか?
高水準言語が速度の点で低水準言語に到達できないように見えるのはなぜですか?高水準言語の例としては、Python、Haskell、Javaがあります。低レベル言語を定義するのは難しいですが、Cを例に考えてみましょう。比較はインターネット1のいたるところにあり、Cの方がはるかに高速で、時には10倍以上であることに同意しています。11^1 そのようなパフォーマンスの大きな違いを引き起こすのは何ですか?なぜ高級言語が追い付かないのですか? 最初はこれがすべてのコンパイラーの責任であり、将来的には改善されると信じていましたが、最も人気のある高水準言語のいくつかは何十年も前から存在しており、速度に関してはまだ遅れています。C構文ツリーと同様にコンパイルして、マシンコードを生成する同じ手順を実行することはできませんか?それとも構文自体に関係があるのでしょうか? 例:11^1 コンピュータ言語ベンチマークゲーム ジュリアのベンチマークページ

3
抽象データ型とオブジェクトの違いは何ですか?
Programmers.SEの答えは、クック(エッセイ特徴づけるオブジェクトはのADTではありませんが言うように) オブジェクトは、代数としてではなく、型の値に対する特性関数のように動作します。オブジェクトは型の抽象化ではなく手続き型の抽​​象化を使用します ADTは通常、プログラム内で固有の実装を持っています。言語にモジュールがある場合、ADTの複数の実装を持つことは可能ですが、それらは通常相互運用できません。 クックのエッセイでは、クックの論文で使用されているセットの特定の例では、オブジェクトは特徴的な関数と見なすことができるように思えます。オブジェクトは、一般的に特徴的な機能と見なすことはできないと思います。 また、Aldritchの論文相互運用性の力:なぜオブジェクトが避けられないのか ¹が示唆する クックの定義は、本質的に動的ディスパッチをオブジェクトの最も重要な特性として識別します これとアランケイが彼が言ったときに同意する 私にとってのOOPとは、メッセージング、ローカルでの保持と状態プロセスの保護と非表示、およびすべてのものの極端な遅延バインディングのみを意味します。 ただし、Aldritchの論文に対するこれらの関連する講義スライドでは、Java クラスはADTであり、Javaインターフェースはオブジェクトであることが示唆されています。実際、インターフェース「オブジェクト」を使用すると相互運用できます(上記の箇条書きのいずれかで示されるOOPの主要機能の1つ) )。 私の質問は 特徴的な関数はオブジェクトの主要な特徴ではなく、フランクシアラーは誤解していると私は言いますか? 動的ディスパッチを使用していなくても、Javaインターフェースを介して互いに通信するデータはオブジェクトの例ですか?どうして?(私の理解は、動的ディスパッチの方がより柔軟であり、そのインターフェースは、objective-C / smalltalk / erlangスタイルのメッセージングに向けたステップであることです。) 依存関係の逆転の原則の考え方は、ADTとオブジェクトの区別に関連していますか?(WikipediaのページまたはThe Talking Objects:A Tale About Message-Oriented Programmingを参照してください)私はこの概念に不慣れですが、プログラムの「レイヤー」間にインターフェースを追加することを含むことを理解しています(Wikipediaのページ図を参照)。 必要に応じて、オブジェクトとADTの違いの他の例/説明を提供してください。 ¹ (2013年発行)本論文では、読みやすいですし、Javaの例でクックの2009年の論文をまとめたものです。この質問に答えるのではなく、少なくともそれを流し読みすることを強くお勧めします。

2
プログラム分析で最小固定小数点(lfp)が重要である理由
プログラム分析における最小不動点(lfp)の重要性についての全体像を把握しようとしています。たとえば、抽象的な解釈はlfpの存在を使用しているようです。プログラム分析に関する多くの研究論文も、不動点を見つけることに重点を置いています。 より具体的には、ウィキペディアのこの記事:Knaster-Tarski Theoremは、lfpがプログラムのセマンティクスを定義するために使用されると述べています。 どうしてそれが重要ですか?どんな簡単な例でも私を助けてくれます。(私は全体像を取得しようとしています)。 編集 私の言い回しは間違っていると思います。lfpの重要性については触れません。私の正確な質問(初心者)は:lfpの計算はプログラム分析にどのように役立ちますか?たとえば、なぜ/どのように抽象的な解釈がlfpを使用するのか?抽象ドメインにlfpがない場合はどうなりますか? うまくいけば、私の質問はより具体的になりました。

5
OOPでのオブジェクトの状態の定義
オブジェクト指向プログラミング(論文用)における「オブジェクトの状態」の簡潔な定義が必要です。 約半日、このトピックについて引用できる論文を探しましたが、見つかりませんでした。私が見つけたすべての論文は、ほとんどがオブジェクト指向プログラミングに関する一般的な論文であり、オブジェクトの状態を定義していませんでした。 私にはわかりませんが、私の推測では次のようなもの があります。オブジェクトの状態は、オブジェクトのインスタンス変数の状態によって定義されます。 オブジェクトの状態の定義やトピックに関する参照を検索しています。 (ところで、この概念を「オブジェクトの状態」と呼んでもいいですか、それとも珍しいのですか?)

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
代数的データによる制約ベースの型推論
私はML系図の表現ベースの言語に取り組んでいるので、当然、型推論が必要です> :) 現在、EOPL(Friedman and Wand)の単純な実装に基づいて、制約ベースのソリューションを型推論の問題に拡張しようとしていますが、それらはエレガントに代数的データ型を回避しています。 これまでのところ、スムーズに機能しています。式がある場合eでa + b、e : Int、a : Intとb : Int。e一致する場合、 match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, 私は当然と推論することができt(e) = t(the whole match expression)、t(n) = t(0) = t(n')、t(match) = t(1) = t(n' * fac(n - 1)のように... しかし、代数的データ型に関しては、私は非常に確信が持てません。filterのような関数を想定します。 let filter …

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