Несмотря на свою простоту, язык V может использоваться практически во всех областях разработки: системное программирование, веб, разработка игр, GUI, мобильные приложения и научные исследования.
V представляет собой компилируемый в машинный код язык со статической типизацией, сосредоточенный на решении задач по упрощению сопровождения разработки и обеспечению максимальной высокой скорости компиляции. Код компилятора, библиотек и сопутствующих инструментов открыт под лицензией MIT.
В этой публикации мы рассмотрим основные характеристики языка, примеры кода и как установить средства работы с языком на вашей операционной системе.
Основные характеристики
Вот как характеризуют язык автор проекта и те, кто им успели воспользоваться:
- Простота: при знакомстве с другими языками, изучить V можно выучить менее, чем за час
- Быстрая компиляция: от 100 тыс. до 1,2 млн строк кода в секунду на одном ядре CPU (данные приведены для Intel i5-7500 @ 3.40GHz, SM0256L SSD, без оптимизации). Самосборка компилятора: от 0.15 – 0.6 с
- Безопасность: нет
null
иglobals
, никакого неопределенного поведения, иммутабельный по умолчанию - Возможность бесшовного взаимодействия с C-кодом
- Трансляция проектов на C/С++
- Кроссплатформенная UI-библиотека
- Встроенная графическая библиотека
- Легкая кросс-компиляция
- Программы компилируются в исполняемые файлы без внешних зависимостей
- Поддержка hot reload: при внесении изменений не требуется компилировать код заново
- Есть интерактивная среда (REPL)
- Встроенный ORM (объектно-реляционное отображение)
- Встроенный веб-фреймворк
- Нет сборщика мусора или подсчета ссылок. Очистка происходит во время компиляции. Если V-программа компилируется, в ней нет утечек памяти.
- Язык имеет модульную структуру, есть менеджер пакетов vpm. Установка пакетов выглядит так:
v install sqlite
- Чтобы вызвать функцию
foo()
в новом потоке, достаточно написатьgo foo()
Александр Медведников начал работу над языком для решения собственных задач, и постоянно его совершенствует. В проекте сейчас 200 контрибьюторов, код распространяется по лицензии MIT.

Примеры кода
Не будем далеко ходить, посмотрим сразу на примеры кода. Протестировать их и примеры из документации можно, не устанавливая V – на онлайн-площадке Playground.
Расширенный "Hello world"
fn main() {
areas := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile']
for area in areas {
println('Hello, $area developers!')
}
}
Hello, game developers!
Hello, web developers!
Hello, tools developers!
Hello, science developers!
Hello, systems developers!
Hello, GUI developers!
Hello, mobile developers!
Числа Фибоначчи
fn fib(n int) int {
if n <= 1 {
return n
}
return fib(n - 1) + fib(n - 2)
}
fn main() {
for i := 0; i < 10; i++ {
println(fib(i))
}
}
0
1
1
2
3
5
8
13
21
34
Числа Фибоначчи + мемоизация
const (
MAX = 15
)
struct Fib {
nums []int
}
fn (fib mut Fib) calc(n int) int {
if n <= 1 {
return n
}
if fib.nums[n] != 0 {
return fib.nums[n]
}
fib.nums[n] = fib.calc(n - 1) + fib.calc(n - 2)
return fib.nums[n]
}
fn main() {
mut fib := Fib {
nums: [0].repeat(MAX)
}
for i := 0; i < MAX; i++ {
println(fib.calc(i))
}
}
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
JSON кодирование/декодирование
import json
struct User {
name string
age int
mut:
is_registered bool
}
fn main() {
s := '[{ "name":"Frodo", "age":25}, {"name":"Bobby", "age":10}]'
mut users := json.decode( []User, s) or {
eprintln('Failed to parse json')
return
}
for user in users {
println('$user.name: $user.age')
}
println('')
for i, user in users {
println('$i) $user.name')
if !user.can_register() {
println('Cannot register $user.name, they are too young')
continue
}
users[i].register() // `user` is immutable, we have to modify the array
}
// Let's encode users again just for fun
println('')
println(json.encode(users))
}
fn (u User) can_register() bool {
return u.age >= 16
}
fn (u mut User) register() {
u.is_registered = true
}
Перегрузка операторов
struct Vec {
x int
y int
}
pub fn (a Vec) str() string {
return '{$a.x, $a.y}'
}
fn (a Vec) + (b Vec) Vec {
return Vec {
a.x + b.x,
a.y + b.y
}
}
fn (a Vec) - (b Vec) Vec {
return Vec {
a.x - b.x,
a.y - b.y
}
}
fn main() {
a := Vec{2, 3}
b := Vec{4, 5}
println(a + b)
println(a - b)
}
{6, 8}
{-2, -2}
Обновленная копия struct
struct User {
name string
age int
}
fn main() {
user1 := User{'Bob', 20}
user2 := { user1 | name: 'Peter' }
println(user1.name)
println(user1.age)
println(user2.name)
println(user2.age)
}
Bob
20
Peter
20
Установка V
Средства работы с языком можно установить из сборок (Linux, macOS, Windows) или из исходников, клонировав репозиторий с GitHub:
git clone https://github.com/vlang/v
cd v
make
Это уже полностью готовый V, который доступен по адресу [путь к V repo]/v
. На
Windows следует через командную строку использовать make.bat
.
Язык постоянно обновляется. Чтобы сделать апдейт, используем простую команду:
v up
Компилятор C. Для работы с языком V вам также понадобится C-компилятор – можно использовать такие средства, как Clang, GCC или Visual Studio. Если у вас нет компилятора, воспользуйтесь инструкциями для своей платформы.
- macOS: Установите XCode из App Store или запустите
xcode-select --install
для установки инструментов XCode. - Debian/Ubuntu: в терминале
sudo apt install build-essential
- CentOS/RHEL:
sudo yum groupinstall "Development Tools"
- Fedora:
sudo dnf install @development-tools
- Arch Linux: V можно найти в AUR vlang или vlang-git.
На Windows можно использовать MinGW-w64, Visual Studio или llvm-mingw. Visual Studio занимает гораздо больше места, но если вы планируете использовать UI-библиотеку, эта среда предпочтительнее. Язык V использует функции Windows: поддержка вывода цвета в консоли, IPv6, TLS на сокетах и др.
Симлинк. Можно создать символьную ссылку /usr/local/bin/v
, чтобы V был доступен глобально: sudo ./v symlink
Docker. Средства языка также доступны в виде образа Docker:
git clone https://github.com/vlang/v
cd v
docker build -t vlang .
docker run --rm -it vlang:latest
Docker на Alpine/musl:
git clone https://github.com/vlang/v
cd v
docker build -t vlang --file=Dockerfile.alpine .
docker run --rm -it vlang:latest
/usr/local/v/v
Тестируем!
Убедимся, что V может сам себя скомпилировать:
v -o v2 cmd/v
$ v
V 0.1.x
Use Ctrl-C or `exit` to exit
>>> println('hello world')
hello world
>>>
Проверим, что работают примеры:
cd examples
v hello_world.v && ./hello_world # или проще
v run hello_world.v # так можно собрать и запустить код
v word_counter.v && ./word_counter cinderella.txt
v run news_fetcher.v
v run tetris/tetris.v

