Zašto postoji toliko programskih jezika?

Postoji više od 250 programskih jezika. Neki su široko korišteni u poslovnom svijetu, kao što su C ++, Java, JavaScript, Ruby i Python. Drugi su prvenstveno akademski, poput Lispa. Ipak, drugi su nejasni i ezoterični. Možda pitate: "Zašto postoji toliko programskih jezika?"

To je mnogo kao što pitate: "Zašto postoji toliko područja matematike? Imamo algebru, zašto trebamo geometriju, račun i mehaniku fluida?" Svaki programski jezik ima za cilj riješiti određeni problem. Više od jednog jezika moglo bi riješiti isti problem, ali svaki će mu pristupiti drugačije.

Ovdje su neke od glavnih razlika u programskim jezicima.

Čitljivost i održivost

Ljudima je lakše čitati neke jezike, što jednom programeru olakšava suradnju na kodu drugog programera. Python, na primjer, ima reputaciju da se lako čita. Ona nameće strogu uvlačenje linija kako bi definirala svoje kodne blokove, što olakšava pregled programa i određivanje njegove strukture. Drugi jezici dopuštaju i uvlačenje, ali kao stilski izbor, a ne kao zahtjev.

Nasuprot tome, Perl je jezik koji omogućuje programeru da napiše isti program na mnogo različitih načina, ali svrha programa možda nije odmah jasna drugom čitatelju. Takav program može biti zgodan za pisanje, ali je teško razumjeti i urediti netko drugi.

Izvođenje

Neki se jezici tumače, a neki su kompilirani. Prevedeni program mora biti obrađen od strane predprocesora, prevodioca i povezivača prije nego ga računalo može izvršiti. Ovaj specijalizirani posrednički softver obavlja leksičku analizu, pretvarajući program u strojni jezik. Također može optimizirati dobivene upute, tražeći pametne načine kako bi program radio brže.

Sastavljeni programi obično imaju bolje rezultate od programa koji se tumače. Na primjer, C, C ++ i Objective-C su jezici koji se obično kompajliraju do vrlo brzog strojnog koda. Video igre i softver sustava često se pišu na tim jezicima, kako bi se izvukao svaki učinak izvan CPU-a.

S druge strane, programe za interpretirani jezik pokreće softver nazvan tumač, koji izvršava upute programa bez prethodnog kompajliranja u strojni kod. Iako interpreter ponekad analizira program na srednji jezik, što rezultira nekom optimizacijom, performanse nikada nisu tako brze kao kompajlirani strojni kod.

Jedna od glavnih prednosti interpretiranih jezika je njihov potencijal za interaktivni razvoj. Budući da se cijeli program ne mora kompajlirati prije nego se može izvršiti, kôd se može pokrenuti interaktivno. Ovo vam je poznato ako ste ikada koristili naredbeni redak vašeg operativnog sustava: unesete naredbu i vidite rezultate. Takvo sučelje se naziva REPL ili "read-eval-print-loop". REPL dopušta vam da izvršavate naredbe (ili blokove naredbi) pojedinačno i pregledavate rezultate. Lisp, Perl, Python, NodeJS, Ruby i JavaScript su primjeri interpretiranih jezika koji se mogu izvoditi u REPL-u.

Interaktivna sučelja naredbi, kao što je Windows Command Prompt i bash, također se kvalificiraju kao interpretirani jezici. Programi u tim "jezicima" nazivaju se skupne datoteke ili skripte ljuske.

Posebni slučajevi uporabe

Često su jezici posebno dobri u pisanju određenih vrsta programa. Na primjer, NodeJS je dizajniran za pisanje aplikacija s jednom niti za web. Njezin ne-blokirajući ulaz / izlaz dopušta programima da nastave s radom ("ne mogu biti blokirani") dok čekaju na prijenos potrebnih podataka.

Drugi primjer je programski jezik R, specijaliziran za statističku analizu. Programi napisani u R imaju koristi od ugrađenih analitičkih testova i modela te alata za učinkovito manipuliranje velikim količinama podataka.

