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

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

3
パーサーの文法を指定するにはどうすればよいですか?
私は長年プログラミングを行ってきましたが、依然として非常に時間がかかるタスクの1つは、パーサーの文法を指定することです。この過度の努力の後でも、私が思いついた文法が良いかどうかはわかりません( 「適切」の合理的な尺度によって)。 文法を指定するプロセスを自動化するアルゴリズムがあるとは思っていませんが、現在のアプローチの当て推量と試行錯誤の多くを排除する問題を構築する方法があることを願っています。 私の最初の考えはパーサーについて読むことであり、私はこれのいくつかを行いましたが、私はこの主題について読んだすべてが文法を与えられたものとして(または検査によってそれを指定できるほど些細な)、そして焦点を当てますこの文法をパーサーに変換する問題。私は直前の問題に興味があります:そもそも文法を指定する方法。 私は主に、具体的な例(ポジティブとネガティブ)のコレクションを正式に表す文法を指定する問題に興味があります。これは、新しい構文を設計する問題とは異なります。この区別を指摘してくれたマクニールに感謝します。 文法と構文の違いを本当に理解したことは一度もありませんでしたが、理解し始めた今、私は主に文法を指定する問題に興味があると言って最初の明確化を明確にすることができました事前に定義された構文:私の場合、この構文の基礎は通常、ポジティブな例とネガティブな例の集まりです。 パーサーの文法はどのように指定されていますか?ベストプラクティス、設計方法論、およびパーサーの文法の指定に関するその他の有用な情報を説明するための事実上の標準である本または参考資料はありますか?パーサーの文法について読むとき、どの点に焦点を合わせるべきですか?

5
スクリプト言語の作成に関する質問
たとえば、私のためにプログラミング言語またはスクリプト言語を作成するために誰かに支払いたいと思ったとします。まさに私が望むものが何であるかを完全に理解するために、彼らはどんな種類の文書を必要とするでしょう。 つまり、問題の新しいプログラミング/スクリプト言語を説明する標準文書はありますか?

