Rubin

Rubin
Utvikler(e)
Ruby Developer Community
https://www.ruby-lang.org/
Generell informasjon
Vanlige utvidelser .rb, .rbw
Paradigme multi -paradigme : objektorientert , refleksiv
Dukket opp i nitten nitti fem
Designet av Yukihiro Matsumoto
Siste stabile versjon 3.1.0 [ 1 ] ​( 25. desember 2021 (9 måneder og 22 dager))
type system sterkt skrevet , dynamisk
implementeringer Ruby MRI , YARV , JRuby , Rubinius , IronRuby , MacRuby , HotRuby
påvirket av Perl , Smalltalk , Python , Lisp , Eiffel , Scheme , Ada , Dylan , CLU
har påvirket D , Groovy , Falcon
Operativsystem Multiplattform
Tillatelse Ruby-lisens

Ruby er et objektorientert , reflektert , tolket programmeringsspråk laget av den japanske programmereren Yukihiro "Matz" Matsumoto , som begynte å jobbe med Ruby i 1993 , og introduserte det offentlig i 1995 . Den kombinerer en syntaks inspirert av Python og Perl med objektorienterte programmeringsfunksjoner som ligner på Smalltalk . Den deler også funksjonalitet med andre programmeringsspråk som Lisp , Lua , Dylan og CLU . Ruby er et enkeltpass-tolket programmeringsspråk og dets offisielle implementering distribueres under en fri programvarelisens .

Historikk

Språket ble skapt av Yukihiro "Matz" Matsumoto , som begynte å jobbe med Ruby 24. februar 1993 , og introduserte det for publikum i 1995 . I Matsumotos omgangskrets fikk han navnet Ruby (på spansk rubí ) som en spøk som hentyder til programmeringsspråket Perl ( perle på engelsk). Den siste stabile utgivelsen fra 1.8-grenen er 1.8.7_p248, fra 1.9-grenen er 1.9.2_p180. Versjonen i 1.9 som inneholder betydelige forbedringer i ytelsen til språket, som forventes å gjenspeiles i neste stabile produksjonsversjon av språket, Ruby 1.9.0.1. Forskjeller i ytelse mellom gjeldende implementering av Ruby (1.8.6) og andre språk Mer inngrodde programmeringsmetoder har ført til utviklingen av ulike virtuelle maskiner for Ruby. Blant disse er JRuby , et forsøk på å portere Ruby til Java -plattformen , og Rubinius , en tolk modellert etter de virtuelle Smalltalk -maskinene . Store utviklere har støttet den virtuelle maskinen levert av YARV- prosjektet , som ble slått sammen til Ruby -kildetreet 31. desember 2006 , og ble kjent som Ruby 1.9.

Filosofi

Språkets skaper, Yukihiro «Matz» Matsumoto , har sagt at Ruby er designet for utviklerproduktivitet og moro, etter prinsippene for et godt brukergrensesnitt. [ 2 ] Han argumenterer for at systemdesign må legge vekt på menneskelige behov fremfor maskinbehov: [ 3 ]

Folk, spesielt dataingeniører, fokuserer ofte på maskiner. De tenker: "Ved å gjøre dette, vil maskinen kjøre raskere. Ved å gjøre dette, vil maskinen kjøre mer effektivt. Ved å gjøre dette ..." hvordan de håndterer applikasjoner på datamaskiner. Vi er sjefene. De er slavene.

Ruby følger prinsippet om minste overraskelse , som betyr at språket skal oppføre seg på en slik måte at det minimerer forvirring for erfarne brukere. Matz har sagt at hovedmålet hans var å lage et språk som ville være morsomt for ham selv, og minimere programmeringsinnsats og potensiell forvirring. Han har sagt at han ikke har brukt prinsippet om minste overraskelse på Rubys design, [ 3 ] men uttrykket har vært assosiert med Ruby-programmeringsspråket. Uttrykket i seg selv har vært en kilde til kontrovers, da uinnvidde kan oppfatte det som at Rubys funksjoner er ment å ligne funksjoner på andre kjente språk. I en diskusjon i mai 2005 på nyhetsgruppen comp.lang.ruby, prøvde Matz å distansere Ruby fra den nevnte filosofien, og forklarte at ethvert designvalg vil være overraskende for noen, og at han bruker en personlig standard for evaluering av ruby. surprise. Hvis den personlige standarden forblir konsistent, vil det være få overraskelser for de som er kjent med standarden. [ 4 ]

Matz definerte det slik i et intervju: [ 3 ]

Alle har en personlig fortid. Noen kan komme fra Python, en annen fra Perl, og de kan bli overrasket over forskjellige sider ved språket. Da kan de si "Jeg er overrasket over denne språkfunksjonen, så Ruby bryter prinsippet om minste overraskelse." Vent vent. Det minste overraskelsesprinsippet er ikke bare for deg. Prinsippet om minste overraskelse betyr prinsippet om 'min' minste overraskelse. Og det betyr prinsippet om minste overraskelse etter at du har lært Ruby godt. For eksempel var jeg en C++-programmerer før jeg begynte å designe Ruby. Jeg programmerte utelukkende i C++ i to eller tre år. Og etter to år med programmering i C++ ble jeg fortsatt overrasket.

Semantikk

