Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Когда люди с таким видением пытаются объяснить популярность Go, они неизбежно приходят к парадоксу. Если Go настолько плох, почему он так популярен?

Просто аналогичный аргумент применим к любому языку
Тогда в чём он низкий?
Собственно и Go набрал популярность не потому тому, что он такой весь из себя идеальный, а благодаря вере людей в то, что именитый чел из крупной конторы фигню не сморозит.
а техдир, который не всегда достаточно компетентен.В конторах, доросших до существования техдира, решения о выборе платформы принимаются обязательно с участием компетентных людей. Иначе такие конторы до появления техдиров не дорастают.
Даже если можно поспорить, является ли подход Нью-Джерси пост-фактум описанием Unix-философии, то совершенно точно можно быть уверенными, что создатели Go явно продвигали простоту, как ведущий элемент их философии.
Even if the New Jersey method was a post facto straw-man description of the Unix philosophy or that of its creators, make no mistake that there has been an explicit endorsement of simplicity as a guiding philosophy from Go's creators.
Даже если подход Нью-Джерси и оказался пост-фактум доведённым до абсурда описанием философии системы Unix или её создателей, без сомнения имело место явное продвижение простоты как руководящей философии создателей Go.
Даже если подход Нью-Джерси и оказался пост-фактум доведённым до абсурда описанием философии системы Unix или её создателей, без сомнения имело место явное продвижение простоты реализации, как руководящей философии создателей Go.
Простота реализации это чётко сформулированная позиция как в самом языке, так и в библиотеках, и этот явный приоритет простоты над логичностью вшит в язык.
var foo T
var fooPtr *T = &foo
func (T) Bar() {}
foo.Bar()
(*fooPtr).Bar()
fooPtr.Bar()
Если бы логичность была выше простоты, такого бы не было.
a, err := read(); err != nil {
return err;
}
Если бы здесь была простота, то не было бы вообще разделения на значение и указатели
":=" не совместим с полями структур
Убрать бы вообще это и не пудрить людям мозг.
Если вы примете тот факт, что авторы Go занимаются кое-чем другим, чем желанием запудрить вам мозг, мне будет проще отвечать на ваши многочисленные комментарии.
Вы предлагает убрать вообще указатели?
Опять дурака валять начинаете.
научитесь читать уже посты.
Я предложил сделать все указателями как это в Java и C#.
А при чем тут другие языки?
Я про них это все знаю.
Тут нужно одно, скорее всего только указатели, что разом решит мутные вопросы, из синтаксиса уйдет лишнее, а минусов мы не получим.
Структуры больше фенечка и объективных преимуществ в рамках платформы и ее специфики в основном не несут.
При том, что вы предложили сделать всё указателями, как там.
Тогда непонятно, почему вы предложили всё сделать указателями, как там, ведь там не всё сделано указателями.
Мы получим невозможность сделать массив структур, компактно расположенный в памяти, что в некоторых случаях плохо скажется на производительности. Вы, кстати постоянно забываете уточнить, что указателями хотите сделать не всё, а только объекты.
Отсутствие этой фенечки не позволяет писать код, который учитывает наличие процессорного кеша.
Они всего лишь пример реализации, больше ни для чего эти языки я не упоминал. Что видит программист — вот что важно. В этих языках он не видит этих деталей, они ему не нужны.В Java программист эти детали обязан знать. Обязан знать, что объекты представлены переменными, в которых на самом деле находится указатель, а примитивные значения хранятся в памяти непосредственно. Обязан знать, почему в дженерик можно поставить параметром только класс. Обязан знать, как работает сборщик мусора. Это нужно ему для того, чтобы писать корректно работающие программы.
Кого это беспокоит? Кто об этом будет думать? Разработчик Go? Да не в жизни. Я говорю о философии языка и забота о кеш френдли структурах там никаким местом. Для таких целей есть другие языки.Больше всего в Джаве раздражает, что иногда единственный ответ на вопрос как что-то сделать — сменить язык. Наличие структур — фича важная не только для кэша. Также это позволяет делать типы данных, которые по умолчанию передаются по значению, что важно уже не для оптимизаций, а для создания хорошего кода.
Какие там структуры данных, когда у нас рантайм одна большая магическая коробка, в которой происходит что-то, о чем никто кроме самого рантайма не знает.Что в Java, что в C# что, наверное, в Go рантайм магической коробкой не является. Программист, повторюсь, обязан знать, хотя бы в общих чертах, как оно устроено внутри. Какие гарантии даёт рантайм, а каких он не даёт. Как можно писать код, а как нельзя. Если вы считаете, что это не так — пересмотрите свои взгляды, это сильно поможет в работе.
Go сделан для создания микросервисов, это прям вот вся его суть.Go сделан для серверного бэкенда — это несколько шире, чем просто микросервисы. И это пока нет графических библиотек. Консольный софт на Go пишется только в путь — посмотрите на platinum searcher.
Поэтому я уточнил про специфику — C# не об этом и подавляющее большинство софта на это плюет.Оптимизация структур данных под процессорный кэш нужна когда есть большой набор данных, который надо обработать. В серверном коде ситуация очень частая.
И например то, что за каким-нить DateTime на самом деле стоит структура — кому это интересно? Да никому. Кто от этого что-то выигрывает? Да никто.Это интересно каждому, кто хочет знать, можно ли как-то изменить DateTime, переданную в качестве параметра. И интересно тем, кто хочет обрабатывать как можно больше DateTime в секунду.
Обязан знать, как работает сборщик мусора. Это нужно ему для того, чтобы писать корректно работающие программы.Это вы загнули. Понимание работы GC нужно для написания эффективных программ, корректность от этого зависит слабо. Вот JMM, который вы не упомянули, java middle знать обязан.
Но это дополнительная нагрузка на программиста. Проще будет писать:
Лучше или хуже