Дата публикации:Mon, 13 Nov 2023 08:40:46 +0300
После 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 и оптимизация генерации кода.
- Словарь "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: добавлена поддержка вложенных структур.
- 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: добавлена обработка значение null и необязательных полей.
orm: Операции is_null/is_not_null сделаны унарными.
- pg: сишные вызовы перенесены в .c.v файлы.
- native: поддержка флага -no-builtin (генерация исполняемых файлов < 1 КБ Linux с помощью "v -no-builtin -b native examples/hello_world.v").
native: использование i32 вместо int.
- ast, native, cgen: добавлена поддержка "$if native {}".
- Теперь убирает дополнительные переносы строк после 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.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60101