なぜそんなに多くのプログラミング言語があるのですか?なぜ新しい言語がまだ作成されているのですか?[閉まっている]


51

なぜそんなに多くのプログラミング言語があるのですか?

そして、他の言語が既に存在するにもかかわらず、誰かがプログラミング言語を作成するように促すのはなぜですか?


このトピックに関する楽しまビデオはアンクルボブ・マーティン(で「最後のプログラミング言語」であるskillsmatter.com/podcast/agile-testing/bobs-last-language
mikera

プログラマはツールが好きだからです。
ヘイレム



これを正当化することは困難です。各言語には物語があると思います。私の知る限り、ほとんどの言語はメーカーにあまりメリットがありませんでした。ほとんどの言語は同じ概念を中心に展開され、実際の問題を解決したり、良い環境を提供したりすることはめったにありません。私は彼らがそれを作成する頃には、ボード全体とすべてのものにうんざりしているように感じ、おそらく彼らがどのように彼らの人生を無駄にしているのかを見ます.... kshまたはJavaScriptを考えてください.......恐ろしくて有害なツール。
NoChance

回答:


36

プログラミング言語は進化する

多くの場合、新しいプログラミング言語は既存の言語から学習し、新しい方法で機能を追加、削除、結合します。オブジェクト指向機能のようないくつかの異なるパラダイムがあり、多くの現代言語はそれら両方の機能を組み合わせようとします。

マルチコアCPUの増加など、解決する必要がある新しい問題もあります。最も一般的な解決策はスレッドでしたが、一部のプログラミング言語では、アクターモデルなどの異なる方法で同時実行の問題を解決しようとします。Erlang-Concurrent Worldのソフトウェアをご覧ください


10
Erlangの興味深い点は、それがアクターモデルの「クリーンルームの再発明」であることです。アームストロングと友人がアーランを開発したとき、彼らは俳優モデルに関するヒューイットらの仕事について知りませんでした!
フランク・シェラー

@フランク:それは面白いです。知らなかった、ありがとう。
ジョナス

2
進化のために+1。同様の質問は、「なぜ動物や植物の種類が非常に多いのですか?なぜ新しいものがまだ登場するのですか?」
ギャン別名ゲイリー

1
@GaryBuynは、その視点を購読している場合にのみ「進化のための+1」です。多くの人にとって、動物の例えはちょっと遠すぎます。
ダークナイト

@GaryBuyn、オム...それは、「ハムレット」が「ハムスター」に相当するのとかなりています。
Pacerier

22

それはサイクルです。あなたは新しい言語を始め、あなたはあなたの前任者からの悪い構文と悪い選択のすべてから逃げることができます。バージョン1では、その荷物がないため、言語の見栄えがよく、仕事が完了します。それから、新しいバージョンでは、うまくいかないかもしれない機能の実験を開始するか、構文が少し厄介になる他の新しい言語の機能を取り入れます。見よ、さらにいくつかのバージョンの後、あなたはあなたの言語があなたが置き換えたものと同じくらい複雑であり、愚かな構文の問題とレガシーの手荷物であることに気付く。そして突然、新しい言語を作成すれば、それをすべて修正できることに気づきます...


2
これは間違いなくライブラリ、フレームワーク、ソフトウェアに当てはまりますが、私は個人的にこれが適用される言語を知りません。例はありますか?
back2dos

16
まあ、C ++とJavaの両方が、少なくとも部分的にはC ++の複雑さに対処するために導入されたと思います。そして今、それらの言語の両方を後でいくつかのバージョンで見ると、それらの構文と機能セットは十分に複雑になり、人々が「丘の上」であると話し始めています。私は何も証明することはできませんが、私はそれを受け入れます。:-)
RationalGeek

2
良い点、私は別の事実はC#で遊んでいると思う-それは慈善の理由のために存在していない商品だと市場での受け入れのために/あなたの顧客を維持する製品がなど新しいリリースのための「改善」する必要がある
GF

