LINUX.ORG.RU

Почему Go это плохо, и он вам, на самом деле, не нужен.

 ,


7

15

Давайте я вам поясню про язык Go, откуда у него растут корни, и почему его на самом деле не стоит использовать. То что напишу ниже, это взято как из инсайдерской информации, так и из материалов, доступных в интернетах.

Дело в том, что Go это, на самом деле, «решение» внутренних гугловских проблем. Но отнюдь не проблем горизонтального масштабирования серверного ПО, как многие почему-то думают. Он приспособлен специально для использования в гугле вот в каком контексте.

Гугл нанимает большое количество тупых студентов, только-только после вуза или ПТУ, и заставлять их писать хоть какой-то простой код. И делать минимум ошибок, при этом. Для этого Go сделан таким тупым и упрощенным. И выкинут в паблик он только для того, чтобы вероятность, что у такого студента, только пришедшего в гугл, было хоть какое-то знание Go, была выше нуля.

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

Из гугла же идет маразматическая система управления зависимостями Го, которая заточена на монорепы.

Тут возникает вопрос - а почему этому тимлиду не дать в руки кодогенератор, вместо всей этой accidental complexity, возникающей из-за огромного количества строк кода, и из-за затрат на коммуникацию?

А тут надо понимать, как внутри устроены огромные корпорации типа гугла.

Их давно пожрал рак бюрократии. Там у менеджерских и околоменеджерских должностей один из главных критериев промоушнов, или вообще даже ассесмента(усидения на должности), это количество людей у тебя в подчинении. И количество говнокода в вакууме которая твоя команда написала. И вот все эти люди, сидящие на более-менее средне-высоких должностях, постоянно бодаются за эти промоушны и ассесменты. Это их главная и единственная цель. Поэтому, ни о какой эффективности тут речи не идет вообще от слова совсем. Тут главное - корпоративные игры, количество голов в твоем стаде и количество и размер высеров, которые это твое стадо произвело(причем буквально, важны SLOC).

Естественно, это все отражается на качестве продуктов, и это видно как по полному прекращению инноваций в гугле, так и по постоянно мелькающим и закрывающимся высерам этой компании - hangouts, duo, google plus, google wave, и прочее и прочее, можете еще вспомнить много чего.

Если у вас в компании такой «модели управления» нет, и более того, у вас нет возможности нанимать крайне высококвалифицированных людей за крайне много денег, единственное назначение которых будет расписывать стаду гошников(которые тоже стоят немало денег просто из-за количества) систему до уровня конечного автомата, то вам этот язык и вся его экосистема нахрен не сдалась.

Никакой мифической простоты в отладке и в понимании кода Go не приносит. Да и сложность программных систем растет совершенно не из-за понятности/непонятности какой-то отдельной взятой строчки кода или функции. Потому, что, во-первых, понятность это понятие субъективное, во-вторых потому, что, отдельно взятая фунцкия на 5 строк понятна любому опытному программисту, будь она написана хоть на Rust, хоть на Common Lisp.

Сложность программных систем возникает из-за их размера. И Go эту проблему значительно ухудшает. Человек не может удерживать в голове слишком много вещей, даже если каждая отдельная вещь - очень простая. Количество RAM в голове ограничено.

В случае если вы не хотите выкидывать кучу денег просто так, и скорее предпочли бы нанять немного, но более-менее опытных программистов, Go будет только вреден, потому что все вменяемые люди от него, на самом деле, плюются. Он реально отталкивает опытных людей, которые способны понять сложные требования и написать, и поддерживать, более-менее сложные системы уровнем хотя бы нескольких сервисов плюс БД и MQ.

★★
Ответ на: комментарий от ugoday

да нормальная метрика. В SBCL конечно тоже куча недоработок и багов, но их регулярно пилят, чинят и улучшают. А Clojure какая-то полумертвая

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

Ну вот ты примотал лиспы к дотнету, но ведь человек, юзающий дотнет - он же пришел туда с сишарпом в руках, ну или не сишарпом а чем-то другим си-подобным. И подходы к построению приложения он взял из туториалов дотнетчиков. Ему уже и так хорошо, а лисп не нужен и чужд.
А нативно-лисповой экосистемы, где можно сделать ВСЁ, человечество как-то и не породило, несмотря на библейские деяния зирокса.

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

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

