А ви знали про існування мови програмування V? Це проста компільована мова для розробки швидкого і легкого софта. І головне, що вона продовжує активно розвиватися.
Незважаючи на свою простоту, мова V може використовуватися практично у всіх областях розробки: системне програмування, веб, розробка ігор, GUI, мобільні додатки і наукові дослідження.
V являє собою компільовану в машинний код мову зі статичною типізацією, зосереджену на рішенні задач щодо спрощення супроводу розробки та забезпечення максимальної високій швидкості компіляції. Код компілятора, бібліотек і супутніх інструментів відкритий під ліцензією MIT.
У цій публікації ми розглянемо основні характеристики мови, приклади коду і як встановити засоби роботи з мовою на вашій операційній системі.
Основні характеристики
- Простота: при знайомстві з іншими мовами, вивчити V можна менш, ніж за годину
- Швидка компіляція: від 100 тис. до 1,2 млн рядків коду в секунду на одному ядрі CPU (дані приведені для Intel i5-7500 @ 3.40GHz, SM0256L SSD, без оптимізації).
- Безпека: немає null і globals, іммутабельний за замовчуванням
- Трансляція проектів на C / С ++
- Кроссплатформенная UI-бібліотека
- Вбудована графічна бібліотека
- Легка крос-компіляція
- Програми компілюються в виконувані файли без зовнішніх залежностей
- Підтримка hot reload: при внесенні змін не потрібно компілювати код заново
- Є інтерактивне середовище ( REPL )
- Вбудований ORM
- Немає збирача сміття або підрахунку посилань. Очищення відбувається під час компіляції . Якщо V-програма компілюється, в ній немає витоків пам'яті.
- Мова має модульну структуру, є менеджер пакетів vpm . Установка пакетів виглядає так: v install sqlite
- Щоб викликати функцію foo()в новому потоці, досить написати go foo()
Приклади коду
Не будемо далеко ходити, подивимося відразу на приклади коду. Протестувати їх і приклади з документації можна, не встановлюючи 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
Докер на 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 - невеликий і швидкий текстовий редактор для коду
- vgram - бібліотека для написання телеграм-ботів
висновок
Мова програмування V є цікавою альтернативою популярним мовам з компіляцією коду швидше, ніж в C ++. У порівнянні з Go, в V підтримується тільки один вид присвоювання, відсутня null і глобальні змінні. Якщо вам цікаво зіставити V з цими та іншими мовами, перегляньте цю сторінку .
Важливо, що мова розвивається і не стоїть на місці. В недалекому майбутньому можна очікувати розширення функціональності і виправлення дрібних недоліків.
0 комментариев
Добавить комментарий