Lansarea limbajului de programare Go 1.18

Este prezentată lansarea limbajului de programare Go 1.18, care este dezvoltat de Google cu participarea comunității ca o soluție hibridă care combină performanța ridicată a limbajelor compilate cu avantajele limbajelor de scripting precum ușurința de scriere a codului , viteza de dezvoltare și protecția împotriva erorilor. Codul proiectului este distribuit sub licența BSD.

Sintaxa lui Go se bazează pe elemente familiare ale limbajului C cu unele împrumuturi din limbajul Python. Limbajul este destul de concis, dar codul este ușor de citit și de înțeles. Codul Go este compilat în fișiere executabile binare autonome care rulează nativ fără a utiliza o mașină virtuală (profilarea, modulele de depanare și alte subsisteme de detectare a problemelor de rulare sunt integrate ca componente de rulare), ceea ce permite performanțe comparabile cu programele C.

Proiectul este dezvoltat inițial având în vedere programarea multi-threaded și operarea eficientă pe sisteme multi-core, inclusiv furnizarea de mijloace implementate la nivel de operator pentru organizarea calculului paralel și a interacțiunii între metodele executate în paralel. Limbajul oferă, de asemenea, protecție încorporată împotriva depășirilor blocurilor de memorie alocate și oferă posibilitatea de a utiliza colectorul de gunoi.

Noua versiune adaugă suport pentru funcții și tipuri generice (generice), cu ajutorul cărora un dezvoltator poate defini și utiliza funcții concepute pentru a funcționa cu mai multe tipuri simultan. De asemenea, este posibil să utilizați interfețe pentru a crea tipuri combinate care se întind pe mai multe tipuri de date. Suportul pentru generice este implementat fără a întrerupe compatibilitatea cu codul existent. // Sum valorile setate, funcționează pentru tipurile int64 și float64 func SumIntsOrFloats[K comparabil, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // O altă opțiune cu o definiție de tip generic: type Number interface { int64 | float64 } func SumNumbers[K comparabil, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Alte îmbunătățiri:

  • Utilitare pentru testarea codului fuzzing sunt integrate în setul de instrumente standard. În timpul testării fuzzing, este generat un flux de toate combinațiile aleatorii posibile de date de intrare și sunt înregistrate posibilele defecțiuni în timpul procesării lor. Dacă o secvență se blochează sau nu se potrivește cu răspunsul așteptat, atunci acest comportament este foarte probabil să indice o eroare sau o vulnerabilitate.
  • S-a adăugat suport pentru spații de lucru multimodulare, permițându-vă să executați comenzi pe mai multe module simultan, permițându-vă să construiți și să rulați simultan cod în mai multe module.
  • Au fost realizate optimizări semnificative de performanță pentru sistemele bazate pe procesoare Apple M1, ARM64 și PowerPC64. S-a activat capacitatea de a folosi registre în loc de stivă pentru a transmite argumente funcțiilor și a returna rezultatul. Desfășurarea inline îmbunătățită a buclelor de către compilator. Verificarea tipului în compilator a fost complet reproiectată. Unele teste arată o creștere cu 20% a performanței codului în comparație cu versiunea anterioară, dar compilarea în sine durează cu aproximativ 15% mai mult.
  • În timpul rulării, eficiența returnării memoriei eliberate la sistemul de operare a fost crescută și funcționarea colectorului de gunoi a fost îmbunătățită, al cărui comportament a devenit mai previzibil.
  • Pachetele noi net/netip și debug/buildinfo au fost adăugate la biblioteca standard. Suportul pentru TLS 1.0 și 1.1 este dezactivat implicit în codul client. Modulul crypto/x509 a oprit procesarea certificatelor semnate folosind hash-ul SHA-1.
  • Cerințele pentru mediul în Linux au fost ridicate pentru a funcționa, acum trebuie să aveți un kernel Linux de cel puțin versiunea 2.6.32. În următoarea ediție, sunt așteptate modificări similare pentru FreeBSD (suportul pentru ramura FreeBSD 11.x va fi întrerupt) și va fi necesar să funcționeze cel puțin FreeBSD 12.2.

Sursa: opennet.ru

Adauga un comentariu