1
これは本当です。市場からより多くのお金を得るために新機能を追加する意欲は確かに無視できません。しかし、それは両刃の剣です。この正確な理由から、商業的に支援された製品から新しい機能が期待できます。しかし、オープンソース製品からは、ボランティアの軍隊が興味を持ち続け、猫を群がるスキルのある誰かがいる限り、新しい機能を得ることができます。
RationalGeek

C#には多くの機能がありますが、C ++よりもクリーンな言語です。LINQなどの新しい追加機能を使用すると、C ++では簡単にできないことをきれいに実行できます。複雑さの保存には2種類ある可能性が高いと思います-1つは問題に固有の複雑さであり、もう1つはプログラムから冗長な複雑さの1種類を削除すると、要件はより複雑になります-データのような複雑さ、利用可能な「スペース」を埋めるために展開します。
Steve314

11

同じ理由で、ハンマー、ドライバー、ハンドソー、バンドソー、削岩機、クローバー、その他のツールがあります。すべての言語がすべてのタスクに適しているわけではありません。一部の言語は特定の問題領域を対象としています:Rは統計分析に特に優れており、Cはオペレーティングシステムカーネルの作成に特に優れており、Haskellは数学重視または財務計算に特に優れています。Erlangは並行プログラミングに特に優れています。

また、シャツの色が異なるのと同じ理由で、ある言語の「スタイル」が別の言語よりも好きな人もいます。

そして、もちろん、多くのプログラマーは、新しい言語を発明すること、何が起こるかを見るため、あるいはおそらく言語についてある程度の知識があり、かゆみを掻きたい、またはいくつかのアイデアを試したいために楽しいと感じています。


これらのすべての構築ツールがあるだけでなく、似ているように見えてもさまざまな種類のハンマーやハンマーがありますが、特定の設計要素があり、さまざまな仕事やユーザーに適しています。
バリーブラウン

+1問題のあるドメインへの適合性。一般にツールを研究する学者は、非常に一般的なツールは特定のタスクのための特定のツールよりも強力ではないと言います。固定サイズのスパナ対モンキースパナを考えてみて
MarkJ

8

彼らはすべて吸うからです(いずれにせよ)。

現在、私たちは自然の問題を記述するために約5000の言語を作成しましたが、それらのどれもプログラムを書くことはできません(例は「英語」です)。

誰かがあなたが自然言語で文章で表現できることを表現できるプログラミング言語を作成する方法を見つけるまで、彼らは来続けます。


15
それでも、彼らは来続けます。死んだ言語だけが石で書かれています。生きている言語が常に変化しているのには理由があります。
R.マルティーニョフェルナンデス

1
問題を表現する自然言語は数学であると主張する人もいます。これにより、なぜ純粋なラムダ計算を使用するのではなく、機能言語に構文糖を追加し続けるのかという疑問が生じます。私たちが日常的に解決しなければならない問題は、しばしば英語でも数学でも簡単に表現できないと思います。
Steve314

5
同意した。「おなかがすいている」を純粋な数学で表現するのは難しい。
アーロンディグラ

1
@AaronDigulla:空腹= sum(belly / food)確かに:)
gbjbaanb

@AaronDigullaは良い例です。多くの場合、計算を表現したいと思います。だから私たちは次のような与えられたシナリオを取る:私は空腹だ、今食べる->いい、今は食べない->飢えている。コンテキストをネゴシエートまたは拡張できるシステムを構築するには、それがAIの目標だと思います。通常のプログラミング言語は、人々がすべきことを伝えることのみを表現し、通常は一般的というよりもむしろ具体的です。ただし、ほとんどの問題はそれ自体が特定のものであるため、ここで問題を確認できます。
アンドレアスシャイナート

6

明らかに、新しい言語を作成するための1つの重要な動機は、既存の言語よりも優れた何かを達成することです。そして、常に改善の余地があるため、常に新しい言語が存在します。

