С чего вы взяли, что там компилируется только 1200 строк? Попробуйте следующую команду:
go clean -cache && time go build -mod=vendor -v ./app/victoria-metrics/Она сначала почистит закэшированные бинарники, а затем скомпилит проект с нуля из всех исходников. По пути она покажет компилируемые пакеты, в которых намного больше, чем 1200 строчек кода.
Если хотите проверить скорость инкрементальной компиляции, то запустите после первой команды
time go build -mod=vendor -v ./app/victoria-metrics/
$ git clone https://github.com/VictoriaMetrics/VictoriaMetrics $ cd VictoriaMetrics $ find . -name *.go | wc 1597 1597 83172 $ find . -name *.go | xargs cat | wc 594935 2409381 19458477
1597 файлов с 594935 строками
Там уже используется чтение из файлов через mmap — см. github.com/...46281/lib/fs/reader_at.go
Проект средний — github.com/...iaMetrics/VictoriaMetrics
Это 100% означает, что джавой нельзя пользоваться. Я собираю свой проект на Go с нуля (не инкрементальная сборка) за 5 секунд. Инкрементальная сборка занимает полсекунды. Если бы сборка занимала
Если раньше ядро линукса можно было собрать из исходников за пару минут, то теперь нужно будет ждать пару дней, пока компилятор Rust проведет все свои borrow check’и. В итоге развитие ядра линукс затормозится, т.к. только у самых упоротых растеров хватит терпения дождаться окончания компиляции исходников.
Я не упоминал Си. Это отличный язык программирования. Почти как Го :)
Что касается сиприплюснутых, то, если они не любят Раст, значит, есть разные виды мазохизма. Я в них не разбираюсь
Раст хорош для любителей С++ и/или мазохизма (что, в принципе, одно и то же).
Если вам нравится бороться с borrow checker вместо того, чтобы продуктивно писать код на Го, то используйте Раст.
Если вам нравится сочинять запутанные конструкции на С++, чтобы потом в них никто не разобрался, в т.ч. и вы, то Раст вам подойдет.
Если вам нравится разбираться в многостраничных сообщениях об ошибках при использовании STL или boost, то Rust вам понравится.
Есди же вам нравится писать легкочитаемый код на Go, то Rust вам противопоказан (впрочем, как и C++).
Это потому что нет желающих ломать мозг в типичном матановском коде, написанном на Scala. Поэтому приходится предлагать более высокую зарплату, чтобы хоть кто-то взялся за эту работу.
Анонимные функции иногда могут быть полезными. Поэтому в Go они есть. Но злоупотреблять ими не нужно.
Якщо програмер володіє інтелектом вищім за імперативний копіпаст, і здатен осягнути такі речі як дженерики/алгебраїчні типи/тайпкласи/іммутабельність/функції вищого порядку/curring, то го викликатиме в нього кров з очей, бо він розумітиме як зробити більшість з речей краще та елегантніше
«Программисты», пытающиеся впихнуть вышеперечисленный матан во все щели, чтобы показать, какие они умные, приносят больше всего вреда разрабатываемым проектам. К счастью, на Go таким «программистам» сложно наговнокодить свой матан, в котром черт ногу сломит.
Можна статистику
Статистика вот тут — github.com/...q=language:go stars:>1000
Что насчет обработки big data на ClickHouse? Там даже есть catboost — clickhouse.tech/...apply-catboost-model/amp
Тем временем Go занимает третье место среди наиболее желаемых языков программирования. Scala плетется где-то в конце второго десятка.
Первые 3 страницы, там почти ни одного потенциального продукта который мог бы быть написан на java или scala
Это еще раз наглядно показывает ущербность scala и java по сравнению с великим Go!
Мало кто знает, что Go настолько самодостаточен, что компилятор и рантайм Go написаны на Go — см. github.com/golang/go . Это вам не scala с java, написанные на Си.
Наверное, потому, что «стомегабайтные зависимости» — это нечто более сложное, чем условные 100 строчек кода?
Да, зависимости обычно более сложные, но обычно проще написать 100 строчек кода, чем тянуть зависимость. К сожалению, программисты предпочитают тянуть
Ни разу не видел кода на Go, который бы сильно выиграл в читабельности или поддерживаемости, если бы в Go была поддержка reduce/filter.
Go предоставляет следующие инструменты для решения этой проблемы:
— Применение композиции вместо наследования. Она позволяет импортировать только ту функциональность, которая действительно нужна пользователю.
— Использованием интерфейсов с небольшим количеством методов.
— Предпочтением небольшой копипасты вместо импорта здоровенной зависимости.
Почти весь код состоит из «велосипедов» и «копипаст», т.к. лучше скопировать небольшой кусок кода из стороннего пакета либо написать свой велосипед, оптимизированный под конкретную задачу, чем пытаться приклеить скотчем с костылями стомегабайтную зависимость. См. medium.com/...docker-image-983fb5912b0d