Έκδοση γλώσσας προγραμματισμού Go 1.14

Εισήχθη έκδοση γλώσσας προγραμματισμού Πηγαίνετε στο 1.14, το οποίο αναπτύσσεται από την Google με τη συμμετοχή της κοινότητας ως μια υβριδική λύση που συνδυάζει την υψηλή απόδοση των μεταγλωττισμένων γλωσσών με τα πλεονεκτήματα των γλωσσών δέσμης ενεργειών όπως η ευκολία γραφής κώδικα, η ταχύτητα ανάπτυξης και η προστασία σφαλμάτων. Κωδικός έργου διανέμονται από υπό την άδεια BSD.

Η σύνταξη του Go βασίζεται σε γνωστά στοιχεία της γλώσσας C με κάποια δάνεια από τη γλώσσα Python. Η γλώσσα είναι αρκετά συνοπτική, αλλά ο κώδικας είναι ευανάγνωστος και κατανοητός. Ο κώδικας Go μεταγλωττίζεται σε αυτόνομα δυαδικά εκτελέσιμα που εκτελούνται εγγενώς χωρίς τη χρήση εικονικής μηχανής (προφίλ, εντοπισμός σφαλμάτων και άλλα υποσυστήματα εντοπισμού προβλημάτων χρόνου εκτέλεσης είναι ενσωματωμένα ως στοιχεία χρόνου εκτέλεσης), το οποίο σας επιτρέπει να επιτύχετε απόδοση συγκρίσιμη με τα προγράμματα C.

Το έργο αναπτύχθηκε αρχικά με γνώμονα τον προγραμματισμό πολλαπλών νημάτων και την αποτελεσματική λειτουργία σε συστήματα πολλαπλών πυρήνων, συμπεριλαμβανομένης της παροχής μέσων σε επίπεδο χειριστή για την οργάνωση παράλληλων υπολογιστών και αλληλεπίδρασης μεταξύ μεθόδων που εκτελούνται παράλληλα. Η γλώσσα παρέχει επίσης ενσωματωμένη προστασία έναντι υπερκατανεμημένων μπλοκ μνήμης και παρέχει τη δυνατότητα χρήσης ενός συλλέκτη απορριμμάτων.

Ο κύριος καινοτομίεςπαρουσιάστηκε στην κυκλοφορία του Go 1.14:

  • Новая система модулей в команде «go» объявлена готовой для повсеместного использования, включена по умолчанию и рекомендована для управления зависимостями вместо GOPATH. Новая система модулей отличается интегрированной поддержкой версионирования, средствами доставки пакетов и улучшенной системой управления зависимостями. При помощи модулей разработчики больше не привязаны к работе внутри дерева GOPATH, могут явно определять зависимости с учётом версий и создавать повторяемые сборки.
  • Προστέθηκε поддержка встраивания интерфейсов с перекрывающимся набором методов. Методы из встроенного интерфейса теперь могут иметь те же имена и одинаковые сигнатуры, что и у методов в уже присутствующих интерфейсах. Явно объявленные методы как и раньше остаются уникальными.
  • Увеличена производительность выражения «defer», использование которого теперь почти не отличается по скорости от прямого вызова отложенной функции, что позволяет применять отсроченный запуск функции в коде, чувствительном к производительности.
  • Обеспечена асинхронное вытеснение сопрограмм (goroutine) — циклы, не содержащие вызова функций, теперь потенциально не могут привести к взаимной блокировке планировщика или задержке начала сборки мусора.
  • Повышена эффективность системы распределения страниц памяти, в которой теперь наблюдается значительно меньше конфликтов блокировок в конфигурациях с большими значениями GOMAXPROCS. Как результат уменьшились задержки и повысилась пропускная способность при параллельном интенсивном распределении больших блоков памяти.
  • Оптимизированы блокировки и снижено число переключений контекста при работе внутренних таймеров, используемых в функциях time.After, time.Tick, net.Conn.SetDeadline.
  • В команде go по умолчанию активирован флаг «-mod=vendor», если в корне имеется каталог vendor, предназначенный для поставки внешних зависимостей, привязанных к определённому поставщику. Добавлен отдельный флаг «-mod=mod» для загрузки модулей из кэша модулей, а не из каталога «vendor». Если файл go.mod доступен только для чтения по умолчанию обеспечено выставление флага «-mod=readonly», если отсутствует верхний каталог «vendor». Добавлен флаг «-modfile=file» для задания альтернативного файла go.mod вместо имеющегося в корневом каталоге модуля.
  • Добавлена переменная окружения GOINSECURE, при установке которой команда go не требует использования HTTPS и пропускает проверку сертификатов при загрузке модулей напрямую.
  • В компилятор добавлен включённый по умолчанию флаг «-d=checkptr» для проверки кода на соответствие правилам безопасного использования unsafe.Pointer.
  • В поставку включён новый пакет hash/maphash с некриптографическими хэш-функциями для создания хэш-таблиц для произвольных байтовых последовательностей или строк.
  • Добавлена экспериментальная поддержка 64-разрядной платформы RISC-V в Linux.
  • Добавлена поддержка FreeBSD на 64-разрядных системах ARM.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο