Go 1

Слышали, да? Это стучат клавиатуры и щелкают мыши. Там пишут Go 1.

Это будет первая стабильная база языка Go. API зачерствеет и не будет меняться каждый месяц. Язык станет совсем взрослым и серьезным.

Появятся нумерация версий языка — напр., в Go 1.x будут включаться багфиксы для Go 1.

Итак, что же нового принесет язык?

Основные изменения

append() сможет дописывать строку к массиву байт:

var b []byte
var s string
...
b = append(b, s)

close() не будет работать с каналами, открытыми только на чтение, поскольку close() сообщает каналу, что в него больше нельзя писать данные.

Разрешат использовать составные литералы для инициализации типов без имени типа и указателя (помните как было раньше — &Entry{«name», 123}):

type Entry struct {
        Name string
        Value float64
}

var dict = []*Entry{
        {“pi”, 3.14},
        {“e”, 2.72},
}

Наконец-то разберутся в ошибками. Ну с чего для обычной ошибки мне подключать модуль «os»?! Теперь будет особый тип error (как средство языка, а не как часть пакетов):

type error interface {
        Error() string
}

Будет новый тип — rune (unicode-символ), не зависящий от размера int (на 64-битных машинах планируют ввести 8-байтный int, а rune везде останется 4-байтной).

Удаление элемента из хэш-таблицы больше не будет выглядеть как хак:

// вместо
map[key] = dummyValue, false
// будет
delete(map, key)

Определят строгий и одинаковый для всех платформ порядок итерирования хэш-таблиц.

Определят порядок выполнения множественных присваиваний (слева направо).

Компилятор будет ругаться на «затенение» переменных и return без аргументов:

// этот код не скомпилируется
func f() (x int) {
  .... {
    x := myFunc(); // здесь x - локальная переменная, затеняет возвращаемое значение
    return
  }
}

Можно будет сравнивать структуры и массивы поэлементно, а функции и хэш-таблицы нельзя. Как следствие — ключами хэш-таблицы могут служить только типы, для которых работает оператор сравнения.

Поменяют пути к многим пакетам. Удалят container/vector. Удалят old/*, exp/*.

Введут новый тип — Time (вместо int64). Также будет тип Duration.

Будет новый инструмент — «go», вместо goinstall и gomake. Управление пакетами будет еще проще.

Вывод

Эти нововведения коснутся двух компиляторов — gc и gccgo.

Изменения очень интересные, и необходимые. Уже в weekly-сборках многое воплотили в жизнь. Чувствую, скоро будет и Go 1 release.

Полный список изменений — здесь.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s