LINUX.ORG.RU

Go vs Elixir

 ,


0

4

Всем привет. Вот уже много лет пишу на Ruby/Rails, но, как показывают текущие веяние лет через 5 нужно будет полностью пересесть на что-то другое. Что бы выбрали вы сейчас для освоения и почему?

Ответ на: комментарий от silver-bullet-bfg

По большому счету у NodeJS как инструмента - есть пару альтернатив всего и только одна из них вменяема (Erlang/Elixir)

Конечно конечно, джавай посмотрим где елексир используется в крупных проектах, и где пользуются go/python. Про жабку говорить не буду.

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

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

Да, кстати, и с каких пор Erlang VM стала гипербыстрой?

По моему опыту Эрланг показывает очень хорошие результаты на задачах с интенсивным IO в миллионы коннектов (в том числе веб сервис например), плюс его очень приятно горизонтально масштабировать. Как числодробилка он ясное дело так себе.

staseg ★★★★★
()

Из положительных сторон го, могу сказать: 1. Компилируемый язык, причем компиляция очень быстрая 2. Строгая статическая типизация с автоматическим выводом типов 3. Полноценное ООП 4. Много где соблюдается принцип convention over configuration: поля и методы начинающиеся в нижнем регистре - приватные, в верхнем - публичные. Тоже самое касается типов и переменных уровня пакетов. 5. Язык и все библиотеки абсолютно кроссплатформенные. 6. Порог вхождения от «открыл туториал» и «могу писать полноценно код»- 30 минут, и это реально так. 7. Многопоточность и асинхронность. Хоть и не такая как в жаваскрипте или в шарпе. В жаваскрипте промисы, а шарпе async и await, но гораздо проще - горутины и гоканалы. 8. Язык со сборкой мусора. 9. Сейчас пишу на нем в Gogland. Это именно то, что нужно для тех, кто привык в вижуалстудии шлепать ctrl+space в решарпере.

Из особенностей: 1. Хоть система типов и строгая, но она не такая, как в шарпе, к примеру, нет генериков, вместо них type assertion. Отсутствие генериков позволяет оставить язык простым, как палку (кто вообще на лоре знает разницу между ковариантностью и контрвариантностью и прочим говном в системе типов шарпа?). Если до этого писал на динамических языках, отсутствие генерироков на тебе никак не скажется. 2. Нет классов и объектов, нет конструкторов. Есть структуры, методы структур, есть функции возвращающие экземпляр структуры вместо конструкторов. Но есть интерфейсы, но наследование реализуется через утиную типизацию. 3. Есть указатели, но это не те указатели, что, к примеру, в плюсах. Это скорее типа out параметров в шарпе. 4. Нет неймспейсов, есть пакеты. Одна директория - один пакет и каждый пакет импортируется по пути к гит репозиторию. 5. Нет исключений. С одной стороны, код замусоривается обработкой ошибки из каждой функции, с другой стороны, ты обрабатывешь 99% ошибок, а паники происходят только в реально исключительных случаях. Использование исключений очень дорого для рантайма, а многие люди пихают их куда ни попадя, например для использования control flow, типа выйти из вложенного цикла.

Из явных минусов: 1. Количество библиотек с одной стороны очень большое, с другой стороны - очень мало реально качественных. Полноценных гуи библиотек нет. 2. Если библиотеки и есть, то нет фреймворков. Фреймворковый подход вообще не свойственен для го. Т.е. альтернативы рельсам в го нет и не будет в ближайшей перспективе в принципе. Но в дотнете тоже нет ничего подобного рельсам, и слава Сатье Наделле. 3. Например, дебажить тесты можно только в одной иде - гогленде, которая еще не вышла.

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

По моему опыту Эрланг показывает очень хорошие результаты на задачах с интенсивным IO в миллионы коннектов (в том числе веб сервис например)

Это почти ничего не говорит о скорости его VM, если скорость мерять исполнением байткода.

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

А что скажет о VM? Тот кейз срабатывает только благодаря планировщику и GC, т.е. VM.

UPD

если скорость мерять исполнением байткода.

Эрланг не про скорость выполнения байткода, но VM—это не только байткод же (см выше).

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

А что скажет о VM?

Что-нибудь CPU-bound.

Тот кейз срабатывает только благодаря планировщику и GC, т.е. VM.

Если бы тот персонаж сказал «в Erlang VM лучший в мире планировщик зеленых нитей», вопросов бы не было.

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

Если бы тот персонаж сказал «в Erlang VM лучший в мире планировщик зеленых нитей», вопросов бы не было.

У меня были бы

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

Cloud Haskell оставим пока. Ограничимся одним инстансом VM. Впрочем, в случае haskell будет не совсем VM. Там будет рантайм-машина

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

ну у них же вроде синатра есть еще.

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

Она очень простая (читай легковесная) подойдет для каких нибудь простеньких задач или какого нибудь микросервиса. Еще есть hanami вполне себе альтернатива рельсам только сыровата. Да и сами рельсы очень кастомизируемы, например ничего не мешает заюзать Sequel с Trailblazer и от дефолтных рельс остаются только контроллеры. Так что рубисты не страдают недостатком фреимворков.

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