Тебе че надо от твоего воображаемого «IDE» вообще?

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

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

Но Postgresql написан на C, не являясь библиотекой вроде openssl. Не в него ли целились при создании C++, а именно, "большая и сложная программа, для которой в Си маловато абстракций?

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

Для лиспа нельзя создать IDE, прежде всего из-за readmacros. Недаром гугл из запретил. А при том в puri они есть и они ломают связку SLIME/SBCL. Я со своим странным, как ты говоришь, кодом, нашёл для этого решение - сделать таблицы чтения более декларативными и расставить везде аннотации, какая таблица чтения используется в данном файле. Это нужно было протянуть через все инструменты (asdf и slime) и тогда можно было бы приблизиться к созданию IDE. Я всё это сделал в своих форках. Но, естественно, мои предложения год помусолили, а потом отвергли, т.к. они могут сломать легаси. А без замены таблиц чтения нельзя, к примеру, решить проблему КРИЧАЩЕГО КОДА. На это у меня тоже есть решение, которым я пользуюсь в одно лицо, оно порождает другие проблемы. Но язык должен идти вперёд и надо в конце концов решить проблему КРИЧАЩЕГО КОДА, а проблемы, которые моё решение породило, не фатальны и их можно решить, если задаться такой целью, пропатчив каждую библиотеку, в которой она всплывает (и я это тоже делал в своих форках). Вы отказались от развития. Ну и живите в вашем «маня-мирке». Понятно, что сообщество лиспа - это дедушки, которым просто по возрасту уже никакие изменения не нужны, и легаси-проекты, критичные для бизнеса, которые поддерживают люди, не знающие лиспа и боящиеся дунуть на код (как это было в том случае, когда я не прошёл испытательный срок в крупной американской страховой, где сам Пол Грэм что-то написал дцать лет назад, и компиляция была с отключенными предупреждениями). Так что убили лисп такие как ты, относительно молодые, но тоже принявшие все косяки лиспа за аксиому и тем самым лишившие его притока молодой крови. Не сделали нормальное IDE, а рассказываете всем, что EMACS - это норм. Молодёжь от вас ногами проголосовала, некому рассказывать стало.

Кроме того, при наличии родовых функций для создания IDE с удобно работающим переходом к определению нужна статическая типизация. Хотя на самом деле это меньше мешает и это не невозможность создания IDE, а лишь затруднение и ущерб качеству. VSCode для Питона анализирует код, смотрит на поток исполнения, делает вывод типов и показывает определение метода, если может вывести тип. Для лиспа, естественно, это тоже можно было бы сделать. Но поскольку вы аксиоматизировали, что у вас всё идеально, то вы даже не провели анализ предметной области «создания IDE».

Вот и ты сейчас написал некомпетентную херню, а именно «наверняка это есть в SLIME». Нет, это не соответствует действительности, и странно вообще, что ты такое пишешь, имея опыт проф. разработки на C#. Погряз в ощущении элитарности лиспа - это плохой признак.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 7)
Ответ на: комментарий от tp_for_my_bunghole

Разжигание религиозной ненависти или оскорбление чувств верующих?

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

Ему уже и так хорошо, а лисп не нужен и чужд.

Это ты мне как дотнетчику с 15 летним стажем лечишь? Охохонюшки

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

Да про православие это мем такой, просто

CL это либертарианство скорее

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

Чего тебе любопытно? Нужны регэкспы. В CL есть библиотека работы с регэкспами, но она работает с лисповыми строками. Лисповые строки в UTF-32, или UCS-2 или чёрт его знает как оно называется. UTF-8 не является внутренним представлением строк в рантайме лиспа. Значит, если мы хотим иметь регэкспы, то у нас два пути:

  • перекодировать все строки из UTF-8 в UTF-32 на входе и терять на это время. Это стандартное решение. Оказалось, что слишком много времени теряется
  • использовать FFI типы для обработки всего, что связано со строками. В частности, обрести библиотеку для регэкспов на UTF-8, я уж не говорю о том, что пропадают из языка почти все встроенные удобства, например, хеш-таблицы надо переделывать, сравнение и сортировку и т.п. Кроме того, FFI типы - это всегда риск, т.к. надёжность лиспа основана на том, что используются его встроенные типы, которые подвержены сборке мусора и всё вот это. FFI типы = риск падений и утечек.

