Özet
ruby [--copyright] [--version] [-SUacdlnpswvy] [-0[octal]] [-C directory]
[-E external[:internal]] [-F[pattern]] [-I directory] [-K[c]] [-T[level]] [-W[level]]
[-e command] [-i[extension]] [-r library] [-x[directory]] [--{enable|disable}-FEATURE]
[--dump=target] [--verbose] [--] [program_file] [argument ...]
Açıklama
Ruby, hızlı ve kolay nesne yönelimli programlama için geliştirilmiş yorumlamalı bir betik dilidir. Metin dosyalarını işlemek ve sistem yönetimi görevlerini yerine getirmek için (Perl'de olduğu gibi) birçok özelliğe sahiptir. Basit, doğrudan ve genişletilebilirdir.
Kolay nesne yönelimli programlama için bir dil istiyorsanız veya Perl'in karmaşıklığından hoşlanmıyorsanız ya da LISP kavramını beğenip çok fazla parantez kullanılmasını sevmiyorsanız, Ruby tercih edeceğiniz dil olabilir.
Özellikler
Ruby'nin özellikleri şunlardır:
Yorumlamalı Ruby yorumlamalı bir dildir, bu yüzden Ruby ile yazılmış programları yürütmek için yeniden derlemeniz gerekmez.
Değişkenlerin türü yoktur (dinamik türleme) Ruby'deki değişkenler her türden veriyi içerebilir. Değişken türleme konusunda endişelenmenize gerek yoktur. Sonuç olarak, daha zayıf bir derleme zamanı denetimine sahiptir.
Bildirime gerek yoktur Ruby programlarınızda değişkenleri herhangi bir bildirim yapmadan kullanabilirsiniz. Değişken isimleri kapsamlarını (global, sınıf, örnek veya yerel) belirtir.
Basit sözdizimi Ruby, Eiffel'den hafifçe etkilenmiş basit bir sözdizimine sahiptir.
Kullanıcı düzeyinde bellek yönetimi yoktur Ruby otomatik bellek yönetimine sahiptir. Artık hiçbir yerden referans verilmeyen nesneler, yorumlayıcıya yerleşik çöp toplayıcı (garbage collector) tarafından otomatik olarak toplanır.
Her şey bir nesnedir Ruby tamamen nesne yönelimli bir dildir ve geliştirilmesinden bu yana da öyle olmuştur. Tamsayılar gibi temel veriler bile nesne olarak görülür.
Sınıf, kalıtım ve metotlar Nesne yönelimli bir dil olan Ruby, doğal olarak sınıflar, kalıtım ve metotlar gibi temel özelliklere sahiptir.
Tekil (Singleton) metotlar Ruby, belirli nesneler için metotlar tanımlama yeteneğine sahiptir. Örneğin, düğme için tekil (singleton) bir metot tanımlayarak belirli bir arayüz bileşeni (widget) için düğmeye basma eylemi tanımlayabilirsiniz. Veya dilerseniz tekil metotları kullanarak kendi prototip tabanlı nesne sisteminizi oluşturabilirsiniz.
Modüller aracılığıyla Mix-in Ruby, kafa karışıklığına yol açtığı için kasıtlı olarak çoklu kalıtıma sahip değildir. Bunun yerine Ruby, kalıtım ağacı boyunca gerçeklemeleri (implementasyonları) paylaşma yeteneğine sahiptir. Buna genellikle 'Mix-in' denir.
Yineleyiciler (Iterators) Ruby, döngü soyutlaması için yineleyicilere (iterators) sahiptir.
Kapanışlar (Closures) Ruby'de prosedürü nesneleştirebilirsiniz.
Metin işleme ve düzenli ifadeler (regular expressions) Ruby, Perl'de olduğu gibi bir dizi metin işleme özelliğine sahiptir.
M17N, karakter kümesinden bağımsız Ruby, çok dillileştirilmiş programlamayı destekler. Unicode'a bağımlı olmadan, birçok farklı doğal dilde yazılmış ve birçok farklı karakter kodlamasıyla kodlanmış metinleri işlemek kolaydır.
Büyük sayılar (Bignums) Yerleşik büyük sayılar (bignums) ile örneğin factorial(400) hesaplayabilirsiniz.
Yansıma (Reflection) ve alana özgü diller (domain specific languages) Sınıf (Class) da Class sınıfının bir örneğidir. Sınıfların ve metotların tanımlanması, tıpkı 1+1 gibi bir ifadedir. Böylece programlarınız program bile yazabilir ve değiştirebilir. Böylelikle uygulamanızı Ruby'nin üzerinde kendi programlama dilinizde yazabilirsiniz.
İstisna işleme (Exception handling) Java(tm) teknolojisinde olduğu gibi.
İşletim sistemine doğrudan erişim Ruby, sistem programlamada sıkça kullanılan UNIX sistem çağrılarının çoğunu kullanabilir.
Dinamik yükleme Çoğu UNIX sisteminde, nesne dosyalarını (object files) Ruby yorumlayıcısına anında (on-the-fly) yükleyebilirsiniz.
Zengin kütüphaneler Ruby ile birlikte gelen "yerleşik kütüphaneler" (builtin libraries) ve "standart kütüphaneler"e (standard libraries) ek olarak, 'RubyGems' adı verilen paket yönetim sistemi (yani gem(1) komutu) aracılığıyla çok miktarda üçüncü taraf kütüphanesi ("gems") mevcuttur. İhtiyacınız olan gem'leri bulmak için RubyGems.org (https://rubygems.org/) adresini ziyaret edin ve nasıl geliştirilip kullanıldıklarını görmek için GitHub (https://github.com/) adresini keşfedin.
Seçenekler
Ruby yorumlayıcısı aşağıdaki komut satırı seçeneklerini (anahtarlarını) kabul eder. Bunlar perl(1) seçeneklerine oldukça benzerdir.
--copyright: Telif hakkı bildirimini yazdırır ve herhangi bir betik çalıştırmadan hemen çıkar.--version: Ruby yorumlayıcısının sürümünü yazdırır ve herhangi bir betik çalıştırmadan hemen çıkar.-0[octal]: ("Sıfır" rakamı.) Giriş kaydı ayırıcısını ($/) sekizli (octal) bir sayı olarak belirtir. Eğer herhangi bir rakam verilmezse, null karakteri ayırıcı olarak kabul edilir. Diğer anahtarlar rakamları takip edebilir. -00 Ruby'yi paragraf moduna geçirir. -0777, bu değere sahip geçerli bir karakter olmadığından Ruby'nin tüm dosyayı tek bir dize olarak tek seferde okumasını sağlar.
-C directory
-X directory: Ruby'nin belirtilen dizine geçiş yapmasını sağlar.
-E external[:internal] --encoding external[:internal] Dış kodlamalar (external encodings) ve iç kodlama (internal encoding) için varsayılan değerleri belirtir. Değerler iki nokta üst üste (:) ile ayrılmalıdır.
İç kodlama değerini belirtmeyebilirsiniz, bu durumda değer (Encoding.default_internal) nil olacaktır.
--external-encoding=encoding --internal-encoding=encoding Varsayılan dış veya iç karakter kodlamasını belirtir.
-F pattern: Giriş alanı ayırıcısını ($;) belirtir.-I directory: Ruby'ye kütüphane betiklerini nereden yükleyeceğini söylemek için kullanılır. Dizin yolu, yükleme yolu değişkenine ($:) eklenecektir.-K kcode: KANJI (Japonca) kodlamasını belirtir. Betik kodlamaları (ENCODING) ve dış kodlamalar (Encoding.default_external) için varsayılan değer belirtilen değer olacaktır. kcode aşağıdakilerden biri olabilir:
e EUC-JP
s Windows-31J (CP932)
u UTF-8
n ASCII-8BIT (BINARY)
-S: Adı bir eğik çizgi ile başlamadığı sürece, Ruby'nin betiği aramak için PATH çevre değişkenini kullanmasını sağlar. Bu, bunu desteklemeyen makinelerde aşağıdaki şekilde #! ifadesini taklit etmek için kullanılır:
#! /usr/local/bin/ruby
This line makes the next one a comment in Ruby \
exec /usr/local/bin/ruby -S $0 $*
Bazı sistemlerde $0 her zaman tam yol adını içermez, bu nedenle gerektiğinde (gömülü boşlukları ve benzerlerini işlemek için) Ruby'ye betiği aramasını söylemek üzere -S anahtarına ihtiyacınız vardır. $* yerine daha iyi bir yapı ${1+"$@"} olabilir, ancak betik csh(1) tarafından yorumlanıyorsa bu çalışmaz.
-T[level=1]: Belirtilen seviyede (varsayılan 1) leke (taint) kontrollerini etkinleştirir.-U: İç kodlamalar (Encoding.default_internal) için varsayılan değeri UTF-8 olarak ayarlar.-W[level=2]: Başlangıçta sürüm mesajını yazdırmadan belirtilen seviyede ayrıntılı (verbose) modu etkinleştirir. Seviye şunlar olabilir:
0 Ayrıntılı mod "sessizdir" (silence). $VERBOSE değerini nil yapar.
1 Ayrıntılı mod "orta" (medium) düzeydedir. $VERBOSE değerini false yapar.
2 (varsayılan) Ayrıntılı mod "ayrıntılıdır" (verbose). $VERBOSE değerini true yapar. -W2, -w ile aynıdır.
-a: -n veya -p ile kullanıldığında otomatik bölme (auto-split) modunu etkinleştirir. Otomatik bölme modunda, Ruby her döngünün başında şunu yürütür: $F = $_.split at beginning of each loop.-c: Ruby'nin betiğin sözdizimini kontrol etmesini ve yürütmeden çıkmasını sağlar. Sözdizimi hatası yoksa, Ruby standart çıktıya “Syntax OK” yazdıracaktır.
-d
--debug: Hata ayıklama (debug) modunu etkinleştirir. $DEBUG değeri true olarak ayarlanacaktır.-e command: Ruby'ye geri kalan argümanlarda bir betik dosya adı aramamasını söylerken, komut satırından betiği belirtir.
-h
--help: Seçeneklerin bir özetini yazdırır.-i extension: Yerinde düzenleme (in-place-edit) modunu belirtir. Uzantı belirtilmişse, bir yedek kopya oluşturmak için eski dosya adına eklenir. Örneğin:
% echo matz > /tmp/junk % cat /tmp/junk matz % ruby -p -i.bak -e '$_.upcase!' /tmp/junk % cat /tmp/junk MATZ % cat /tmp/junk.bak matz
-l: (Küçük "L" harfi.) Otomatik satır sonu işlemeyi etkinleştirir; bu, öncelikle $\ değişkenini $/ değerine ayarlamak ve ikinci olarak okunan her satırı chop! kullanarak kırpmak anlamına gelir.-n: Ruby'nin betiğinizin etrafında aşağıdaki döngünün olduğunu varsaymasını sağlar, bu da dosya adı argümanları üzerinde sed -n veya awk gibi yinelenmesini sağlar.
while gets ... end
-p: Çoğunlukla -n anahtarıyla aynı şekilde davranır, ancak her döngünün sonunda $_ değişkeninin değerini yazdırır. Örneğin:
% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"' MATZ
-r library: Ruby'nin require kullanarak kütüphaneyi yüklemesini sağlar. -n veya -p kullanırken kullanışlıdır.-s: Betik adından sonra ancak herhangi bir dosya adı argümanından önce (veya bir -- işaretinden önce) anahtarların çözümlenmesini etkinleştirir. Burada bulunan tüm anahtarlar ARGV dizisinden kaldırılır ve betikteki ilgili değişken ayarlanır. Örneğin:
#! /usr/local/bin/ruby -s
`-xyz' anahtarı ile çağrılırsa "true" yazdırır.
print "true\n" if $xyz
-v: Ayrıntılı (verbose) modu etkinleştirir. Ruby başlangıçta kendi sürümünü yazdıracak ve $VERBOSE değişkenini true olarak ayarlayacaktır. Bazı metotlar, bu değişken true ise ek mesajlar yazdırır. Eğer bu anahtar verilirse ve başka bir anahtar mevcut değilse, Ruby sürümünü yazdırdıktan sonra çıkar.-w: Başlangıçta sürüm mesajını yazdırmadan ayrıntılı modu etkinleştirir. $VERBOSE değişkenini true olarak ayarlar.-x[directory]: Ruby'ye betiğin bir mesajın içine gömüldüğünü söyler. "#!" ile başlayan ve "ruby" dizesini içeren ilk satıra kadar olan baştaki gereksiz kısımlar atılacaktır. O satırdaki tüm anlamlı anahtarlar uygulanacaktır. Betiğin sonu EOF, ^D (control-D), ^Z (control-Z) veya rezerve edilmiş END sözcüğü ile belirtilmelidir. Dizin adı belirtilmişse, Ruby betiği yürütmeden önce o dizine geçecektir.
-y
--yydebug: KULLANMAYIN.
Derleyici hata ayıklama modunu etkinleştirir. Ruby derleme sırasında bir dizi dahili durum mesajı yazdıracaktır. Bu anahtarı yalnızca Ruby yorumlayıcısında hata ayıklayacaksanız belirtin.
--disable-FEATURE --enable-FEATURE Belirtilen ÖZELLİĞİ (FEATURE) devre dışı bırakır (veya etkinleştirir). --disable-gems
--enable-gems: RubyGems kütüphanelerini devre dışı bırakır (veya etkinleştirir). Varsayılan olarak Ruby, yüklü her gem'in en son sürümünü yükleyecektir. RubyGems etkinse Gem sabiti true, aksi takdirde false olur.
--disable-rubyopt
--enable-rubyopt: RUBYOPT çevre değişkenini yoksayar (veya dikkate alır). Varsayılan olarak Ruby bu değişkeni dikkate alır.
--disable-all
--enable-all: Tüm özellikleri devre dışı bırakır (veya etkinleştirir).--dump=target: Bazı bilgileri döker (dump).
Belirtilen hedefi yazdırır. Hedef (target) şunlardan biri olabilir:
version sürüm açıklaması, --version ile aynı
usage kısa kullanım mesajı, -h ile aynı
help uzun yardım mesajı, --help ile aynı
syntax sözdizimi kontrolü, -c veya --yydebug ile aynı
yydebug derleyici hata ayıklama modu, --yydebug ile aynı. Bu anahtarı yalnızca Ruby yorumlayıcısında hata ayıklayacaksanız belirtin.
parsetree
parsetree_with_comment AST düğüm ağacı. Bu anahtarı yalnızca Ruby yorumlayıcısında hata ayıklayacaksanız belirtin.
insns ayrıştırılmış (disassembled) talimatlar. Bu anahtarı yalnızca Ruby yorumlayıcısında hata ayıklayacaksanız belirtin.
--verbose: Başlangıçta sürüm mesajını yazdırmadan ayrıntılı modu etkinleştirir. $VERBOSE değişkenini true olarak ayarlar. Bu anahtar verilirse ve herhangi bir betik argümanı (betik dosyası veya -e seçenekleri) mevcut değilse, Ruby hemen çıkar.
Çevre Değişkenleri
RUBYLIB Ruby'nin kütüphane yükleme yoluna ($:) eklenen, iki nokta üst üste ile ayrılmış dizinlerin bir listesidir. Standart yükleme yolu aranmadan önce bu çevre değişkenindeki dizinler aranır.
örneğin: RUBYLIB="$HOME/lib/ruby:$HOME/lib/rubyext"
RUBYOPT Ek Ruby seçenekleri.
örneğin: RUBYOPT="-w -Ke"
RUBYOPT'un yalnızca -d, -E, -I, -K, -r, -T, -U, -v, -w, -W, --debug, --disable-FEATURE ve --enable-FEATURE içerebileceğini unutmayın.
RUBYPATH -S bayrağı belirtildiğinde Ruby'nin Ruby programlarını aradığı, iki nokta üst üste ile ayrılmış dizinlerin bir listesidir. Bu değişken, PATH çevre değişkeninden önceliklidir.
RUBYSHELL Sistem kabuğu komutunun yolu. Bu çevre değişkeni yalnızca mswin32, mingw32 ve OS/2 platformları için etkindir. Bu değişken tanımlanmamışsa, Ruby COMSPEC değişkenine başvurur.
PATH Ruby, Kernel#system çağrısı yaparken PATH çevre değişkenine başvurur.
Ve RubyGems devre dışı bırakılmadığı sürece Ruby, bazı RubyGems ile ilgili çevre değişkenlerine bağlıdır. Aşağıdaki gem(1) yardımına bakın.
% gem help
Gc Çevre Değişkenleri
Ruby çöp toplayıcısı (GC), nesneleri sabit boyutlu yuvalarda (slots) izler, ancak her nesne, C standart kütüphane çağrılarının malloc ailesi (malloc(3), calloc(3) ve realloc(3)) tarafından yönetilen yardımcı bellek tahsislerine sahip olabilir. Bu belgelendirmede "heap", sabit boyutlu yuvalardan oluşan Ruby nesne heap'ini ifade ederken, "malloc" genellikle "süreç heap'i" (process heap) olarak adlandırılan yardımcı tahsisleri ifade eder. Dolayısıyla, GC'yi tetiklemenin en az iki olası yolu vardır:
1 Nesne sınırına ulaşılması.
2 Malloc sınırına ulaşılması.
Ruby 2.1'de nesiller arası (generational) GC tanıtıldı ve sınırlar genç ve yaşlı nesiller (young and old generations) olarak ikiye ayrıldı, bu da bir GC'yi tetiklemek için iki ek yol sağladı:
3 Yaşlı nesne sınırına ulaşılması.
4 Yaşlı malloc sınırına ulaşılması.
Şu anda GC'nin aşağıdaki 11 çevre değişkeni ile ayarlanabileceği 4 olası alan vardır: RUBY_GC_HEAP_INIT_SLOTS Başlangıç tahsis yuvaları. Ruby 2.1'de tanıtılmıştır, varsayılan: 10000.
RUBY_GC_HEAP_FREE_SLOTS GC'den sonra en az bu miktarda yuvayı hazır bulundurur. Yeterli yuva yoksa bu sayıda yuva tahsis eder. Ruby 2.1'de tanıtılmıştır, varsayılan: 4096.
RUBY_GC_HEAP_GROWTH_FACTOR Heap yuvalarının tahsis oranını bu faktör kadar artırır. Ruby 2.1'de tanıtılmıştır, varsayılan: 1.8, minimum: 1.0 (büyüme yok).
RUBY_GC_HEAP_GROWTH_MAX_SLOTS Tahsis oranı bu yuva sayısı ile sınırlandırılır, böylece RUBY_GC_HEAP_GROWTH_FACTOR nedeniyle aşırı tahsis yapılması önlenir. Ruby 2.1'de tanıtılmıştır, varsayılan: 0 (sınır yok).
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR Yaşlı nesne sayısı R * N'den fazla olduğunda tam bir GC gerçekleştirir; burada R bu faktördür ve N son tam GC'den sonraki yaşlı nesne sayısıdır. Ruby 2.1.1'de tanıtılmıştır, varsayılan: 2.0.
RUBY_GC_MALLOC_LIMIT Malloc ailesinden genç nesil tahsisinin başlangıç sınırı. Bu sınıra ulaşıldığında GC başlayacaktır. Varsayılan: 16MB.
RUBY_GC_MALLOC_LIMIT_MAX GC başlamadan önce malloc'tan genç nesil tahsisinin maksimum sınırı. RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR nedeniyle aşırı malloc büyümesini önler. Ruby 2.1'de tanıtılmıştır, varsayılan: 32MB.
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR Genç nesil malloc çağrılarının sınırını artırır, GC sıklığını azaltır ancak RUBY_GC_MALLOC_LIMIT_MAX değerine ulaşana kadar malloc büyümesini artırır. Ruby 2.1'de tanıtılmıştır, varsayılan: 1.4, minimum: 1.0 (büyüme yok).
RUBY_GC_OLDMALLOC_LIMIT Malloc'tan yaşlı nesil tahsisinin başlangıç sınırı, bu sınıra ulaşıldığında tam bir GC başlayacaktır. Ruby 2.1'de tanıtılmıştır, varsayılan: 16MB.
RUBY_GC_OLDMALLOC_LIMIT_MAX Tam bir GC başlamadan önce malloc'tan yaşlı nesil tahsisinin maksimum sınırı. RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR nedeniyle aşırı malloc büyümesini önler. Ruby 2.1'de tanıtılmıştır, varsayılan: 128MB.
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR Yaşlı nesne malloc tahsisi sınırını artırır, tam GC sıklığını azaltır ancak RUBY_GC_OLDMALLOC_LIMIT_MAX değerine ulaşana kadar malloc büyümesini artırır. Ruby 2.1'de tanıtılmıştır, varsayılan: 1.2, minimum: 1.0 (büyüme yok).
Yığın Boyutu Çevre Değişkenleri
Yığın boyutu çevre değişkenleri uygulamaya bağlıdır ve Ruby'nin farklı sürümlerinde değişebilir. VM yığını saf Ruby kodu için kullanılır ve sanal makine tarafından yönetilir. Makine yığını işletim sistemi tarafından kullanılır ve kullanımı C uzantılarının yanı sıra C derleyici seçeneklerine de bağlıdır. Bunlar için daha düşük değerlerin kullanılması, uygulamaların daha fazla Fiber veya İş Parçacığı (Thread) çalışır durumda tutmasına izin olabilir; ancak SystemStackError istisnaları ve segmentasyon hatası (SIGSEGV) olasılığını artırır. Bu çevre değişkenleri Ruby 2.0.0 sürümünden beri mevcuttur. Tüm değerler bayt cinsinden belirtilir.
RUBY_THREAD_VM_STACK_SIZE İş parçacığı oluşturulurken kullanılan VM yığın boyutu. varsayılan: 131072 (32-bit CPU) veya 262144 (64-bit).
RUBY_THREAD_MACHINE_STACK_SIZE İş parçacığı oluşturulurken kullanılan makine yığın boyutu. varsayılan: 524288 veya 1048575.
RUBY_FIBER_VM_STACK_SIZE Fiber oluşturulurken kullanılan VM yığın boyutu. varsayılan: 65536 veya 131072.
RUBY_FIBER_MACHINE_STACK_SIZE Fiber oluşturulurken kullanılan makine yığın boyutu. varsayılan: 262144 veya 524288.
Ayrıca Bakınız
https://www.ruby-lang.org/ Resmi web sitesi. https://www.ruby-toolbox.com/ Ruby kütüphanelerinin kapsamlı kataloğu.
Hataların Raporlanması
• Güvenlik açıkları, security@ruby-lang.org adresine e-posta gönderilerek rapor edilmelidir. Bildirilen sorunlar düzeltildikten sonra yayınlanacaktır.
• Diğer hatalar ve özellik talepleri Ruby Hata Takip Sistemi (https://bugs.ruby-lang.org/) aracılığıyla bildirilebilir. Güvenlik açıklarını bu sistem üzerinden bildirmeyin çünkü açıkları anında yayınlar.
Yazarlar
Ruby, Yukihiro Matsumoto ⟨matz@netlab.jp⟩ tarafından tasarlanmış ve gerçeklenmiştir.
Ruby'ye katkıda bulunanlar için ⟨https://bugs.ruby-lang.org/projects/ruby/wiki/Contributors⟩ adresine bakın.
UNIX Nisan 14, 2018 UNIX