Язык программирования V
Простой, быстрый, безопасный, скомпилированный. Для разработки поддерживаемого программного обеспечения.
github.com/vlang/v
26к
Скачать для Windows
v0.2.x - 5,9 МБ
Линукс
6,6 МБ macOS
6,0 МБ
Сборка из исходного кода
Список изменений
fn main() {
области:= ["игра", "веб", "инструменты", "наука", "системы",
"встроенные", "драйверы", "графический интерфейс", "мобильный"]
для области в областях {
println ("Привет, разработчики $area!")
}
}
Привет, мир
Простой язык для создания поддерживаемых программ
Вы можете выучить весь язык, просмотрев документацию за час, и в большинстве случаев есть только один способ что-то сделать.
В результате получается простой, читаемый и поддерживаемый код.
Несмотря на простоту, V предоставляет разработчику много возможностей и может использоваться практически во всех областях, включая системное программирование, webdev, gamedev, графический интерфейс, мобильные устройства (wip), науку, встраиваемые, инструменты и т. Д.
V очень похож на Go. Если вы знаете Go, вы уже знаете ≈80% V. Вещи, которые V улучшает в Go: vlang.io/compare#go .
Безопасность
Нет нулевого значения
Никаких глобальных переменных
Никаких неопределенных значений
Никакого неопределенного поведения
Отсутствие переменного затенения
Проверка границ
Неизменяемые переменные по умолчанию
Чистые функции по умолчанию
Неизменяемые структуры по умолчанию
Опция/Результат и обязательные проверки на ошибки
Типы сумм
Дженерики
Представление
Так же быстро, как C (основной сервер V компилируется в удобочитаемый C)
C взаимодействие без каких-либо затрат
Минимальный объем ассигнований
Встроенная сериализация без отражения во время выполнения
Компилируется в собственные двоичные файлы без каких-либо зависимостей: простой веб-сервер занимает всего 65 КБ
Быстрая компиляция
V компилирует ≈110 тыс. (серверная часть Clang) и ≈1 млн (серверные части x64 и tcc) строк кода в секунду на ядро процессора.
(Intel i5-7500, SSD SM0256L, без оптимизации)
V записывается в V и компилируется менее чем за секунду.
Инновационное управление памятью
V позволяет избежать ненужных распределений в первую очередь за счет использования типов значений, строковых буферов, способствующих простому стилю кода без абстракций.
Большинство объектов (~90-100 %) освобождаются механизмом автоматического освобождения V: компилятор автоматически вставляет необходимые бесплатные вызовы во время компиляции. Оставшийся небольшой процент объектов освобождается с помощью GC.
Разработчику не нужно ничего менять в своем коде. "Это просто работает", как в Python, Go или Java, за исключением того, что для каждого объекта нет тяжелой трассировки GC или дорогостоящего RC.
Для разработчиков, желающих иметь более низкий уровень управления, автоматическое освобождение может быть отключено с помощью -noautofree.
Также есть возможность использовать GC для всего через v-gc boehm.
Распределение арены доступно через v-prealloc.
Примечание: прямо сейчас автособытие скрыто за флагом -автособытие. Он будет включен по умолчанию в версии 0.3.
Демонстрация управления памятью во время компиляции V. Все объекты освобождаются во время компиляции. Запуск редактора Ved в файле размером 8 МБ с 0 утечками:
Небольшой и простой в сборке компилятор
V можно загрузить менее чем за секунду, скомпилировав его код, переведенный на C с помощью простого
cc против c
Никаких библиотек или зависимостей не требуется.
Для сравнения, пространство и время, необходимые для сборки каждого компилятора:
Время построения пространства
Перейти на 525 МБ 1 м 33 с
Ржавчина 30 ГБ 45 м
GCC 8 ГБ 50 м
Лязг 90 ГБ [0] 60 м
Swift 70 ГБ [1] 90 м
V <10 МБ [2] <1 с
Построение V за 0,3 секунды, а затем использование полученного двоичного файла для повторной сборки:
C перевод (нзп)
V может перевести весь ваш проект на C (wip) и предложить вам безопасность, простоту и ускорение компиляции в 10-25 раз.
std::вектор s;
s.push_back ("V есть");
s.push_back ("потрясающий");
std::cout<<s.размер();
мутация s:= []
s << 'V - это '
s <<'потрясающий'
println(s.len)
Будет опубликован пост в блоге о переводе DOOM.
Перевод с++ на V находится на ранней стадии.
Перевод DOOM с C на V и создание его за 0,7 секунды:
Вы можете следить за ходом выполнения и читать переведенный код здесь: github.com/vlang/doom
Перезагрузка горячего кода
Получите ваши изменения мгновенно, без перекомпиляции.
Поскольку вам также не нужно переходить в состояние, над которым вы работаете после каждой компиляции, это может сэкономить много драгоценных минут вашего времени на разработку.
github.com/.../examples/hot_reload
Мощные графические библиотеки
Кроссплатформенная библиотека рисования, построенная поверх GDI+/Cocoa Drawing, и графическая библиотека на основе OpenGL для более сложных 2D/3D приложений, которая также будет иметь следующие функции:
Загрузка сложных 3D-объектов с текстурами
Камера (движется, осматривается)
Скелетная анимация
Планируется поддержка DirectX, Vulkan и Metal.
Простым примером графической библиотеки в действии является tetris.v.
Собственная кроссплатформенная библиотека графического интерфейса пользователя
Создавайте собственные приложения с собственными элементами управления. Вам больше не нужно встраивать браузер для быстрой разработки кроссплатформенных приложений.
V имеет модуль пользовательского интерфейса, который использует собственные наборы инструментов графического интерфейса: WinAPI/GDI+ в Windows, Cocoa на macOS. В Linux используется пользовательский чертеж.
Скоро будет:
визуальный редактор, подобный Delphi, для создания собственных приложений с графическим интерфейсом
Поддержка iOS/Android с собственными элементами управления
декларативный API, аналогичный SwiftUI и React Native github.com/vlang/ui
Volt, клиент Slack объемом 300 КБ, построенный с интерфейсом V и V:
Простая перекрестная компиляция
Чтобы скомпилировать ваше программное обеспечение, просто запустите Windows v-os. или v-os linux. Никаких дополнительных шагов не требуется, даже для графического интерфейса и графических приложений!
(Компиляция программного обеспечения macOS пока работает только на macOS.)
Создание V для Windows с использованием V для macOS, а затем тестирование результатов v.exe на виртуальной машине Windows:
Безболезненное развертывание и управление зависимостями
Чтобы создать свой проект, каким бы большим он ни был, все, что вам нужно сделать, это запустить
v.
Никаких сред сборки, файлов создания, заголовков, виртуальных сред и т.д.
Вы получаете один статически связанный двоичный файл, который гарантированно будет работать во всех операционных системах (при условии перекрестной компиляции) без каких-либо зависимостей.
Установка новых библиотек с помощью vpm, централизованного менеджера пакетов, написанного на V, так же проста, как
и пользовательский интерфейс установки v
Бегать повсюду
V может выдавать (читаемый человеком) C, поэтому вы получаете отличную поддержку платформы и оптимизацию GCC и Clang. (Используйте v-prod. для создания оптимизированных сборок.)
Использование C всегда будет вариантом, даже после того, как созреет прямая генерация машинного кода.
V может вызывать код C, и вызов кода V возможен на любом языке, который поддерживает взаимодействие C.
РЕПЛ
v
>>> импорт net.http
>>> данные:= http.get('https://vlang.io/utc_now ')?
>>>данные.текст 1565977541
V Скрипт
для файла в ls('сборка/'){
rm (файл)
}
мв('v.exe ', 'построить/')
v запустите развертывание.vsh
Узнайте больше о V-скрипте
Форматирование кода с помощью vfmt для согласованного стиля
Больше никаких споров о стилях кодирования. Существует один официальный стиль кодирования, применяемый форматером vfmt.
Все базы кода V гарантированно используют один и тот же стиль, что облегчает чтение и изменение кода, написанного другими разработчиками.
v fmt -w здравствуйте.v
Встроенный профилировщик кода
Создайте и запустите свою программу с помощью
v-образный профиль profile.txt x.v &&./x
и вы получите подробный список всех вызовов функций: количество вызовов, среднее время на вызов, общее время на вызов.
Бэкенды JavaScript и WASM
V программы могут быть переведены на JavaScript:
в-о hello.js привет.в
Они также могут быть скомпилированы в WASM (на данный момент с помощью Emscripten). V компилятор, скомпилированный в WASM и запускающий V-программы путем перевода их на JavaScript:
v-wasm.vercel.приложение
Игра, написанная с использованием графического бэкенда V и скомпилированная в WASM:
в2048
Автоматическая документация
Используйте vdoc для получения мгновенной документации, сгенерированной непосредственно из исходного кода модуля. Нет необходимости хранить и обновлять отдельную документацию.
v ос doc
Встроенная платформа тестирования
Писать тесты очень просто: просто запустите свою тестовую функцию с помощью test_
fn строка get_string(){возвращает "привет"}
fn тест_гет_строка(){
утверждение get_string()== 'привет'
}
Понятные сообщения об ошибках
Полезные сообщения об ошибках упрощают изучение языка и исправление ошибок:
пользователь.v:8:14: ошибка: параметр "update_user" "пользователь" является изменяемым, вам необходимо указать "mut`: `update_user(пользователь mut)`
7| пользователь mut:= Пользователь{}
8 |обновление_пользователь(пользователь)
| ~~~~
9 | }
Мощный встроенный веб-фреймворк
github.com/vlang/v/tree/master/vlib/vweb
Бежать
['/сообщение/:идентификатор']
fn (b Блог) show_post (идентификатор int) vweb.Результат{
сообщение:=b.posts_repo.получить(идентификатор) или {
возвращает значение vweb.not_found()
}
вернуть vweb.просмотр (сообщение)
}
['/сообщение/:идентификатор']
fn (b Блог) show_post (идентификатор int) vweb.Результат{
сообщение:=b.posts_repo.получить(идентификатор) или {
возвращает значение vweb.not_found()
}
вернуть vweb.просмотр (сообщение)
}
Gitly, легкая и быстрая альтернатива GitHub/GitLab, встроена в V и vweb.
Встроенный ORM
Запустите
импорт sqlite
структурировать Клиента {
строка имени id int
nr_orders
строка int страны
}
fn main() {
db:=sqlite.connect ('пример.sqlite') или {
паника ("не удалось создать/найти пример.sqlite")
}
nr_customers:=база данных sql{
выберите количество из списка клиентов
}
println ("количество всех клиентов: $nr_customers")
/ Синтаксис /V может использоваться для построения запросов
uk_customers:=база данных sql {
выберите из списка клиентов, где страна == 'великобритания' && nr_orders > 0
}
для клиентов в uk_customers{
println('$customer.id - $customer.name")
}
//добавляя "предел 1", мы сообщаем V, что будет
//только один
клиент объекта:= база данных sql{
выберите из списка клиентов, где id == 1 ограничение 1
}
печать (customer.name)
//вставить нового клиента
new_customer:= Клиент{имя: 'Боб', nr_orders: 10}
база данных sql {
вставить new_customer в Клиент
}
}
импорт sqlite
структурировать Клиента {
строка имени id int
nr_orders
строка int страны
}
fn main() {
db:=sqlite.connect ('пример.sqlite') или {
паника ("не удалось создать/найти пример.sqlite")
}
nr_customers:=база данных sql{
выберите количество из списка клиентов
}
println ("количество всех клиентов: $nr_customers")
/ Синтаксис /V может использоваться для построения запросов
uk_customers:=база данных sql {
Комментариев нет:
Отправить комментарий
Оставить отзыв, мнение, комментарий анонимно без регистрации быстро и получить за это деньги можно у нас forum-otzyv.blogspot.com сохрани в закладки и лайк