И это не просто надо сделать, а надо догадаться, что есть путь N 2. И не просто сделать, а в ситуации, когда начальство уже с ножом над проектом стоит и готово ударить, и сроки уже продолбаны по другим причинам (сама задача оказалась сложной). Можно поржать над моей тупостью, но я вовремя не догадался, это бросает тень максимум на меня, но не на лисп.

А вот обрести библиотеку, если её нет - это уже нетривиальная задача, потому что это время и трудозатраты. Я удовлетворил твоё любопытство?

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 8)
Ответ на: комментарий от den73

Есть язык V, как «исправление Go», автор Medvedkov из Нидерландов.
Его давно обвиняли в false advertising.

IDE это маркетинговый термин. Если что-то описывается как «не IDE», то значит не рекламируется, не продвигается на контрактной основе.

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

Можно по пунктам сравнить, что есть в том же VSCode для Python с тем, что есть в SLIME для CL. И убедиться. Да, в SLIME есть то, чего в Python в принципе не бывает и что составляет сокровенное знание, которое я не распространяю и сегодня, но и в обратную сторону будут преимущества, я одно уже описал. А не писать херню типа «что ты подразумеваешь под IDE, наверняка это есть в SLIME». Притом, что VS Code тоже не позиционируется как IDE.

Пошагового отладчика хотя бы нет, хотя уж его-то можно сделать, сделали же в Lispworks. То, что было в SLIME, когда я прошлый раз смотрел - это в лучшем случае прототип.

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

Для лиспа нельзя создать IDE, прежде всего из-за readmacros.

Да нихера не только из-за них. Обычные макросы как тебе внешнее IDE отрефлексирует? Где сколько надо отступов? Где че подсвечивать?

Недаром гугл из запретил.

Гугл вообще странная, шизоидная, контора, они вон Golang придумали

А при том в puri они есть и они ломают связку SLIME/SBCL.

Не знаю че там они ломают, как-то использую и все вроде норм.

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

IRL решение это тупо дописывать правила в емаксе для своих макросов, или для часто используемых вот и все. плюс named-readtables

Это нужно было протянуть через все инструменты (asdf и slime) и тогда можно было бы приблизиться к созданию IDE. Я всё это сделал в своих форках. Но, естественно, мои предложения год помусолили, а потом отвергли, т.к. они могут сломать легаси

я тебе кажется уже говорил, что ты из CL пытаешься на какой-то хер сделать Delphi. Непонятно зачем.

На это у меня тоже есть решение, которым я пользуюсь в одно лицо, оно порождает другие проблемы.

Объективно, чувак, при всей гибкости CL и при всем том что из него делают(вон японцы часто отличаются ггг и не всегда в лучшую сторону), но твой код это трэшак какой-то, что по исполнению, что по use cases.

Вы отказались от развития. Ну и живите в вашем «маня-мирке».

Давай объективно, а? Я вон к лиспу дотнет прикрутил - юзай все его либы не хочу, включая GUI. Вот это - развитие, и полезные либы. А ты че сделал, кроме срачей на ЛОРе, и каких то там никому не известных NDA работ?

Понятно, что сообщество лиспа - это дедушки, которым просто по возрасту уже никакие изменения не нужны, и легаси-проекты, критичные для бизнеса, которые поддерживают люди, не знающие лиспа и боящиеся дунуть на код

Просто в лиспе тоже есть code style, вопреки всем мнениям, в которые ты со своими идеями типа п[уе]рги объективно не вписываешься.

Так что убили лисп такие как ты, относительно молодые, но тоже принявшие все косяки лиспа за аксиому и тем самым лишившие его притока молодой крови.

Да ништяк они живут, и слава богу там мало такой вон п[уе]рги как твоя.