Чтобы с помощью графического модуля создать тетрис или что-то подобное, вам также потребуются библиотеки glfw
и freetype
.
Если вы планируете использовать пакет http
, то на системах, отличных от Windows, необходимо установить
OpenSSL
:
macOS:
brew install glfw freetype openssl
Debian/Ubuntu:
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev libssl-dev
Arch/Manjaro:
sudo pacman -S glfw-x11 freetype2
Fedora:
sudo dnf install glfw glfw-devel freetype-devel
Windows:
git clone --depth=1 https://github.com/ubawurinna/freetype-windows-binaries [path to v repo]/thirdparty/freetype/
Графический интерфейс V
V UI – это кроссплатформенный инструментарий, написанный на V для Windows, macOS, Linux (скоро будет для Android, iOS и JS/WASM). Графический интерфейс V использует нативные виджеты на Windows и macOS, а на других платформах они написаны сразу на V.

ui.window({
width: 600
height: 400
title: 'V UI Demo'
}, [
ui.row({
stretch: true
margin: {10, 10, 10, 10}
}, [
ui.column({
width: 200
spacing: 13
}, [
ui.textbox({
max_len: 20
width: 200
placeholder: 'First name'
})
ui.textbox({
max_len: 50
width: 200
placeholder: 'Last name'
})
])
])
]);
Установка:
v up
v install ui
Запуск:
cd examples
v run users.v
v run temperature.v
v run ...
Библиотеке предстоит еще долгий процесс роста, многие функции пока отсутствуют.
Бинарники, созданные с помощью V UI, не имеют зависимостей. Для того чтобы начать разработку V UI-приложений необходимо установить V
, glfw
и freetype
(glfw
скоро будет изъята из списка необходимых).
macOS:
brew install glfw freetype
Debian/Ubuntu:
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev
Arch/Manjaro:
sudo pacman -S glfw-x11 freetype2
Fedora:
sudo dnf install glfw glfw-devel freetype-devel
ClearLinux:
sudo swupd bundle-add devpkg-libX11 devpkg-mesa devpkg-freetype devpkg-glfw3
Windows:
git clone --depth=1 https://github.com/ubawurinna/freetype-windows-binaries [path to v repo]/thirdparty/freetype/
Что уже написано на языке V
Большинство из следующих программ имеют открытый исходный, так что вы можете посмотреть примеры рабочего кода:
- Компилятор языка и средства работы с языком: V UI, транслятор из C/C++ на V и др.
- Volt – легковесный десктопный клиент для работы со Slack, Skype, Gmail, Twitter, Facebook, Telegram, Twitch и другими ресурсами
- Vid – небольшой и быстрый текстовый редактор для кода
- Gitly – open source альтернатива GitHub/GitLab
- vgram – библиотека для написания телеграм-ботов
Заключение
Язык программирования V является интересной альтернативой популярным языкам с компиляцией кода быстрее, чем в C++. По сравнению с Go, в V поддерживается только один вид
присваиваний, отсутствует null
и глобальные переменные. Если вам интересно сопоставить V с этими и другими языками, просмотрите эту страницу.
Важно, что язык развивается и не стоит на месте. В скором будущем можно ожидать расширения функциональности и исправления мелких недочетов.
Комментарии