После 40 дней разработки опубликована новая версия статически типизированного языка программирования V (vlang). Основными целями при создании V были простота изучения и использования, высокая читаемость, быстрая компиляция, повышенная безопасность, эффективная разработка, кроссплатформенное использование, улучшенное взаимодействие с языком C, лучшая обработка ошибок, современные возможности и более удобное сопровождение программ. Код компилятора, библиотек и сопутствующих инструментов открыт под лицензией MIT.
В новой версии:
- Улучшения в языке:
- Новый модуль «encoding.xml с парсером, валидацией, unit-тестами.
- Улучшенная поддержка couroutines (IO, сеть).
- Сокращение операций выделения памяти в vweb-приложениях на 80%.
- Реализация «@VCURRENTHASH» для замены «C.V_CURRENT_COMMIT_HASH».
- Начат переход с типа int на i64 на 64-битных платформах и i32 на 32-битных.
- Исправление правил проверки типов для нового типа int и оптимизация генерации кода.
- Изменения в API, нарушающие совместимость:
- Словарь «Request.cookies» объявлен устаревшим. На замену пришли «Request.cookie()» и «Request.add_cookie()».
- Более строгие правила для типов C, которые теперь всегда должны быть объявлены.
- Изменения системы проверки типов:
- Предупреждение о разделении option/result переведено в категорию ошибок.
- Исправление вызова «fn» с необязательным аргументом в режиме autofree.
- Вернулась проверка нейминга: pascal case для алиасов.
- C.xx = C.yy алиасы.
- Разрешено приведение целочисленных типов как диапазонов (ranges) в блоках math.
- Предупреждение об устаревании типа byte (в пользу типа u8) при использовании его в качестве параметра fn.
- Исправление метода append для дженерик массивов.
- Проверка ошибки реализации приватного интерфейса другого модуля.
- Исправлена проверка отрицательных значений cap, len при инициализации массива.
- Превращение предупреждения о дублировании имён модулей var и param в ошибку.
- Разрешить переназначение общей переменной целиком (с сохранением прежнего состояния мьютекса).
- Улучшения парсера:
- Исправлено назначение статического метода анонимным функциям.
- ast: исправлено форматирование объявления struct с вложенной структурой.
- Добавлены методы set_all + clear_all к битовым полям «[flag]».
- Предупреждение о неиспользуемых импортах, даже если они объявлены через «import math { sin, cos }».
- Изменения в компиляторе:
- checker, builder, pref: поддержка флага «-dump-defines» для просмотра всех доступных пользовательских и системных определений данной программы.
- maps: добавлены функции maps.merge() и maps.merge_in_place().
- Стандартная библиотека:
- builtin: добавлен метод «unsafe { a.reset() }» для быстрой установки всех байтов в массиве в 0.
- math.fractions: использование перегрузки операторов и отказ от старых функций.
- gg: исправлено выравнивание нижней границы draw_rounded_rect_empty на macos и linux.
- crypto.bcrypt: исправлена ошибка в bcrypt.
- sokol: обновлён до последней версии
- builtin: исправлен sizeof(C.BOOL) (специфично для windows).
- math.big: исправление неправильного деления с отрицательными числами.
- os: добавлен удобный способ игнорирования некоторых системных сигналов.
- os: исправление os.ls(folder) в windows, когда защищённый каталог не может быть открыт.
- crypto.sha/md5/: исправлено вычисление одинаковых значений хэша при многократном вызове .sum() для sha1/256/512.
- os: реализованы os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: добавлена поддержка вложенных структур.
- Web
- vweb: добавлены mime типы для статических .md-файлов.
- net.conv: добавлены функции varinttou64 и u64tovarint для кодирования переменных беззнаковых целых чисел, описанного в rfc-9000 (для QUIC).
- net.http: поддержка указании функций обратного вызова on_running, on_stopped, on_closed в http.Server{}, а также show_startup_message: false.
- net.http: поддержка передачи HTTP-прокси-сервера в http.fetch.
- net.http: добавить механизм повторных попыток в http.fetch() при неизбежных ошибках сокета.
- wasm: реализован inline assembly.
- net.http: до 16-ти увеличено значение max_redirects.
- picoev: реализация режима raw для прямой работы с файловыми дескрипторами.
- net.http: для unix-подобных систем добавлена поддержка socks5 и http(s) прокси.
- ORM:
- orm: добавлена обработка значение null и необязательных полей.
- orm: Операции is_null/is_not_null сделаны унарными.
- Драйверы баз данных:
- pg: сишные вызовы перенесены в .c.v файлы.
- Native backend:
- native: поддержка флага -no-builtin (генерация исполняемых файлов ‹ 1 КБ Linux с помощью «v -no-builtin -b native examples/hello_world.v»).
- native: использование i32 вместо int.
- Си-бэкенд:
- ast, native, cgen: добавлена поддержка «$if native {}».
- vfmt:
- Теперь убирает дополнительные переносы строк после call_expr и перед аргументами структуры.
- Исправлено выравнивание значений при использовании ключей с символами uft8.
- Выравнивание тернарных выражений в блоках const.
- Инструментарий:
- Добавлена поддержка @LOCATION, для более удобной отладки без необходимости комбинировать @FILE и @LINE во время выполнения.
- benchmark: добавлены новые методы b.record_measure/1 и b.all_recorded_measures/0.
- ci: обновлен github workflow c2v.
- strings: добавлен метод Bulder.write_decimal/1 (для записи десятичного числа, без дополнительных аллокаций).
- Исправлена установка уже существующего модуля с помощью vpm (windows).
- tools.vpm: улучшена работа с адресами, заканчивающимися на «.git».
- Добавлено требование наличия файла v.mod для установки модулей через внешние ссылки при помощи vpm.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60101