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

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

IT Новости

Смотреть все