Релиз языка программирования V 0.5.2

Состоялся релиз статически типизированного языка программирования V 0.5.2 (vlang). Основными целями при создании V были простота изучения и использования, высокая читаемость, быстрая компиляция, повышенная безопасность, эффективная разработка, кроссплатформенное использование, улучшенное взаимодействие с языком C, лучшая обработка ошибок, отключаемый сборщик мусора (GC), современные возможности и более удобное сопровождение программ. Проект также развивает свою графическую библиотеку и пакетный менеджер. Код компилятора, библиотек и сопутствующих инструментов открыт под лицензией MIT.

Среди изменений в новой версии:

  • Внедрена начальная версия управления владением памятью (как в Rust) с использованием флага -ownership. Вся логика реализована во время компиляции (comptime), поэтому не оказывает влияния на скорость или размер обычного V-кода.
  • Добавлен VGC, параллельный сборщик мусора (tri-color mark-and-sweep), перенесённый из Go.
  • Реализованы модули для iOS и macOS, позволяющие писать код без использования Objective-C.

  • Включена поддержка нового бэкенда компилятора V2 («v -v2 file.v»).
  • Разрешено использование отрицательного индексирования массивов, например, «arr#[-1]».
  • Добавлен оператор возведения в степень »**».
  • Добавлен новый стандартный модуль mcp для взаимодействия V-приложений с AI-моделями, инструментами и сервисами, используя протокол MCP (Model Context Protocol).

  • Добавлена возможность перегрузки оператора »[]».
  • Полностью удалён устаревший фреймворк vweb, заменённый на фреймворк veb некоторое время назад.
  • Добавлена возможность использовать »$if bsd» на этапе компиляции.

  • Стандартная библиотека:
    • Появился модуль для работы с изображениями, вдохновлённый модулем image для языка Go.
    • Появился модуль для работы с большими числами (math.decimal)
    • Появился модуль для работы с tar-архивами (archive.tar)
    • Появился модуль для работы с разметкой markdown (x.markdown)
    • Появился модуль для работы с форматом yaml (yaml)
    • В модуль compress добавлен код для работы с форматами bzip2 (compress.bzip2), snappy (compress.snappy) и brotli (compress.brotli).
    • В модуль crypto добавлен алгоритм ML-DSA (crypto.mldsa) и код для работы hkdf (crypto.hkdf).
    • В модуль crypto.aes добавлена поддержка шифра AES-GCM (crypto.aes)
    • В модуле os исправлена проблема 2038 года (int => int64)
    • В модуль hash добавлен код для работы с контрольными суммами crc64 (hash.crc64) и adler32 (hash.adler32)
    • В модуль time добавлен метод unix_now () для быстрого получения текущего времени (в секундах, UTC).
    • Модули compress.deflate и compress.zlib переписаны на чистом V.

    • В модуле veb добавлена поддержка создания и обслуживания сжатых файлов; промежуточного ПО (middleware) для конкретного пути и комбинации HTTP-методов; SSL; повторно используемых соединений; параллельного цикла обработки событий (многопоточная обработка соединений).
    • В модуль net.websocket добавлена поддержка совершения запросов через прокси
    • В модуль net.http добавлена опция для обхода проверки HTTPS-сертификата
    • В модуль net.smtp добавлен настраиваемый таймаут при отправке писем и возможность отправки как HTML, так и текстовых писем (multipart/alternative)
    • В модуль net добавлена поддержка многоадресной рассылки по UDP.
    • В модуль http.fetch добавлен S3-совместимый клиент и диспетчер обработчиков схем

    • В модуль net.ssl добавлена поддержка протокола ALPN для бэкендов mbedtls и OpenSSL
    • В модуль net.http для HTTP/2 добавлена поддержка сжатия заголовков HPACK (RFC-7541); кодека бинарных кадров (binary framing layer, RFC-7540); синхронных клиентских соединений (H2Conn); [[https://github.com/vlang/v/pull/27362 согласования HTTP/2 в fetch с помощью ALPN. HTTP/2 включён по умолчанию для HTTPS-запросов.
  • ORM: Добавлена поддержка продвинутых типов PostgreSQL (например geometry), базы данных H2, метода SQL для операций UPSERT, оператора «OR» в динамических блоках WHERE.

  • В модуль db.sqlite добавлены методы tables, columns, schema, db_size
  • В модуле db.pg теперь потокобезопасный пул для DB, Tx и Conn с API в стиле Go
  • В модуле db.mysql обеспечена поддержка многооператорных запросов.
  • В C бекенд добавлена поддержка архитектуры sparc64 и реализована возможность отладки кода с помощью GDB или LLDB.
  • Появилась возможность писать функции, вычисляемые во время компиляции (помечаются атрибутом @[comptime]).

  • В утилиту командной строки добавлена команда для генерации C-проекта, флаг »-generate-c-project path».
  • Реализован менеджер версий V, предоставляющий возможность собирать проект с указанной версией V в файле .vvmrc.
  • В пакетном менеджере (vpm) появилась поддержка ользовательских зеркал для установки пакетов.

Связанные с проектом новости:

  • Появилась открытая реализация сервера Minecraft (Bedrock Edition), написанная на V.
  • Опубликован Mustela, сверхбыстрый (9000 страниц в секунду) генератор статических сайтов, написанный на V.

  • Встроенный драйвер PostgreSQL в V, который также используется в V ORM, теперь является потокобезопасным, как и в Go. Больше не нужно использовать пулы соединений. Драйверы для MySQL, sqlite и MSSQL скоро также получат эту возможность.
  • Veb (веб-фреймворк V) теперь многопоточный. Старый однопоточный цикл событий picoev заменён на совершенно новый бэкенд fasthttp (по одной рабочему потоку на каждое ядро процессора; epoll в Linux, kqueue в macOS/BSD; отсутствие конфликтов блокировок; передача статических файлов без копирования через sendfile ()).
  • Модернизированы трассировки стека (включаются опцией »-g»), которые при аварийном завершении теперь показывают полные пути к файлам с номерами строк и именами методов, что позволяет сразу перейти от сообщения об ошибке к точному коду, который её вызвал.
  • Экспериментальный модуль x.json2, написанный полностью на V, теперь стабилен и заменил старый модуль json, основанный на cJSON.



Источник: http://www.opennet.ru/opennews/art.shtml? num=65929

© OpenNet