既存のすべてのプログラミング言語の最高の機能を組み合わせて、ユニバーサルプログラミング言語に適合させてみませんか?
既存のすべてのプログラミング言語の最高の機能を組み合わせて、ユニバーサルプログラミング言語に適合させてみませんか?
回答:
同じ理由で、鶏肉を彫るためにスイスアーミーナイフを使用しないでください...
スイスアーミーナイフには、一般にブレードの他に、ドライバーや缶切りなどのさまざまなツールがあります。これらのアタッチメントは、ピボットポイントメカニズムを介してナイフのハンドル内に収納されています...
ナイフのデザインとその柔軟性により、世界的に認知されています...
なぜなら
プログラミングにあるのは、非常に大きな問題領域です。このドメインは非常に多くの方向に広がっています。
これが、組み込みフライトコントローラーがCで記述され、WebサイトがPHP、Java、Rails、.NETおよびその他のホストで記述されている理由です。
組み込みのフライトコントローラーには、動作する約128kのメモリがあり、その上にコードが未処理の例外を取得すると飛行機がクラッシュし、200人が死亡し、$ 1Bのチューニングを求めて訴えられ、エンジニアを全員に送らなければなりません世界中の空港で、1日1,000万ドルの顧客を失う地上の航空機を修理します。非常にタイトで、間違った動作をする可能性のある少数の可動部分を持つ言語で作業する必要があります。
私のWebアプリケーションでは、数GBのメモリを使用できますが、ネットワーク速度は制限されています(毎日程度は低いですが、これはおそらくWebの最大の制限です)。たくさんの機能を提供し、できるだけ速く送信できる出力を生成する言語を検討します。私のサイトがダウンしたかどうかはあまり気にしません。おそらくいくつかの売上(100ドル)を失い、爆撃したユースケースにパッチを当てる必要がありますが、大したことはありません。
Webサイトは15年以上にわたってCで記述されていません(誰もcgiスクリプトを実行していますか?)、そして私の知る限り、フライトコントローラーはC ++を調べ始めたばかりですが、それでも非常に制限された方法です。
ツールボックスがない場合、またはドライバーのビットが中空のハンドルにある小さなハンマーを1つだけ持っている場合は、同情します。
真剣に。自動車店に行く場合、メカニックは彼のツールチェストにたった1つのdo-it-allツールを持っていますか?彼(または彼女)は、さまざまな自動車修理タスクを実行するために特別に設計されたプロ級のツールを備えたプロです。
同様に、プロのソフトウェア開発者は、取引を行うための十分なツールセットを所有している必要があります。ツールボックスを開いて、フィリップスドライバーのみを表示する場合、自分をプロと見なすことはできません。
ボルトは、オープンエンドレンチ、ボックスエンドレンチ、ラチェットレンチ、またはモンキーレンチで回すことができます。ピンチのボルトを、スリップジョイントプライヤーで不器用に、軽度から重度の損傷で回すこともできます。しかし、スレッジハンマーでボルトを回すことは非常に困難です。
他の人への異なる種類の答え- 言語は「普遍的な」言語になる可能性があると実際に考えており、他の多くの言語の機能とパラダイムを可能にしますが、おそらくあなたが考えている厳密に設計された言語ではありません。
上記のbrettmjohnsonのアナロジーを使用するには、各プログラミング言語がボックス内(またはスイスアーミーナイフ)のツールであるという考えは、誰もが行っている仮定ですが、実際には欠陥のある仮定です。
プログラミング言語がツールボックスだった場合はどうなりますか?
つまり、言語の機能を必要に応じて追加および削除でき、必要なツールを備えた独自のツールボックスがある場合はどうでしょうか(ツールが異なる目的であっても)。
概念はすでに部分的に存在します。たとえば、Nemerleなどの言語では、言語に構文を追加できるため、「言語Xの最高の機能」を利用して、Nemerle(または独自の)に追加できる場合があります。これは、常に独自のマクロを作成することを必ずしも意味しません-各言語(またはパラダイム)は標準ライブラリのマクロ内で定義できます-のようにimport Haskell; import Prolog;
、2つの言語の一部であるかのように書き始めますあなたの言語?
質問は次のとおりです-異なる言語/パラダイムの機能をどのようにして相互に連携させるのですか?それに答えることはできませんが、.NetやJVMのようなフレームワークはいくつかの解決策を提供します-言語は、コンパイル方法が原因で少なくとも部分的に互換性があります。たとえば、C#で記述された任意のコードを使用して、F#から苦情なく使用できます。
現在のソリューションの「問題」は、これらの言語を一緒に使用するには、それらを別々のプロジェクトとして作成する必要があり、相互に参照できないことです。一方向の参照しか持てません。言語の障壁は、各プロジェクトが他のプロジェクトがアクセスする前に、すべてのファイルを個別に共通中間言語にコンパイルすることです。
その障壁を取り除くための足がかりは、異なるプロジェクト(C#やF#など)のコードを同じプロジェクト内でコンパイルできるようにすることです。理論的には、各ファイルを個別に(または部分型または循環参照がある場合はグループで)コンパイルし、既にコンパイルされた(CIL)オブジェクトにアクセスできる別の言語のファイルをコンパイルできます。ただし、これを機能させるにはコンパイルの順序を厳密に定義する必要がありますが、F#の場合はコンパイルの順序が既に必要です。
とにかく、「普遍的な言語になることは間違いありません」と言っているのではありません。私は、現在存在しているものよりもはるかに優れた言語間の相互運用性の可能性があることを示唆しています。現実には、言語とそれを使用するために必要なライブラリ、ツールなどを実装するための膨大な作業のために、すぐに大幅に改善される可能性はありません。
一部の言語の最高の機能は、他の言語の最高の機能と競合します。
たとえば、型認識リフレクションは本当に便利な機能ですが、緩やかに型付けされた言語ではあまり価値がありませんが、時には緩やかな型付けも本当の利点になります。
1つの言語内でも、すべての最高の機能を同時に使用できるとは限りません。それらは互いに競合するためです。
私は「一般化/専門化パラドックス」と呼んでいますが、これはおそらく別の名前を持ち、実際にはパラドックスではありません
プログラミング言語が一般化されるほど、何かを達成するために必要なコードが増えます。言語の専門性が高いほど、それで達成できることは少なくなります。
言語は人々の考え方を形作ります。これは自然言語にも当てはまります。子供が「1、2、多く」という数字の言語を1つだけ知っている場合、その子供の数学を教えることは...困難です。(申し訳ありませんが、私はリンクを持っていません)英語では、あたかもそれらが場所であるかのように異なる時間について話します-したがって、時間旅行の概念は想像することが可能です。他のいくつかの言語では、タイムトラベルの発想はスピーカーには決して発生しません。
これはプログラミング言語にも当てはまります。
したがって、単一のプログラミング言語がある場合、誰もがすべての計算タスクをまったく同じように考えるでしょう。したがって、私たちは代替案を模索することはなく、何かをするための最良の方法は未発見のままです。
普遍的な言語に最も近いものはCです。Cは、基礎となるハードウェアの概念(ハードウェアで実際に行われる方法)に非常に密接に対応し、すべての言語のプログラムはCに変換可能です(CFrontがアセンブラーでCコンパイラーを使用した方法を参照してください)タスク)Cの問題は、基本的に、上記の変換はCプログラマーの観点からは意味をなさないことです。
「ラムダ」はCでは常に可能でした。プロジェクト/ファイル全体に広がるコードを含む構文はオフになっているため、推奨されるソリューションではありませんでした。no-capture / upvalue / etcバージョンでは、関数を別の場所で定義し、関数にポインターを渡します。(qsort()を参照)キャプチャされた値でラムダを使用するには、記述する必要があるコードの量と複雑さが大幅に増加します-私が知っている限り、Cでこのプログラミング方法を使用するコードを実際に書いた人はいません。ラムダが言語の一部であり、基本的にどこでも使用される言語とは対照的。
CとC ++の主な違いは、あなたがの世話をするためにC ++を頼むことができる方法であるもの、あなたのため。しかし、それでは、1行のコードだけでは、実際にそれをどれだけ求めているかを知ることができなくなります。答えは次のようになります:(この他のすべてのコードに依存します)。
一部のプログラミング言語は特定のタスクに適していますが、世界中で現在使用されているほとんどのプログラムは、その言語でプログラムされた場合には意味がありません。つまり、そのプログラムを実装するためにその言語を使用できれば、それは与えられたものではありません。
普遍的な言語を持つことの技術的メリットの不可能性?それはまったくナンセンスです。あなたは可能性すべての基盤をカバーする普遍的な言語を持っています。問題はほとんど歴史的なものです。異なる言語が発明され、さまざまなことを行い、さまざまなコミュニティで使用されています。それらの多くが立ち往生。その設定(vi!emacs!wait、Java!C#、wait Microsoft、Open Sourceなどを意味するなど)と、歴史的な事故の一般的な埋め込みに追加してください...小さな土地の自然言語を見てくださいこのトピックがいかにクレイジーになるかを見るために、いくつかのヨーロッパ諸国のような大衆。一部の町には、彼らだけが話す小さな方言があり、独自の誇りと喜びがあります。国家とプログラミングコミュニティはそれほど違わず、プログラミングコミュニティもより合理的です。もしそうなら、私たちは皆エスペラント語を話し、ユニバーサルサムシンサムシンでプログラムします...
「すべての機能を組み合わせること」がより良い言語になると考えるのは間違いです。
肥大化した、複雑で、読めない混乱に陥る可能性が高くなります。
適切な言語設計には、選択とトレードオフが必要です。間違いなく、最高/最も革新的/最も成功した言語は、新しいものを追加するのではなく、何かを取り出してより良い代替手段を提供する言語です。
このトップで、ボブ・マーティンおじさん- 最後のプログラミング言語による素晴らしい講演があります。
goto
ます。しかし、私は答えの残りが好きです。Cが行う主なことは、メモリ内のすべてがどこにあり、何がいつどのレジスタにあるかを正確に気にせず、プログラムカウンタを隠します(座っている正確なアドレスの観点から、再び移動できます) gotoを使用して、ほぼアセンブリレベルの精度で)。
そのような言語を作成すると、それはさらに別の新しい言語になるからです。大規模なファンを獲得するかもしれませんが、他のすべての言語は引き続き存在します。
それ以来多くの新しい言語が発明されたにもかかわらず、Cはまだ存在しています。
pythonはそのような普遍的な言語であると言えますが、それからルビーもあります。
多くの言語が存在する理由は、単に多くのプログラマーがいて、その一部は新しい言語を作成したいからです。
誰もが同意する単一の普遍的な言語がない理由は、工芸としてのプログラミングは、すべての決定を下す機関によって決定されないからです。誰でも自由にやりたいことができます。
それはいいことだ。
これまでに書かれたすべてのことから、多くの新しい理論的根拠を追加することは困難ですが、いくつかを紹介します。
進化:導入され、変異し、資源を獲得するのに最も適した競争と、独自のものと呼ばれるニッチを獲得するのは、生物系だけではありません。競争は良く、物事を前進させます。
成熟度:おそらく1世紀未満でコンピューター言語を作成してきました。私たちはまだすべての質問すら知らないので、まだ答えを得ることができません。
別個の起源:これに対する正しい言葉は定かではありませんが、世界には多くの地理的地域で始まった多くの書記体系があります。粘土板への彫刻の要求によって部分的に決定された楔形について考えてください。サンスクリット語、ギリシャ語、ヘブライ語、ローマ語、アラビア語のアルファベットについて考えてください。象形文字、多くの東アジア諸国で共有されている6000以上の記号を使用した中国の美しい書き方。キリル文字、カタカナ、ひりがななど、音声ベースのより現代的な混合アルファベットを考えてください。私は言語学者ではないので、不正確さを厳しく批判しないでください。しかし、世界中の文化が何かを必要とするとき、彼らはそれを作成し、それを必要から自分のものにします。コンピュータ言語は、世界中で多くのコミュニケーションが行われたときに登場しました。ImperialやMetricシステムなど、強力なアイデアリーダーシップを持つ場所から来ました。しかし、プログラミング言語は多くの異なる文化(一部は企業文化)に役立つため、それらを作った人々を反映しています。コンピューター言語には、その設計と使用を形作った文化遺産があります。OSカーネルカルチャでは、CおよびC ++は、ネイティブコード生成、ハードウェアアブストラクションレイヤーを作成するためのハードウェアとの緊密な/効率的な結合、およびかなりのインストールベースを可能にするため、Java(またはその逆)ですぐに非推奨になりそうにありません。
設計の設計:プログラミング言語は、さまざまな組織パラダイムを使用して作成されます。COBOLとAdaは、多くの階層を持つDODの一部である委員会からのものでした。私がC、C ++、Java、そしておそらく他の多くのものを正しく思い出せば、1人または少数のデザイナーから来ました。Fred Brooksは、委員会の結果と彼の論文Design of Design(http://www.youtube.com/watch?v=pC-DlX-PaF4)の先見の明に基づいたアプローチを比較します。今日ユニバーサルプログラミング言語を定義するダヴィンチまたは委員会のいずれかを選択するために座った場合、どの方法で誰または何を設計する必要があるかがわかりますか?
たぶん、これらすべてについて少し異なる傾向があります:
言語とは何ですか?途方もなく簡単にするために、それは語彙、構文、およびセマンティクスです。
プログラミング言語で最初に行うことは何ですか?
物事-クラス、変数、メソッド-を定義し、語彙とセマンティクスを拡張します。
どうして?だから今、あなたはあなたが前に言うことができなかったその中で物事を言うことができます。
好むと好まざるとにかかわらず、新しい専用言語を作成しました。
私見、汎用言語で探すべきことは、それが特別な目的の言語を簡単に作成できるようにするかどうかです。
swiss-army-knifeの議論(点がある- ドメイン固有の言語よりも優れた広域スペクトル言語を設計するのは難しい)を除けば、それはそのような言語が両方ではないという意味ではない可能な良いアイデア)、「最高の機能を組み合わせる」には問題があります:
要するに、言語設計はそれよりも難しく複雑です。ただし、Scalaをご覧ください。
Visual Batchは、カスタマイズ可能なプログラミング言語の試みです。以下のリンクは、このプログラミングインターフェイスをユニバーサルプログラミング言語のニーズに合わせて調整する方法を示しています。
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
ユニバーサルプログラミング言語があります。これは「機械語」と呼ばれ、他のコンピューター言語のすべては最終的に機械語として実行されます。
どのように見えますか?0〜9およびAFの文字列。
しかし、それを使用するのは雌犬です。そこで、アランは機械語に翻訳できる言語を発明し、アランがやりたいことにより適しています。ビルは、ビルがやりたいことのために異なる言語を発明します。やがてCobolとFortran、LispとJavaが手に入ります。それらはすべて、機械語の単純化されたバージョンであり、特定の種類のプログラムを作成するのは簡単ですが、他の種類のプログラムを作成するのは困難または不可能です。1つは会計に適し、もう1つはスペースシャトルの制御に適しています。
ここでのほとんどの回答は、各問題に最適なツールを使用することに焦点を当てています。これが十分な理由だとは思わない。
大企業に目を向けると、特定のプロジェクトに優れた言語がある場合でも、通常、企業は1つ(または少数)の言語とテクノロジを使用する傾向があります。
これは、標準化の改善、サポートの容易化、コード共有などから生じる利点が(ほとんどの場合)特定の言語の付加価値よりも大きいためです。
「彫像を鉛筆で彫らないから」という答えはすべて、ポイントが抜けていると思います。
TRULYは、新しいプロジェクトの前に言語を選択します。
真実は、少数のプログラミング言語だけが必要であり、プログラミングの世界はその方法のほうが良いでしょう。人々は、例えばpython / ruby / perl / younameitに散らばるのではなく、スクリプト言語をより良くすることに集中するでしょう。
C#はWindows向けにプログラムされています(さて、Monoがありますが、Monoアプリで毎日C#を実行している人はいますか?)、ユーザーはWindows7 / 8を購入し、Microsoftに利益をもたらします。
他の企業も同じことをし、オープンソースの方がよく知っていて、天才の方も知っています...そして、似たような言語がたくさんありました。それは人間の自己中心的な性質です。
この質問に答えるには、経済学に目を向けなければなりません。言語を1つだけにすることでビジネスのお金を節約できれば、それが可能になります。彼らはそれを標準化し、誰もがそれを使用することを要求します。他の言語は、ほこりっぽいアカデミックな建物や野生の愛好家の地下室で苦労します。これは起こらなかったので、それらは普遍的なプログラミング言語で利益をもたらすインセンティブではないはずです。さもなければ、今では自然に進化しているでしょう。