13.04.2024

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

После 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.

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