もう一つの大きな理由は商業的利益です。たとえばマイクロソフトは、企業や開発者がプラットフォームを好むように、あらゆるニーズに対応できる言語を提供できることが重要だと考えています。


6

レガシーコード。新しい言語を開始する場合、古い言語を変更するときにすべての苦情を聞いたり検討したりする必要はありません。新しい実装の方が優れていると全員が同意したとしても、古いコードを壊すことはできません。そして、古いコードがたくさんあります。


3
レガシーコードを回避するために設計されている言語の文書化された事例はありますか?この主張はほとんどありそうにない。新たに始めたい場合もあります(.netが思い浮かぶ)が、レガシーコードを避けるのではなく、将来のコードをより有効にすることが重要です。
ブライアンオークリー

これが正しいとは思わない。(通常)既存の言語のオープンソース実装をフォークすることが可能です。
代替案

@BryanOakley-もともと.NETはVB6との後方互換性を保つことを目的としていましたが、彼らはそれが難しすぎる問題であると判断しました。.NETには、ベースとなったレガシーWRT Java / J ++がまだたくさんありました。Dはレガシーコードに対して設計された言語の例だと思います。
gbjbaanb

4

たとえ実際に使用しなくても新しい言語を作成するのは楽しいからです

難解なプログラミング言語(エソランと略されることもあります)は、概念実証または冗談として、コンピュータープログラミング言語の設計の境界をテストするために設計されたプログラミング言語です。


1
Wikipediaの記事の脚注まで取得していない人のために、難解な言語のwikiには多くの楽しみである:esoteric.voxelperfect.net/wiki/Main_Page
デヴィッド・ウィンスロー

それが何をするのか、そして尋ねられた質問に答えるのになぜそれをお勧めするのか、もっと説明してもらえませんか Stack Exchange では「リンクのみの回答」は歓迎されません
-gnat

1
@gnat元のテキストはリンクのみの回答ではなく、リンクがなくても短いが完全に有効な回答であると正直に思います。しかし、リンクがフレーバーを追加することを考えると、そこから短い引用を含めました。
jk。

3

プログラミング言語の作成はかなり楽しいです。以前の要件に限定されないため、純粋な創造的な仕事に近い。そもそもコンパイラーを作成している場合は、常にCにコンパイルし、適切なパフォーマンスのためにCコードをコンパイルできるため、これ以上実装することはそれほど難しくありません。

もちろん、私たちのほとんどは、私たちが考えているよりも良いアイデアが少ないので、彼らはしばしば失望したり、元のデザイナー以外の人に愛されたりしません。

知っているプログラミング言語について考えてください。嫌いなものを簡単に思いつくことができますよね?おそらく、それらをどのように修正できるかというアイデアがあります。コンパイラーの構築について多くのことを知っている(そして多くの人が知っている)ことを前提に、もう少し弾みをつけて、独自の設計や実装を開始することもできます。


2

クイックショートアンサー

車輪の再発明...現在の傾向とは...

退屈な長い答え

多くの人々は、「古いプログラマーのための別の同様の新しい言語」が「新しいプログラマーのための明白な新しい言語」であることを忘れています。

それはどういう意味ですか?

「数年」のプログラマーにとって、JavaまたはC#は既存のCobol(OO /手続き型)Basic、C / C ++に追加のプログラミング言語であり、「新しい」プログラマーにとってはJavaまたはC#は新しい言語ですが、Cobol、 (OO /手続き型)基本的なC / C ++は存在しないため、車輪の再発明は一般的なものになります...

そして、技術に新しいトレンドがある場合、人々はそのトレンドに基づいて、ウェブ用のecmascript / javascriptや関数型プログラミングなどの新しいプログラミング言語を作成するかもしれません...

乾杯。


車輪の再発明の側面を指摘するための+1。多くの場合、マーケティング上の理由で行われます。十分な規模の企業や組織には、独自のプログラミング言語が必要です。
ジョルジオ

1

