7

私は最近、高速化のためにインタープリターを作成するために C++ から C に切り替えることについて質問しました。

そのため、実際には理由がわからないことがわかりました-C++オブジェクト指向システムの抽象化がはるかに高く、したがって遅いことを除いて.

  • 一般的なスクリプト言語のインタプリタがすべて C++ ではなく C で記述されているのはなぜですか?

インタプリタが C にない他の言語について教えてほしい場合はpopular scripting languages、この質問の をすべて に置き換えてくださいRuby, Python, Perl and PHP

4

8 に答える 8

13

C は非常に古い言語であるため、利用可能なほぼすべてのシステムでサポートされています。したがって、どこにでも移植する必要があるプロジェクトに適しています。

于 2010-04-10T20:02:39.197 に答える
9

Rubyは1995年にさかのぼります。1995年に通訳を書いていた場合、どのような選択肢がありましたか?同じ年にJavaがリリースされました。(そして、v1.0では非常に遅く、多くの点で、実際に使用する価値はありませんでした)

C ++はまだ標準化されておらず、C++のコンパイラサポートは非​​常に大雑把でした。(また、現在使用している「最新のC ++」への移行もまだ行われていませんでした。この頃にもSTLの標準化が提案されたと思います。実際には、数年後まで標準に追加されませんでした。追加されてから、1)コンパイラーが追いつき、2)人々がこのジェネリックプログラミングスタイルに慣れるまで、さらに数年かかりました。当時、C ++は何よりもまずOOP言語であり、多くの場合、そのスタイルのC++Cよりもかなり遅いです(最近のC ++コードでは、一部はより優れたコンパイラー、一部はより優れたコーディングスタイル、OOP構造への依存度の低下、テンプレートやジェネリックプログラミングへの依存度の向上により、パフォーマンスの違いはほとんど解消されています)

Pythonは1991年に開始されました。Perlはさらに古いです(1987)

PHPも1995年のものですが、さらに重要なことに、プログラミングについてほとんど何も知らない人によって作成されました。(そしてもちろん、これは多くの重要な方法で言語を形作っています)

当時、Cはポータブルで将来性のあるプラットフォームに最適だったため、おっしゃる言語はCで始まりました。

そして、私はこれを調べていませんが、何よりも無能によって形作られているPHPの場合を除いて、他の言語の言語設計者は、*すでにそれを知っていたのでCを選択しました。ですから、おそらくレッスンは「Cが最高」ではなく、「あなたがすでに知っている言語が最高」です。

Cがよく選ばれる理由は他にもあります。

  • 経験とアクセシビリティ:Cは簡単に理解できるシンプルな言語であり、参入障壁を低くします。それも人気があり、経験豊富なCプログラマーがたくさんいます。これらの言語が普及した理由の1つは、通訳者の育成を支援するプログラマーを見つけるのが簡単だったからかもしれません。C ++は、習得してうまく使用するのがより複雑です。今日、それはそれほど問題ではないかもしれませんが、10年または15年前ですか?
  • 相互運用性:ほとんどの言語はCインターフェースを介して通信します。あなたの派手な新しい言語は他の言語で書かれたコンポーネントに依存するので(特に言語自体が制限されていてライブラリが少ない初期のバージョンでは)、C関数を呼び出すのはいつでも素晴らしくて簡単です。とにかくいくつかのCコードを持っているので、ずっと行き、すべてをCで書くのは魅力的かもしれません。
  • パフォーマンス:Cはあまり邪魔になりません。魔法のようにコードを高速化するわけではありませんが、優れたパフォーマンスを実現できます。もちろん、C++や他の多くの言語もそうです。しかし、それはCにも当てはまります。
  • 移植性:事実上、すべてのプラットフォームにCコンパイラがあります。最近まで、C++コンパイラははるかに多くのヒットとミスがありました。

これらの理由は、Cが実際に通訳者を書くための(または他の何かのための)優れた言語であることを意味するのではなく、他の人がCで書く原因となった動機のいくつかを説明するだけです

于 2010-04-11T02:21:43.230 に答える
7

C は、存在するほぼすべてのプラットフォームに対応する合理的な標準コンパイラを備えた唯一の言語だからだと思います。

于 2010-04-10T20:02:05.700 に答える
3

1998 年の C++ が 1998 年まで標準化されなかったため、移植性を達成するのが非常に難しくなったことが一因であると推測するのは危険です。

