Ruby (gjuhë programimi)

**Ruby** është një gjuhë programuese me qëllime të përgjithshme, dinamike, reflektive dhe eorientuar në objekt. U dizajnua dhe zhvillua në mesin e viteve 1990 nga Yukihiro "Matz" Matsumoto në Japoni.

Sipas krijuesit të saj, Rubi u ndikua nga Perl, Smalltalk, Eiffel, Ada, dhe Lisp. Ajo mbështet disa paradigma të programimit, duke përfshirë funksionale, e orientuar në objekt, dhe e domosdoshme. Ajo gjithashtu ka edhe një sistem lloji dinamik dhe menaxhim memorie automatik.

## Historia 
### Koncepti i hershëm 
Ruby u konceptua më 24 shkurt të vitit 1993. Në vitin 1999, në një postim të 'ruby-talk', autori i Ruby Yukihiro Matsumoto përshkruan disa nga idetë e tij të hershme në lidhje me gjuhën:

Matsumoto përshkruan dizajnin e Ruby sikur të jetë një gjuhë Lisp e thjeshtë në thelb, me një sistem objekti sikur ai i Smalltalk, blloqe të frymëzuara nga funksione të rendit më të lartë dhe dobi praktike si ajo e Perl.

### Emri "Ruby" 
Emri "Ruby" origjinoi gjatë një bisede online ndërmjet Matsumoto dhe Keiju Ishitsuka me 24 shkurt, 1993, para se të ishte shkruar sado pak kod për gjuhën. Fillimisht dy emrat e propozuar ishin: "Koral" dhe "Ruby". Matsumoto zgjodhi këtë të fundit në një e-mail më të vonë te Ishitsuka. Matsumoto më vonë vuri në dukje një faktor në zgjedhjen e emrit "Ruby" - ishte 'guri i lindjes' (xhevahiri) i njërit prej kolegëve të tij.

### Publikimi i parë 
Lëshimi i parë publik i Ruby 0.95 u shpall në grupe lajmesh të brendshme japoneze me 21 dhjetor, 1995. Më pas tri versione tjera të Ruby u lëshuan në dy ditë.

### Publikimet e hershme 
Pas publikimit të Ruby 0.95 në vitin 1995, disa versione stabile të Ruby u publikuan në vitet në vazhdim:
* Ruby 1.0: 25 dhjetor, 1996 Po këtë vit, Matsumoto dhe Keiju Ishitsuka shkruan librin e parë rreth Ruby, *Gjuha Skriptuese e orientuar në objekt Ruby* (オブジェクト指向スクリプト言語 Rubin), e cila u botua në Japoni në tetor të vitit 1999. Ajo do të ndiqej nga rreth 20 libra rreth Ruby në fillim të viteve 2000, të publikuara në japonisht. Në shtator të vitit 2000, libri i parë anglisht *Programming Ruby *u botua, i cili më vonë u lëshua për publikun, duke zgjeruar edhe më tej miratimin e Ruby mes folësve të anglishtes. Në fillim të vitit 2002, lista postuese *ruby-talk *në anglisht po merte më shumë mesazhe se *ruby-talk* në japonisht, duke demonstruar ngritjen e popullarizimit të Ruby në botën anglisht-folëse.

### Ruby 1.8 
Ruby 1.8 u lëshua fillimisht në gusht të vitit 2003, ishte i qëndrueshëm për një kohë të gjatë, dhe doli në pension në qershor të vitit 2013. Edhe pse i kundërshtuar, ka ende kod që është i bazuar në të. Ruby 1.8 është vetëm pjesërisht i pajtueshëm me Ruby 1.9.

Ruby 1.8 ka qenë subjekt i disa standardeve të industrisë. Specifikimet e gjuhës për Ruby u zhvilluan nga Qendra për Promovimin e Standardeve të Hapura e Agjensisë për Promovimin e Teknologjisë Informative (agjensi e qeverisë Japoneze) për paraqitje te Komiteti Japonez i Standardeve Industriale (JISC) dhe pastaj te Organizata Ndërkombëtare për Standardizim (ISO). U pranua si Standard Industrial Japonez (JIS X 3017) në vitin 2011, dhe si standard ndërkombëtar (ISO/IEC 30170) në vitin 2012.

Rreth vitit 2005, interesi në gjuhën Ruby u rrit me Ruby on Rails, web framework i shkruar në Ruby. Rails shpesh kreditohet me rritjen e popullarizimit të Ruby

### Ruby 1.9 
Ruby 1.9 u lëshua në dhjetor të vitit 2007. Efektiv me Ruby 1.9.3, lëshuar me 31 tetor, 2011, Ruby kaloi nga të qenurit dyfish-i licensuar nën Licensën Ruby dhe GPL për të qenë i dyfishtë-i licensuar nën Licensën Ruby dhe licensën dy-pikëshe BSD. Miratimi i 1.9 u ngadalësua nga ndryshimet e 1.8 që kërkuan shumë librari të popullarizuara të palëve të treta të rishkruhen.

Ruby 1.9 paraqet shumë ndryshime të dukshme ndaj serisë 1.8. Shembuj:
* bllokimi i variablave lokale (variablat që janë lokale në bllokun në të cilin janë të deklaruara)
* një sintaksë shtesë lambda: 
* enkodimet e karaktereve per-string mbështeten
* API me prizë (gropë) të re (mbështetje IPv6)
* `require_relative` importo sigurinë
Ruby 1.9 ka dalur nga përdorimi që nga 23 shkurti i vitit 2015, dhe nuk do të marrë më rregullime të sigurisë dhe problemeve. Përdoruesit këshillohen të marrin versione më të reja.

