いくつかの一般的なプログラミング言語がCの影響を受けるのはなぜですか?[閉まっている]


23

TIOBEインデックスによると、プログラミング言語のトップ10は、Cの影響を強く受けているようです。

1. Java

この言語は、その構文の多くをCおよびC ++から派生していますが、オブジェクトモデルが単純であり、低レベルの機能が少なくなっています。- wikipedia.org

2. C

Cは史上最も広く使用されているプログラミング言語の1つであり、Cコンパイラが存在しないコンピューターアーキテクチャはほとんどありません。- wikipedia.org

3. C#

.NET Frameworkの開発中、クラスライブラリはもともとSimple Managed C(SMC)と呼ばれるマネージコードコンパイラシステムを使用して作成されました。1999年1月、Anders Hejlsbergは、「Cのようなオブジェクト指向言語」を意味するCoolと呼ばれる新しい言語を構築するためにチームを結成しました。- wikipedia.org

4. C ++

Bjarne Stroustrupによって1979年にBell LabsでC言語の拡張として開発されました。- wikipedia.org

5. Objective-C

Objective-Cは、Cプログラミング言語にSmalltalkスタイルのメッセージングを追加する、反射型のオブジェクト指向プログラミング言語です。- wikipedia.org

6. PHP

彼はこれらのスクリプトをCプログラミング言語のCommon Gateway Interface(CGI)バイナリとして書き直し、Webフォームと連携してデータベースと通信する機能を追加し、この実装を「パーソナルホームページ/フォームインタープリター」またはPHP / FIと呼びました。- wikipedia.org

8. Python

Pythonは1980年代後半に考案され、1989年12月に、オランダのCWIのGuido van Rossumによって、例外処理とAmoebaオペレーティングシステムとのインターフェイスが可能なABCプログラミング言語(SETLに触発された)の後継としてその実装が開始されました。- wikipedia.org

ABC(プログラミング言語)その設計者は、ABCプログラムは通常、同等のPascalまたはCプログラムの約4分の1のサイズで、より読みやすいと主張しています。- wikipedia.org

9. Perl

Perlは、C、シェルスクリプト(sh)、AWK、sedなどの他のプログラミング言語から機能を借用しています。- wikipedia.org

10. JavaScript

JavaScriptはCの構文に影響される構文を使用します-wikipedia.org

それらのほとんどは、Cから構文を借用しているようです。そして/または、少なくとも最初は、他のいくつかの方法で大きな影響を受けています。どうして?


15
cのような構文を持つことは、cに基づいていることと同じではありません。
-Oded

15
さらに、TIOBEはジャンクインデックスです。
DeadMG

3
むしろ、Cに基づいたプログラミング言語の方が人気がある理由を尋ねることはできますか
マノジR

3
@YannisRizos質問の素晴らしい回収!それは今では本当に素晴らしい質問です。
maple_shaft

16
CはALGOLの子孫であり、ALGOLは、アブラハムがキリスト教徒、ユダヤ人、およびイスラム教徒にとって何であるかをブロックスコープの命令型の研究に使用するためです。
インゴ

回答:


40

1970年代のUNIXの台頭により、その標準システムプログラミング言語Cはすぐに にプログラミングの世界の共通語。かなり長い間、Cはすべてのプログラマーにとって実質的に必須でした。このように、Cが何らかの形でその後に続くほとんどすべてのプログラミング言語に影響を与えているという事実は、次の2つの理由でほとんど驚くことではありません。

  • 新しい言語を設計するとき、可能な場合は、一般的な知識を想定できる一般的な既存の言語に基づいて構文を作成することは理にかなっています。
  • 学習曲線が浅い場合、新しい言語は成功する可能性が高く、既知の言語に似た構文は一般的に学習しやすいです(見かけの類似性にもかかわらず根本的に異なる動作をしない限り)。そのため、Cから構文を借用する言語は、一般的に、そうでない言語よりも速くトラクションを獲得します。

しかし、他の言語が存在し、それらはまだあります、それらのいくつかはCよりも先行しています-LISPファミリー(CL、ClojureおよびSchemeが最も人気のある現代方言です)、MLファミリー(いくつかの現代方言を含む)、全体の軍隊がありますBASIC方言(VB.NETとVBAは最新の実装です)、Pascalとその親類(Delphiが最もよく知られているもの)、および他の多くの言語の影響を受けていくつかの物を発明した多くの 'oddball'言語があります。例には、Go、Python、Lua、Haskell(およびその前身のMiranda)、Prolog、Erlangが含まれます。これらの言語(Pythonを除く)のどれも上位10位にはありませんが、多くの言語には安定したユーザーベースと活発なコミュニティがあります。彼らは確かに消えていない。

