close

Robijn

Ga naar navigatie Ga naar zoeken
Robijn
Ruby logo.svg
Ontwikkelaar(s)
Ruby-ontwikkelaarsgemeenschap
https://www.ruby-lang.org/
Algemene informatie
Algemene extensies .rb, .rbw
Paradigma multi -paradigma : objectgeoriënteerd , reflexief
Verscheen in negentienvijfennegentig
Ontworpen door Yukihiro Matsumoto
Laatste stabiele versie 3.1.0 [ 1 ] ​( 25 december 2021 (9 maanden en 22 dagen))
type systeem sterk getypt , dynamisch
implementaties Ruby MRI , YARV , JRuby , Rubinius , IronRuby , MacRuby , HotRuby
beïnvloed door Perl , Smalltalk , Python , Lisp , Eiffel , Schema , Ada , Dylan , CLU
heeft beïnvloed D , Groovy , Falcon
Besturingssysteem Multi platform
Licentie Ruby-licentie

Ruby is een objectgeoriënteerde , reflecterende , geïnterpreteerde programmeertaal die is gemaakt door de Japanse programmeur Yukihiro "Matz" Matsumoto , die in 1993 aan Ruby begon te werken en deze in 1995 in het openbaar introduceerde . Het combineert een syntaxis geïnspireerd door Python en Perl met objectgeoriënteerde programmeerfuncties vergelijkbaar met Smalltalk . Het deelt ook functionaliteit met andere programmeertalen zoals Lisp , Lua , Dylan en CLU . Ruby is een single-pass geïnterpreteerde programmeertaal en de officiële implementatie ervan wordt gedistribueerd onder een vrije softwarelicentie .

Geschiedenis

De taal is gemaakt door Yukihiro "Matz" Matsumoto , die op 24 februari 1993 aan Ruby begon te werken en het in 1995 aan het publiek introduceerde . In Matsumoto's vriendenkring kreeg hij de naam Ruby (in het Spaans rubí ) als een grap die verwijst naar de programmeertaal Perl ( parel in het Engels). De laatste stabiele release van de 1.8-tak is 1.8.7_p248, van de 1.9-tak is 1.9.2_p180 . De versie in 1.9 die substantiële verbeteringen in de prestaties van de taal bevat, die naar verwachting zullen worden weerspiegeld in de volgende stabiele productieversie van de taal, Ruby 1.9.0.1. Verschillen in prestaties tussen de huidige implementatie van Ruby (1.8.6) en andere talen Meer diepgewortelde programmeerbenaderingen hebben geleid tot de ontwikkeling van verschillende virtuele machines voor Ruby. Hiertoe behoren JRuby , een poging om Ruby naar het Java -platform te porten , en Rubinius , een tolk die is gemodelleerd naar de virtuele Smalltalk -machines . Grote ontwikkelaars hebben de virtuele machine ondersteund die wordt geleverd door het YARV- project, dat op 31 december 2006 werd samengevoegd met de Ruby- bronstructuur en bekend werd als Ruby 1.9.

Filosofie

Image
Yukihiro Matsumoto , de maker van Ruby

De maker van de taal, Yukihiro "Matz" Matsumoto , heeft gezegd dat Ruby is ontworpen voor de productiviteit en het plezier van ontwikkelaars, volgens de principes van een goede gebruikersinterface. [ 2 ] Hij stelt dat systeemontwerp de menselijke behoeften moet benadrukken in plaats van machinebehoeften: [ 3 ]

Mensen, vooral computeringenieurs, richten zich vaak op machines. Ze denken: "Door dit te doen, zal de machine sneller werken. Hierdoor zal de machine efficiënter werken. Door dit te doen..." hoe ze omgaan met applicaties op computers. Wij zijn de bazen. Zij zijn de slaven.

