17

いくつか質問があります。インターネットを閲覧しましたが、信頼できる回答はあまりありませんでした。ほとんどのブログ投稿は、お互いに異なることを賞賛し、「自分の見解を証明する」ためのベンチマークを持っていたため、互いに打ち消し合っていました (人生でこれほど多くの矛盾するベンチマークを見たことがありません)。

とにかく、私の質問は次のとおりです。

  • ルビニウスは本当に速いですか?私は、この明らかに正直な親ルビニウスのプレゼンテーションにかなり感銘を受けました。私を少し混乱させるもう 1 つのことは、多くの Rubinius が Ruby 自体で書かれているにもかかわらず、どういうわけか C-Ruby よりも速いということです。それなら、言語の非常に優れた実装に違いありません!
  • EventMachine は Ruinius で動作しますか? 私の知る限り、EventMachine は 1.9 まで実装されていなかったファイバーに部分的に依存しています (間違っていたら訂正してください)。Rubinius がいずれ 1.9 もサポートすることはわかっています。少し待っても構いません。
  • C 拡張機能は Rubinius で動作しますか? TCP ストリームから受信したバイナリ メッセージを Ruby オブジェクトに、またはその逆に「シリアル化」する C 拡張機能を作成しました (詳細は重要ではないと思いますが、この質問への回答に役立つ場合は、投稿を更新します)。これはたくさんのメッセージになる可能性があります!私は Ruby で同じコードを書くことができました (ただし、1 か月後にはほとんど意味がありませんでした) が、アプリケーションの本当のボトルネックであることが判明しました。そのため、問題の「解決策」として C を使用する必要がありました。 編集:私はちょうど思い出しました、私は別のタスクに C を使用します。これは配列のヒット テスト メソッドです。基本的には、「ポイント」がポリゴン内にあるかどうかをチェックするだけで、CRuby では信じられないほど遅かったです。
  • 前の答えが「いいえ」だった場合、Rubinus に C 拡張機能の代替手段はありますか? VM は C++ で記述されているので、そのようにします。

いくつかの「おまけ」の質問:

  • C-Ruby (2.0+、YARV) は GIL を取り除く予定はありますか? または、少なくともそれを変更して、CRuby が真の並列処理をサポートするようにしますか?
  • mrubyとは正確には何ですか? 私は matz がそれに取り組んでいるように見えます。CRuby との違い (パフォーマンス面) は?

私があなたに解き放ったこのテキストストームをお詫びします!♥

4

2 に答える 2

21

ルビニウスは本当に速いですか?

ほとんどのベンチマークでは、そうです。 エラーのあるRBSベンチマーク

エラーなしのRBSベンチマーク

しかし、ベンチマークは...ばかげています。アプリは私たちが本当に気にかけているものです。したがって、最善の方法は、アプリのベンチマークを行い、アプリのパフォーマンスを確認することです。RubiniusがMRIで真に輝く2つの領域は、並列処理とメモリ使用量です。RubiniusにはGILがないため、使用可能なすべてのスレッドを利用できます。また、はるかに洗練されたGCを備えているため、一般に、GCに関してより優れたパフォーマンスを発揮する可能性があります。

RubyConfでのMagLevに関する講演のために、2011年10月にこれらのベンチマークを実行しました。

EventMachineはRubiniusで動作しますか?

はい。機能しない部分がある場合は、問題を報告する必要があります。そうは言っても、現在、EMテストはRubyの実装に合格していません。

C拡張機能はRubiniusで機能しますか?

はい。私はC-extsの互換性の問題を維持しているので、Travisでテストされているものがある場合、Rubiniusはそれがrbxに対して合格することを望んでいます。Rubiniusは歴史的にC-apiとC-extsを適切にサポートしてきましたが、いつかRubiniusがRubyを実行できるようになり、C-extsやC-apiが不要になると便利です

C-Ruby(2.0 +、YARV)はGILを取り除くことはありますか?または、少なくともCRubyが真の並列処理をサポートするように変更しますか?

いいえ、おそらくそうではありません。Jesse Storimerは、 RubyConf 2012のスレッドに関するMatzの意見(またはその欠如)を簡潔に記述しています。笹田耕一はGILを一度削除しようとしましたが、MRIのパフォーマンスは低下しました。エヴァン・フェニックスも、ルビニウスを作成する前に一度試しましたが、良い結果は得られませんでした。

正確にはmrubyとは何ですか?

Luaに似た埋め込み可能なRubyインタープリター。マット・アイモネッティには、あなたに光を当てる可能性のある記事がいくつかあります。

于 2013-02-03T19:00:40.613 に答える
4

Ruby にはあまり詳しくありませんが、最初の質問には答えられるかもしれません。

ルビニウスは本当に速いですか?

さまざまなベンチマークがさまざまなことを語っているのを見てきました。ただし、Rubinius が部分的に Ruby で記述されているという事実は、それが遅いことを意味する必要はありません。PythonのPythonであるPyPyについても同じことを考えました。いくつかの研究と大学での適切な授業の後、私はその理由を知っていました.

  • 私が知る限り、どちらも言語のサブセットで書かれているため、はるかに単純なはずです。(C などの) インタープリターは、言語全体よりもそのようなサブセットに対してはるかに簡単に最適化できます。
  • Ruby/Python インタープリターを独自の言語で作成すると、新しい解釈アルゴリズムの柔軟性が大幅に向上し、プロトタイプを迅速に作成できます。Ruby と Python の存在の要点は、とりわけ、C やアセンブラーなどよりもはるかに迅速にアルゴリズムを実装できることです。多くの場合、より高速なアルゴリズムは、インタープリターのわずかなオーバーヘッドを上回ります。

ところで。同じ言語で言語の通訳を書くことも、その言語がどれほど強力かを示すための一般的な学術的実践です。あるクラスでは、Lisp in Lisp in Lisp を書きました。

于 2012-11-06T10:35:05.167 に答える