また、これらの言語でのCの影響量は、ほぼ100%C互換の言語であるC ++およびObjective-CからPython(意図的にCの構文機能の多くを放棄する)まで大きく異なることに注意する必要があります。そして、それは構文に過ぎません:セマンティクスの観点からすると、そのリストにあるほとんどの言語はCとあまり共通点がありません。 、非常に異なっています。たとえば、JavaScriptは、Schemeから強いセマンティックの影響を受けますが、その構文はJavaに似ているように設計されています(Javaは、そのセマンティクスではなく、Cに基づいています)。その他の違い(C ++とObjective-Cは例外で、Cとの下位互換性がほとんどあります)には、エラー処理、スコープルール、#include)、およびこれらの言語の多くが「仮想化」されているという事実、つまり、インタープリター、JITコンパイラー、または仮想マシンで実行されます。

ところで、PythonはCの影響をある程度持っていますが、確かにCに「基づいている」わけではありません。構文とセマンティクスの両方がCとは根本的に異なり、これは設計によるものです。Pythonは、他の選択肢が同等に「良い」(「Zen of Python」のように-タイプimport this -Pythonインタープリターを入力します)。

プログラミングの未来に関しては; 予測は異なります。Cの影響はなくなりませんが、ハードウェアの最近の開発(マルチコアマシンが一般的になり、強力なGPUになり、CPUが一般的なパフォーマンスボトルネックにならない、高速で信頼性の高いネットワーク接続など)は、プログラミングに対する根本的に異なるアプローチを必要とします一般に。Haskellのような言語は、典型的な問題のほとんどを除去し、分散、同時、および並列処理に対してより抽象的で構造化されたアプローチを提供する機能を備えていますが、 (純度はこの文脈で重要な概念です)。新しいプログラミング言語(C#やDなど)には、そのようなイディオムをサポートする多くの機能が既に含まれています。いかなる場合でも、


いい答えですが、「CPUが一般的なパフォーマンスのボトルネックになるのをやめますか?」私の経験では、パフォーマンスの問題はたくさんあります-CPU、IO、あなたはそれに名前を付けます。そうでない場合、プロファイラーはあまり効果的ではありませんが、必要ありません。
マイクダンラベイ

6
@MikeDunlavey:通常、私が遭遇するボトルネックは、I / O、ネットワーク、CPUキャッシュパフォーマンス、バススループット、および(非効率的な)プロセス間通信が原因です。昔、CPUはほぼ必然的にボトルネックでした。これはもはや真実ではありません。
tdammers

1

これは、英語がアメリカで主要な言語である理由を尋ねるのとよく似ています。なぜスペイン語やフランス語ではないのですか?彼らはイギリスの植民地よりも米国の領土を支配していた。なぜオランダ人ではないのですか?最初の米国の首都は、オランダの旧植民地にありました。これに対する「答え」があるのか​​どうかはわかりません。

ただし、「Computer Languages History」のタイムライン(http://www.levenez.com/lang/)には、可能性のあるすべての答えが記載されています。


6
1600年から1880年までのイギリスはおおよそ世界の主要な産業および金融の大国であり、1880年から現在までは米国が続いていたからです(<-議論の余地あり)。それは国際ビジネスの言語になり、世界中で20億人以上の人々が流spokeに話しています。
それと

6
@maple_shaft-「誰もスペイン語を話したくない」?!...いくつの国で話されているか知っていますか?en.wikipedia.org/wiki/Spanish_language
ルーク

12
@ S.Lott:大英帝国が史上最大の帝国であり、世界の表面の25%を占めていた部分を意味しますか?そのような「強力ではない」?
DeadMG

3
@DeadMG:私は世界について話しているのではありません。フランスについては、イギリス人が海岸沿いの小さな地域に裾上げした1700年代のアメリカについて話しています。私はこの劇場でのみイギリスが軍事的関与を失うことについて話している。フランス人は彼がアメリカになったもののほとんどを明らかに支配していた。まだ。アメリカは英語を話すようになりました。フランス語ではありません。同じ分析がCにも当てはまります。これは複雑な歴史であり、多くの影響要因があります。些細な、簡単な答えはありません。
S.Lott

4
@ S.Lottフランス人はすべての出会いに勝ったわけではありません。北米を見るだけで、彼らは過半数を獲得しました。しかし、1559/60の間にNAで行われた5つの主要な戦闘のうち4つを失うと、劇場は圧倒的な敗北となりました。タイコンデロガ砦とナイアガラ砦の攻略、アブラハムの平原、レスティグーチェの戦いはすべてイギリスの勝利でした。供給/補強を遮断することにより、後者はサント=フォイでのフランスの勝利を無意味にしました。
ダン・ニーリー

0

新しいプログラミング言語を作成する場合、一般的な既存の言語と同様の構文を使用すると、新しいユーザーにとって学習が容易になります。特に、多くの概念が言語間で類似している場合。

また、Cスタイルの構文は比較的読みやすいと思います。Pascalと比較すると、コードのブロックに記号「{」と「}」を使用すると、視覚的に識別子に非常に似ている「begin」と「end」よりも読みやすくなります。Pythonはさらに読みやすいですが、構文に空白を含めると、編集に関する新しい問題が発生します。別の例:LispとJavaScriptはいくつかのアイデアを共有しますが、同じものがCスタイルの構文で記述されている場合、それはあまりあいまいではありません。

誰もが自分の好きな言語を持っているため、多くの人が2番目の段落に反対すると確信していますが、Cスタイルの構文の人気は部分的に歴史的な偶然であると思いますが、部分的には決定。


-1

プログラミング言語は自然言語と同じように時間とともに進化します。一部の古い言語は他の言語よりも強力にその進化に影響を与えますが、他の言語は不明瞭になり、その影響は表面レベル、つまり構文で追跡するのが難しくなります。

Cの影響は多くのソースからもたらされます-それは低レベルで広範囲に広がり、UnixとMicrosoftの両方のサークルに支持されていました。最も適切な問題の存続でもあります-簡潔なCのような構文は、1970年代および1980年代のPascalやその他のCの競合他社の冗長なAlgol派生構文よりも魅力的だったことが容易にわかります。したがって、その後の言語で広く採用されました。

マルチスレッドプログラミングと関数型言語の重要性の現在の成長に特に適しているため、将来的にはそれらの影響が大きくなると思います。適切な事例:Python。質問投稿でもそのリストを作成しました。

熟考する言語の歴史の素敵なタイムラインビュー


間違えている。PASCALとCはどちらもALGOLの子孫です。
インゴ

確かに、Algol自体はFortranの子孫であり、私が参照しているいくつかの構成要素(プログラム、終了、cの括弧と比較したサブルーチン)を選択しました。それでも、私が念頭に置いたのは、実際にはアルゴルのような構文でした。編集済み。
scrwtp

簡潔なCのような構文は、Pascalの詳細なAlgol派生構文や、70年代および80年代のCの他の競合他社の +1 より魅力的でした。始めるプログラマがヒトである、あまりにも終わら 始まる と信じた者、それが始まるエンドのような単語に句読点をマップするために便利ですが、中括弧に彼らの戦いを失ったことは、物語の終わり
ブヨ

ほとんどの開発者がCまたは何らかのC関連言語を知っているという意味を除いて、C構文がそれほどあいまいでないという証拠は見当たりません。AFAICT、Cはその構造と、実装ではなく構文ではなく独自のリンクをロールする必要がないという事実のために、Pascalに勝ちました。
デビッドソーンリー

@David-私が覚えていることから、Cが他の言語よりも勝った理由の1つは、Cのメモリへのアクセスが比較的容易なためです(つまり、ポインター)。私はそれらが今ではうまく機能していることを知っていますが、1 KBのRAMが大量のメモリであったとき、それはこの言語の非常に強力な機能でした。私は他の言語が機能のようなポインターを提供したことを知っていますが、Cほど簡単ではありません
ダンク

-3

リストする言語のほとんどは、無関係な構文の類似性を除き、Cとはほとんど関係がありません。実際のC派生物は、Objective-CとC ++のみです。


構文を考慮しない場合、言語間の唯一の違いは、一般的な言語構成要素(ループ、条件、変数、クラスやクロージャーなどのこれらの抽象化など)の可用性と、それらがすべてマシンの動作と同等であることですコード。すべての低レベル言語は互いに類似しており、すべての高レベル言語はその時点で非常に類似しています。
maple_shaft

2
言語の機能を考えるのではなく、アプリケーションの動作をどのように伝えるかを考えるべきです。あなたのソースコードはあなたのドキュメントの最低レベルであり、人のためのソースコードを書いており、マシンのためではありません。マシン専用のコードを記述した場合、アセンブリでコーディングすることになります。
maple_shaft

1
@maple_shaft:まったく正しい!インタビューで、機械語(アセンブラー)とプログラミング言語の違いを説明するように頼まれました。私の答えは、「機械言語は機械用であり、プログラミング言語はプログラマー用です」です。
-Treb

1
@maple_shaft:構文は、人々とのコミュニケーションに関しては無関係です。英語の単語を別のスペルに置き換えても、英語は同じ言語のままです。構文形式は無関係であり、通信可能なのは言語のセマンティクスです。
DeadMG

3
@DeadMG:しかし、問題があるについての構文。構文の類似性は無関係であると考えることができますが、質問をしている人はこれらの無関係な類似性が存在する理由を知りたいと考えています
ニコルボーラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.