v lang

Description: Разработка и отладка приложений. Упор на 3D-графику.

dyvniy M
Topic author, Администратор
Администратор
Avatar
dyvniy M
Topic author, Администратор
Администратор
Age: 37
Reputation: 1
Loyalty: 1
Posts: 3351
Joined: Wed, 10 Oct 2012
With us: 7 years 9 months
Профессия: Программист
Location: Россия, Москва
ICQ Website Skype VK

#1by dyvniy » Sun, 17 May 2020, 04:16:35

Простой компилируемый язык, мне Го напоминает
https://proglib.io/p/v-znachit-yazyk-programmirovaniya-2020-02-23
Spoiler
V – значит... язык программирования!
С примерами кода рассказываем про характеристики языка программирования V и его преимущества перед другими компилируемыми языками. Сравниваем производительность и показываем примеры приложений.
1
4851

Несмотря на свою простоту, язык 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.
Временная лента автора на GitHub
Временная лента автора на GitHub
Примеры кода

Не будем далеко ходить, посмотрим сразу на примеры кода. Протестировать их и примеры из документации можно, не устанавливая 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 с этими и другими языками, просмотрите эту страницу.

Важно, что язык развивается и не стоит на месте. В скором будущем можно ожидать расширения функциональности и исправления мелких недочетов.
Источники

https://vlang.io/
https://vlang.io/docs
https://www.opennet.ru/opennews/art.shtml?num=50944

author
https://github.com/medvednikov
Image

Forum name: Программирование (под Desktop и Android)
Description: Разработка и отладка приложений. Упор на 3D-графику.

Quick reply


Enter the code exactly as it appears. All letters are case insensitive.
Confirmation code
:) ;) :hihi: :P :hah: :haha: :angel: :( :st: :_( :cool: 8-| :beee: :ham: :rrr: :grr: :* :secret: :stupid: :music: View more smilies
   

Return to “Программирование (под Desktop и Android)”