Ruby (programlama dili) - Ruby (programming language)
paradigma | Çoklu paradigma : işlevsel , zorunlu , nesne yönelimli , yansıtıcı |
---|---|
Tarafından tasarlandı | Yukihiro Matsumoto |
geliştirici | Yukihiro Matsumoto, et al. |
İlk ortaya çıktı | 1995 |
kararlı sürüm | |
Yazma disiplini | Ördek , dinamik , güçlü |
Kapsam | Sözcüksel, bazen dinamik |
uygulama dili | C |
işletim sistemi | Çapraz platform |
Lisans | Ruby Lisansı |
Dosya adı uzantıları | .rb |
İnternet sitesi | www |
Başlıca uygulamalar | |
Ruby MRI , TruffleRuby , YARV , Rubinius , MagLev , JRuby , MacRuby , RubyMotion , Mruby , IronRuby | |
Tarafından etkilenmiş | |
Ada , Basic , C++ , CLU , Dylan , Eiffel , Lisp , Lua , Perl , Python , Smalltalk | |
Etkilenen | |
Clojure , CoffeeScript , Crystal , D , Elixir , Groovy , Ioke , Julia , Mirah , Nu , Ring, Rust , Swift | |
|
Ruby , yorumlanmış , üst düzey , genel amaçlı bir programlama dilidir . Bu tasarlanmış ve tarafından 1990'ların ortasında geliştirilmiştir Yukihiro "Matz" Matsumoto içinde Japonya .
Ruby dinamik olarak yazılır ve çöp toplama ve tam zamanında derleme kullanır . Prosedürel , nesne yönelimli ve işlevsel programlama dahil olmak üzere çoklu programlama paradigmalarını destekler . Yaratıcıya göre Ruby, Perl , Smalltalk , Eiffel , Ada , BASIC ve Lisp'den etkilendi .
Tarih
Erken konsept
Matsumoto, Ruby'nin 1993'te dünyaya geldiğini söyledi. Ruby -talk e - posta listesine 1999 yılında yazdığı bir gönderide, dille ilgili ilk fikirlerinden bazılarını anlatıyor:
Meslektaşımla nesne yönelimli bir betik dili olasılığı hakkında konuşuyordum. Perl'i biliyordum (Perl4, Perl5 değil), ama gerçekten sevmedim, çünkü oyuncak bir dilin kokusu vardı (hala var). Nesne yönelimli dil çok umut verici görünüyordu. Python'u o zaman biliyordum . Ama beğenmedim, çünkü bunun gerçek bir nesne yönelimli dil olduğunu düşünmedim – OO özellikleri dile eklenmiş gibi görünüyordu. 15 yıllık bir dil manyağı ve OO hayranı olarak, gerçekten nesne yönelimli, kullanımı kolay bir betik dili istedim. Aradım ama bulamadım. Bu yüzden yapmaya karar verdim.
Matsumoto, Ruby'nin tasarımını, Smalltalk'taki gibi bir nesne sistemi, üst düzey işlevlerden ilham alan bloklar ve Perl'inki gibi pratik fayda ile özünde basit bir Lisp dili gibi olarak tanımlar.
"Ruby" adı, Matsumoto ve Keiju Ishitsuka arasında, dil için herhangi bir kod yazılmadan önce 24 Şubat 1993'te çevrimiçi bir sohbet oturumu sırasında ortaya çıktı. Başlangıçta iki isim önerildi: " Mercan " ve " Yakut ". Matsumoto, daha sonraki bir e-postada Ishitsuka'ya ikincisini seçti. Matsumoto daha sonra "Ruby" adını seçerken bir faktöre dikkat çekti - bu, meslektaşlarından birinin doğum taşıydı .
Erken sürümler
Ruby 0.95'in ilk kamuya açık sürümü 21 Aralık 1995'te Japon yerel haber gruplarında duyuruldu . Ardından, iki gün içinde Ruby'nin üç sürümü daha yayınlandı. Sürüm , yeni dil için ilk posta listesi olan Japonca yakut listesi posta listesinin piyasaya sürülmesiyle aynı zamana denk geldi .
Geliştirmenin bu aşamasında, nesne yönelimli tasarım, kalıtımlı sınıflar , karışımlar , yineleyiciler , kapatmalar , istisna işleme ve çöp toplama dahil olmak üzere Ruby'nin sonraki sürümlerinde tanıdık olan birçok özellik zaten mevcuttu .
Ruby 0.95'in 1995'te piyasaya sürülmesinin ardından, sonraki yıllarda Ruby'nin birkaç kararlı sürümü yayınlandı:
- Yakut 1.0: 25 Aralık 1996
- Ruby 1.2: Aralık 1998
- Ruby 1.4: Ağustos 1999
- Ruby 1.6: Eylül 2000
1997'de Ruby ile ilgili ilk makale Web'de yayınlandı. Aynı yıl, Matsumoto netlab.jp tarafından Ruby üzerinde tam zamanlı geliştirici olarak çalışmak üzere işe alındı.
1998'de, Matsumoto tarafından Ruby Uygulama Arşivi, Ruby için basit bir İngilizce ana sayfa ile birlikte başlatıldı.
1999'da, ilk İngilizce posta listesi ruby-talk başladı ve bu, Japonya dışındaki dile artan bir ilginin sinyalini verdi. Aynı yıl, Matsumoto ve Keiju Ishitsuka , Ekim 1999'da Japonya'da yayınlanan Nesne Yönelimli Komut Dosyası Dili Ruby (オブジェクト指向スクリプト言語 Ruby) adlı Ruby üzerine ilk kitabı yazdılar . Ruby üzerine Japonca yayınlanmış 20 kitap.
2000 yılına gelindiğinde Ruby, Japonya'da Python'dan daha popülerdi. Eylül 2000'de, ilk İngilizce kitap olan Programming Ruby basıldı ve daha sonra halka ücretsiz olarak yayınlandı ve Ruby'nin İngilizce konuşanlar arasında benimsenmesini daha da genişletti. 2002'nin başlarında, İngilizce ruby-talk e - posta listesi, Japonca'daki ruby-listesinden daha fazla mesaj alıyordu ve bu , Ruby'nin Japonca konuşulmayan dünyada artan popülaritesini gösteriyordu.
Yakut 1.8 ve 1.9
Ruby 1.8 ilk olarak Ağustos 2003'te piyasaya sürüldü, uzun bir süre stabil kaldı ve Haziran 2013'te kullanımdan kaldırıldı. Kullanımdan kaldırılmış olmasına rağmen, hala ona dayalı kodlar var. Ruby 1.8, Ruby 1.9 ile yalnızca kısmen uyumludur.
Ruby 1.8, birçok endüstri standardının konusu olmuştur. Ruby'nin dil özellikleri , Japon Endüstriyel Standartlar Komitesi'ne (JISC) ve ardından Uluslararası Standardizasyon Örgütü'ne (ISO) sunulmak üzere Bilgi-Teknoloji Tanıtım Ajansı'nın (bir Japon devlet kurumu) Açık Standartları Destekleme Merkezi tarafından geliştirilmiştir . 2011 yılında Japon Endüstri Standardı (JIS X 3017) ve 2012 yılında uluslararası standart ( ISO/IEC 30170 ) olarak kabul edilmiştir.
2005 yılı civarında, Ruby diline olan ilgi, Ruby'de yazılmış bir web çerçevesi olan Ruby on Rails ile birlikte arttı . Rails, Ruby'nin artan farkındalığıyla sık sık kredilendirilir.
31 Ekim 2011'de yayınlanan Ruby 1.9.3 ile geçerli olmak üzere, Ruby, Ruby Lisansı ve GPL kapsamında çift lisanslı olmaktan, Ruby Lisansı ve iki maddeli BSD lisansı altında çift lisanslı olmaya geçti. 1.9'un benimsenmesi, birçok popüler üçüncü taraf mücevherinin yeniden yazılmasını gerektiren 1.8'den yapılan değişikliklerle yavaşladı . Ruby 1.9, 1.8 serisi üzerinde birçok önemli değişiklik getiriyor. Örnekler şunları içerir:
- Blok yerel değişkenler (yerel olarak değişkenler blok beyan edildiği)
- ek bir lambda sözdizimi:
f = ->(a,b) { puts a + b }
- sembol tuşları için iki nokta üst üste kullanan ek bir Hash değişmez sözdizimi:
{symbol_key: "value"} == {:symbol_key => "value"}
- dize başına karakter kodlamaları desteklenir
- yeni soket API'si ( IPv6 desteği)
-
require_relative
ithalat güvenliği
yakut 2
Ruby 2.0, Ruby 1.9.3 ile tamamen geriye dönük uyumlu olacak şekilde tasarlandı. 24 Şubat 2013'teki resmi 2.0.0 sürümünden itibaren, yalnızca beş bilinen (küçük) uyumsuzluk vardı. Ruby 2.0, aşağıdakiler de dahil olmak üzere birkaç yeni özellik ekledi:
- yöntem anahtar kelime argümanları,
- bir
Module#prepend
sınıfı genişletmek için yeni bir yöntem , - bir dizi sembol oluşturmak için yeni bir hazır bilgi,
- Numaralandırılabilirlerin tembel değerlendirmesi için yeni API ve
- nesneleri Hash'lere dönüştürmek için #to_h kullanmanın yeni bir kuralı.
2.1.0'dan itibaren, Ruby'nin sürüm oluşturma politikası, anlamsal sürüm oluşturmaya daha çok benzeyecek şekilde değiştirildi .
Ruby 2.2.0 hızlandırma, hata düzeltmeleri ve kitaplık güncellemeleri içerir ve kullanımdan kaldırılmış bazı API'leri kaldırır. En önemlisi, Ruby 2.2.0 bellek işlemede değişiklikler getiriyor – artımlı bir çöp toplayıcı, sembollerin çöp toplama desteği ve doğrudan jemalloc'a karşı derleme seçeneği. Ayrıca vfork (2)'yi system() ve spawn() ile kullanmak için deneysel destek ve Unicode 7.0 spesifikasyonu için ek destek içerir . 2.2.1 sürümünden bu yana, PowerPC64 üzerindeki Ruby MRI performansı iyileştirildi. Kullanılmayan veya kaldırılan özellikler arasında callcc, DL kitaplığı, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application ve çeşitli C API işlevleri yer alır.
Ruby 2.3.0, Proc#call, Socket ve IO istisna anahtar kelimelerinin kullanımı, Thread#name işleme, varsayılan pasif Net::FTP bağlantıları ve Rake'in stdlib'den kaldırılması dahil olmak üzere birçok performans iyileştirmesi, güncellemesi ve hata düzeltmesi içerir. Diğer önemli değişiklikler şunları içerir:
- Tüm dize değişmezlerini varsayılan olarak dondurulmuş olarak işaretleme yeteneği ve sonuç olarak dize işlemlerinde büyük bir performans artışı.
- Yalnızca anahtarlar yerine anahtar/değer çiftlerinin doğrudan kontrol edilmesini sağlamak için karma karşılaştırma.
- Sıfır kullanımı kolaylaştırabilen yeni bir güvenli navigasyon operatörü
&.
(örneğin, yerine kullanabiliriz ).if obj && obj.foo && obj.foo.bar
if obj&.foo&.bar
- Did_you_mean mücevher artık varsayılan olarak paketlenmiş ve otomatik olarak benzer ad benzerliği önermek için başlangıçta gerekli olan NameError veya NoMethodError .
-
Derinlemesine yuvalanmış değerleri kolayca çıkarmak için Hash#dig ve Array#dig (örneğin verilen , Foo Baz değeri artık tarafından alınabilir ).
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
profile.dig(:social, :wikipedia, :name)
-
.grep_v(regexp)
bu, diğer yeni özelliklere ek olarak belirli bir normal ifadenin tüm olumsuz örnekleriyle eşleşecektir.
Ruby 2.4.0, karma tablo, Array#max, Array#min ve örnek değişken erişiminde performans iyileştirmeleri içerir. Diğer dikkate değer değişiklikler şunları içerir:
- Binding#irb: Binding.pry'ye benzer bir REPL oturumu başlatın
- Birleştirmek Fixnum ve bignum içine Tamsayı sınıfında
- String, yalnızca ASCII'yi değil, Unicode vaka eşlemelerini de destekler
- Regexp#match'in daha hızlı bir boole versiyonu olan Regexp#match? adlı yeni bir yöntem
- İş parçacığı kilitlenme algılaması artık iş parçacıklarını geri izleme ve bağımlılıklarıyla gösteriyor
Ruby 2.5.0'daki dikkate değer birkaç değişiklik, kurtarma ve sağlama deyimlerinin otomatik olarak çevreleyen bir do-end bloğu kullanmasını (ekstra başlangıç bitiş bloklarına daha az ihtiyaç ), verim_self ile yöntem zincirlemeyi , dal kapsamı ve yöntem kapsamı ölçümü için destek ve daha kolay içerir. Hash #slice ve Hash# transform_keys ile hash dönüşümleri Bunun üzerine daha hızlı blok geçişi (3 kat daha hızlı), daha hızlı Mutex'ler, daha hızlı ERB şablonları ve bazı birleştirme yöntemlerinde iyileştirmeler gibi birçok performans iyileştirmesi gelir.
Ruby 2.6.0'daki dikkate değer birkaç değişiklik, deneysel bir tam zamanında derleyiciyi (JIT) ve RubyVM::AbstractSyntaxTree'yi (deneysel) içerir.
Ruby 2.7.0'daki dikkate değer birkaç değişiklik, kalıp Eşleştirme (deneysel), REPL iyileştirmeleri, bir sıkıştırma GC'si ve konumsal ve anahtar kelime argümanlarının ayrılmasını içerir.
yakut 3
Ruby 3.0.0, 2020'de Noel Günü'nde piyasaya sürüldü. Ruby 3x3 olarak bilinir. Ana amaçlarından biri, programları daha hızlı hale getirmek için yorumlayıcıyı Tam Zamanında Derleyiciye geçirmekti.
Ruby 3.1'in 2021'de Noel Günü'nde piyasaya sürülmesi planlanıyor.
Sürüm tablosu
Sürüm | En son ufacık sürüm | İlk çıkış tarihi | Destek aşamasının sonu | Güvenlik bakım aşamasının sonu |
---|---|---|---|---|
1.0 | NA | 1996-12-25 | NA | NA |
1.8 | 1.8.7-p375 | 2003-08-04 | 2012-06 | 2014-07-01 |
1.9 | 1.9.3-p551 | 2007-12-25 | 2014-02-23 | 2015-02-23 |
2.0 | 2.0.0-p648 | 2013-02-24 | 2015-02-24 | 2016-02-24 |
2.1 | 2.1.10 | 2013-12-25 | 2016-03-30 | 2017-03-31 |
2.2 | 2.2.10 | 2014-12-25 | 2017-03-28 | 2018-03-31 |
2.3 | 2.3.8 | 2015-12-25 | 2018-06-20 | 2019-03-31 |
2.4 | 2.4.10 | 2016-12-25 | 2019-04-01 | 2020-04-01 |
2.5 | 2.5.9 | 2017-12-25 | 2021-04-05 | 2021-04-05 |
2.6 | 2.6.8 | 2018-12-25 | 2021-04-05 | 2022-04-05 |
2.7 | 2.7.4 | 2019-12-25 | TBA | TBA |
3.0 | 3.0.2 | 2020-12-25 | TBA | TBA |
3.1 | 3.1.0 | 2021-12-25 | TBA | TBA |
Efsane:
Eski versiyon
Eski sürüm, hala korunuyor
En son sürüm
Gelecek sürüm
|
Semantik ve felsefe
Matsumoto, Ruby'nin iyi kullanıcı arayüzü tasarımı ilkelerini izleyerek programcı üretkenliği ve eğlencesi için tasarlandığını söyledi . 2008'deki bir Google Tech Talk'ta Matsumoto ayrıca, "Ruby'nin dünyadaki her programcının üretken olmasına, programlamanın keyfini çıkarmasına ve mutlu olmasına yardımcı olduğunu görmeyi umuyorum. Ruby dilinin temel amacı budur." Sistem tasarımının bilgisayardan çok insan ihtiyaçlarını vurgulaması gerektiğini vurguluyor:
Çoğu zaman insanlar, özellikle bilgisayar mühendisleri, makinelere odaklanır. "Bunu yaparak makine hızlı çalışacak. Bunu yaparak makine daha verimli çalışacak. Bunu yaparak makine bir şeyler yapacak" diye düşünüyorlar. Makinelere odaklanıyorlar. Ama aslında insanlara odaklanmamız gerekiyor, insanların makinelerin programlamasını veya uygulamalarını çalıştırmayı nasıl önemsediği üzerine. Biz ustayız. Onlar köleler.
Matsumoto, birincil tasarım hedefinin, programcı çalışmalarını ve olası kafa karışıklığını en aza indirerek kullanmaktan zevk aldığı bir dil yapmak olduğunu söyledi. Ruby'nin tasarımına en az şaşkınlık (POLA) ilkesini uygulamadığını ; Mayıs 2005'te comp.lang.ruby haber grubuyla ilgili bir tartışmada Matsumoto, Ruby'yi POLA'dan uzaklaştırmaya çalıştı ve herhangi bir tasarım seçiminin birileri için şaşırtıcı olacağından, sürprizi değerlendirmek için kişisel bir standart kullandığını açıkladı. Bu kişisel standart tutarlı kalırsa, standarda aşina olanlar için çok az sürpriz olacaktır.
Matsumoto bir röportajda bunu şu şekilde tanımladı:
Herkesin bireysel bir geçmişi vardır. Birisi Python'dan gelebilir, başka biri Perl'den gelebilir ve dilin farklı yönlerine şaşırabilirler. Sonra yanıma geliyorlar ve 'Dilin bu özelliğine şaşırdım, bu yüzden Ruby en az sürpriz ilkesini ihlal ediyor' diyorlar. Beklemek. Beklemek. En az sürpriz ilkesi sadece sizin için değil. En az sürpriz prensibi az ilkesi demektir benim için sürpriz. Ve Ruby'yi çok iyi öğrendikten sonra en az sürpriz ilkesi anlamına gelir. Örneğin, Ruby'yi tasarlamaya başlamadan önce bir C++ programcısıydım. Sadece iki veya üç yıl boyunca C++ ile programladım. Ve iki yıllık C++ programlamasından sonra hala beni şaşırtıyor.
Ruby nesne yönelimlidir : diğer birçok dilin ilkel olarak atadığı türlerin sınıfları ve örnekleri ( tamsayılar , booleanlar ve " null " gibi) dahil olmak üzere her değer bir nesnedir . Değişkenler her zaman nesnelere referanslar tutar. Her işlev bir yöntemdir ve yöntemler her zaman bir nesne üzerinde çağrılır. Üst düzey kapsamda tanımlanan yöntemler, Object sınıfının yöntemleri haline gelir. Bu sınıf diğer tüm sınıfların atası olduğundan, bu tür yöntemler herhangi bir nesne üzerinde çağrılabilir. Ayrıca, "küresel" prosedürler olarak etkin bir şekilde hizmet veren tüm kapsamlarda görünürler. Yakut destekleyen miras ile dinamik dağıtım , Mixins ve tekil yöntemler (ait ve tek bir için tanımlandığı örneği yerine sınıfı tarif edilmiştir). Ruby çoklu kalıtımı desteklemese de , sınıflar modülleri mixins olarak içe aktarabilir .
Ruby, çok paradigmalı bir programlama dili olarak tanımlanmıştır : nesne yönelimli (her şey bir nesnedir) veya işlevsel programlama ile prosedürel programlamaya (sınıfların dışında işlevlerin/değişkenlerin tanımlanması onları kökün, 'öz' Nesnenin bir parçası yapar) sağlar . sahip anonim fonksiyonları , kilitler ve devamlılık ; tablolar tüm değerleri var ve işlevleri son değerlendirme dönüş). İç gözlem , yansıtma ve metaprogramlama desteğinin yanı sıra yorumlayıcı tabanlı iş parçacıkları desteğine sahiptir . Ruby, dinamik yazma özelliğine sahiptir ve parametrik polimorfizmi destekler .
Ruby FAQ'a göre, sözdizimi Perl'e benzer ve anlambilim Smalltalk'a benzer , ancak Python'dan büyük ölçüde farklıdır .
Özellikleri
- İyice nesne yönelimli ile kalıtım , Mixins ve metaclasses
- Dinamik yazma ve ördek yazma
- Her şey bir olduğunu ifade (hatta ifadeleri ) ve her şey yürütülür imperatively (hatta beyanlarına )
- Sözdizimsel gürültüyü en aza indiren ve alana özgü diller için bir temel görevi gören kısa ve esnek sözdizimi
- Metaprogramlamayı kolaylaştırmak için nesnelerin dinamik yansıması ve değiştirilmesi
- Sözcük kapanışları , yineleyiciler ve jeneratörler bir ile, blok sözdizimi
- Diziler , karmalar , düzenli ifadeler ve semboller için değişmez gösterim
- Dizelere kod yerleştirme ( enterpolasyon )
- Varsayılan bağımsız değişkenler
- İşaretler veya bunların eksikliği ile gösterilen dört değişken kapsam düzeyi ( global , sınıf , örnek ve yerel )
- Çöp toplama
- Birinci sınıf devamlar
- Katı boole zorlama kuralları ( ve dışında her şey doğrudur )
false
nil
- İstisna işleme
- Operatör aşırı yüklemesi
- Rasyonel sayılar , karmaşık sayılar ve keyfi kesinlikli aritmetik için yerleşik destek
- Özel gönderme davranışı (
method_missing
ve aracılığıylaconst_missing
) - Yerel iplikler ve işbirlikçi elyaflar (lifler bir 1.9/ YARV özelliğidir)
- Unicode ve çoklu karakter kodlamaları için destek .
- C'de yerel eklenti API'si
- Etkileşimli Ruby Shell (bir REPL )
- RubyGems aracılığıyla merkezi paket yönetimi
- Tüm büyük platformlarda uygulandı
- YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , lanetler , zlib ve Tk için modüller içeren geniş standart kitaplık
- Tam zamanında derleme
- Etkileşimli Yakut Shell ,
irb
bu yorumlayıcı etkileşimli komut satırı hızla testi koduna kullanılabilir
Sözdizimi
Ruby'nin sözdizimi büyük ölçüde Perl ve Python'unkine benzer . Sınıf ve yöntem tanımları anahtar kelimelerle belirtilirken kod blokları anahtar kelimeler veya parantezler ile tanımlanabilir. Perl'in aksine, değişkenlerin önüne zorunlu olarak bir sigil konulmaz . Mühür kullanıldığında, değişkenin kapsamının anlamını değiştirir. Pratik amaçlar için ifadeler ve ifadeler arasında bir ayrım yoktur . Satır sonları önemlidir ve bir ifadenin sonu olarak alınır; noktalı virgül eşdeğer olarak kullanılabilir. Python'dan farklı olarak, girinti önemli değildir.
Python ve Perl'den farklarından biri, Ruby'nin tüm örnek değişkenlerini sınıfa tamamen özel tutması ve bunları yalnızca erişim yöntemleri ( attr_writer
, attr_reader
, vb.) aracılığıyla ortaya çıkarmasıdır . C++ veya Java gibi diğer dillerin "alıcı" ve "ayarlayıcı" yöntemlerinden farklı olarak, Ruby'deki erişimci yöntemleri, metaprogramlama yoluyla tek bir kod satırıyla oluşturulabilir ; ancak erişimci yöntemleri, geleneksel C++ ve Java tarzında da oluşturulabilir. Bu yöntemlerin çağrılması parantez kullanılmasını gerektirmediğinden, tek bir çağrı kodu satırını değiştirmeden veya C# ve VB.NET özelliğine benzer işlevsellik elde etmek için herhangi bir yeniden düzenleme yapmak zorunda kalmadan bir örnek değişkeni tam işleve dönüştürmek önemsizdir. üyeler.
Python'un özellik tanımlayıcıları benzerdir, ancak geliştirme sürecinde bir takas ile birlikte gelir. Python'da herkese açık bir örnek değişkeni kullanarak başlar ve daha sonra uygulamayı bir özellik tanımlayıcısı aracılığıyla açığa çıkan özel bir örnek değişkeni kullanacak şekilde değiştirirse, sınıfın içindeki kodun genel mülk yerine özel değişkeni kullanacak şekilde ayarlanması gerekebilir. . Ruby'nin tasarımı, tüm örnek değişkenlerini özel olmaya zorlar, ancak aynı zamanda bildirim set
ve get
yöntemler için basit bir yol sağlar . Bu, Ruby'de bir sınıfın iç üyelerine sınıfın dışından asla doğrudan erişilemeyeceği fikriyle uyumludur; bunun yerine, kişi sınıfa bir mesaj iletir ve bir yanıt alır.
Uygulamalar
Matz'ın Ruby yorumlayıcısı
Orijinal Ruby yorumlayıcısına genellikle Matz'ın Ruby Yorumlayıcısı veya MRI adı verilir. Bu uygulama C ile yazılmıştır ve kendi Ruby'ye özgü sanal makinesini kullanır .
Standartlaştırılmış ve kullanımdan kaldırılmış Ruby 1.8 uygulaması , tek geçişli yorumlanmış bir dil olarak C ile yazılmıştır .
Ruby 1.9 ile başlayan ve Ruby 2.x ve üzeri ile devam eden resmi Ruby yorumlayıcısı YARV ("Yet Another Ruby VM") olmuştur ve bu uygulama, MRI'ın önceki sürümlerinde kullanılan daha yavaş sanal makinenin yerini almıştır.
Alternatif uygulamalar
2018 itibariyle, JRuby , Rubinius ve mruby dahil olmak üzere bir dizi alternatif Ruby uygulaması vardır . JRuby ve Rubinius'un tam zamanında derleme sağlaması ve mruby'nin de önceden derleme sağlamasıyla her biri farklı bir yaklaşım benimser .
Ruby'nin üç ana alternatif uygulaması vardır:
- JRuby , Java sanal makinesinde çalışan karışık bir Java ve Ruby uygulaması . JRuby şu anda Ruby 2.5'i hedefliyor.
- TruffleRuby ile Truffle dil uygulama çerçevesini kullanarak bir Java uygulaması GraalVM
- Rubinius , çalışma zamanında makine kodunu derlemek için LLVM kullanan bir C++ bayt kodu sanal makinesi . Bayt kodu derleyicisi ve çoğu çekirdek sınıf saf Ruby ile yazılmıştır. Rubinius şu anda Ruby 2.3.1'i hedefliyor.
Diğer Ruby uygulamaları şunları içerir:
- Maglev , bir Smalltalk uygulanması bu konuda çalışır GemTalk Systems'in ' Gemstone / S VM
- mruby , bir uygulama benzer bir damarda, C koduna eklenmesidir üzere tasarlanmıştır Lua . Şu anda Yukihiro Matsumoto ve diğerleri tarafından geliştirilmektedir.
- RGSS veya Ruby Game Scripting System, RPG Maker yazılım serisi tarafından oyun tasarımı ve RPG Maker motorunun modifikasyonu için kullanılan tescilli bir uygulama
- julializer bir transpiler Ruby (kısmi) Julia . Örneğin Ruby veya JRuby uygulamaları üzerinde büyük bir hızlanma için kullanılabilir (yalnızca sayısal kod için faydalı olabilir).
- Topaz , Python ile yazılmış bir Ruby uygulaması
- Opal , Ruby'den JavaScript'e derleyen web tabanlı bir yorumlayıcı
Artık kullanılmayan diğer Ruby uygulamaları şunlardı:
- MacRuby , Objective-C çalışma zamanında bir Mac OS X uygulaması . İOS muadili RubyMotion olarak adlandırılır .
- IronRuby , .NET Framework üzerinde bir uygulama
- Cardinal, Parrot sanal makinesi için bir uygulama
- Genellikle ree olarak kısaltılan Ruby Enterprise Edition , büyük ölçekli Ruby on Rails projelerini işlemek için optimize edilmiş bir uygulama
- HotRuby , Ruby programlama dilinin bir JavaScript ve ActionScript uygulaması
Ruby uygulamalarının olgunluğu, Ruby on Rails (Rails) çerçevesini çalıştırma yetenekleriyle ölçülme eğilimindedir , çünkü uygulanması karmaşıktır ve Ruby'ye özgü birçok özelliği kullanır. Belirli bir uygulamanın bu hedefe ulaştığı noktaya "Rails tekilliği" denir. Referans uygulaması, JRuby ve Rubinius, bir üretim ortamında Rails'i değiştirilmeden çalıştırabilir.
Platform desteği
Matsumoto ilk olarak Ruby'yi 4.3BSD tabanlı Sony NEWS-OS 3.x üzerinde geliştirdi , ancak daha sonra çalışmalarını SunOS 4.x'e ve son olarak da Linux'a taşıdı .
1999 yılına kadar Ruby'nin NEWS-OS, SunOS, AIX , SVR4 , Solaris , NEC UP-UX , NeXTSTEP , BSD, Linux, Mac OS , DOS , Windows ve BeOS dahil olmak üzere birçok farklı işletim sisteminde çalıştığı biliniyordu .
Modern Ruby sürümleri ve uygulamaları Linux, BSD, Solaris, AIX, macOS , Windows, Windows Phone , Windows CE , Symbian OS , BeOS, OpenVMS ve IBM i gibi birçok işletim sisteminde mevcuttur .
Ruby programlama dili, Jelastic , Heroku , Google Cloud Platform ve diğerleri gibi bir dizi bulut barındırma platformunda desteklenir .
Depolar ve kütüphaneler
RubyGems , Ruby'nin paket yöneticisidir. Bir Ruby paketine "gem" denir ve komut satırı aracılığıyla kurulabilir. Çoğu mücevher kitaplıktır, ancak IDE'ler gibi uygulamalar olan birkaç tane vardır . RubyGems.org'da barındırılan 10.000'den fazla Ruby taşı vardır .
Birçok yeni ve mevcut Ruby kitaplığı, Git için sürüm kontrol deposu barındırma hizmeti sunan GitHub'da barındırılmaktadır .
Ruby programlama için uygulamaları, belgeleri ve kitaplıkları barındıran Ruby Uygulama Arşivi, işlevinin RubyGems'e aktarıldığı 2013 yılına kadar muhafaza edildi.
Ayrıca bakınız
- programlama dillerinin karşılaştırılması
- Metasploit Projesi
- Neden (dokunaklı) Ruby Kılavuzu
- XRuby
- Kristal (programlama dili)
Referanslar
daha fazla okuma
- Siyah, David; Leo, Joseph (15 Mart 2019), The Well-Grounded Rubyist (Üçüncü baskı), Manning Publications , s. 584, ISBN 978-1617295218
- Metz, Sandi (22 Ağustos 2018), Pratik Nesne Yönelimli Tasarım: Ruby Kullanan Çevik Bir Astar (İkinci baskı), Addison-Wesley Professional , s. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (12 Temmuz 2016), Başlangıç Yakutu: Acemiden Profesyonele (Üçüncü baskı), Apress , s. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (3 Nisan 2015), Ruby Cookbook: Object-Oriented Scripting için Tarifler (İkinci baskı), O'Reilly Media , s. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2 Mart 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Üçüncü baskı), Addison-Wesley Professional , s. 816, ISBN 978-0-321-71463-3
- Thomas, Dave; Fowler, Çad; Hunt, Andy (7 Temmuz 2013), Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (Dördüncü baskı), Pragmatic Bookshelf , s. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (28 Mart 2009), Ruby in Practice (İlk baskı), Manning Publications , s. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (25 Ocak 2008), The Ruby Programming Language (İlk baskı), O'Reilly Media , s. 446 , ISBN 978-0-596-51617-8
- Baird, Kevin (8 Haziran 2007), Örnekle Ruby: Concepts and Code (İlk baskı), No Starch Press , s. 326, ISBN 978-1593271480
- Fitzgerald, Michael (14 Mayıs 2007), Learning Ruby (İlk baskı), O'Reilly Media , s. 255 , ISBN 978-0-596-52986-4