Как стать автором
Обновить

Хобби-проект польского разработчика — усовершенствованная и дополненная версия языка Go

Время на прочтение 3 мин
Количество просмотров 15K


Один из признаков того, что язык программирования имеет успех, – появление новых языков на его основе. Известным примером является JavaScript. На его базе возникли такие языки, как TypeScript, GorillaScript, Kaffeine, Sweet.js и так далее.

Со временем язык программирования Go, разработанный компанией Google, сможет соперничать с JavaScript по количеству надстроек и диалектов.

Миру уже был явлен Oden – функциональный язык со статической типизацией, разработанный в рамках экосистемы Go. В то же время он создавался как надстройка Go и впитал в себя его лучшие стороны.

А теперь появился новый язык – Have, который имеет все шансы стать усовершенствованной и дополненной версией Go. По крайней мере, так считает его автор – польский разработчик Марцин Врохняк.

Он признает, что пока это хобби-проект, но надеется выйти на серьезный уровень и занять почетное место в экосистеме Go. В своем блоге он рассказал о некоторых особенностях языка и его отличиях от Go.

Во-первых, Have явно отличается форматированием: Go использует фигурные скобки (как в Си):

if a() {
    b()
} else {
    c()
}

Have пошел по пути Python в этом плане:

if a():
    b()
else:
    c()

Еще одно стилевое отличие – способ объявления переменных, структур и интерфейсов.

Объявление структуры и ее метода в Go:

type A struct {
    x int
}

func (a A) String() string {
    return fmt.Sprintf("x:%d", a.x)
}

Врохняк полагает, что такой стиль объявления поможет избежать досадных ошибок:

struct A:
    x int
    func String() string:
        return fmt.Sprintf("x:%d", a.x)

interface Reader:
    func Read(p []byte) (n int, err error)

В Have реализована работа с шаблонами. Разработчики Google не стали добавлять ее в Go из соображений простоты. Тем не менее, Врохняк считает, что это важный и мощный инструмент, который должен присутствовать – must have, как говорится:

struct SampleStruct[T]:
    func Method(p T) T:
        return p

T – имя типа данных.

var a SampleStruct[int], b SampleStruct[string]
var x int = a.Method(1), y string = b.Method("one")

Аналогично шаблоны используются в функциях:

func SampleFunc[T](p T) T:
    return p

На этом разработчик не остановился и добавил так называемые специализации. В зависимости от типа внутри функции, например, может выполняться та или иная обработка данных. Ветвление осуществляется с помощью ключевого слова «when»:

func SomeFunc():
    when int
    is int:
        print("int is int, who would've thought?")
    is string:
        print("int is string, better report a compiler error!")

Подстановка того или иного типа происходит на этапе компиляции. Врохняк отмечает, что вне контекста шаблонов «when» не имеет практического применения.

func CopyBytes[T, K](src T, dst K):
    when T, K
    is []byte, implements io.Writer:
        # копируем содержимое участка памяти в поток записи
        pass
    is []byte, []byte:
	# копируем содержимое участка памяти в другой участок памяти
        pass
    implements io.Reader, is []byte:
	# копируем содержимое потока чтения в участок памяти
        pass
    implements io.Reader, io.Writer:
	# копируем содержимое потока чтения в поток записи
        pass
    default:
        # делаем что-то по умолчанию
        pass

Так как Have находится на начальном этапе развития, многие проблемы Go в нем не решены. К примеру, реализация обработки ошибок в Go требует бесполезных затрат времени для написания однотипного кода.

У автора Have большие планы, но как всегда, мало времени. В ближайшее время язык будет совершенствоваться. Существенный объем функциональности Go пока не реализован в Have. Этому и будет отдан приоритет в обозримом будущем, отмечает Врохняк.

Вторая по важности задача – обеспечение совместимости с Go: чтобы можно было программировать на Go в проектах, написанных на Have.

Go был разработан внутри компании Google. Первоначальная разработка Go началась в сентябре 2007 года, а его непосредственным проектированием занимались Роберт Гризмер, Роб Пайк и Кен Томпсон. Официально язык был представлен в ноябре 2009 года.

Язык Go разрабатывался как язык системного программирования для создания высокоэффективных программ, работающих на современных распределённых системах и многоядерных процессорах. Он может рассматриваться как попытка создать замену языку Си. По крайней мере, в это верят разработчики Go.
Теги:
Хабы:
+23
Комментарии 138
Комментарии Комментарии 138

Публикации

Истории

Работа

Go разработчик
122 вакансии

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн