Category: Разное

23
Фев
2020

V – значит… язык программирования!

А вы знали о существовании языка программирования V? Это простой компилируемый язык для разработки быстрого и легковесного софта. И главное, что он продолжает активно развиваться.

Несмотря
на свою простоту, язык 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

Примеры кода

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

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

26
Авг
2019

Почему Scrum не работает (и что с этим можно сделать)

Почему Scrum не работает (и что с этим можно сделать)Как работает Scrum, и работает ли он вообще? Разбираемся с фреймворком Agile, его преимуществами и не самыми очевидными недостатками. Скрам – самый популярный Agile-фреймворк. Точка. Согласно отчету VersionOne 11th State of Agile, Скрам используют 58% респондентов (или 68%, если суммировать Скрам и гибрид «Скрам/XP»). Среди масштабируемых фреймворков Скрам, безусловно, занимает лидирующее положение: на долю Scrum-of-Scrums […]

Запись Почему Scrum не работает (и что с этим можно сделать) впервые появилась Библиотека программиста.

01
Июл
2019

Создание приложения для заметок на Flutter/Dart

Хотите изучить новый язык – пожалуйста. Мы подготовили для вас туториал по созданию приложения для заметок на Dart и Flutter.

Flutter – это мобильный кроссплатформенный SDK с открытым исходным кодом от Google. Приложения, написанные на Dart и Flutter, по умолчанию включают в себя Material Design компоненты, что придает привлекательный внешний вид и юзабилити.

22
Июн
2019

ТОП-5 книг для программиста по управлению программистами

Управление людьми в сфере разработки софта имеет гору подходов. Чтобы разобраться в вопросе читайте подборку по управлению программистами.

Хьюман менеджмент уже давно стал частью IT и требует отдельного рассмотрения и изучения. Без знания правильной стратегии и

19
Июн
2019

Что такое IoT и зачем он срочно всем понадобился

Углубимся в этот термин, вокруг которого не утихают дебаты, и разберемся, что же такое IoT, и с чем его едят в современном IT-мире.

Интернет вещей, широко известный как IoT, – очень общий термин, включающий в себя различные устройства, подключенные друг к другу для обмена информацией. IoT стал известен благодаря Кевину Эштону, популяризировавшему эту концепцию.

15
Май
2019

Масштабируемый WordPress-кластер почти бесплатно

Как директор по разработке Design Home, одной из ведущих мобильных игр Glu Mobile, я имею дело с действительно большими вопросами масштабируемости. Поэтому, когда я решил настроить свой собственный блог Effective Programmer, используя WordPress, для меня было естественным создать что-то, что можно масштабировать для работы с сотнями тысяч пользователей в сутки.

30
Янв
2019

10 советов: как подтянуть разговорный английский язык

10 советов: как подтянуть разговорный английский языкХотите работать в международных компаниях, но знаете только русский? Рассказываем, как подтянуть разговорный английский язык программисту. Профессия программиста тем и хороша, что не существует привязки к отдельной компании, региону, стране. Вакансий много, а значит найти наиболее интересную достаточно просто. И уж незнание языка не должно быть препятствием для серьёзного специалиста. Согласитесь, довольно странно, когда профессионал […]

Запись 10 советов: как подтянуть разговорный английский язык впервые появилась Библиотека программиста.

25
Дек
2018

Резервное копирование и архивация данных − курс Microsoft

Резервное копирование и архивация данных − курс MicrosoftКурс для системных администраторов и всех, кому нужно настроить синхронизацию и резервное копирование данных с локальных устройств. О чём курс Компания Microsoft запустила курс, который поможет администраторам разобраться с настройкой архивации данных с помощью сервисов Microsoft − Azure BackUp, Azure Site Recovery. Кроме того, участники узнают про софтверные решения для резервного копирования от партнёров компании […]

Запись Резервное копирование и архивация данных − курс Microsoft впервые появилась Библиотека программиста.

06
Дек
2018

Как управлять развертыванием Windows-приложений

Как управлять развертыванием Windows-приложенийКурс об управлении развертыванием приложений – для тех, кому нужно установить и настроить продукты Microsoft на устройства организации. О чём курс Практический курс, демонстрирующий возможности быстрого и массового развертывания Windows 10 и Office 365. Компания Microsoft запустила курс, который поможет администраторам разобраться с настройкой базовых функций и персонализировать систему управления компьютерной сетью. Участникам курса расскажут […]

Запись Как управлять развертыванием Windows-приложений впервые появилась Библиотека программиста.

30
Ноя
2018

Настройка инструментов совместной работы для бизнеса

Настройка инструментов совместной работы для бизнесаКурс для компаний о том, как настроить инструменты совместной работы на Windows, необходимые для выполнения корпоративных задач. О чём курс В данном курсе администраторы узнают о применении PowerShell для управления онлайн-службами Microsoft 365. Как создать подписку, синхронизировать пользователей домена AD, подключаться к службам Office 365; что необходимо сделать для создания скриптов, автоматизации типовых задач администратора. […]

Запись Настройка инструментов совместной работы для бизнеса впервые появилась Библиотека программиста.

27
Ноя
2018

Управление безопасностью в малом и среднем бизнесе

Управление безопасностью в малом и среднем бизнесеПрактический курс онлайн-университета Нетология об управлении безопасностью и защите данных компании от утечки в случае хакерской атаки. О чём курс Компания Microsoft запустила обучающий курс, который поможет разобраться с настройкой и управлением систем безопасности в Microsoft 365: начиная с конфигураций защиты от шифровальщиков Advanced Threat Protection для малых/средних компаний и защиты информации, заканчивая настройками устройств […]

Запись Управление безопасностью в малом и среднем бизнесе впервые появилась Библиотека программиста.

16
Июл
2018

Бесплатные книги по управлению проектами для новичков и профи

Бесплатные книги по управлению проектами для новичков и профиПодборка бесплатных книг по управлению проектами в разных сферах деятельности. Учебники для новичков, пособия для профессионалов и мировые шедевры. Введение Проектный менеджмент – обширное поле деятельности. Он затрагивает огромное количество смежных дисциплин, таких как управление персоналом, бухгалтерия и статистика. Без спасательного круга базовых знаний в этом океане легко можно утонуть. Если вы совсем новичок, эти […]

Запись Бесплатные книги по управлению проектами для новичков и профи впервые появилась Библиотека программиста.

20
Окт
2014

Руководство по SVG-анимациям (SMIL)

Перевод статьи A Guide to SVG Animations (SMIL) с сайта css-tricks.com, автор — Сара Суэйдан. Публикуется с разрешения автора. Перед вами гостевой постинг Сары Суэйдан. Сара — мастер докапываться до самых глубин классных веб-новинок, подробно и понятно разбирая их до…
ДАЛЕЕ