8
プログラミングとデータベースクエリの統合[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 C ++やJavaなどのオブジェクト指向プログラミング言語の一般的なチュートリアルを検討してください。アカウント、注文、アイテムなど(またはほぼ同等のもの)を表すオブジェクトを使用して、簡単な注文処理システムを作成します。完全に直感的に理解できますが、ダイニングテーブルにいる象は、これらがインメモリオブジェクトであるため、現実的ではないということです。実際のシステムでは、アカウント、注文などはそもそもメモリに実際に存在するのではなく、データベースに存在し、メモリ表現はその短命のミラーにすぎません。 データベースを読み書きするために多くのコードを自分で書くこともできますが、それは退屈でエラーが発生しやすいため、実際に誰もそれを行いません。 誰もがORMを使用することになりますが、それらはそれ自体非常に問題が多いため、有名な論文では「ORMのベトナム」と呼ばれています。 プログラミング言語とデータベースがお互いを知らない別個のものであるのと同じくらい、オブジェクトとリレーショナルの不一致ではないと思います。推測:解決策は、プログラミング言語とデータベースクエリ言語の両方である単一の言語を使用することです。そのためには、言語ランタイムもデータベースであり、JITコンパイラもクエリオプティマイザーである必要があります。 それが私が見た問題の要約です。私の質問は、まだ誰かがいますか、 実際にこのような統合システムを構築しました 試みたが、そのような統合システムの構築に失敗した あなたがそのような建築をどのように進めるのか、またはなぜ、なぜそうでないのかというトピックに関する実質的なものを書かれている 問題を解決する別の方法を思い付きますか?

4
言語設計者は、特定の機能が正しく機能することを決定または証明するために何をしますか?
私は言語設計に興味があり、一般的に、広く知られている機能(たとえば、継承、ポリモーフィズム、デリゲート、ラムダ、キャプチャ、ガベージコレクション、例外、ジェネリック、分散、リフレクションなど)、特定の言語、実装方法、制限など。 過去数ヶ月で、Rustについて読み始めました。Rustには、オブジェクトの有効期間を静的に検証可能にすることにより、メモリの安全性と決定論的なリソース管理を保証する所有権システムがあります。言語の単純なユーザーの観点から、私はほとんどすぐにシステムを拾うことができました。 しかし、言語デザイナーの観点からは、Rustの物事がまさにその通りである理由を理解するのに少し時間がかかりました。所有権システムのいくつかの制限の背後にある理由をすぐに理解できませんでした。そのような側面がなければ、システムの整合性を侵害するケースを考え出す必要がありました。 私の主な質問は、Rustとその所有権とは特に関係ありませんが、必要に応じてコメント/回答の例として自由に使用してください。 言語設計者が新しい機能を設計するとき、機能が適切に機能することを決定するためにどのような方法論またはプロセスを使用しますか? 「新規」とは、既存の言語で既にテストされたものではないことを意味します(したがって、作業の大部分は他のデザイナーによって行われています)。「適切に動作する」とは、この機能が意図した問題を正しく解決し、合理的に防弾であることを意味します。「合理的な防弾」とは、機能の整合性に違反する言語または言語の特定のサブセット(「安全でない」コードのないサブセットなど)でコードを記述できないことを意味します。 シンプルな形の機能を考え出し、それを破る方法を見つけ、それをうまく破ったらパッチを当てて、繰り返すという意味で、試行錯誤のプロセスですか?そして、他の可能な違反を考えることができないとき、あなたは何も残っていないことを望み、それを1日と呼びますか? または、機能が機能することを実際に(単語の数学的意味で)証明し、その証明を使用して最初から自信を持って機能を(またはほぼ正しく)取得する正式な方法はありますか? (私はコンピューターサイエンスではなく、エンジニアリングのバックグラウンドを持っていることに言及する必要があります。したがって、CSの人々に明らかな何かが足りない場合は、お気軽にご指摘ください。)

3
なぜ言語はブロックの明示的なマーカーよりもインデントを好むのですか?
Haskellを学んでいますが、自動インデントツールを探していました。私はあまり見ていませんでしたが、Haskellでは(Pythonのように)インデントがブロックを意味することを学びました。その結果、{}(中括弧)やbegin endキーワードなどの明示的なマーカーを使用する、Cファミリの他の言語ほど強力な自動書式設定ツールを作成することは不可能だと推測しています。 読みやすくするためにインデントを強制する言語は気にしませんが、インデントの強制と明示的なマーカーの両方の利点を理解できないため、自動化ツールはどのブロックに属するかを理解できます。 ブロックをマークするインデントの設定が、コードの見栄えを良くするためのものである場合、その利点はまだ理解できません。タブやスペースが異なるエディターや異なるフォント(モノスペースフォントは見栄えが良いなど)で異なって表されることを考えると、プログラマーがコードを適切に提示することを期待することは不可能です。現在のテキストエディタを考慮に入れることができるツールは、コードを正しくフォーマットするためにはるかに適切です。 言語設計者が明示的なブロックマーカーよりもインデントを選択するのはなぜですか?

2
同じ優先順位の2つの二項演算子、左結合および右結合を持つ言語
2つの2項演算子をopl持ちopr、同じ優先順位でopl左結合およびopr右結合であるプログラミング(またはスクリプト)言語(またはドメイン固有の言語)はありますか? (そのような例を見つけることはできませんが、その奇妙なケースを処理するのに十分な一般的なパーサーをコーディングしようとしています) x opl y opr zまたはx opr y opl zの形式の式はどのように解析されますか?より一般的には、さらに多くのオペランドを使用しますか?

2
パフォーマンスのための型システム
プログラムのパフォーマンス特性を形式化しようとする(静的)型システムは存在しますか?私はそのような試みを見つけるように思えません。 型システムは、プログラムに関するステートメントを作成するためのプログラマの武器の(強力な)ツールの1つであり、パフォーマンスが重要な場合が多いため、試行が行われたことを想像するのは遠いことではないようですプログラムのストレージとランタイムの特性について少なくともいくつかのステートメントを作成しようとする型システムを作成します。

1
C#で複合代入演算子をオーバーロードできないのはなぜですか?
タイトルは誤解を招く可能性があるため、質問全体をお読みください:-)。 「複合代入演算子」によってop=、たとえばこのような構造を念頭に置いてい+=ます。純粋な代入演算子(=)は私の質問に属していません。 「理由」とは、意見ではなく、デザイナー(またはその同僚)が推論(つまり、デザイン選択のソース)を表明する際のリソース(書籍、記事など)を意味します。 私はC ++とC#に見られる非対称性に困惑しています(はい、C#はC ++ 2.0ではないことを知っています)-C ++では演算子+=をオーバーロード+し、事前に定義された演算子に依存する適切な演算子をほぼ自動的に記述します C#では逆になります-オーバーロードし+、+=合成されます。 私が間違っていない場合、+=新しいオブジェクトを作成する必要があるため、実際の場合、後者のアプローチは最適化の機会を殺します。そのため、このようなアプローチには大きな利点がありますが、MSDNはあまりにも恥ずかしがり屋なので、それについて話すことはできません。 そして、その利点が何なのか疑問に思います-だから、C#の本、テクトークビデオ、ブログエントリで説明を見つけたら、参考に感謝します。 私が見つけた最も近いものは、Eric Lippertブログへのコメントです。C#でオーバーロードされた演算子が常に静的なのはなぜですか?トム・ブラウン。静的なオーバーロードが最初に決定された場合は、構造体に対してどの演算子をオーバーロードできるかを単に指定します。これにより、クラスで何をオーバーロードできるかがさらに決まります。