Jednostavnost izrade prototipa

Neki jezici omogućuju brzu izradu prototipova: programer može "početi pisati" i graditi komponentu na komponenti dok se program u potpunosti ne formira.

Na primjer, web-mjesto Reddit izvorno je napisano u Lisp-u. Nakon što je Reddit pokrenut, cijela je stranica ponovno napisana u Pythonu iz više razloga, kako tehničkih, tako i logističkih. Iako je prepravljanje cijelog koda bilo veliki pothvat, vlasnici stranice nisu izrazili žaljenje. U postu na blogu iz 2005. godine, primijetili su da im je Lisp dopustio da nešto stvore bez da znaju što će postati.

Dostupne knjižnice

Obično, kada pokrenete novi projekt programiranja, ne želite ponovno izumiti kotač. To znači da ne želite pisati funkcije za uobičajene zadatke kao što je izračunavanje kvadratnog korijena ili pronalaženje prvog pojavljivanja znaka u nizu. Iz tog razloga, gotovo svaki programski jezik osigurava skup standardnih knjižnica zajedničkih funkcija. Programeri mogu preferirati jezik zbog knjižnica koje nudi.

Na primjer, standardne knjižnice C pružaju vrlo uspješne funkcije za mnoge operacije na niskoj razini sustava. Perl nudi mnoge robusne knjižnice, kao i CPAN spremište modula koje treba preuzeti i koristiti u vašem programu. Python pruža široku lepezu ugrađenih funkcija i modula za gotovo sve pod suncem. Clojure, jezik sličan Lisp-u koji se izvodi na JVM-u, koristi od sposobnosti pokretanja koda iz opsežnih postojećih knjižnica Java objekata i metoda.

sigurnosti

Nisu svi jezici spremni za pisanje sigurnog koda. Programski jezik C, na primjer, poznat je po tome što ima značajke (ili nedostatak istih) koje mogu dovesti do razarajućih ranjivosti kao što je nulti pokazivač dereferenciranja. Drugi jezici pokušavaju riješiti ova pitanja strožim pravilima.

Na primjer, neki jezici postavljaju ograničenja o tome koje se operacije mogu obavljati na različitim vrstama podataka. Najstrožiji od tih jezika ponekad se nazivaju "strogo upisani", a oni mogu ponuditi mir uma programerima koji daju prednost sigurnosti i stabilnosti u razvoju softvera. Primjeri jakih tipova jezika uključuju Rust, Nim, Ocaml i Haskell.

Jezici također mogu ograničiti "promjenjivost", sposobnost objekta podataka da promijeni stanje. Umjesto objekata čije su vrijednosti prepisane, ovi jezici favoriziraju "nepromjenjive" objekte: vrijednosti u memoriji koje se ne mogu mijenjati bez izričite iznimke. Nepromjenjivi objekti privukli su zanimanje jer su procesori s više jezgri postali široko rasprostranjeni, zbog njihove sklonosti promicanju "sigurnosti navoja". U programu koji štiti nit, više od jednog procesora može raditi na jednom skupu podataka s uvelike smanjenim rizikom pogreške. Jezici koji daju prednost nepromjenjivim objektima uključuju Rust i Clojure.

Podrška Zajednice

Prilikom pisanja programa na novom jeziku, pomaže u pristupu aktivnoj, strastvenoj zajednici programera koji aktivno koriste i doprinose radu drugih. Prije odabira programskog jezika saznajte više o zajednici tog jezika. Neki jezici imaju uzbudljivu, dinamičnu, živu korisničku bazu koju biste možda željeli biti dio, a drugi jezici mogu imati malo ili nimalo zajednice.

Izražajnost

Kada pišu program, programerske misli i sposobnosti rješavanja problema "govore" kroz taj jezik. Kao rezultat toga, programeri preferiraju jezike u kojima se ugodno izražavaju. Međutim, ono što jezik i programer dobro rade zajedno je teško definirati. Na kraju, jedini način da saznate koji jezik vam je ugodan je da koristite različite jezike za različite projekte i usporedite ih za sebe.