Ruby volgt het principe van de minste verrassing , wat betekent dat de taal zich zo moet gedragen dat de verwarring voor ervaren gebruikers tot een minimum wordt beperkt. Matz heeft gezegd dat zijn belangrijkste doel was om een ​​taal te maken die leuk zou zijn voor hemzelf, met minimale programmeerinspanning en mogelijke verwarring. Hij heeft gezegd dat hij het principe van de minste verrassing niet heeft toegepast op Ruby's ontwerp [ 3 ] , maar de uitdrukking is in verband gebracht met de programmeertaal Ruby. De uitdrukking zelf is een bron van controverse geweest, omdat niet-ingewijden het misschien opvatten als de bedoeling dat Ruby's kenmerken vergelijkbaar zijn met kenmerken in andere bekende talen. In een discussie in mei 2005 over de nieuwsgroep comp.lang.ruby, probeerde Matz Ruby te distantiëren van de bovengenoemde filosofie, door uit te leggen dat elke ontwerpkeuze voor iemand verrassend zal zijn, en dat hij een persoonlijke standaard gebruikt om ruby.verrassing te beoordelen. Als die persoonlijke standaard consistent blijft, zullen er weinig verrassingen zijn voor degenen die bekend zijn met de standaard. [ 4 ]

Matz definieerde het zo in een interview: [ 3 ]

Iedereen heeft een persoonlijk verleden. Iemand kan uit Python komen, een ander uit Perl, en ze kunnen verrast worden door verschillende aspecten van de taal. Dan zouden ze kunnen zeggen: 'Ik ben verrast door deze taalfunctie, dus Ruby schendt het principe van de minste verrassing.' Wacht wacht. Het principe van de minste verrassing is niet alleen voor jou. Het principe van de minste verrassing betekent het principe van 'mijn' minste verrassing. En het betekent het principe van de minste verrassing nadat je Ruby goed hebt geleerd. Ik was bijvoorbeeld een C++-programmeur voordat ik Ruby begon te ontwerpen. Ik heb twee of drie jaar uitsluitend in C++ geprogrammeerd. En na twee jaar programmeren in C++ was ik nog steeds verbaasd.

Semantiek

Ruby is objectgeoriënteerd : alle gegevenstypen zijn een object, inclusief klassen en typen die andere talen definiëren als primitieven (zoals gehele getallen , booleans en nihil ). Elke functie is een methode . Variabelen zijn altijd verwijzingen naar objecten, niet de objecten zelf. Ruby ondersteunt dynamisch gebonden overervings- , mixins- en singleton - methoden (eigendom van en gedefinieerd door een enkele instantie in plaats van gedefinieerd door de klasse). Hoewel Ruby geen ondersteuning biedt voor meervoudige overerving , kunnen klassen modules importeren als mixins . Het ondersteunt procedurele syntaxis, maar alle methoden die buiten het bereik van een object zijn gedefinieerd, zijn in feite methoden van de klasse Object. Aangezien deze klasse de bovenliggende klasse is van alle andere, zijn de wijzigingen zichtbaar voor alle klassen en objecten.

Ruby is beschreven als een programmeertaal met meerdere paradigma's : het maakt het mogelijk om procedureel te programmeren (functies en variabelen buiten klassen definiëren door ze onderdeel te maken van het hoofdobject Object), objectgeoriënteerd (alles is een object) of functioneel (heeft anonieme functies , sluitingen en voortzettingen ; alle instructies hebben waarden en functies retourneren de laatste evaluatie). Het ondersteunt introspectie , reflectie en metaprogrammering , evenals ondersteuning voor door tolken beheerde threads . Ruby is dynamisch getypeerd en ondersteunt typepolymorfisme (laat je toe om subklassen te behandelen met behulp van de interface van de bovenliggende klasse). Ruby vereist geen functiepolymorfisme (functie-overbelasting) omdat het dynamisch wordt getypt (de parameters van een functie kunnen bij elke aanroep van een ander type zijn, en de functie is verantwoordelijk voor het bepalen van het type en dienovereenkomstig handelen).