Был на митапе по Elixir там рубисты на рельсах надрачивали вприсядку. Быстро начинают писать, все как в рельсах и в бенчмарках рвет все вокруг.

Это правда, эликсир еще и отлично параллелится в отличае от той же ноды и ruby.

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)

Golang

Golang уже достаточно зрелый язык. Плюс последнее время растет количество вакансий в маленьком Минске. Как язык - очень бедный, всегда чего-то не хватает и придется дописывать самому. Но это и плюс, читать код других людей очень легко и просто по этому достаточно быстро проникает в энтерпрайз.

krasoffski
()
Ответ на: Golang от krasoffski

Да, Golang хорошо, как ни крути!

anonymous
()
Ответ на: комментарий от nikolnik

Из положительных сторон го:
3. Полноценное ООП

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

ковариантностью и контрвариантностью и прочим говном

Да ты и дальше не разочаровываешь своими познаниями

Есть указатели, но это не те указатели, что, к примеру, в плюсах. Это скорее типа out параметров в шарпе.

Тоже классно

Количество библиотек с одной стороны очень большое, с другой стороны - очень мало реально качественных.

Короче, всё ясно с гофанатами и качеством коммунити языка. Go полностью выполняет роль, для которой он задуман — писать код могут даже неучи, не имеющие представления о Computer Science вообще.

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

Зачем же врать? Джава далеко не говно. Кроме того, сидя на JVM, можно заигрывать и с более приличными ЯП. Или ты тоже приверженец чистого субъективного мнения, как некоторые в этом треде?

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

По моему опыту Эрланг показывает очень хорошие результаты на задачах с интенсивным IO в миллионы коннектов (в том числе веб сервис например)

А расскажи пожалуйста о своём опыте применения Erlang для разработки веб-сервисов с нагрузкой в миллионы коннектов. Реально интересно послушать.

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

А... ну не вопрос: в Erlang VM лучший в мире планировщик зеленых нитей.

У меня есть вопрос! Какими бенчмарками это доказывается? А то из того, что я нашёл, JVM его обходит.

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

Какими бенчмарками это доказывается?

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

из того, что я нашёл, JVM его обходит.

В JVM появились зеленые нити?

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

По-моему, между «субъективным мнением» и «субъективной правдой» есть качественная разница. Жду «субъективной истины».

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

В JVM появились зеленые нити?

Они были там зелёными в незапамятные времена, потом реализацию сменили на нативную. Сейчас того, что чётко удовлетворяло бы определению зелёной нити там нет, но, скажем, механизм Futures, когда куча их исполняется в тред-пуле ограниченного размера, весьма близок к ним идейно.

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

Ненене, future поверх пула нитей - это совсем другая вещь. Идея совершенно другая, хотя и используется для решения тех же задач.

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

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

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

В Erlang вытесняющая многозадачность, на основе счётчика редукций.

anonymous
()
Ответ на: комментарий от Zenom

Вот, в том то и дело, что заблокирует. В Haskell - по возможности, нет, не заблокирует, а повиснет на каком-нибудь epoll или select. Подозреваю, что в Erlang - тоже нет, не заблокирует.

Хотя в java есть nio. А некоторые библиотеки для scala пытаются быть неблокирующими, типа той, что для эластика применяется (elastic4s). Да, там скалавские future. Как понимаю, чисто явовские future имеют какой-то изъян в дизайне

dave ★★★★★
()

Node.JS

Хипстерская технология, вокруг котороый все работает по принципу Hype-driven development. И судя по всему, еще долго так будет.

Java

Неоправданно тормознуый язык. Все мои знакомые, которые говорят что Джава классаня, если копнуть глубже, говорят это только потому, что они только Джаву в университете учили, и больше ничего не видели.
Думаю через 5 лет джаву будут активно закапывать. Хотя бы в пользу Скалы.

Elixir

Та же проблема что и в Джаве — виртуальная машина, ну и ним никто же не пользуется.
Голосую за Го, Раст или Скалу.
Для себя выбрал Го. Так как у нас, в Украине, рынок с Растом не работает, и вряд ли будет.

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

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

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

Я ничего не форшу, кроме самого реда, но пока он не допилен, можно форсить и ребол.

rebforce
()
Ответ на: комментарий от loz

Ребол - в качестве переходного этапа, пока ред не достигнет хотя бы версии 1.0.

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

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

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

Та же проблема что и в Джаве — виртуальная машина,
Голосую за ... Скалу.

Сделай вдоль

mersinvald ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

Какой же ты тупой. Просто убейся. Не позорься.

anonymous
()
Ответ на: комментарий от Virtuos86

Какой сорт ООП в Го?

его там нет

anonymous
()
Ответ на: комментарий от sphericalhorse

Зачем спорить, зайди на https://benchmarksgame.alioth.debian.org/ и посмотри. Различия 1.5-3 раза от Си на не разогретой джаве.

Скала

О какой реализации идёт речь, на JVM полагаю? И как понимаю с ней по перформансу всё хорошо? Обгоняет Си?

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.