Не сделали нормальное IDE, а рассказываете всем, что EMACS - это норм. Молодёжь от вас ногами проголосовала, некому рассказывать стало.

Да нормальная IDE емакс, если из бесплатных. А так - ну дай мне бабок, я тебе сделаю лучше, у меня какие-то идеи есть. Если ты VS хочешь, или, скорее, исходя из твоих увлечений, Delphi, так CL по-другому работает, для него такое невозможно, да и не нужно.

Кроме того, при наличии родовых функций для создания IDE с удобно работающим переходом к определению нужна статическая типизация.

Вот это вообще какая-то поебень, извините за французский. Я себе в емаксе сделал F12 прямо как в студии - типа переход по символу, и еще стрелочки переопределил, типа туда-сюда. Отлично скачет по дефинишнам, все работает, я не знаю че ты там не осилил и какие с этим проблемы. По-моему, это даже в дефолте SLIME есть - альт+, вроде комбинация клавиш - прыгает тебе куда надо вообще(а если неочевидно куда, так еще и выбрать предлагает).

VSCode для Питона анализирует код, смотрит на поток исполнения, делает вывод типов и показывает определение метода, если может вывести тип.

VSCode для динамических языков это гребаный провал, и даже не только VSCode, а даже сраный PyCharm, и не надо мне про питон хренов рассказывать, я на нем в отличие от тебя в проде писал, и стартап поднял.

Вот и ты сейчас написал некомпетентную херню, а именно «наверняка это есть в SLIME».

Даже если нет - можно сделать, вобщем-то. Я хз как это будет просто для любителей дельфи и VCL правда.

Нет, это не соответствует действительности, и странно вообще, что ты такое пишешь, имея опыт проф. разработки на C#.

Нет, это именно что соответствует действительности, и именно что имея опыт разработки на Serious Business Enterprise говне, я имею с чем сравнивать.

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

Кроме того, FFI типы - это всегда риск, т.к. надёжность лиспа основана на том, что используются его встроенные типы, которые подвержены сборке мусора и всё вот это. FFI типы = риск падений и утечек.

Господи, срань какая-то. Да в CL используя тот же CFFI, работать с сишной памятью и функциями и всем прочим, получается удобнее и надежнее чем в сишечке самой. Это я тебе как эксперт по FFI говорю, вобщем-то.

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

Пошагового отладчика хотя бы нет, хотя уж его-то можно сделать, сделали же в Lispworks.

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

пример: оберни к-либо херню в форму STEP

То, что было в SLIME, когда я прошлый раз смотрел - это в лучшем случае прототип.

Я говорю, ты видимо нихера не понял, или не туда нажал. В SBCL в частности, прямо в мануале, написано, что для того чтобы функция была steppable, нужно чтобы у нее был определенный уровень debug+safety. И когда такое есть - то по ней можно ходить аки по джаве какой в IDEA

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

Можно по пунктам сравнить, что есть в том же VSCode для Python с тем, что есть в SLIME для CL.

Для Python используют Jedi, статический анализатор который ничего не знает об эффектах в runtime, импорты в Django.

SLIME работает с работающим образом всей программы который доступен через REPL(командная строка). В любом месте кода можно вставить прерывание error и исследовать полностью состояние программы в тот момент.
Примерно как делает GDB в «C», но лучше и быстрее.
Для этого в Common Lisp есть TYPE-OF, во всех других языках обычно только switch для проверки типов, нельзя просто взять и запросить тип. В Python и Guile Scheme есть type/type-of.

Emacs Lisp полностью интроспективен в любой момент. Если скачать исходный код и указать в конфиге путь то можно из кода elisp прыгать прямо на нативное определение в «C» для базовых форм. Любую elisp функцию можно проинструментировать нажатием клавиш и при её вызове во время работы в Emacs будет показан курсор в ней для пошагового исполнения. Можно исправить что-то в функции и моментально скомпилировать одну эту функцию, снова проверять как работает программа(Emacs) в целом.

Ничего подобного нет ни в одном другом языке. Потому что показать это можно только в процессе работы, в виде повторных демонстраций. Программер от других языков не поймёт это без демок, а менеджер не поймёт любые демки если он не программер. Если представить вместо Emacs разрабатываемую игру и показать этот процесс разработки то возникнет впечатление уникальной технологии.

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 5)
Ответ на: комментарий от den73

