| パラダイム | マルチパラダイム:関数型、命令型、オブジェクト指向、リフレクション型 |
|---|---|
| デザイン: | 松本幸弘 |
| 開発者 | 松本幸弘 他 |
| 初登場 | 1995年 |
| 安定リリース | 3.3.5 [1]
/ 2024年9月3日 |
| タイピングの規律 | アヒル、ダイナミック、強い |
| 範囲 | 語彙、時には動的 |
| 実装言語 | C |
| OS | クロスプラットフォーム |
| ライセンス | Rubyライセンス |
| ファイル名拡張子 | .rb、.ru |
| Webサイト | ruby-lang.org |
| 主な実装 | |
| Ruby MRI、TruffleRuby、YARV、Rubinius、JRuby、RubyMotion、mruby | |
| 影響を受けた | |
| Ada、[2] Basic、[3] C++、[2] CLU、[4] Dylan、[4] Eiffel、[2] Lisp、[4] Lua、Perl、[4] Python、[4] Smalltalk [4] | |
| 影響を受けた | |
| Clojure、CoffeeScript、Crystal、D、Elixir、Groovy、Julia、[5] Mirah、Nu、[6] Ring、[7] Rust、[8] Swift [9] | |
Ruby は、インタープリタ型の高水準汎用プログラミング言語です。プログラミングの生産性とシンプルさを重視して設計されました。Ruby では、プリミティブ データ型も含め、すべてがオブジェクトです。1990 年代半ばに日本のMatsumoto "Matz" Yukihiro 氏によって開発されました。
Rubyは動的型付けされており、ガベージコレクションとジャストインタイムコンパイルを使用します。手続き型プログラミング、オブジェクト指向プログラミング、関数型プログラミングなど、複数のプログラミングパラダイムをサポートしています。開発者によると、RubyはPerl、Smalltalk、Eiffel、Ada、BASIC、Java、Lispの影響を受けています。[10] [3]
歴史
初期のコンセプト
松本氏は、Ruby が 1993 年に考案されたと述べています。1999 年にruby-talkメーリング リストに投稿した記事で、同氏はこの言語に関する初期のアイデアのいくつかを説明しています。
私は同僚とオブジェクト指向のスクリプト言語の可能性について話していました。私は Perl (Perl4、Perl5 ではありません) を知っていましたが、おもちゃの言語の匂いがしたので、あまり好きではありませんでした (今でもそうです)。オブジェクト指向言語は非常に有望に思えました。当時、私はPython を知っていました。しかし、私は Python が真のオブジェクト指向言語だとは思わなかったので、好きではありませんでした。OO 機能は言語のアドオンのように見えました。15 年間言語マニアであり OO ファンである私は、本物のオブジェクト指向で使いやすいスクリプト言語が本当に欲しかったのです。探しましたが、見つかりませんでした。そこで自分で作ろうと決めました。
松本は、Rubyの設計は、Smalltalkのようなオブジェクトシステム、高階関数に触発されたブロック、Perlのような実用的なユーティリティを備えた、単純なLisp言語のようなものだと説明しています。[11]
「ルビー」という名前は、1993年2月24日、松本と石塚啓樹の間で行われたオンラインチャットセッション中に生まれました。当時、この言語のコードはまだ書かれていませんでした。[12]当初は「コーラル」と「ルビー」という2つの名前が提案されました。松本は後に石塚に送った電子メールで後者を選択しました。[13]松本は後に、「ルビー」という名前を選んだ理由として、同僚の誕生石が由来だったことを述べています。 [14] [15]
早期リリース
Ruby 0.95の最初の公開リリースは、1995年12月21日に日本国内のニュースグループで発表されました。 [16] [17]その後、2日間でさらに3つのバージョンのRubyがリリースされました。[12]このリリースは、新しい言語の最初のメーリングリストである日本語の ruby-listメーリングリストの開始と一致しました。
この開発段階では、オブジェクト指向設計、継承クラス、ミックスイン、イテレータ、クロージャ、例外処理、ガベージコレクションなど、Rubyの後のリリースでよく見られる多くの機能がすでに存在していました。[18]
1995 年に Ruby 0.95 がリリースされてから、この数年間に Ruby の安定バージョンがいくつかリリースされました。
- Ruby 1.0: 1996年12月25日[12]
- Ruby 1.2: 1998年12月
- Ruby 1.4: 1999 年 8 月
- Ruby 1.6: 2000年9月
1997年に、Rubyに関する最初の記事がWeb上で公開されました。同年、松本はnetlab.jpに採用され、フルタイムの開発者としてRubyの開発に携わりました。[12]
1998年に、松本はRubyアプリケーションアーカイブを立ち上げ、Rubyのシンプルな英語のホームページも開設した。[12]
1999年、初の英語メーリングリストruby-talkが開始され、日本国外でもこの言語への関心が高まっていることを示しました。[19]この同じ年、松本と石塚啓樹はRubyに関する最初の本である『オブジェクト指向スクリプト言語 Ruby』を執筆し、1999年10月に日本で出版されました。2000年代初頭には、日本語でRubyに関する本が約20冊出版されました。[12]
2000年までに、Rubyは日本でPythonよりも人気がありました。[20] 2000年9月、最初の英語の本「Programming Ruby」が印刷され、後に一般に無料で公開され、英語圏でのRubyの採用がさらに広がりました。2002年初頭には、英語のruby-talkメーリングリストには日本語のruby-listよりも多くのメッセージが届き、非日本語圏でのRubyの人気の高まりを示しました。
Ruby 1.8 および 1.9
Ruby 1.8は2003年8月に最初にリリースされ、長い間安定していましたが、2013年6月に廃止されました。[21]非推奨ではありますが、それをベースにしたコードはまだ存在しています。Ruby 1.8はRuby 1.9と部分的にしか互換性がありません。
Ruby 1.8は、いくつかの業界標準の対象となっています。Rubyの言語仕様は、情報処理推進機構(日本の政府機関)のオープン標準推進センターによって開発され、日本工業標準調査会(JISC)に提出され、その後国際標準化機構(ISO)に提出されました。2011年に日本工業規格(JIS X 3017)として承認され[22]、2012年には国際規格(ISO/IEC 30170)として承認されました。[23] [24]

