Category: Open Source

31
Авг
2020

12 сентября, Ростов-на-Дону: конференция RndTechConf 2020

Расскажут про развитие языков программирования, машинное обучение с JavaScript, переход от REST API к GraphQL и многом другом.
— Читать дальше «Конференция RndTechConf 2020»

30
Апр
2020

22–25 мая, онлайн: конференция «Стачка-2020»

Более 200 докладов в 30 разных секциях. Всего 6 крупных направлений: разработка, диджитал, карьера и образование, тренды, менеджмент и IT и государство.
— Читать дальше «Конференция «Стачка-2020»»

09
Мар
2020

20–21 марта, Киев: конференция DevOps Fest 2020

На конференции специалисты из США, Европы, России и Украины поговорят про инструменты, фреймворки и практики для эффективного DevOps.
— Читать дальше «Конференция DevOps Fest 2020»

03
Мар
2020

10 инструментов искусственного интеллекта Google, доступных каждому

Обзор десяти инструментов Google для ИИ, которые могут использовать разработчики, компании и аналитики. Где искать качественные наборы данных и как привязать к проекту готовую модель TensorFlow.

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 с этими и другими языками, просмотрите эту страницу.

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

15
Янв
2020

Опыт разработки: почему мы пишем инфраструктуру машинного обучения на Go, а не на Python

Разработчик Cortex Калеб Кайзер делится соображениями о преимуществах применения Go для инфраструктурных решений в ML-проектах и о том, как два языка могут дополнять друг друга.

Python – самый популярный яз…

03
Сен
2019

27–29 сентября, Калуга: XVI научно-практическая конференция разработчиков свободных программ

Мероприятие соберёт ведущих специалистов по разработке СПО, участвующих в крупных международных и отечественных проектах.
— Читать дальше «XVI научно-практическая конференция разработчиков свободных программ»

19
Ноя
2018

Amazon представила Corretto, бесплатный дистрибутив OpenJDK

Amazon запустила проект Corretto — кроссплатформенный дистрибутив OpenJDK с долгосрочной поддержкой. Сейчас доступна тестовая версия продукта, полноценный релиз планируется в первом квартале 2019 года. Платформы и совместимость Предварительная версия C…

30
Июл
2018

IDE NetBeans 9.0 стала доступна в инкубаторе Apache

Apache Software Foundation показала первый релиз интегрированной среды разработки NetBeans после передачи кода компанией Oracle. Версия под номером 9.0 проходит сертификацию и отладку в инкубаторе фонда, чтобы затем стать самостоятельным прое…

04
Май
2018

Oculus заменила фреймворк React VR на React 360

На прошедшей конференции F8 Oculus, которой владеет Facebook, представила обновленную и переработанную версию React VR — JS-библиотеки с открытым кодом для создания кроссплатформенных приложений в виртуальной реальности. Фреймворк, который теперь назыв…

30
Апр
2018

Вышла стабильная версия графического формата WebP

Google опубликовала версию 1.0 собственного open source формата сжатия изображений WebP. Он был впервые предложен еще в 2010 году. Данный формат использует алгоритмы сжатия с потерями качества и без и показывает лучшие результаты по сравнению с JPEG и …

23
Янв
2018

Facebook предложила измерять время во flick`ах

Новая разработка компании предназначена для комфортной работы с видео- и аудиорядами любой частоты.
— Читать дальше «Facebook предложила измерять время во flick`ах»

27
Сен
2017

Google представила Abseil, дополнение к стандартной библиотеке C++

В проект включены функции, хорошо зарекомендовавшие себя и используемые в таких проектах Google, как gRPC, Protobuf и TensorFlow.
— Читать дальше «Google представила Abseil, дополнение к стандартной библиотеке C++»