Релиз языка программирования 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
