Limbajul de programare Go sau Golang

26-Mar-2015 22:02 - 1112 vizionari

In noiembrie 2009 a fost anuntat un nou limbaj de programare, limbajul Go sau Golang.
Versiunea 1 a aparut in martie 2012, versiunea 1.1 in mai 2013, 1.2 in decembrie 2013, 1.3 in iunie 2014 si 1.4 in decembrie 2014.

Se spune ca limbajul Go a fost creat de Google ca elimine problemele de licenta cu limbajele Java si C# (dot net) si sa evite procesele juridice privind masina virtuala Java si Dalvik din sistemul Android. Mai concret, Google a vrut sa elimine dependenta de sistemele proprietare ale lui Oracle si Microsoft, oferind programatorilor o noua jucarie.

De cateva luni ma tot gandesc la limbajul Go si ezit sa-l atac, dar, de doua zile, am inceput sa-l studiez serios: exemple, tutoriale, solutii.

Sintaxa limbajului Go este ciudata (naturala numai pentru cine n-a programat niciodata), dar dupa ce te obisnuiesti cu ea, realizezi potentialul limbajului.

In sfarsit am inteles de ce Golang a fost acceptat aproape imediat de utilizatorii de Perl, Python, Ruby, C, Java, C#.
Acum si eu ma numar printre suporterii Golang.
Imediat dupa ce intelegi filozofia Go, realizezi progresul tehnologic adus de Go.

Spre deosebire programul in Python, care este interpretat, programul in Golang este compilat si asta inseamna ca este foarte rapid, de zeci sau sute de ori mai rapid.

Python vine cu o colectie de module (aproximativ 45 MBytes dintr-o instalare noua) plus cateva pachete specifice (care nu sunt in distributia de baza) si, in total, se ajunge la aproximativ 300 de MBytes, dar asta nu este o problema majora pe calculatoarele moderne.

Python are cateva probleme privind distributia programului final: dependinta de anumite pachete (anumite versiuni) si incompatibilitatea la nivel binar de la o versiune la alta. Daca ai facut programul+pachetele necesare in Python 2.6, nu se va putea folosi cu Python 2.7, va trebui sa reinstalezi Pythonul potrivit plus pachetele necesare noii distributii.

Pentru fiecare program in Python, in medie, trebuie sa aloc spatiu pe hard-disk de 100-150 MBytes. Distributia mea de Python are 367 MB, pentru ca are multe-multe pachete, majoritatea folosite rar.

Python are mari probleme la instalarea pachetelor si pentru rezolvarea lor s-au inventat multe utilitare: pip, easy install, setuptools, distutils, wheel, conda, buildout, hashdist, pex, …
Ca sa se rezolve problema cu incompatibilitatea unor pachete (fiecare program merge bine numai cu o anumita versiune a modulului) s-a inventat utilitarul virtualenv, dar problemele, erorile si frustrarile inca mai persista in comunitatea lui Python.

Golang rezolva problemele de distributie cu un singur executabil de cativa mega si ofera un program compilat, care se executa la viteza apropiata de limbajul de asamblare.

Python este mult mai lent decat Go, Google: speed of python vs golang, iar toate versiunile derivate din Python care incearca sa creasca viteza, o fac cu sacrificii: necesita un set restrictionat de comenzi, impune o abatere (restrictionare) de la standardul limbajului, ceea ce duce la incompatibilitate cu majoritatea pachetelor. Numai programele simple, atent confectionate, se pot utiliza cu derivatele optimizate de distributii de python.

Un alt argument foarte bun in favoarea limbajului Go, fata de Python, este marimea programului compilat: 6-9 Mbytes.
Intr-un singur fisier executabil am un program complet functional scris in Go, care nu mai are nevoie de alte pachete sau biblioteci de program.

Cel mai simplu server de web scris in Go cu suport ssl si pagini dinamice livrate printr-un sablon (template) si bazat pe gin:

Un webserver in golang

Limbajul Go a eliminat de la inceputul sau problemele de distributie aparute cu Python si problemele de distributie (de copyright si de spatiu fizic) a pachetelor Java, reusind sa aiba viteze de executie comparabile cu codul nativ (scris in c sau in asamblare).



Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric



Contorizari incepand cu 9 iunie 2014:
Flag Counter

Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.