### Ruby 2.0 
Ruby 2.0 shtoi disa karakteristika të reja, duke përfshirë:
* method keyword arguments,
* një metodë të re, `Moduli#prepend`, për zgjerimin e një klase,
* një literale të re për krijimin e një grupi të simboleve,
* API të re për vlerësimin dembel të Enumerableve, dhe
* një konventë të re për përdorimin e #to_h për të kthyer objektet në Hashes.
Ruby 2.0 ka për qëllim të jetë plotësisht e pajtueshme me Ruby 1.9.3. Qysh prej lëshimit zyrtar 2.0.0 në 24 shkurt të vitit 2013, ka pasur vetëm pesë mospërshtatje (të vogla).

Ka qenë jashtë përdorimit qysh nga 22 shkurti i vitit 2016 dhe nuk do të marrë më rregullime të sigurisë dhe problemeve. Përdoruesit këshillohen të marrin versione më të reja.

### Ruby 2.1 
Ruby 2.1.0 u lëshua në Ditën e Krishtlindjeve në vitin 2013. Lëshimi përfshin shpejtime, rregullime të problemeve, dhe librari të reja.

Duke filluar me 2.1.0, politika e verzionimit të Ruby është më shumë si verzionim semantik . Edhe pse të ngjashme, politika e verzionimit të Ruby nuk është e përshtatshme me verzionimin semantik:

Verzionimi semantik gjithashtu mundëson etiketa shtesë për para-lëshime.

### Ruby 2.2 
Ruby 2.2.0 u lëshua në Ditën e Krishtlindjeve në vitin 2014. Lëshimi përfshin shpejtime, rregullime të problemeve, bibloteka të reja dhe heqjen e disa API-ve të kundërshtuara. Ajo që ia vlen të përmendet është se Ruby 2.2.0 prezanton ndryshime në trajtimin e memories - një mbledhës plehrash më të madh, përkrahje për mledhjen e plehrave të simboleve dhe opsionin për të përpiluar drejtpërdrejt kundër jemalloc. Gjithashtu përmban përkrahje eksperimentale duke përdorur vfork(2) me system() dhe spawn(), dhe përkrahje të shtuar për specifikimin Unicode 7.0

Karakteristikat që janë nxjerrur jashtë përdorimit ose janë fshirë përfshijnë callcc, DL library, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application si dhe funksione C API të ndryshme.

### Ruby 2.3 
Ruby 2.3.0 u lëshua me 25 dhjetor të vitit 2015. Disa ndryshime të rëndësishme përfshijnë:
* Aftësia për të shënuar të gjitha string literals si të ngrira nga fillimi ku si pasojë ka rritje të madhe të performancës në string operations.
* Hash krahasimin për të lejuar kontrollin e drejtpërdrejtë të çifteve çelës/vlerë në vend të vetëm çelësave.
* Një operator i ri i navigacionit të sigurtë `&.` që mund të lehtësojë trajtimin e zeros (p.sh. në vend të  `bj && obj.foo && obj.foo.bar`,  mund të përdorim `nëse obj&.foo&.bar`).
* Perla* did_you_mean* tani është e lidhur nga fillimi dhe e kërkuar në ndezje për të sugjeruar automatikisht përputhje të emrave të ngjashëm në një *NameError* ose *NoMethodError*.
* *Hash#dig* dhe* Array#dig* për të nxjerrur lehtë vlera të mbivendosura thellë (p.sh. duke dhënë `profilin = { sociale: { wikipedia: { name: 'Foo Baz' } } }`, vlera *Foo Baz* tani mund të shikohet mirret ngaprofili.gërmoj(:sociale, :wikipedia :emri)).
* `.grep_v(regexp)` e cila do të përputh të gjithë shembujt negativ të një shprehje të rregullt të dhënë në shtim të karakteristikave të reja.
Dega 2.3 gjithashtu përfshin shumë përmirësime të performancave, përditësime dhe përmirësime të problemeve duke përfshirë ndryshime në Proc#call, Socket dhe IO, Trajtimin e Thread#name, lidhjet pasive Net:FTP, dhe largimin e Rake nga stdlib.

## Tabela e versioneve 
## Filozofi 
thumb|Yukihiro Matsumoto, krijuesi i Ruby
Matsumoto ka thënë se Ruby është dizajnuar për produktivitetin dhe kënaqësinë e programerëve, duke ndjekur principet e dizajnit të mirë të ndërveprimit të përdoruesit. Në një Google Tech Talk në vitin 2008 Matsumoto deklaroi më tej, "Shpresoj ta shoh Ruby-n duke i ndihmuar çdo programeri në botë të jetë produktiv, dhe ta shijojë programimin, dhe të jetë i lumtur. Ky është qëllimi kryesor i gjuhës Ruby. Ai thekson se dizajni i sistemeve duhet të theksojë nevojat njerëzore më shumë se ato kompjuterike:

Ruby është e thënë të ndjek parimin e habisë më së paktë (POLA), që nënkupton se gjuha duhet të sillet në atë mënyrë saqë të zvogëlojë konfuzionin për përdoruesit me eksperiencë. Matsumoto ka thënë se qëllimi kryesor i dizajnit ka qenë që të bëjë një gjuhë që edhe ai vetë pëlqen ta përdor, duke zvogëluar punën e programerit dhe konfuzionin e mundshëm. Ai ka thënë se nuk e ka aplikur parimin e habisë më së paktë në dizajnin e Ruby,

Matsumoto e definoi kësi mënyre në një intervistë:

## Dallime nga gjuhët e tjera 
## References