Kaixo. Iñigo naiz eta beste tokiren batean komentatu dudanez, programazio lenguaia perfektuaren bila nabil. Programazio lenguaia bat perfektoa izateko ondorengo baldintzak ipintzen ditut:

  • Ikasteko erraza
  • Erabiltzeko erraza
  • Kode ulergarria
  • Konpilazio azkarra
  • Exekuzio azkarra
  • Eramangarritasuna (portability)
  • Bateragarritasuna mantentzea bertsiotik bertsiora
  • Komunitate osasuntsua izatea
  • Software askea errespetatzea
  • Segurtasun arazoak ez izatea
  • Eta oso garrantzitsua ez den arren, hirugarrengoen paketeen banaketa egitea errazten duten tresna egokiak izatea (package manager)

Baldintza gehiago gogoratzen baditut, hau aldatuko dut.

Beno, ba nahi dudana da goi mailako lenguaia bat, behe mailako baten abiadura izan nahi duena eta bueno, bestek gauza guztiak.

Lenguaia mota honen bila ibili naiz denbora luze batean zehar eta hona hemen nire aurkikuntzak:

  • Java (IcedTea) eta JVM lenguaiak: Beno, lenguaia ez dago gaizki nire ustez. JVM erabiltzen du, edozein plataforman funtzionatzea ahalbidetzen duena honetarako euskarria badago. Arazoa: Ez dut JVM erabili nahi. Javako programak ez dira nahikoa azkarrak. Memoria asko erabiltzen dute. Lizentziarekin arazoak daude. Eta argumentu gehiago daude hemen: https://en.wikipedia.org/wiki/Criticism_of_Java
  • Kotlin: Javak uzten duen hutsunea betetzeko, Kotlin sortu zuen Googlek. Javaren oso antzekoa dena, baina badirudi antzera funtzionatzen duela eta mugikorretarako dagoela gehienbat eginda. Googlena izateaz gain, ez zait gehiegi gustatzen hala ere.
  • C: Hona hemen jokalari zahar bat. Bai, dexente gogoko dut, eta baldintzetatik asko betetzen ditu. Ordea, beste zenbait ere ez ditu betetzen. Azkarra, kode sinplea (kodeak berak erakusten baitu ordenagailuak egiten duena nahiko modu argian), eramangarritasuna, bateragarritasuna… Beno, baina ez da oso erraza programatzen, ikasteko pixkat zaila, segurtasuna ondo inplementatzea zaila da eta beno ba ez dago pakete kudeatzailerik. Alde oso on bat da, GCC existitzen dela GPL dena eta gogoko dudana.
  • C++: Hau baita ere GCCn dago. Ez dago asko esateko. Ez ditu baldintza asko betetzen. Bakarrik “Exekuzio azkarra” eta lizentziena (GCCgatik). Baliteke ere eramangarritasuna, baina ez dakit. A, eta gorroto dudala ere argumentu bat da?
  • Go: Hau gogoko dut. C++ ekiko alderantziz, honek ia puntu guztiak betetzen ditu. Arazo bakarra, oso azkarra ez dela lizentziekin… ai ai ai, eske googlerena da eta GCCko inplementazioa nahiko atzeratuta dau. Pena bat. Hala ere, asko gustuko dut lenguaia hau. Seguruenik hau erabiliko nuke aukera hobeagoak ez banitu. A bai, eta paketeak github eta horrelako forge-etan banatzea eta izatea pakete kudeatzaile egokiago bat erabili gabe… a ze txapuza.
  • GCCko beste lenguaiak: Fortran, Ada, Objective-C, Objective-C++, D, Pascal, Modula. Ada unibertsitatean ikasia eta hasieran gorrotatutakoa baina denborarekin zergatik ikasi genuen ulertua eta eskertua. Beste guztiak, egia esan ez ditut ezer egiteko prest ikusten. Gainera hortik Applen lenguaiaren bat dago… Ikusi dezakedan bakarra, D. Baina hau ondoren azalduko da.
  • Rust: Programazio lenguaia hau erabili nahiko nuke seguruenik. Ordea, zenbait arazo dauzka oso azkarra izan arren, C bezain beste (ia). Azkarregi ari da hazten, orduan ezin da modu egoki batean mantendu, bertsio batean egokia den kodea beste batean balitekeelako ez izatea. Esaten dute oso portablea dela, ya… klaro… LLVM onartzen den plataforma guztietan bai (teorikoki?). Kriston kode piloa dauka. C++ kodea!. Miloika C++ lerro. Eta gainera, C++ ezin da esan ere lenguaia arina denik… Ez dakit konturatzen diren, baina Rust konpilatzeak kostatzen du eta asko. Cko konpilatzaile sinple bat konpilatzeak eta garatzeak nahiko gutxi kostatzen duen bitartean, Rust konpilatzaile bat konpilatzeko eta sortzeko… Beno gehiegizkoa da. Bena eta konpilatzaile bat sortzeari dagokionez, ezin duzu hori egin edozein kasurako ze bai Cargok (Rusten pakete kudeatzailea) bai Rust berak Mozillaren trademark bat dute. Trademark honek komertzialak ez diren kasuetarako baimen esplizitua eskatu behar duzula programa hauetan aldaketak egiteko eta hauetan oinarritutako eta hauen izena erabiltzen duten beste inplementazio batzuk egiteko. Hau da, nik ezin dudala nahi dudalako Rusteko konpilatzaile bat sortu eta Rust deitu Mozillakoek onartzen ez badute. Ez hori bakarrik, adibidez Cargo programan aldaketa bat egin nahi badut, adibidez %100ko GPL kodea bakarrik onartzeko nire banaketan, Mozillari baimena eskatu beharko nioke partxe hori aplikatzeko nire bertsioari. Beno, eta hau kasu esplizitu bat da non Mozillakoek dagoeneko esan duten ez luketela onartuko zerbait “astakeri” bat delako. Hau da, “freedom 3” izeneko azken funtsezko askatasunaren kontra dijoa (ingelesez: “he freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.”), ondorioz, software ez askea bezala dago kontsideratu beharra. Ez barkatu, ez da “bezala” kontsideratu behar. Software pribatiboa da, bere erabiltzaileei askatasunak kentzen dizkielako. Beno, ondorengoa.
  • Mono/Dotnet: C# basikamente. Microsoften produktu baten bertsio librea. Barkatu baina badakit lan handia egin dutela batzuk Mono exisitu dadin, baina nik ezin dut onartu.
  • Haskell: Kode elegantea. Nahiko azkarra baina ez nahikoa. Pakete kudeatzaile nahiko ona. Beno, asko disfrutatzen dudala hemen programatzen. ASKO. Gertatzen dena da, programazio lenguaia honek geroz eta kode gehiago erabilita arazoak hasten dela izaten: Dependentziak daude denbora guztian erabili beharra eta hauek asko asko pixatzen dute (dependentziak behar izatea berez ez izan arren oso ona ere). Gainera, kodeak karaktere eta itxura arraroak hasten da hartzen konplexutasuna handitzen den bitartean. Gainera, badirudi bere ebaluazioa edo funtzionamenduaren ondorioz ezin da ondo aurreikusi nolako exekuzioa izango duen (azkarra, geldoa, debuggeatzeko zaila…) beno. Pena bat baita ere. Badirudi GHC konpilatzailearen sortzaileak konponbideen bila dabiltzala dependentzien arazoa konpontzeko. Ea zer lortzen duten. Hala ere, nire ustez hala ere abiaduraren arazoa beti egongo da hor, abiadura hobetzeko teknikak egon arren, baina kodetik Haskellek duen elegantzia guztia kentzen diote. Bakarrik begira ezazue Quicksearch-en kasua (bere inplementazio elegantea eta inplementazio efizientea).
  • OCaml: Haskellen antzeko abiadura. Ez dakit, ez dut ikusten ezer asko konpontzen duenik haskelletik abiatuta. Behintzat izena guapo dau.
  • JavaScript: barkatu baina ez.
  • NodeJS: Barkatu. JSn dago oinarrituta eta gainera Chromen zati batzuk erabiltzen ditu, batzuk libreak eta beste batzuk ez. Jendeak badirudi ez dakila, baina hala da. Berdina Electron aplikazioekin. Software libre bezala kontsideratzen dira askotan, baina ez da hala, software pribatiboan dutela dependentziaren bat.
  • Julia: Ondo dago, baina zientziarako dago gehiago prestatuta, ez beno, ez da arrazista edo izateagatik, baina ni ez nago horretan interesatuta, baizik eta orokorragoa den zerbaitetan. Eta uste dut ez naizela zientzialaria. Zientzialari bihurtzen banaiz, seriotasun gehiagorekin kontsideratuko dut.
  • Lua: meh. Ez dut gehigarriak egiteko programazio lenguaia bat nahi.
  • Guile: gainekoaren berdina. Baina funtzionalagoa denez, nahiago dut.
  • Lisp eta antzekoak: Guapo legoke, baina ez dute efizientzia handirik. Bai, komun lisp gogoko dut baina nik ezin dut perfektua kontsideratu azkarra ez den lenguaia bat. Oso oso garrantzitsua iruditzen zait. Nahiko azkarra da baina ez nahikoa. Azkarragoak daude.
  • Python: Nola sartu da hau exekuzio abiadura garrantzitsua kontsideratzen den toki batean? atera hemendik orain.
  • Ruby: Beste bat?
  • Perl: Hau broma bat da.
  • Smalltalk: Esaten dute irakurgarriena dela, baina ezin dut onartu. Ez omen da oso azkarra.
  • Zig: Ondo dago baina gustatuko litzaidake ez balu Rusten insperazioa jaso. Gainera, iruditzen zait ez dela nahikoa goi mailakoa. Seguruenik Rust erabili ordez, Zig erabiliko nuke. Rust bezalakoa da, baina hobeagoa, sinmas eta lizentzia egokiarekin. Dexente errespetatzen dut. Proba dezakezue. LLVM gainean dabil gainera, bere abantaila eta disabantailekin.
  • Vala: GNOME
  • R: Estadistikarako eta motela.
  • Crystal: Hau oso ondo dau. Rubyren antzekoa baina oso azkarra. Oker ez banago baldintza guztiak betetzen ditu. Ez dakit zenbateraino eramangarria den, baina bestela, lenguaia hau ikaragarria da. Oso azkarra da eta gainera goi mailakoa. Rubyren alde on gehienak dauzka, dagoeneko oso oso ondo dagoena. Go gainetik jartzen dudan lehen lenguaia da hau. Beno, baina gustatzen ez zaidana da ez dirudiela gehiegi errespetatzen dutenik software askea. Beraien webguneak software pribatiboa dauka eta ez dabil oso ondo javascript gabe.
  • Switft: haHAA
  • Dark: Aplikazioak egiteko Googleren beste leng
  • Nim: Hau izan da aurkitu dudan programazio lenguaiarik perfektuena. Beste bidalketa bat egingo dut honi buruz gehiago hitz egiten. Bidalketa hau aldatuko dut bere helbidea jartzeko.

Hau da nire lenguaien “ranking”-a:

  1. Nim https://nim-lang.org/
  2. Crystal https://crystal-lang.org/
  3. Go https://golang.org
  4. Zig https://ziglang.org/

Hona hemen “top”-ean ez daudenak baina ordena bat duteanak:
a) Julia
b) Rust
c) Haskell
d.1) JVM-eko lenguaia batzuk badaude interesgarriak: Clojure, Scala. Eta baita ere badirudi ETA izeneko programazio lenguaia bat ere existitzen dela JVM gainean haskell inplementatzen duena.
d.2) JVM-eko lenguaia batzuk badaude interesgarriak: Clojure, Scala. Eta baita ere badirudi ETA izeneko programazio lenguaia bat ere existitzen dela JVM gainean haskell inplementatzen duena.


x.1) C++
x.2) JavaScript


z) NodeJS

0x4b4a) Askeak ez diren lenguaiak + C# + .NET kksoft

  • iortegaOP
    link
    fedilink
    arrow-up
    1
    ·
    4 years ago

    Ezin dut esan arrazoirik ez duzunik. Baina nire helburua ez da helburu bakoitzerako lenguaia egokiena aurkitzea baizik eta perfektuena. Eta ez “perfektua” baizik eta “perfektuena”.