Ruby er objektorientert : alle datatyper er et objekt, inkludert klasser og typer som andre språk definerer som primitiver (som heltall , booleaner og null ). Hver funksjon er en metode . Variabler er alltid referanser til objekter, ikke objektene i seg selv. Ruby støtter dynamisk bundet arv , mixins og singleton - metoder (eid og definert av en enkelt forekomst i stedet for definert av klassen). Selv om Ruby ikke støtter multippel arv , kan klasser importere moduler som mixins . Den støtter prosedyresyntaks, men alle metoder definert utenfor omfanget av et objekt er faktisk metoder i Object-klassen. Siden denne klassen er overordnet til alle de andre, er endringene synlige for alle klasser og objekter.

Ruby har blitt beskrevet som et multi-paradigme programmeringsspråk : det tillater programmering prosedyremessig (definere funksjoner og variabler utenfor klasser ved å gjøre dem til en del av rotobjektet Objekt), objektorientert (alt er et objekt) eller funksjonelt (har anonyme funksjoner) , avslutninger og fortsettelser ; alle utsagn har verdier, og funksjoner returnerer den siste evalueringen). Den støtter introspeksjon , refleksjon og metaprogrammering , samt støtte for tolkadministrerte tråder . Ruby er dynamisk skrevet , og støtter type polymorfisme (lar deg behandle underklasser ved å bruke overordnet klasses grensesnitt). Ruby krever ikke funksjonspolymorfisme (funksjonsoverbelastning) da den er dynamisk skrevet (parametrene til en funksjon kan være av en annen type i hvert kall, og nevnte funksjon er ansvarlig for å bestemme typen og handle deretter).

I følge Ruby FAQ, [ 5 ] "Hvis du liker Perl , vil du like Ruby og syntaksen. Hvis du liker Smalltalk , vil du like Ruby og dens semantikk. Hvis du liker Python , er den enorme designforskjellen mellom Python og Ruby/Perl kan kanskje ikke overbevise deg. [ 6 ]

Funksjoner

Ruby har for øyeblikket ikke full Unicode -støtte , [ 7 ] til tross for delvis støtte for UTF-8 .

Interaksjon

Den offisielle Ruby-distribusjonen inkluderer irb(Interactive Ruby Shell), en interaktiv kommandolinjetolk som kan brukes til raskt å teste kode. Følgende kodebit representerer en prøveøkt med irb:

$ irb irb ( main ): 001 : 0 > setter "Hello world" Hello world => null irb ( main ): 002 : 0 > 1 + 2 => 3

Syntaks

Rubys syntaks ligner på Perl eller Python. Definisjonen av klasser og metoder er definert av nøkkelord. I Perl har imidlertid ikke variabler prefikser. Når det brukes, angir et prefiks omfanget av variablene. Den største forskjellen fra C og Perl er at nøkkelord brukes til å definere kodeblokker uten klammeparenteser. Linjeskift er signifikante og tolkes som slutten av et utsagn; semikolon har samme bruk. I motsetning til Python er innrykningen ikke signifikant.

En av forskjellene mellom Ruby og Python og Perl er at Ruby holder alle sine private instansvariabler inne i klasser og bare eksponerer dem gjennom tilgangsmetoder ( attr_writer, attr_reader, etc.). I motsetning til get and set- metoder på andre språk som C++ eller Java, kan Ruby-tilgangsmetoder skrives med en enkelt kodelinje. Siden å kalle disse metodene ikke krever bruk av parenteser, er det trivielt å endre en forekomstvariabel i en funksjon uten å berøre en enkelt kodelinje eller omfaktorere den koden. Python-egenskapsbeskrivelser er like, men har en ulempe i utviklingsprosessen. Hvis man starter i Python med en offentlig eksponert variabelforekomst og deretter endrer implementeringen til å bruke en privat variabelforekomst eksponert via en egenskapsbeskrivelse, vil den interne koden til klassen måtte justeres for å bruke den private variabelen i stedet for offentlig eiendom. Ruby eliminerer denne designbeslutningen ved å tvinge alle forekomstvariabler til å være private, men det gir også en enkel måte å deklarere metoder setog get. Dette opprettholder prinsippet om at i Ruby ikke kan de interne medlemmene av en klasse nås fra utenfor klassen; i stedet sendes en melding (en metode kalles) til klassen og et svar mottas.

Lisens

Tolken og bibliotekene er lisensiert dobbelt (uatskillelig) under GPL og Ruby License fri programvarelisenser . [ 8 ]

Fra og med versjon 1.9.3 er en dobbel lisens valgt under BSD -lisensene med to klausuler og Ruby Public License. [ 9 ]

Se også

Referanser

  1. https://www.ruby-lang.org/en/news/2021/12/25/ruby-3-1-0-released/
  2. "The Ruby Programming Language, av Yukihiro Matsumoto" . informit.com (på engelsk) . Hentet 7. oktober 2016 . 
  3. abc Bill Venners ( 29. september 2003). Artima, red. "Ruby's Philosophy, A Conversation with Yukihiro Matsumoto, Part I " . Hentet 2. mai 2015 . 
  4. ^ "Ruby Weekly News 23. – 29. mai 2005" . Arkivert fra originalen 29. september 2007 . Hentet 5. januar 2008 . 
  5. ^ "RubyFAQ" . Arkivert fra originalen 9. desember 2007 . Hentet 6. januar 2008 . 
  6. Hvordan sammenligner Ruby seg med Python? (FAQ) (på engelsk)
  7. Funksjon #2034 Vurder ICU-biblioteket for å forbedre og utvide Unicode-støtte
  8. Ruby-lisens
  9. Hva er nytt i Ruby 1.9.3

Eksterne lenker