V - значить ... мова програмування!

  • 5 марта, 15:58
  • 3793
  • 0

А ви знали про існування мови програмування V? Це проста компільована мова для розробки швидкого і легкого софта. І головне, що вона продовжує активно розвиватися.

V - значить ... мова програмування!

Незважаючи на свою простоту, мова V може використовуватися практично у всіх областях розробки: системне програмування, веб, розробка ігор, GUI, мобільні додатки і наукові дослідження.

V являє собою компільовану в машинний код мову зі статичною типізацією, зосереджену на рішенні задач щодо спрощення супроводу розробки та забезпечення максимальної високій швидкості компіляції. Код компілятора, бібліотек і супутніх інструментів відкритий під ліцензією MIT.

У цій публікації ми розглянемо основні характеристики мови, приклади коду і як встановити засоби роботи з мовою на вашій операційній системі.

Основні характеристики

  1. Простота: при знайомстві з іншими мовами, вивчити V можна менш, ніж за годину
  2. Швидка компіляція: від 100 тис. до 1,2 млн рядків коду в секунду на одному ядрі CPU (дані приведені для Intel i5-7500 @ 3.40GHz, SM0256L SSD, без оптимізації). 
  3. Безпека: немає null і globals, іммутабельний за замовчуванням
  4. Трансляція проектів на C / С ++
  5. Кроссплатформенная UI-бібліотека
  6. Вбудована графічна бібліотека
  7. Легка крос-компіляція
  8. Програми компілюються в виконувані файли без зовнішніх залежностей
  9. Підтримка hot reload: при внесенні змін не потрібно компілювати код заново
  10. Є інтерактивне середовище ( REPL )
  11. Вбудований ORM 
  12. Немає збирача сміття або підрахунку посилань. Очищення відбувається під час компіляції . Якщо V-програма компілюється, в ній немає витоків пам'яті.
  13. Мова має модульну структуру, є менеджер пакетів vpm . Установка пакетів виглядає так: v install sqlite
  14. Щоб викликати функцію 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

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.

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 комментариев
Сортировка:
Добавить комментарий