Volgens de Ruby FAQ, [ 5 ] "Als je van Perl houdt , zul je Ruby en zijn syntaxis leuk vinden. Als je van Smalltalk houdt , zul je Ruby en zijn semantiek leuk vinden. Als je van Python houdt , is het enorme ontwerpverschil tussen Python en Ruby/Perl kan je wel of niet overtuigen. [ 6 ]

Functies

Ruby heeft momenteel geen volledige Unicode -ondersteuning , [ 7 ] ondanks gedeeltelijke ondersteuning voor UTF-8 .

Interactie

De officiële Ruby-distributie bevat irb(Interactive Ruby Shell), een interactieve opdrachtregelinterpreter die kan worden gebruikt om snel code te testen. Het volgende codefragment vertegenwoordigt een voorbeeldsessie met irb:

$  irb 
irb ( hoofd ): 001 : 0 >  zet  "Hallo wereld" 
Hallo  wereld 
=>  nul 
irb ( hoofd ): 002 : 0 >  1 + 2 
=>  3

Syntaxis

De syntaxis van Ruby is vergelijkbaar met Perl of Python. De definitie van klassen en methoden wordt bepaald door trefwoorden. In Perl hebben variabelen echter geen voorvoegsels. Bij gebruik geeft een voorvoegsel het bereik van de variabelen aan. Het grote verschil met C en Perl is dat trefwoorden worden gebruikt om codeblokken zonder accolades te definiëren. Regeleinden zijn significant en worden geïnterpreteerd als het einde van een instructie; de puntkomma heeft hetzelfde gebruik. In tegenstelling tot Python is de inspringing niet significant.

Een van de verschillen tussen Ruby en Python en Perl is dat Ruby al zijn private instance-variabelen binnen klassen houdt en deze alleen blootlegt via accessor-methoden ( attr_writer, attr_reader, etc.). In tegenstelling tot get en set -methoden in andere talen zoals C++ of Java, kunnen Ruby-accessormethoden worden geschreven met een enkele regel code. Aangezien het aanroepen van deze methoden niet het gebruik van haakjes vereist, is het triviaal om een ​​instantievariabele in een functie te wijzigen zonder een enkele regel code aan te raken of die code te refactoren. Python-eigenschapsbeschrijvingen zijn vergelijkbaar, maar hebben een nadeel in het ontwikkelingsproces. Als men in Python begint met een openbaar toegankelijke variabele-instantie en vervolgens de implementatie wijzigt om een ​​privé-variabele-instantie te gebruiken die wordt weergegeven via een eigenschapsdescriptor, moet de interne code van de klasse worden aangepast om de privévariabele te gebruiken in plaats van openbare eigendom. Ruby elimineert deze ontwerpbeslissing door alle instantievariabelen privé te maken, maar het biedt ook een gemakkelijke manier om methoden seten get. Dit handhaaft het principe dat in Ruby de interne leden van een klasse niet toegankelijk zijn van buiten de klasse; in plaats daarvan wordt een bericht (een methode wordt aangeroepen) aan de klasse doorgegeven en wordt een antwoord ontvangen.

Licentie

De tolk en bibliotheken zijn dubbel (onafscheidelijk) gelicentieerd onder de GPL en Ruby License gratis softwarelicenties . [ 8 ]

Vanaf versie 1.9.3 wordt gekozen voor een dubbele licentie onder de tweeledige BSD -licenties en de Ruby Public License. [ 9 ]

Zie ook

  • Zie de portal over Vrije Software Portaal: gratis software . Inhoud gerelateerd aan Vrije Software .
  • RubyGems (pakketbeheerder voor Ruby)
  • Ruby on Rails (Ruby webapplicatie-georiënteerd raamwerk)
  • JRuby (Java-implementatie van de Ruby-interpreter)
  • Rubinius (Ruby implementatie van de Ruby interpreter)
  • Objectgericht (objectgericht programmeren)

Referenties

Externe links