2005年頃、Rubyで書かれたウェブフレームワークであるRuby on Railsの登場に伴い、Ruby言語への関心が高まりました。RailsはRubyの認知度を高めたとよく言われます。[25]
2011年10月31日にリリースされたRuby 1.9.3から、[26] RubyはRubyライセンスとGPLのデュアルライセンスから、Rubyライセンスと2条項BSDライセンスのデュアルライセンスに変更されました。[27] 1.8からの変更により、多くの人気のあるサードパーティのgemを書き直す必要があったため、1.9の採用は遅れました。Ruby 1.9では、1.8シリーズに比べて多くの重要な変更が導入されています。例には以下が含まれます。[28]
- ブロックローカル変数(宣言されているブロック内でローカルな変数)
- 追加のラムダ構文:
f = ->(a,b) { puts a + b } - シンボルキーにコロンを使用した追加のハッシュリテラル構文:
{symbol_key: "value"} == {:symbol_key => "value"} - 文字列ごとの文字エンコーディングがサポートされている
- 新しいソケット API [ IPv6サポート]
require_relative輸入セキュリティ
ルビー2
Ruby 2.0はRuby 1.9.3と完全に下位互換性を持つことが意図されていました。2013年2月24日の公式2.0.0リリース時点では、5つの(軽微な)非互換性のみが判明していました。[29] Ruby 2.0では、次のようないくつかの新機能が追加されました。
- メソッドのキーワード引数
Module#prependクラスを拡張するための新しいメソッド- シンボルの配列を作成するための新しいリテラル
- 列挙型の遅延評価のための新しい API
- #to_hを使用してオブジェクトをハッシュに変換する新しい規則[30]
Rubyのバージョン管理ポリシーは2.1.0からセマンティックバージョニングに近いものに変更されました。[31]
Ruby 2.2.0 には、高速化、バグ修正、ライブラリの更新が含まれており、非推奨の API がいくつか削除されています。最も注目すべきは、Ruby 2.2.0 でメモリ処理が変更されたことです。増分ガベージ コレクター、シンボルのガベージ コレクションのサポート、jemalloc に対して直接コンパイルするオプションなどです。また、system() および spawn() でvfork (2) を使用するための実験的なサポートと、 Unicode 7.0 仕様のサポートが追加されました。バージョン 2.2.1 以降、[32] PowerPC64での Ruby MRI のパフォーマンスが向上しました。[33] [34] [35]廃止または削除された機能には、callcc、DL ライブラリ、Digest::HMAC、lib/rational.rb、lib/complex.rb、GServer、Logger::Application、およびさまざまな C API 関数があります。[36]
Ruby 2.3.0には、Proc#callの変更、SocketとIOでの例外キーワードの使用、Thread#nameの処理、デフォルトのパッシブNet::FTP接続、Rakeのstdlibからの削除など、多くのパフォーマンスの改善、更新、バグ修正が含まれています。[37]その他の注目すべき変更点は次のとおりです。
- すべての文字列リテラルをデフォルトで凍結としてマークする機能により、文字列操作のパフォーマンスが大幅に向上します。[38]
- ハッシュ比較により、キーだけでなくキー/値のペアを直接チェックできるようになります。
- nil の処理を容易にする新しい安全なナビゲーション演算子
&.(たとえば、 の代わりに を使用できます)。if obj && obj.foo && obj.foo.barif obj&.foo&.bar - did_you_mean gemがデフォルトでバンドルされ、起動時にNameErrorまたはNoMethodErrorで類似した名前の一致を自動的に提案するために必要になります。
- Hash#digとArray#dig を使用すると、深くネストされた値を簡単に抽出できます (たとえば、 の場合、値Foo Bazは で取得できるようになります)。
profile = { social: { wikipedia: { name: 'Foo Baz' } } }profile.dig(:social, :wikipedia, :name) .grep_v(regexp)他の新機能に加えて、指定された正規表現のすべての否定例に一致します。
Ruby 2.4.0には、ハッシュテーブル、Array#max、Array#min、インスタンス変数アクセスのパフォーマンス向上が含まれています。[39]その他の注目すべき変更点は次のとおりです。
- Binding#irb: binding.pry に似た REPL セッションを開始する
- FixnumとBignum をIntegerクラスに統合する
- 文字列はASCIIだけでなくUnicodeの大文字小文字のマッピングもサポートします
- Regexp#match? という新しいメソッドが追加されました。これは Regexp#match のより高速なブールバージョンです。
- スレッドデッドロック検出では、バックトレースと依存関係を持つスレッドが表示されるようになりました。
Ruby 2.5.0 の注目すべき変更点としては、rescue 文とEnsure文が周囲のdo-endブロックを自動的に使用する (余分なbegin-endブロックの必要性が減少)、 yield_selfによるメソッドチェーン、分岐カバレッジとメソッドカバレッジ測定のサポート、Hash#sliceとHash#transform_keysによるハッシュ変換の簡易化などが挙げられます。さらに、ブロック受け渡しの高速化 (3 倍高速)、ミューテックスの高速化、ERB テンプレートの高速化、一部の連結方法の改善など、パフォーマンスが大幅に向上しています。
Ruby 2.6.0 の注目すべき変更点としては、実験的なジャストインタイムコンパイラ(JIT) とRubyVM::AbstractSyntaxTree (実験的) などがあります。
Ruby 2.7.0 の注目すべき変更点としては、パターン マッチング (実験的)、REPL の改善、コンパクション GC、位置引数とキーワード引数の分離などがあります。
ルビー3
Ruby 3.0.0は2020年のクリスマスにリリースされました。[40]これはRuby 3x3と呼ばれ、Ruby 3.0ではRuby 2.0に比べてプログラムが3倍高速に実行されることを意味します。[41]また、2から3までの中間リリースですでに実装されているものもありました。3x3を実現するために、Ruby 3にはMJIT、後にYJIT(ジャストインタイムコンパイラ)が搭載され、プログラムを高速化していますが、これらは実験的なものとされており、デフォルトでは無効になっています(実行時にフラグによって有効になります)。
Ruby 3.0のもう一つの目標は並行性を向上させることであり、さらに2つのユーティリティであるFibre Schedulerと実験的なRactorがその目標を促進します。[40] Ractorは共有オブジェクトではなくメッセージを交換することで実現されるため、軽量でスレッドセーフです。
Ruby 3.0では、静的解析用のRubyプログラムの種類を記述するためのRBS言語が導入されました。[40]これは一般的なRubyプログラムとは分離されています。
Ruby 3.0では構文の強化とライブラリの変更もいくつか行われています。[40]
Ruby 3.1は2021年12月25日にリリースされました。[42] Shopifyが開発した新しい実験的なジャストインタイムコンパイラであるYJITが含まれており、実際のビジネスアプリケーションのパフォーマンスを向上させます。新しいデバッガーも含まれています。このリリースでは、いくつかの構文の強化とその他の改善が行われています。FTP 、SMTP、IMAP、POPのネットワークライブラリは、デフォルトのgemからバンドルされたgemに移動されました。[43]
Ruby 3.2は2022年12月25日にリリースされました。[44] WASIインターフェースを介してWebAssembly環境内で実行するためのサポートが追加されました。正規表現にもいくつかの改善が加えられ、特定のReDoS攻撃から保護するためのより高速なメモ化されたマッチングアルゴリズムや、正規表現マッチングの設定可能なタイムアウトなどが含まれています。このリリースには、構文の提案やエラーの強調表示などの追加のデバッグ機能と構文機能も含まれています。MJITコンパイラは標準ライブラリモジュールとして再実装され、RustベースのJITコンパイラであるYJITはLinux上のより多くのアーキテクチャをサポートするようになりました。
Ruby 3.3は2023年12月25日にリリースされました。[1] Ruby 3.3では、言語に大幅な機能強化とパフォーマンスの向上が導入されています。主な機能には、移植性と保守性に優れた解析のためのPrismパーサーの導入、純粋なRuby JITコンパイラーRJITの追加、YJITコンパイラーの大幅なパフォーマンス向上などがあります。さらに、メモリ使用量の改善、M:Nスレッドスケジューラの導入、標準ライブラリの更新により、より効率的で開発者に優しいRubyエコシステムが実現しています。
意味論と哲学
松本氏は、Rubyは優れたユーザーインターフェース設計の原則に従い、プログラマーの生産性と楽しさのために設計されていると述べた。 [45] 2008年のGoogle Tech Talkで、彼は「Rubyが世界中のすべてのプログラマーの生産性を高め、プログラミングを楽しみ、幸せになるのを手助けしてくれることを願っています。それがRuby言語の主な目的です。」と述べた。[46]彼は、システム設計はコンピューターのニーズではなく、人間のニーズを重視する必要があることを強調している。[47 ]
多くの場合、人々、特にコンピュータ エンジニアは、マシンに注目します。彼らは、「こうすれば、マシンは速く動く。こうすれば、マシンはより効率的に動く。こうすれば、マシンは何とかなる」と考えます。彼らはマシンに注目しています。しかし、実際には、人間に注目する必要があります。人間がプログラミングやマシンのアプリケーション操作にどれほど関心を持っているかに注目する必要があります。私たちはマスターです。彼らは奴隷です。
松本氏は、プログラマーの作業と起こりうる混乱を最小限に抑え、自分自身が楽しく使える言語を作ることが主な設計目標だったと述べている。彼は、驚き最小の原則(POLA) を Ruby の設計には適用しなかったと述べている。[47] 2005 年 5 月のニュースグループ comp.lang.ruby での議論で、松本氏は Ruby を POLA から遠ざけようとし、設計上の選択は誰にとっても驚きとなるため、驚きを評価する際に個人的な基準を使用していると説明した。その個人的な基準が一貫していれば、標準に精通している人にとって驚きはほとんどないだろう。[48]
松本はインタビューで次のように定義している。[47]
誰もが独自のバックグラウンドを持っています。ある人は Python 出身で、別の人は Perl 出身かもしれません。そして、言語のさまざまな側面に驚くかもしれません。そして、彼らは私のところに来て、「この言語の機能には驚きました。Ruby は驚き最小の原則に違反しています」と言います。待ってください。驚き最小の原則は、あなただけのものではありません。驚き最小の原則は、私にとっての驚き最小の原則を意味します。そして、それはあなたが Ruby を非常によく学んだ後の驚き最小の原則を意味します。たとえば、私は Ruby の設計を始める前は C++ プログラマーでした。2、3 年間は C++ のみでプログラミングしていました。そして、2 年間の C++ プログラミングを経た今でも、私はまだ驚きを感じます。
Ruby はオブジェクト指向です。すべての値はオブジェクトであり、他の多くの言語でプリミティブとして指定される型 (整数、ブール値、および「null」など) のクラスやインスタンスも含まれます。Ruby のすべてがオブジェクトであるため、Ruby のすべてにはメソッドと呼ばれる特定の組み込み機能があります。すべての関数はメソッドであり、メソッドは常にオブジェクトで呼び出されます。最上位のスコープで定義されたメソッドは、Object クラスのメソッドになります。このクラスは他のすべてのクラスの祖先であるため、このようなメソッドはどのオブジェクトでも呼び出すことができます。また、メソッドはすべてのスコープで表示され、実質的に「グローバル」プロシージャとして機能します。Ruby は、動的ディスパッチ、ミックスイン、およびシングルトン メソッド (クラスで定義されるのではなく、単一のインスタンスに属し、そのインスタンス用に定義される)による継承をサポートしています。Ruby は多重継承をサポートしていませんが、クラスはミックスインとしてモジュールをインポートできます。
Ruby は、マルチパラダイム プログラミング言語と言われています。Ruby では、手続き型プログラミング (クラス外で関数/変数を定義すると、ルートの「自己」オブジェクトの一部になります)、オブジェクト指向 (すべてがオブジェクト)、または関数型プログラミング(匿名関数、クロージャ、継続があり、すべてのステートメントに値があり、関数は最後の評価を返します) が可能です。イントロスペクション、リフレクティブ プログラミング、メタプログラミング、およびインタープリタ ベースのスレッドをサポートしています。Ruby は動的型付けを特徴とし、パラメトリック ポリモーフィズムをサポートしています。
RubyのFAQによると、構文はPerlに似ており、セマンティクスはSmalltalkに似ているが、設計思想はPythonとは大きく異なる。[49]
特徴
- 継承、ミックスイン、メタクラスによる徹底的なオブジェクト指向[50]
- 動的型付けとダックタイピング
- すべてが式(文も)であり、すべてが命令的に実行される(宣言も)
- 簡潔で柔軟な構文[51]は、構文上のノイズを最小限に抑え、ドメイン固有言語[52]の基礎として機能する。
- メタプログラミングを容易にするためのオブジェクトの動的反射と変更[53]
- ブロック構文による語彙的クロージャ、イテレータ、ジェネレータ[54]
- 配列、ハッシュ、正規表現、シンボルのリテラル表記
- 文字列へのコードの埋め込み(補間)
- デフォルト引数
- 変数スコープの4つのレベル(グローバル、クラス、インスタンス、ローカル)は、記号または記号がないことによって示されます。
- ガベージコレクション
- ファーストクラスの継続
- 厳密なブール強制ルール(と以外はすべて真)
falsenil - 例外処理
- 演算子オーバーロード[55]
- 有理数、複素数、任意精度の演算を内蔵
- カスタムディスパッチ動作(および
method_missingを通じてconst_missing) - ネイティブスレッドと協調ファイバー(ファイバーは 1.9/ YARV の機能です)
- Unicodeおよび複数の文字エンコーディングをサポートします。
- C言語のネイティブプラグインAPI
- Interactive Ruby Shell は、コードを素早くテストするために使用できる対話型のコマンドラインインタープリターです ( REPL )
- RubyGemsによる集中パッケージ管理
- すべての主要プラットフォームに実装
- YAML、JSON、XML、CGI、OpenSSL、HTTP、FTP、RSS、curses、zlib、Tkのモジュールを含む大規模な標準ライブラリ[56]
- ジャストインタイムコンパイル
構文
Rubyの構文は、PerlやPythonの構文と大まかに似ています。クラスとメソッドの定義はキーワードで示されますが、コードブロックはキーワードまたは中括弧で定義できます。Perlとは対照的に、変数にはシギルが必ず接頭辞として付けられるわけではありません。シギルを使用すると、変数のスコープの意味が変わります。実用上、式と文を区別する必要はありません。[57] [58]改行は重要であり、文の終わりとみなされます。セミコロンを使用してもかまいません。Pythonとは異なり、インデントは重要ではありません。
Python や Perl との違いの 1 つは、Ruby ではインスタンス変数がすべてクラスに対して完全にプライベートに保持され、アクセサ メソッド ( 、 など) を通じてのみ公開されることですattr_writer。C++やJavaattr_readerなどの他の言語の "getter" および "setter" メソッドとは異なり、Ruby のアクセサ メソッドはメタプログラミングを介して 1 行のコードで作成できます。ただし、アクセサ メソッドは、C++ や Java の従来の方法で作成することもできます。 これらのメソッドの呼び出しには括弧を使用する必要がないため、インスタンス変数を完全な関数に変更するのは簡単です。呼び出しコードを 1 行も変更したり、リファクタリングを行ったりすることなく、C#やVB.NET のプロパティ メンバーと同様の機能を実現できます。
Python のプロパティ記述子も同様ですが、開発プロセスでトレードオフが発生します。Python で最初に公開されたインスタンス変数を使用し、後で実装を変更してプロパティ記述子を通じて公開されたプライベート インスタンス変数を使用する場合、クラス内部のコードは、パブリック プロパティではなくプライベート変数を使用するように調整する必要がある場合があります。Ruby の設計では、すべてのインスタンス変数がプライベートに強制されますが、メソッドを宣言する簡単な方法も提供されていますset。getこれは、Ruby ではクラスの外部からクラスの内部メンバーに直接アクセスすることはなく、クラスにメッセージを渡して応答を受け取るという考えに基づいています。
実装
Matz の Ruby インタプリタ
オリジナルの Rubyインタープリタは、 Matz の Ruby インタープリタまたは MRIと呼ばれることがよくあります。この実装は C で記述されており、独自の Ruby 固有の仮想マシンを使用します。
標準化され廃止されたRuby 1.8の実装は、シングルパスのインタープリタ言語としてCで書かれていました。[21]
Ruby 1.9 から始まり、Ruby 2.x 以降では、公式の Ruby インタープリターはYARV (「Yet Another Ruby VM」) となり、この実装は MRI の以前のリリースで使用されていた低速の仮想マシンに取って代わりました。
代替実装
2018 年現在、 JRuby、Rubinius、mruby[アップデート]など、 Ruby の代替実装は数多く存在します。それぞれ異なるアプローチを採用しており、 JRuby と Rubinius はジャストインタイムコンパイルを提供し、 mruby は事前コンパイルも提供します。
Ruby には、3 つの主要な代替実装があります。
- JRuby は、Java 仮想マシン上で実行されるJavaと Ruby の混合実装です。JRuby は現在、Ruby 3.1.x を対象としています。
- TruffleRuby、 GraalVMを使用した Truffle 言語実装フレームワークを使用した Java 実装
- Rubinius は、LLVM を使用して実行時にマシン コードにコンパイルするC++バイトコード仮想マシンです。バイトコード コンパイラとほとんどのコア クラスは純粋な Ruby で記述されています。Rubinius は現在、Ruby 2.3.1 をターゲットにしています。
その他の Ruby 実装には次のものがあります:
- MagLev は、GemTalk SystemsのGemStone/S VM上で動作するSmalltalk実装です。
- mruby は、 Luaと同様に、Cコードに組み込むように設計された実装です。現在、まつもとゆきひろ氏らによって開発されています。
- RGSS、つまりRuby Game Scripting Systemは、RPG MakerシリーズのソフトウェアでゲームデザインやRPG Makerエンジンの修正に使用される独自の実装です。
- julializerは、 RubyからJuliaへのトランスパイラ(部分的) 。例えばRubyやJRubyの実装に比べて大幅な高速化が可能です(数値コードにのみ役立つ可能性があります)。[59]
- Topaz、 Pythonで書かれたRuby実装
- Opal、Ruby をJavaScriptにコンパイルする Web ベースのインタープリタ
他に廃止された Ruby 実装は以下のとおりです。
- MacRuby は、Objective-Cランタイム上のMac OS X実装です。iOS版はRubyMotionと呼ばれています。
- IronRuby は.NET Frameworkの実装です
- Cardinal、 Parrot仮想マシンの実装
- Ruby Enterprise Edition (しばしばreeと略される)は、大規模なRuby on Railsプロジェクトを処理するために最適化された実装です。
- HotRuby は、Ruby プログラミング言語のJavaScriptおよびActionScript実装です。
Ruby 実装の成熟度は、 Ruby on Rails (Rails) フレームワークを実行する能力によって測定される傾向があります。これは、Ruby 実装が複雑で、Ruby 固有の機能を多数使用するためです。特定の実装がこの目標を達成した時点は、「Rails 特異点」と呼ばれます。リファレンス実装、JRuby、および Rubinius [60]はすべて、運用環境で変更せずに Rails を実行できます。
プラットフォームサポート
松本氏はもともと4.3BSDベースのSony NEWS-OS 3.x上でRubyを開発していたが、後にSunOS 4.xに移行し、最終的にはLinuxに移行した。[61] [62] 1999年までに、Rubyは多くの異なるオペレーティングシステムで動作することが知られるようになった。最新のRubyのバージョンと実装は、すべての主要なデスクトップ、モバイル、サーバーベースのオペレーティングシステムで利用できる。Rubyは、 Jelastic、Heroku、Google Cloud Platformなど の多くのクラウドホスティングプラットフォームでもサポートされている。
RVMや RBEnvなどのツールを使用すると、1 台のマシンに複数の Ruby バージョンや複数の「gemsets」をインストールしてパーティション分割することが容易になります。
リポジトリとライブラリ
RubyGemsはRubyのパッケージマネージャです。Rubyパッケージは「gem」と呼ばれ、コマンドラインからインストールできます。ほとんどのgemはライブラリですが、IDEなどのアプリケーションもいくつか存在します。[63] RubyGems.orgには10万以上のRuby gemがホストされています。[64]
多くの新規および既存の Ruby ライブラリは、 Gitのバージョン管理リポジトリ ホスティングを提供するサービスであるGitHubでホストされています。
Rubyプログラミング用のアプリケーション、ドキュメント、ライブラリをホストしていたRubyアプリケーションアーカイブは、2013年にその機能がRubyGemsに移管されるまで維持されていました。[65]
参照
参考文献
- ^ ab “Ruby 3.3.0 リリース”. 2023年12月25日時点のオリジナルよりアーカイブ。2023年12月25日閲覧。
- ^ abc Cooper, Peter (2009). Beginning Ruby: From Novice to Professional . Beginning from Novice to Professional (第2版). Berkeley: APress. p. 101. ISBN 978-1-4302-2363-4程度は低いものの、
Python、LISP、Eiffel、Ada、C++ も Ruby に影響を与えています。
- ^ ab 「Ruby の背後にある理由」。Rubyカンファレンス 2008。Confreaks (YouTube)。
- ^ abcdef Bini, Ola (2007). 実践的な JRuby on Rails Web 2.0 プロジェクト: Ruby on Rails を Java に導入する. バークレー: APress. p. 3. ISBN 978-1-59059-881-8
主に Perl、Smalltalk、Python、Lisp、Dylan、CLU の機能を活用しています
。 - ^ “Julia 1.0 ドキュメント: はじめに”. 2018年8月16日時点のオリジナルよりアーカイブ。2018年10月6日閲覧。
- ^ Burks, Tim. 「About Nu™」。Programming Nu™。 Neon Design Technology, Inc. 2018-12-25 時点のオリジナルよりアーカイブ。2011-07-21に取得。
- ^ Ring Team (2017年12月3日). 「Ring and other languages」. ring-lang.net . ring-lang. 2018年12月25日時点のオリジナルよりアーカイブ。 2017年12月3日閲覧。
- ^ 「影響 - The Rust Reference」。The Rust Reference。2019年1月26日時点のオリジナルよりアーカイブ。 2023年4月18日閲覧。
- ^ Lattner, Chris (2014-06-03). 「Chris Lattner のホームページ」。Chris Lattner。2018-12-25 にオリジナルからアーカイブ。2014-06-03 に取得。Swift言語
は、言語の専門家、ドキュメンテーションの達人、コンパイラ最適化の達人、そしてアイデアを洗練し実戦テストするためのフィードバックを提供してくれた非常に重要な社内ドッグフーディング グループのチームによるたゆまぬ努力の成果です。もちろん、この分野の他の多くの言語が苦労して得た経験からも大きな恩恵を受けており、Objective-C、Rust、Haskell、Ruby、Python、C#、CLU など、数え切れないほど多くの言語からアイデアを得ています。
- ^ “Rubyについて”。2014年10月9日時点のオリジナルよりアーカイブ。 2020年2月15日閲覧。
- ^ Matsumoto, Yukihiro (2006年2月13日). 「Re: RubyのLisp機能」。2018年10月27日時点のオリジナルよりアーカイブ。2020年2月15日閲覧。
- ^ abcdef 「Rubyの歴史」。2011年7月14日時点のオリジナルよりアーカイブ。2008年8月14日閲覧。
- ^ 「[FYI: 歴史的] 言語名 Ruby の決定的瞬間。 (Re: [ANN] ruby 1.8.1)」(杉原 宏氏から ruby-talk へのメール)。2011 年 7 月 17 日時点のオリジナルよりアーカイブ。2008年 8 月 14 日閲覧。
- ^ 「1.3 なぜ「Ruby」という名前なのか?」Ruby 言語 FAQ。 Ruby-Doc.org。 2012 年 5 月 28 日時点のオリジナルよりアーカイブ。2012 年4 月 10 日閲覧。
- ^ まつもとゆきひろ(1999年6月11日). 「Re: Rubyの名前は?」. Ruby-Talk (メーリングリスト). 2018年12月25日時点のオリジナルよりアーカイブ。 2012年4月10日閲覧。
- ^ “More archeolinguistics: unearthing proto-Ruby”. 2015年11月6日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ "[ruby-talk:00382] Re: rubyの歴史". 2011年7月16日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ "[ruby-list:124] TUTORIAL — rubyの機能". 2003年5月24日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ 「Ruby の作者へのインタビュー」。2008 年 2 月 8 日時点のオリジナルよりアーカイブ。2007 年 7 月 11 日閲覧。
- ^ まつもとゆきひろ (2000年10月). 「プログラミングRuby: 前進」。2018年12月25日時点のオリジナルよりアーカイブ。 2014年3月5日閲覧。
- ^ ab “We retire Ruby 1.8.7”. 2015年6月6日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ "IPA 独立行政法人 情報処理推進機構:プレス発表プログラム言語RubyのJIS規格(JIS X 3017)制定について". 2015 年 2 月 2 日のオリジナルからアーカイブ。2015 年5 月 2 日に取得。
- ^ "IPA 独立行政法人 情報処理推進機構:プレス発表プログラム言語Ruby、国際規格として承認". 2015 年 2 月 1 日のオリジナルからアーカイブ。2015 年5 月 2 日に取得。
- ^ 「ISO/IEC 30170:2012」。2017年3月12日時点のオリジナルよりアーカイブ。2017年3月10日閲覧。
- ^ Web 開発: Ruby on Rails 2009 年 2 月 24 日にWayback Machineにアーカイブされました。Devarticles.com (2007 年 3 月 22 日)。2013 年 7 月 17 日に取得。
- ^ “Ruby 1.9.3 p0 がリリースされました”. ruby-lang.org. 2011年10月31日. 2013年1月14日時点のオリジナルよりアーカイブ。 2013年2月20日閲覧。
- ^ “v1_9_3_0/NEWS”. Ruby Subversionソースリポジトリ. ruby-lang.org. 2011年9月17日. 2015年11月6日時点のオリジナルよりアーカイブ。 2013年2月20日閲覧。
- ^ Ruby 1.9: 期待すること Archived 2016-03-04 at the Wayback Machine . slideshow.rubyforge.org. 2013-07-17 に取得。
- ^ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 がリリースされました Archived 2013-02-27 at the Wayback Machine . Ruby-lang.org. 2013-07-17 に取得。
- ^ Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 がリリースされました Archived 2016-01-17 at the Wayback Machine . Ruby-lang.org. 2013-07-17 取得。
- ^ 「Ruby 2.1.0 から始まるセマンティック バージョニング」 2013 年 12 月 21 日。2014 年 2 月 13 日時点のオリジナルよりアーカイブ。2013年12 月 27 日閲覧。
- ^ Gustavo Frederico Temple Pedrosa、Vitor de Lima、Leonardo Bianconi (2015)。「Ruby 2.2.1 リリース」。2016年5月16日時点のオリジナルよりアーカイブ。 2016年7月12日閲覧。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ Gustavo Frederico Temple Pedrosa、Vitor de Lima、Leonardo Bianconi (2015)。「v2.2.1 ChangeLog」。2017年2月26日時点のオリジナルよりアーカイブ。2016年7月12日閲覧。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ Gustavo Frederico Temple Pedrosa、Vitor de Lima、Leonardo Bianconi (2014)。「ppc64 でパフォーマンスを向上させるための不揮発性レジスタの指定」。2016 年 9 月 17 日時点のオリジナルよりアーカイブ。2016年7 月 12 日閲覧。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ Gustavo Frederico Temple Pedrosa、Vitor de Lima、Leonardo Bianconi (2014)。「ppc64 でパフォーマンスを向上させる MACRO の指定」。2016 年 9 月 17 日時点のオリジナルよりアーカイブ。2016年7 月 12 日閲覧。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ “ruby/NEWS at v2_2_0 · ruby/ruby · GitHub”. GitHub . 2015年1月1日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ “Ruby/NEWS at v.2_3_0 - ruby/ruby”. GitHub . 2017年3月1日時点のオリジナルよりアーカイブ。2015年12月25日閲覧。
- ^ 「Ruby 2.3.0 の変更点と機能」。Running with Ruby。dev.mensfeld.pl。2015年11月14日。2016年1月5日時点のオリジナルよりアーカイブ。2015年12月27日閲覧。
- ^ “Ruby 2.4.0 リリース”. www.ruby-lang.org . 2017-02-17 時点のオリジナルよりアーカイブ。2016-12-30閲覧。
- ^ abcd "Ruby 3.0.0 リリース". Ruby プログラミング言語. 2020-12-25. 2020-12-25時点のオリジナルよりアーカイブ。 2020-12-25に閲覧。
- ^ Scheffler, Jonan (2016年11月10日). 「Ruby 3x3: Matz、Koichi、Tenderloveが語るRubyパフォーマンスの将来」Ruby。2019年5月10日時点のオリジナルよりアーカイブ。 2019年5月18日閲覧。
- ^ “Ruby 3.1.0 リリース”. ruby-lang.org . 2021年12月25日時点のオリジナルよりアーカイブ。2021年12月25日閲覧。
- ^ “Ruby 3.1.0 リリース”. 2021年12月26日時点のオリジナルよりアーカイブ。2021年12月26日閲覧。
- ^ “Ruby 3.2.0 リリース”. 2022年12月25日時点のオリジナルよりアーカイブ。2022年12月25日閲覧。
- ^ “Rubyプログラミング言語”。2020年1月18日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ Google Tech Talks – YouTubeの Ruby 1.9
- ^ abc Bill Venners. 「Rubyの哲学」。2019年7月5日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ “Welcome to RUBYWEEKLYNEWS.ORG”. 2017年7月4日. 2017年7月4日時点のオリジナルよりアーカイブ。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ 「Ruby 言語 FAQ: Ruby は... とどう違うのか?」。2015 年 5 月 8 日時点のオリジナルよりアーカイブ。2015年5 月 2 日閲覧。
- ^ Bruce Stewart (2001年11月29日). 「Rubyの創始者へのインタビュー」. O'Reilly Media. 2015年5月6日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ Bill Venners. 「Ruby による動的生産性」。2015 年 9 月 5 日時点のオリジナルよりアーカイブ。2015年5 月 2 日閲覧。
- ^ 「言語ワークベンチ: ドメイン固有言語のキラーアプリ?」martinfowler.com。 2021年5月2日時点のオリジナルよりアーカイブ。2015年5月2日閲覧。
- ^ 「Ruby – 実行時にクラスメソッドを追加する」。2007 年 9 月 22 日時点のオリジナルよりアーカイブ。2007 年 11 月 1 日に取得。
- ^ Bill Venners. 「Ruby のブロックとクロージャ」。2015 年 4 月 18 日時点のオリジナルよりアーカイブ。2015 年5 月 2 日閲覧。
- ^ “メソッド”.公式Ruby FAQ . 2022年6月28日時点のオリジナルよりアーカイブ。2021年6月20日閲覧。
- ^ Britt, James. 「Ruby 2.0.0 標準ライブラリドキュメント」。2013 年 11 月 13 日時点のオリジナルよりアーカイブ。2013年 12 月 9 日閲覧。
- ^ "[ruby-talk:01120] Re: while の値..." 2011-07-17 のオリジナルからアーカイブ。2008-12-06に取得。Ruby
の構文では、ステートメントは引数として出現できない式の特殊なケースにすぎません (例: 多重代入)。
- ^ "[ruby-talk:02460] Re: 優先順位に関する質問". 2004-07-22 のオリジナルからアーカイブ。2008-12-06に取得。
ステートメント [...] は、括弧で囲まない限り、式の一部にすることはできません。
- ^ “remove/virtual_module: Ruby コードを 3 倍以上高速化するために生まれました。うまくいけば”. GitHub . 2020 年 2 月 21 日. 2017 年 3 月 1 日時点のオリジナルよりアーカイブ。 2016 年8 月 29 日閲覧。
- ^ Peter Cooper (2010-05-18). 「Rubinius 1.0 のリリースの理由、内容、方法」。2010-05-24 時点のオリジナルよりアーカイブ。2010-05-23に閲覧。
- ^ Maya Stodte (2000 年 2 月). 「IBM developerWorks – Ruby: a new language」. 2000 年 8 月 18 日時点のオリジナルよりアーカイブ。2014 年3 月 3 日閲覧。
- ^ まつもとゆきひろ (2002年8月). 「lang-ruby-general: Re: Rubyの初期開発に関する質問」。2014年3月3日時点のオリジナルよりアーカイブ。2014年3月3日閲覧。
- ^ 「Ruby Toolbox」。2015年4月3日時点のオリジナルよりアーカイブ。2015年4月4日閲覧。
- ^ “Stats RubyGems.org your community gem host”. rubygems.org . 2021年12月10日時点のオリジナルよりアーカイブ。2021年12月10日閲覧。
- ^ “We retire raa.ruby-lang.org”. 2013-08-08. 2015-12-31時点のオリジナルよりアーカイブ。2016-01-03閲覧。
さらに読む
- ブラック、デイビッド、レオ、ジョセフ(2019年3月15日)『The Well-Grounded Rubyist(第3版)』、マニング出版、p. 584、ISBN 978-1617295218
- メッツ、サンディ(2018年8月22日)、実践的オブジェクト指向設計:Rubyを使用したアジャイル入門(第2版)、Addison-Wesley Professional、p. 288、ISBN 978-0-13-445647-8、2020年2月13日時点のオリジナルよりアーカイブ。2020年2月13日閲覧。
- クーパー、ピーター(2016年7月12日)、Beginning Ruby: From Novice to Professional(第3版)、Apress、p. 492、ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (2015 年 4 月 3 日)、『Ruby Cookbook: Recipes for Object-Oriented Scripting (Second ed.)』、O'Reilly Media、p. 963、ISBN 978-1449373719
- フルトン、ハル、アルコ、アンドレ(2015年3月2日)、The Ruby Way: Solutions and Techniques in Ruby Programming(第3版)、Addison-Wesley Professional、p. 816、ISBN 978-0-321-71463-3、2020年2月13日時点のオリジナルよりアーカイブ。2020年2月13日閲覧。
- Thomas, Dave; Fowler, Chad; Hunt, Andy (2013 年 7 月 7 日)、『プログラミング Ruby 1.9 および 2.0: 実用的なプログラマー ガイド(第 4 版)』、Pragmatic Bookshelf、p. 888、ISBN 978-1937785499
- マカナリー、ジェレミー、アーキン、アサフ(2009年3月28日)、Ruby in Practice(初版)、マニング出版、360ページ、ISBN 978-1933988474
- フラナガン、デイビッド、松本幸弘(2008年1月25日)『プログラミング言語 Ruby』(初版)、オライリーメディア、p. 446、ISBN 978-0-596-51617-8
- ベアード、ケビン(2007年6月8日)、Ruby by Example: Concepts and Code(初版)、No Starch Press、326ページ、ISBN 978-1593271480、2020年1月13日時点のオリジナルよりアーカイブ。2020年2月13日閲覧。
- フィッツジェラルド、マイケル (2007 年 5 月 14 日)、『Learning Ruby (初版)』、O'Reilly Media、p. 255、ISBN 978-0-596-52986-4
外部リンク
- 公式サイト
- Ruby ドキュメント
- ‹ Curlieテンプレートは 削除対象として検討されています。› Curlie の Ruby