2
「out」キーワードが2つの一見異なるコンテキストで使用されるのはなぜですか?
C#では、outキーワードは2つの異なる方法で使用できます。 引数が参照によって渡されるパラメーター修飾子として class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } 共分散を指定する型パラメーター修飾子として。 // Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : ICovariant<R> { } …

4
音声プログラミング言語?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私たちの多くは、コーダー、プログラマー、開発者が繰り返しのストレス障害、手根管などに苦労しています。 自分のストレスを軽減するために、ワークフローに音声制御を導入することに興味がありました。 これが私の現在の質問につながりました。主に音声的であり、したがって音声によるプログラミングに適したプログラミング言語(または既存の言語のスーパーセット)を実装することは可能または実用的でしょうか?

8
言語コンストラクトにデザインパターンが追加されないのはなぜですか?
最近、同僚と話していて、彼の会社はMVCデザインパターンをPHP拡張機能として追加しようとしていると言いました。 彼は、Controllers, Models and Viewsパフォーマンスを向上させるために言語構成要素に追加するCコードを書いたと説明しました。 MVCはWebアプリケーションで広く使用されているアーキテクチャ設計パターンであることがわかりましたが、たとえばコントローラー用の言語構造を持つ言語に出くわす必要があります。 デザインパターンを言語に統合するIMHOは、優れたオブジェクト指向デザインの重要性を強調できます。 それでは、なぜ最もよく使用されるデザインパターン(MVC、ファクトリ、ストラテジーなど)が言語構成要素に追加されないのですか? 質問が広すぎると思われる場合は、質問をPHPのみに制限できます。 編集: プロジェクトを開発するときにデザインパターンを使用する必要があることを意味するわけではありません。実際、私はそれが機能する限りシンプルに保つ方法論を推進しています。

3
音楽ソフトウェアを設計するための適切なプログラミング言語[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は自分の楽器のソフトウェアをリズミカルなものにしたいと思っています(メロディはありません)。これらのソフトウェアに必要なことは次のとおりです。 ユーザーが音楽を作れるようにする ユーザーが作成したものを再生する そのためには、その楽器の異なる音を録音し、各記号を適切な音と一致させる必要があります。 どのプログラミング言語がこの目的に適していますか?

7
不変の参照またはラベルのみを持つ言語の名前変数の良い代替手段は何ですか?
たとえば、関数型言語では、変数は単一の割り当てであり、値は割り当てられると不変です。そのため、バインドされていない状態とバインドされた状態の2つがあり、一度バインドされると変更できません。 そのようなものに最も適した数学用語や他のコンピューター科学用語はありますか?意味的に分散や可変性を意味しないもの。 termなど存在しない場合、およびそのような構造を持つ言語を設計している場合、これらに使用するのは単語変数以外です。 私はアイデアを投票するつもりはありません。そのようなことに対して受け入れられている業界(業界)の用語があるかどうかを把握しようとしています。

4
動的言語の開発
非常に単純な言語用にいくつかの手書きコンパイラを作成しましたが、今は単純化されたPythonやRubyに似た動的言語の開発に挑戦したいと考えています。しかし、コンパイラがどのように機能するかについて頭をかき回すのは簡単でした。プリミティブコンパイラは翻訳するだけです。しかし、言語が動的な場合、これを行うことはできません。実行時に情報を追跡し、より多くの作業を行うインタープリターまたはVMを作成する必要があります。 要するに、コンパイラがどのように機能するかを知っているが、インタープリターの作成に移行したいと考えているので、チェックアウトすべきリソースはありますか?動的言語用にいくつかのVMがありますが、自分でローリングしても問題ありません。これは私の個人的な経験のためだけです。 コンパイラーからインタープリターへの移行方法に関する情報を探しています。すでに言語Xのコンパイラーを作成しているが、今はインタープリターを作成する場合、何をする必要がありますか。また、プロセスを実行するリソースはありますか? コンパイラや仮想マシンの動作を網羅する幅広いリソースや抽象的なリソースは必要ありません。このテーマに関する教科書がたくさんあります。私がオンラインで見つけたすべてのリソースは、経験がないことを前提としているため、語彙分析または構文分析から始めるか、非常に抽象的です。動作するコンパイラはありますが、これをインタープリターに変換して、言語に動的機能を追加したいと考えています。 このプロセスでリソースを見つけることができませんでした。スコープが限定的すぎるか、理論的すぎずにインタープリターの「バックエンド」のリソースを見つけることができなかったため、ここに投稿しました。

3
scanfがscanfと呼ばれるのはなぜですか?(printfと同じ。)
Cプログラミング言語で、フォーマットされた入力を読み取る関数が「readf」ではなく「scanf」と呼ばれたのはなぜなのでしょうか。私はそれが以前の言語から派生したと思うので、その場合、なぜ以前の言語でそのように命名されたのですか?(再帰) また、なぜ「writef」ではなく「printf」なのでしょうか?C以外の言語で、「表示」ではなく「印刷」または「書き込み」を行う理由

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