LINUX.ORG.RU
ФорумTalks

Что ждёт Go в 2017? Упячка, попячтса: берём пример с Rust.

 , , ,


2

4

Russ Cox, один из главных разработчиков ЯП Go, написал заметку о том, чем он будет заниматься в 2017 году.

  1. Type aliases. Попытка добавить в ЯП «общие псевдонимы» для того, чтобы облегчить рефакторинг внутри Г Корп, была встречена не очень тепло в сообществе. Не смотря на фекалии, фичу запилили, чтобы позже выпилить из-за обнаружившихся проблем. Вместо них, в 1.9 будут реализованы «псевдонимы типов».

  2. Package management. «Группа контрибьюторов» решила реализовать лучший p.m., централизованный. В стиле Rust:

    We’re now iterating on tool implementation, with gps as the engine. We’re learning and tweaking as we go, and plan to open up the repository publicly in early January

    A central packaging registry (a la npm)

    Напомню, ранее в соседнем треде уже упоминали, как выглядел процесс дизайна пакетного менеджера в ЯП Rust. Выглядело всё где-то так же: сначало реализовали без всякой обратной связи, потом дали сообществу и попросили жрать, что дают.
    Впрочем, обещать не значит жениться, пилят всё это какие-то левые лоси, а Russ лишь обещает убедиться, что идеи хорошо лягут на стандартный тулчейн Go.

  3. Build improvements. Недостаточно агрессивное кеширование приводит порой к медленной компиляции. Из этого вытекает и проблема медленного прогона тестов. Помимо этого, go build должен поддерживать и проекты вне GOPATH.

  4. go vet, указывающий на ошибки в корректности кода, возможно, должен запускаться параллельно с компиляцией / прогоном тестов. Кроме того, в него должны быть включены наиболее часто встречающиеся ошибки из 100 самых популярных проектов на Github'е по количеству звёзд / форков.

  5. Улучшение сообщений ошибок. Большая часть кода в Go проектах сейчас выглядит так:
    if err != nil {
    	return err
    }
    
    В результате - отсутствие контекста ошибки, её непонятность, что не айс. В 2017 Russ будет раскидывать мыслю по этому поводу.

  6. Формулирование лучших практик pkg/context. В 1.7 запилили этот костыль, сформулировали правила использования и нарушили их при реализации стандартной библиотеки database/sql. Теперь нужно таки опять решить, когда context уместен.

  7. Модель памяти ЯП не даёт никаких гарантий пользователям, поэтому никто не интересуется, как вообще что-то там работает. В 2017 нас ждут захватывающие блогопосты.

  8. Immutability. В долгосрочной перспективе go race для обнаружения гонок должен стать бесполезен в виду реализации reference immutability. Хотя, «вполне вероятно, что это лишь влажные фантазии и ничего такого не случится». В одном можно быть уверенным, в 2017 автор познакомится с проблемой ближе.

  9. Generics. Самый горячий аргумент. Между тем, цитата:

    Команда Go никогда не говорила, что в Go дженерики не нужны. Она говорила, что есть более приоритетные задачи.

    4 предложения (proposals) по реализации этой фичи не взлетело, протухнув после обсуждений. Сейчас подошло время заново глянуть на проблему, учтя опыт Dart, Midori, Rust и Swift. Но в этом году дженериков не будет, год пройдёт под знаком лучшего понимания.


Последнее исправление: MadDeer (всего исправлений: 1)
Ответ на: комментарий от derlafff

Таки пусть горит. Закалим характер.

Deleted
()
Ответ на: комментарий от BigAlex

есть с десяток библиотечек от 10 васянов.

Ага, похоже я просек главную проблему го) И это точно не дженерики)) А что там с фреймворками? Дайте угадаю: десяток велосипедов от васянов, да?

bread
()
Ответ на: комментарий от Deleted

Нет. do-сахар — очень тонкий слой, вместо

do x <- a
   y <- b x
   c x y
вполне можно писать
a >>= \x ->
  b x >>= \y ->
    c x y
В Scala это будет выглядеть как
a.flatMap(x =>
  b(x).flatMap(y =>
    c(x, y)
В данном случае именно монада сократит код.

Miguel ★★★★★
()

Кстати, а новые стильные шрифты будут?

Miguel ★★★★★
()

В результате - отсутствие контекста ошибки, её непонятность, что не айс.

Error - это же интерфейс. Очень часто возвращают свои типы, реализующие его, чтобы отдать доп. информацию.

Интересно узнать мнение более опытных людей о проблеме - что именно плохо, и в каких языках хорошо. Я не очень силен в теории и не понимаю, о чем речь.

CaptainFarrell
()
Ответ на: комментарий от Miguel

Из твоих же примеров видно, что омерзительно выглядит. Решающую роль играет именно do-сахарок.

Deleted
()
Ответ на: комментарий от RazrFalcon

Зачем ты сюда rust приплёл?

Потому что какая-то неизвестная группа приватно разрабатывает что-то непонятное, претендуя на то, чтобы это стало официальным инструментом. Для сравнения, в Rust:

https://github.com/rust-lang/rust/issues/866

- Наличие пакетного менеджера реально облегчило бы разработку.

- Давайте начнём с shell скрипта.

- Прикольно было бы назвать его «мусор».

- Походу я уже всё реализовал, назвал «cargo» (прим: спасибо, что не «мусор»).

- Можно сказать, что у нас есть пакетный менеджер. Закрываю.

Открытость разработки во всей красе. Сравни с https://github.com/apple/swift-package-manager/blob/master/Documentation/Pack... и соответствующими обсуждениями.

MadDeer
() автор топика
Ответ на: комментарий от stevejobs

я сейчас зашел в наш проект и построил граф зависимостей. Сто шестьдесят две. Дальше сам думай, что не так с го гет.

Может проблема не в go get?

kawaii_neko ★★★★
()
Ответ на: комментарий от tailgunner

Я допускаю, что ты слишком молод, чтобы знать что-то о Pascal или MSDOS, поэтому привел современный широко распространенный аналог, хотя сравнение и не совсем точное.

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Я допускаю, что ты слишком молод

Не допускай этого больше.

поэтому привел современный широко распространенный аналог

Я даже не спрашиваю, зачем ты его привел.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.