言語へのプログラミングとRubyでのCコードの作成


10

コードコンプリート状態あなたが遠かったコードなければならないことへのコードとは対照的に、言語、それは。つまり、彼らは

プログラミングの考え方を、言語によって自動的にサポートされる概念だけに限定しないでください。最高のプログラマーは、自分が何をしたいかを考え、それから自由に使えるプログラミングツールで目的を達成する方法を評価します。(34.4章)

これは、手元にある言語の特定の長所と短所に関係なく、すべての言語で1つのプログラミングスタイルを使用することにつながりませんか?

または、質問をより答えやすい形式にするには:

問題を可能な限りきちんと言語の詳細にエンコードしようとするべきか、それともネイティブに存在しない厄介な構成要素を実装する必要があるとしても、最もエレガントなソリューション全体を検索するべきかを提案しますか?自分の言語で?


5
+1良い質問です。この時点で、6種類以上の異なる言語でPerlで記述できます。
ダン・レイ

@ダンレイ-奇妙な!私はいつもPerlでCを書いています。
Jamesアンダーソン、

回答:


7

さらに良い方法があります。哀れな固定プログラミング言語をまったく忘れましょう。関連する問題ドメインの用語そのものから導き出された、作成したばかりの言語で問題をエンコードし、可能な限り自然にエンコードしてから、この新しいプログラミング言語を実装するか、コードを制限して、既存の言語。

このアプローチは言語指向プログラミングと呼ばれますドメイン固有の言語を効率的に実装する手法は数多くありますが、Rubyコミュニティにとっては特にホットなトピックです。


1
Haskellコミュニティはドメイン固有の言語も採用しており、Haskellプログラミング言語はそれらの実装に特に適しています。
tdammers 2012

LuaやTklのような埋め込み言語に基づいたオーダーメイドのスクリプトシステムの実装は、DSLの作成と見なされますか?もしそうなら、例えばルアの欠陥にどのように対処しますか?
バスティブ

@Paperflyer、場合によってはLua(特にMetaluaの場合)のような言語の上に言語を実装することは理にかなっていますが、ほとんどの典型的なDSLに適切なコンパイラを書く方が簡単です。
SK-logic

@tdammers、はい、HaskellとScalaはすべてDSLについてです。しかし、私はフォースの暗い側から来ました。私の好ましいアプローチはメタプログラミングです。私はアドホックインタープリターはほとんど常にコンパイラーに劣ると信じています。
SK-logic

2
@tdammers、高次関数の上に実装されたDSLは、実際にはアドホックインタープリターです。たとえば、Lispを拡張するのと同じ方法でHaskell構文を拡張することはできません。テンプレートHaskellでも。それは、DSLを実装するまったく異なる(そして私が言うには制限された方法)方法です。それは多くの場合問題ありませんが、本当に複雑なものについては、完全に読めない実装につながります。一方、多段階のメタプログラミングは、DSLがどれほど大きくて異質であっても、取るに足らないことです。
SK-logic

2

私は正しい答えを信じています、そして本が意図したものは:

自分の言語の詳細を使用して、自分の問題をできるだけきれいにエンコードするようにすべきです

言語にプログラミングすることによって、私は常にそれが利点につながる言語の通常のスタイル以外のテクニックを使用することだと思いました。これは、すべての言語で1つのスタイルで書くこととの主な違いです。

たとえば、Haskellを学ぶことで、高次関数を使用するスキルが大幅に向上しました。ここで、c#でプログラミングするときは、forループを記述するよりもクリーンなコードにつながるため、頻繁にIEnumerableなどのさまざまな方法を使用Selectします。またFunc<int, int>、私のHaskellの経験から、パスと関数を使用する傾向があります(つまり)。このため、継承の使用は減り、ほとんどの場合、結果はより単純なコードになります。

ただし、モナドや代数的データ型などの概念はC#では使用しません。これはどちらもc#で明確に表現できず、多くのあいまいさと引き換えにほとんどメリットがないためです。

だから私は言語のツールを使って、自分が持っているスキルを最も効果的に使うようにしています。それは言語へのプログラミングだと思います。


0

問題を可能な限りきちんと言語の詳細にエンコードしようとするべきか、それともネイティブに存在しない厄介な構成要素を実装する必要があるとしても、最もエレガントなソリューション全体を検索するべきかを提案しますか?自分の言語で?

ポイントは、優れたプログラマーには言語がないということです。この本の引用は「自由に使えるプログラミングツール」について語っています。つまり、perlとJavaを知っている場合は、perlを使用して文字列をすばやく操作する必要があります。プログラミング言語は私たちを制限するボックスではありませんが、問題を解決するために使用するツールです。これが(imo)Code Completeが達成していることです。プログラミング言語/環境ボックスでコーディングしないでください。あなた、あなたの問題、そしてあなたのソリューションのために、最良のソリューションを最良のプログラミング言語/環境に入れてください。

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