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.http://blog.nicksieger.com/articles/2006/10/20/rubyconf-history-of-ruby History of Ruby 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.Yukihiro Matsumoto (June 11, 1999). 

 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ë. Lëshimi përkoi me nisjen e listës postuese ruby-list, e cila ishte lista e parë postuese për gjuhën e re programuese.

Veç të pranishme në këtë fazë të zhvillimit ishin shumë tipare të njohura në lëshimet e mëvonshme të Ruby, duke përfshirë dizajnin e orientuar në objekt, klasat me trashëgimi, mixins, iterators, closures, menaxhimit të përjashtimeve dhe mbledhjes së plehrave.

 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
 Ruby 1.2: dhjetor 1998
 Ruby 1.4: gusht 1999
 Ruby 1.6: shtator 2000
Në vitin 1997, artikulli i parë në lidhje me Ruby u publikua në Web. Në të njëjtin vit, Matsumoto u punësua nga netlab.jp për të punuar në Ruby si zhvillues me orar të plotë.

Në vitin 1998, Arkiva e Aplikacioneve të Ruby u fillua nga Matsumoto, së bashku me një faqe hyrëse të thjeshtë, në anglisht, për Ruby.

Në vitin 1999, lista e parë postuese në gjuhën angleze ruby-talk filloi, gjë që sinjalizoi një rritje në interesimin rreth gjuhës jashtë Japonisë.http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html An Interview with the Creator of Ruby 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ë vitin 2000, Ruby ishte më i popullarizuar se Python në Japoni. 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ë RubyWeb Development: Ruby on Rails .

 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.Ruby 1.9: What to Expect . 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.Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 is released.
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).Endoh, Yusuke. (2013-02-24) Ruby 2.0.0-p0 is released.

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:
 Ruby Verzionimi 
SemantikKRYESORE: Lëshohet kur ka ndryshime mospërshtatjeje që nuk mund të lëshohen në të vogla. Rezervohet për raste të veçanta. KRYESORE: Lëshohet kur bëhen ndryshime të papërshtatshme API Të vogla: lëshohet çdo Krishtlindje, mund të jenë të papërshtatshme me API.  Të vogla: Lëshohet kur shton funksionalitet në një mënyrë backwards-compatible Të vockla: Rregullime në siguri ose probleme që mirëmbajnë përshtatshmërinë e API. Mund të jetë më shumë se 10 ( si 2.1.11), dhe del çdo 2-3 muaj. PATCH: Lëshohet kur bën rregullime në bugs që janë backwards-compatible PATCH: Numri i problemeve qysh nga lëshimi i fundit i të vogla (rikthehet në 0 kur lëshohet të vogla).
  -
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.Ruby 2.3.0 changes and features – Frozen string literals
 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 
 Version Versioni më i fundit i vockëlData fillestare e lëshimit Fundi i fazës përkrahëse Fundi i fazës së mirëmbajtjes së sigurisë 1.8.7-p375 2003-08-04ruby-1.8.0 released! 2012-06Plans for 1.8.7 2014-07-01EOL for Ruby 1.8.7 and 1.9.2 1.9.3-p551Ruby 1.9.3-p551 Released 2007-12-25Ruby 1.9.0 Released 2014-02-23Support for Ruby version 1.9.3 will end on February 23, 2015 2015-02-23Support for Ruby 1.9.3 has ended 2.0.0-p648Ruby 2.0.0-p648 Released 2013-02-24Ruby 2.0.0-p0 is released 2015-02-24 2016-02-24 2.1.8Ruby 2.1.8 Released 2013-12-25Ruby 2.1.0 is released Mars në vitin 2016  2.2.4Ruby 2.2.4 Released 2014-12-25Ruby 2.2.0 Released 2.3.0 2015-12-25Ruby 2.3.0 Released 2016-12-25

 Filozofi 
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, por megjithatë kjo frazë ka dalur të jetë e lidhur ngushtë me gjuhën programuese Ruby. Vetë fraza ka qenë burim surprize, pasi që përdoruesit fillestar mund të nënkuptojnë se sjelljet e Ruby mundohen ti përshtaten sjelljeve të njohura nga gjuhët e tjera. Në një diskutim në Maj të 2005 në grupin e lajmeve comp.lang.ruby, Matsumoto provoi të distanconte Ruby-n nga POLA, due shpjeguar se sepse çfarëdo zgjedhje dizajni do të jetë surprizuese për dikënd, ai vetë përdor një standard personal në vlerësimin e surprizës. Nëse ai standard personal mbetet i qëndrueshëm, do të kishte pak surpriza për ata që janë të familiarizuar me standardin.

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

 Dallime nga gjuhët e tjera 

 References