新しいプログラミング言語は、主に新しいプログラミングパラダイムがあるため、またはハードウェアの進歩により、マルチタスクなどの新しいハードウェア機能を活用するために新しい言語を作成するため、さまざまな理由で構築されています。

私の場合、特別な理由から、通常は小さなコンパイラー(新しいプログラミング言語を使用)を作成します。ゲームをたくさん作って、ゲーム開発専用のプログラミング言語を使用すると、コードのサイズが小さくなり、開発期間が短縮されると考えている場合は、ビルドします。そして最後に、他の汎用プログラミングにも使用できることがわかりました。

プログラミング言語を作成するほとんどの人は、特定の目的を念頭に置いていると思います。最初から一般的な目的のために作成する人もいます。しかし、ほとんどはそうではありません。

ちなみに、プログラミング言語は多すぎると思いますが、何百もの新しい言語が常に出てくるでしょう。面白くない、ニッチな目的、学校のプロジェクト、その他何百もの理由があります。遅かれ早かれ、新しいものが普及するでしょう。決して終わらない。


0

同じ理由で、非常に多くの<whatever>があり、新しい<whatever>を作成し続けます

たとえば、多数のPHP MVCフレームワークがありますが、特定のニーズを満たすため、他のチームに依存するのを避けるため、または単により良いものを作成するために、常に新しいフレームワークを作成します。基本的にすべてのタイプのツールまたはアプリケーションに同じことが当てはまります。

それは非常に良いことで、私の意見では誰にとってもウィンウィンです。


NIH症候群=一般にIT業界にはまったく役立ちません。
gbjbaanb

0

大学は多くのプログラミング言語に貢献しており、エリクソン(アーラン=エリクソン言語)、ベルラボ(BおよびC言語)、Google(数か月前のGo言語)などの大企業も貢献しています。大学の研究の一部として書かれたものの多くはあまり使用されていません。ただし、いくつかの注目すべき例外があります。独自の言語/コンパイラを書くことは、CS理論または関連する分野を研究している人々の博士論文にとって良いトピックになると思います。Pythonは、単一のアイデアを中心にさまざまなプログラマーが協力してオンラインで作業することから生まれた最初の言語の1つであると思います。


python-history.blogspot.com/2009/01/...は、詳細にはPythonの誕生を記述する
アンディデント

0

いくつかの理由がありますが、そのほとんどは、存在するものがいくつかの問題を簡単に解決できないと人々が考えるためです。いくつかはただの楽しみのためまたは学術的な興味のためです。

完璧な言語をどのように設計するかという問題はまだ解決されていない(そして決して解決されないかもしれない)という確固たる議論があると思います。人々が素晴らしい言語を作るための新しいアイデアを持っている限り、人々は挑戦し続けます。それらの試みのいくつかはErlangのようなクールな新しいスペースをマップし、いくつかはフロップしますが、フロップから何かが学ばれる限り、それでも問題ありません。


-1

前述のように、言語は特定の特定のタスクをターゲットにしようとするため、新しい言語は新しい領域をターゲットにする可能性があります。これらの言語は、現在公開されている他の言語の機能を利用できます。

新しい言語のもう1つの理由は、さまざまなタスクを組み込み、さまざまなニーズに最適な言語にしようとしていることです。これらの言語の一部は、必要に関係なく、常に使用する言語をすべて網羅しようとしています。


-1

プログラミング言語の授業で、ほとんどの言語がwereみを掻き立てるために発明されたことを学びました。ほとんどの言語は、アルゴリズムのセットをより適切に表現できるように考案されました。たとえば、再帰アルゴリズムに表現力豊かな空間を与えるために、関数型言語が発明されました。

なぜこんなに多くの言語があるのか​​という質問は、なぜC ++ 0xなのかを尋ねるようなものですか?:)

さらに、あなたが知っている言語が多ければ多いほど、あなたはより表現力豊かになることができます-これはプログラミング言語と自然言語の両方に当てはまります!

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