Прочитал про go, я понял так: код кроссплатформенный только его нужно скомпилировать по ос и не требует никакой виртуальной машины или чего прочего (готов работать на чистой ос), нет нужды тащить с собой библиотеки он все включает в себя. Одно не понятно при компиляции под ос, учитывается архитектура процессора и будет ли работать приложение на одинаковой, ос но на разных процессорах?
Тут всё как и с другими языками, не использующими виртуальную машину: обычно работает только на той, где скомпилировано. Но может работать, если скомпилировано на совместимой архитектуре. Скажем, собрано на i686 - запустится и на amd64. Но не на arm.
Виртуальной машины нет, есть легковесный runtime. Окружение, библиотеки тащить не нужно, статическая компиляция в один исполняемый бинарник. Архитектуру целевого процессора при кросскомпиляции указывать нужно, иначе работать не будет. Сам процесс кросскомпиляции тривиален, проще я не видел в других языках.
Sushkov Надежно нет. Но вот я скомпилировал для эксперимента над своим android сматрфоном базовый http_server c GOOS=linux, GOARCH=arm а он неожиданно завелся на планшете с intel камнем. Надежное решение - docker контейнер в который и redis, mysql, postgre можно запмхнуть. Сам docker кстати на Go написан.
Будет работать нормально, но язык очень упрощенный. Это как русский в котором оставить 100 слов. Хотите выразительности смотрите в сторону dlang.org
Вы сможете писать код который будет работать как под Windows, MacOSX, Linux, Android (используя компилятор LDC) и в перспективе iOS.
ramble: да эти задачи каждый день. Как ты предлагаешь на Go сгенерить массив из 100 элементов с произвольным шагом, потом склеить с другим массивом в 50 элементов, отсортировать результат и умножить каждое значение на 2.
Наверняка это будет куча кода в котором можно такую же кучу ошибок наделать. Тут это 1-2 строчки.
Да и с каких пор Go в мейнстрим вошел? Если Google его как обычно они это любят не закроет, то язык определенно судьбу Scala повторит. Про которой поговорили и забыли. Собственно даже маргинальный Nim куда выразительнее Go.
beduin01:
Примерт твой - синтетический, а не каждодневный.
Но было бы интересно как это выглядит в 1-2 строчки. Пожалуйста, напиши.
Не мейнстрим? Зависим от Гугля?
От Гугля нынче зависит только темп развития компилятора (который уже достаточно совершенен).
Все умные строители сложных интенет-систем или уже перешли на Go или, если невозможно переписать устаревший код, то смотрят на него всерьез и планируют следующую версию на Go.
Насчет реальных серьезных проектов на упомянутом языке, который никогда не станет мейнстримом - там хоть на пальцы рук хватит?
да эти задачи каждый день. Как ты предлагаешь на Go сгенерить массив из 100 элементов с произвольным шагом, потом склеить с другим массивом в 50 элементов, отсортировать результат и умножить каждое значение на 2.
Дай угадаю? Ты студент или первые 2 года работаешь программером, то бишь джуниор?
Поверь программеру с 15 летним опытом - никому не нужны эти генерации массивов с произвольным шагом в 2 строчки.
Мне за все годы программирования подобная задача встретилась раз 5 не больше. За 15 лет. Раз в 3 года.
ramble: куча задач где нужно сделать что-то с данными. И сделать это просто и без гемороя. Массив с числами можно заменить на текстовые строки или любые другие данные. Итог будет тот же.
Вот пример. Того как все делается в одну строчку.
writeln((iota(1,100, 7).array ~ [1,4,4,4,72,781,941,5,7]).sort().map!(a => a*2));
>Поверь программеру с 15 летним опытом - никому не нужны эти генерации массивов с произвольным шагом в 2 строчки.
Массивы лишь пример. Я могу в одну строчку практически любые данные обработать. И поверь моему 10 летнему опыту это реально нужно и полезно.
> Массивы лишь пример. Я могу в одну строчку практически любые данные обработать. И поверь моему 10 летнему опыту это реально нужно и полезно.
Возможно вы сами с собой занимались дзеном.
Нечитабельность - один из самых больших недостатов в коде.
Нормальные менеджеры серьезных проектов и тех. лиды специально дрючат, чтобы не было вот такого.
Не полезно это.
beduin01: В Excel такое тоже будет одной строкой. О чем пример? Go написан для других задач от слова совсем, само собой в каких-то других задачах его использование будет выглядеть странным костылем. Если в вашей работе подобная обработка данных - каждодневный процесс, то не нужно представлять это как единственный тип задач для всех, ну смешно же.
Расскажите лучше как там с параллелизмом, конкурентностью итд.
PS: ну и чисто не холивара для - в приложении\системе с нормальной архитектурой такие танцы с преобразованиями должны быть сведены к минимуму по умолчанию.
beduin01: Я и не говорю, что там это сложно. Я говорю о том, что приводить в качестве примера работу с преобразованием данных - достаточно странно, с учетом того, что Go главным образом заточен на реализацию высокоэффективных задач сетевого взаимодействия с высоким уровнем отказоустойчивости, если выражаться казенным языком.
Во-вторых, автор вопроса про работу с данными вообще ничего не писал, так причем тут она?
beduin01 В том и идеалогия Go, чтобы создать максимально простой язык, который каждый сможет адаптировать под свои нужды. Если Вам нужны сортировки, то это не значит, что они нужны кому-то другому, а раздувать библиотеку для такой задачи смысла нет - это выходит за её рамки. У Вас есть все необходимые инструменты, а также множество библиотек доступно на GitHub - используйте их.
beduin01:
Go сделан практиками, которые знают, какой это тяжелый труд поддержка софта.
Go очень легок для чтения и использует статическую типизацию. Назовите аналоги.
Smachno: Никто не мешает использовать Си библиотеки. К тому же поддержка С++ либ уже почти готова. Все современные IDE имеют плагины для D. Не знаю что там фиксится долго -- не встречал каких то багов. Сообщество да, определенно не такое большое, единственный минус.
beduin01: давай начнем с того, что задача не решена вобщем-то. "Сгенерить массив из 100 элементов с произвольным шагом". Ты сгенерил массив из 15 элементов
Олексiй Чечель: суть от того 15 или 100 меняется? Я сгенерил сугубо, чтобы короче и нагляднее было. Да и опять это только лишь очень небольшой пример того, что можно делать легко и просто, без написания простыней кода в которых ошибок нагородить проще простого.
beduin01: ы..., ну если он такой простой, то в чем была проблема переделать пример? Ну да и ладно. Я ведь не об D говорил, а вообще об однострочниках. Я прекрасно понимаю, что такое решать подобные задачи одной строкой. В том же js я и не такие штуки проделывал одной строчкой. Это прикольно, когда в целом кроме этой строчки ничего и не нужно. А когда проект 100K строк, то это полная *опа. Никакой читаемости там и в помине нет. Каждый кодер городит на что горазд, и сходу бывает хрен разберешься, что вообще делает эта строка.
Олексiй Чечель: в том, что у меня компилятора нет под рукой, а писать из головы я не хочу. Если без произвольного шага, то будет элементарно `iota(1,100)`. Первый элемент начало, второй конец. Третий (опционально) шаг. На Go как это будет ?
beduin01: оу, я имел в виду задачу выше. Но в целом суть программирования на D теперь я понял, можно делать всю программу в строку, и просто купить мышку с горизонтальным скроллом. В целом удобно.
Олексiй Чечель: гораздо полезнее думать над правильной архитектурой решения, чем тратить время на какие-то очевидные вещи, которые в любом современном языке должны делаться на раз-два-три.
beduin01: с dlang я знаком вобщем-то, изучал около недели, признаюсь, не осилил в достаточной мере для решения поставленной задачи. Так-как время поджимало решил обратится к go, который мне посоветовали. И на следущий день было готово решение, которое до сих пор крутится на продакшине. И вобщем я периодически посматриваю на D, возможно когда-то еще к нему приду. Хотя те примеры, которые я вижу, навевают тоску. Возможно это некоторое сходство с кодом, с которым приходилось работать много лет - js. Возможно я просто уже слишком стар, чтобы держать весь спектр инструментов языка в голове. Хочется просто сконцентрироваться на архитектуре приложения, а не рыться в документации, чтобы понять, а каким способом решать данную конкретную мелочевку.
semt1, говнокодом написание простыни кода. На Go все обстоит именно так. Если неожиданно мне к примеру захочется еще и float обрабатывать, то решение на Go будет просто огромным и нечитабельным, а значит приведет к ошибкам
beduin01,
вы сейчас пытаетесь переложить ответственность с программиста на язык.
не пишите говнокод, кто вас заставляет.
даже на PHP можно не говнокодить.
semt1, утверждение из серии "не бывает плохих книг". Бывают языки где нормально писать просто невозможно. Все будет способствовать тому чтобы программисты говнокодили.
beduin01, задача программиста не писать красивый или не красивый код. а решать задачу
и язык позволяющий задачу решить проще (а значит, без возможных ошибок) и является наиболее интересным на практике.
а мозгодробительные вещи можно на Хаскеле делать. вполне себе хороший язык для расширения кругозора.
вы можете привести пример - какие такие серьезные вещи написаны на D?
к слову даже на Хаскеле Селектел писал в свое время.
а где используется D?
кто из серьезных ребят его выбрал для себя основным инструментом?
duckDonaldDuck, там половину дохлых проектов. Да и куча народу с Go уже обратно на Python возвращается т.к. писать на этом убожестве просто смешно. Вместо одной строчки нужно 5-7 писать.