То есть, божественный лисп не имеет средств для работы с самой популярной международной кодировкой текста. Да, мое любопытство удовлетворено на много, много лет вперед.

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

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

«Языки программирования делятся на 2 типа - те, которые хвалят, и те, которые используют» (с) :)

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

Да все там есть, даже CP1251 и CP866 можно при желании раскодировать (babel, flexi-streams)

Дефолт обычно UTF-8 ну как и везде

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

читаю эту тему и думаю - как так получается, что на божественных лиспах никто не пишет ни черта

Да пишут на нем дохера, начиная с веб-хероты и заканчивая компиляторами VHDL под микроконтроллеры, это просто зашоренным лоровцам не видно

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

я уже говорил, если надо чето прямо чтобы видно было прямо вот сразу - grammarly

у тебя поди в браузере стоит

но так то много всего есть

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

Дык вон человек пишет, что дефолт это четырехбайтовая кодировка, а утф надо где-то искать и тащить, или самому писать.

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

Слушай, этот человек придумал какую-то п[уе]ргу, с которой можно в лучшем случае посмеяться, это раз.

Два - в твоей любимой жабке или дуднете, в строках внутри UTF-16, недалеко ушли.

Ну и плюс тут два момента

Первый - плохому танцору UTF-32 мешает, второй - есть вобщем-то общепринятые способы как работать со строками и в жабе и дуднете чтобы не засирать GC итд, например там не склеивать их на каждый чих итп, всякие StringBuilder; в лиспе то же самое; я так подозреваю он пергу какую-то накатал в стиле той за которую на собесах по дуднету отсеивают - аля высирание строк на каждый чих итд

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

Не, я таким не пользуюсь.

our core grammar engine, is written in Common Lisp

Это не выглядит как пример лисповых гуйцов под дотнет.

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

если тебе gui - у меня пример в либе, копируй основные вещи и пиши че хочешь, хоть гриды к посгресу(давно пора нахер, а то эта веб интерфейсина это сракотан какой-то)

у граммарли ессно основная часть это сервер, и там все на CL

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

я так подозреваю он пергу какую-то накатал в стиле той за которую на собесах по дуднету отсеивают - аля высирание строк на каждый чих итд

Ну вполне вероятно, но видишь, он же пишет про целый Клан Лисперов, который за зарплату переделывал готовое решение. То есть целый Клан программистов на лучше в мире языке прошел собеседование в коммерческую контору, и вдруг такое.

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

пиши че хочешь

Ну. И вот так сорок лет уже.

Я ж честно сходил в гугль. Знаешь, есть щас такая мода, списки составлять, типа awesome ${techname}? Вот берешь практически любой язык, гуглишь - получаешь «curated list of libraries, frameworks and software». Любой, кроме лиспа. С лиспом получаешь «curated list of libraries».

Поразительно, не так ли?

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

Хер знает че там за клан лисперов, я чето не в курсе че это за кланы такие существуют, хотя и с русскими лисперами знаком плотно, и с украинскими и с зарубежными

можо это тоже какая-то перга

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

О, я осилил нагуглить, сижу смотрю с ужасом и трепетом на Opusmodus, проникаюсь.
Если твоя хреновина взлетит - не забудь похвастаться.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 2)
Ответ на: комментарий от thesis

То есть, божественный лисп не имеет средств для работы с самой популярной международной кодировкой текста. Да, мое любопытство удовлетворено на много, много лет вперед.

В Javascript строки 16 бит.
В Flutter/Dart строки 16 бит.
В Java строки UTF-16 encoding.

Те станки которые украли в Европе 50-70 лет назад - это вещь, а то что там понапридумывали ещё или уже было тогда когда крали эти - не надо.

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

Да и в питоне внутри, как я понимаю, фиксированный размер символа, пока не понадобилось иное. Я не вникал. Но почему-то питон молотил утф8ные строки втрое быстрее, вот же змеемакака наглая, что он себе позволяет вообще.

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