あなたがリストするすべての言語は、その標準化の前に開発されました。

于 2010-04-10T20:15:27.120 に答える
3

一般的なスクリプト言語のインタプリタがすべて C++ ではなく C で記述されているのはなぜですか?

それらがCで書かれていると思う理由は何ですか? 私の経験では、大多数のスクリプト言語の実装の大部分は、C 以外の言語で記述されています。

以下にいくつかの例を示します。

ルビー

  • BlueRuby: ABAP で書かれています
  • ホットルビー: JavaScript
  • 赤い太陽: ActionScript
  • SmallRuby: Smalltalk/X
  • MagLev: Ruby、GemStone Smalltalk
  • Smalltalk.rb: スモールトーク
  • アルミナ: スモールトーク
  • カーディナル: PIR、NQP、PGE
  • RubyGoLightly: 行く
  • ヤリ:イオ
  • JRuby: Java
  • XRuby: Java
  • Microsoft IronRuby: C#
  • Wilco Bauwer によるオリジナルの IronRuby: C#
  • Ruby.NET: C#
  • NETRuby: C#
  • MacRuby: Objective-C
  • ルビニウス: ルビー、C++
  • メタルビー: ルビー
  • RubyVM: ルビー

パイソン

  • IronPython: C#
  • Jython: Java
  • パイニー: PIR、NQP、PGE
  • PyPy: Python、RPython

PHP

  • P8: ジャワ
  • コナラ: Java
  • ファランジェ: C#

Perl6

  • 楽堂:Perl6、PIR、NQP、PGE
  • パグ:ハスケル
  • スプリクセル: JavaScript
  • v6.pm: Perl5
  • エルフ: CommonLisp

JavaScript

  • 水仙: JavaScript
  • Ejacs: ELisp
  • ジント: C#
  • IronJS: F#
  • ライノ: ジャワ
  • マスカラ (ECMAScript Harmony Reference Implementation): Python
  • ECMAScript 4 リファレンス実装: 標準 ML

HotSpot JVM は C++ で記述され、アニモルフィック Smalltalk VM (HotSpot と V8 の派生元) は C++ で記述され、セルフ VM (アニモルフィック Smalltalk VM のベース) は C++ で記述されています。

興味深いことに、上記のケースの多くで、 C で書かれていない実装は、実際には C で書かれた実装よりも高速です。

C で記述された 2 つの実装の例として、Lua と CPython を取り上げます。どちらの場合も、実際には非常に古いバージョンの C の小さなサブセットで記述されています。その理由は、移植性を高くしたいからです。たとえば、CPython は、C++ コンパイラさえ存在しないプラットフォームで実行されます。また、Perl は 1989 年に、CPython は 1990 年に、Lua は 1993 年に、SpiderMonkey は 1995 年に作成されました。C++ は 1998 年まで標準化されませんでした。

于 2010-04-10T22:42:48.190 に答える
2

C++ の複雑さは、C に比べて非常に大きく、多くの人が C++ を現存する言語の中で最も複雑でエラーが発生しやすい言語の 1 つと考えています。

C++ の機能の多くにも問題があります。STL は何年も前に標準化されましたが、まだ優れた実装が 1 つ欠けています。

OOP は確かに優れていますが、多くのシナリオで C++ の欠点を補うものではありません。

于 2010-04-10T20:16:21.850 に答える
1

よく知られているコンパイラの本のほとんどは、C で例を挙げて書かれています。また、主要なツールの lexx (字句解析器を構築する) と yacc (文法を C に変換する) の 2 つが C をサポートしています。

于 2010-04-10T21:50:43.843 に答える
0

なぜ C++ ではなく C なのかという質問の場合、その答えは、スクリプト言語を実装するときに C++ オブジェクト モデルが邪魔になるという事実に帰着します。非常に制限されているため、独自のオブジェクトには使用できません。

したがって、これは内部にしか使用できず、移植と配布が容易になる、はるかに単純な C 言語よりも C++ から十分な利点を得られません。

C でスクリプト言語を実装する際の唯一の問題は、コルーチンのサポートがないこと (何らかの方法でスタック ポインターを切り替える必要がある) であり、最も重要なことは、(C++ と比較して) 多くのオーバーヘッドなしで例外処理を行う方法がないことです。

于 2010-08-13T11:03:27.187 に答える