Для этого в Common Lisp есть TYPE-OF, во всех других языках обычно только switch для проверки типов, нельзя просто взять и запросить тип.

В С# кстати паттерн-матчинг запилили. Выглядит и работает как говно, конечно, но хоть что-то. Плюс я там иногда дичайше угораю по dynamic, это такие обобщенные функции для mentally handicapped people. Иногда работает, иногда нет, но что есть что есть.

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

потому что в питоне отвечающий за парсинг utf-8 код наверняка реализован на сишке, лол. И вот всегда так: читаешь офигительные истории про новый супер-пупер современный язык следующего поколения, убийцу всего и вся, заглядываешь под капот - а там она самая. Ну или не она, но тогда этот супер-пупер язык тормозит в разы и жрет больше места, тоже в разы.

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

один из самых быстрых веб-серверов в мире написан на чистом CL

называется teepeedee2 вроде, как-то так, забыл, но короче рвет всех почти

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

Вообще C# это конечно срань и угар местами просто. Треш сраный. Иногда такой думаешь - какой херней только люди не страдают лишь бы на лиспе не писать. Эх.

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

Но почему-то питон молотил утф8ные строки втрое быстрее

В Python всё реализовано на «C». Написано много «C» кода чтобы включить его в стандартную либу Python, назвали подход «batteries included».

Цена вызова функции в «C» 2-3 наносекунды.
Цена вызова функции «C» из SBCL 3-4 наносекунды.(бывают случаи когда 5)
В Golang цена вызова функции «C» 30-60 наносекунд. Если эта функция исполняется больше 1 микросекунды, то вызывающая goroutine в Go паркуется и цена вызова теперь сотни наносекунд или микросекунды в зависимости как scheduler проверит готовность той goroutine. Передачу указателей в «C» из Go запретили чтобы в будущем можно было реализовать relocating GC.
SBCL, Dart - умеют передавать в «C» функцию struct by value как аргумент.

tp_for_my_bunghole
()
Ответ на: комментарий от lovesan

на сишарпе накалякана вижуал студия вроде… а ну да..

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

Так это не факт. Там наверняка тупо отсутствует куча работы, необходимой настоящему серверу.

Помнишь, с какой скоростью запускались первые версии хрома или телеги? С HDD, между прочим.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 2)
Ответ на: комментарий от lovesan

а нет там никакого факта. просто заявление какого-то перца, причем от 2009 года. много воды с тех пор утекло, и чем он занимается сегодня - непонятно.

alysnix ★★★
()

Да ты глянь, какой он упорный. 45 страница срача, и даже не вспотел.

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

Гошникам в принципе бесполезно это все доказывать, я это давно понял, когда еще в 14м году пришел на конференцию про Go - тогда сам еще на Erlang писал. Люди вообще отбитые, в детали не вникают нихера, про GC, рантаймы итд не понимают от слова совсем.

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

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

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

https://github.com/vii/teepeedee2/blob/master/src/io/posix-socket.lisp

(defmethod socket-read ((fd integer) buf offset)
  (declare (type simple-byte-vector buf))
  (declare (type fixnum offset))
  (debug-assert (not (zerop (length buf))) (fd buf offset))
  (let ((s
         (with-pointer-to-vector-data (ptr buf)
           (socket-io-syscall (syscall-read fd (cffi:inc-pointer ptr offset) (- (length buf) offset))))))
    (case-= s
            (-1 nil)
            (t s))))

чистый лисп, понимаю-понимаю. И epoll - это тоже видимо чистый лисп :))

кстати поднимите руку, кто не считает шизой писать такое вместо

read(fd, ptr + offset, sizeof(buf) - offset);
Lrrr ★★★★★
()
Ответ на: комментарий от lovesan

один из самых быстрых веб-серверов в мире написан на чистом CL

Benchmark скорости серверов это троллинг который не все понимают.
Скорость сервера не имеет никакого значения в более 90% случаев.

tp_for_my_bunghole
()
Ответ на: комментарий от thesis

В питоне внутрянка строки может быть представлена как ascii, latin-1, utf-8, utf-16, utf-32.

В одном или нескольких из этих представлений одновременно.

wandrien ★★
()
Ограничение на отправку комментариев: