arisuchan    [ tech / cult / art ]   [ λ / Δ ]   [ psy ]   [ ru ]   [ random ]   [ meta ]   [ all ]    info / stickers     temporarily disabledtemporarily disabled

/ru/ - Киберпанк

русскоязычная киберпанк-доска.
Name
Email
Subject
Comment

formatting options

File
Password (For file deletion.)

Help me fix this shit. https://legacy.arisuchan.jp/q/res/2703.html#2703

Kalyx ######


File: 1504366794815.jpg (25.13 KB, 500x445, erl.jpg)

 No.84

что такое Erlang? это первый функциональный язык общего назначения, разработанный, в первую очередь, для промышленных нужд. в отличие от того же хаскелла, erlang создавался не для бесконечного аутирования над кучей абстракций (и мастурбацией на свою охуительность), которые надо было каким-то образом повязать друг с другом, а для решения прикладных задач – в первые годы его существования такие нужды определила сфера телекома. язык разрабатывался в CSLab с середины восьмидисятых и был представлен уже компанией Ericsson для промышленного использования в 95 году, и сразу же взорвал общественность своим появлением. подробнее с историей развития языка можно ознакомиться [https://link.springer.com/content/pdf/10.1007%2F978-0-387-35404-0_15.pdf].

отличительные киллер-фичи языка:
- BEAM (Bjarne Erlang Abstract Machine) – виртуальная машина, поверх которой работает erlang. Внутри себя разворачивает полную поляну для нижеуказанных фич под названием ERTS (Erlang RunTime System).
- эффективное использование всех ресурсов CPU – первая по значению часть ERTS является мощный планировщик, который масимально эффективно использует нагрузку всего процессора. на каждое ядро процессора разворачивается отдельная очередь исполнения, планировщик же старается поддерживать эти очереди сбалансированными
- массовый параллелизм – подобно S-выражениям лиспа, компилятор распиливает код на атомарные функциональные блоки, каждый из которых исполняет какое то выражение(-я). зачем это нужно? а затем, что процессов исполнения программы может быть значительно больше, чем ядер в системе. даже на нищем одноядерном ARM erlang машина может исполнять до 10000 одновременно исполняющихся процессов. процессы, очевидно, не системные, а представляют собой после компиляции цепочки этих самых функциональных блоков. порождение и уничтожение процесса очень дешевая операция, по сравнению с тяжелыми системными тредами, что не ведет к задержкам в переключении контекста [читать больше: https://cyberleninka.ru/article/v/effektivnost-nitey-v-mnogoprotsessornyh-sistemah-s-obschey-pamyatyu]
- умеренная чистота ФП – в общем понимании erlang можно назвать чистым языком, поскольку функции в нем не несут сайд-эффектов в текущем процессе. поясню, почему такая оговорка. связано это с тем, что, в erlang есть ровным счетом одна "нечистая" операция, это операции send/receive, которые используются для коммуникации между процессами
- простая синхронизация – в erlang нет ни мьютексов, ни семафоров, ни каких-либо остальных традиционных примитивов для синхронизации параллельных программ. для синхронизации исполнения программы используется только механизм передачи сообщений между процессами.
- асинхронная передача сообщений – операция отправки сообщения send _не_ является блокирующей, поскольку отправляет сообщение не напрямую в соответствующую инструкцию receive, а в mailbox процесса. то есть, другими словами, в широком смысле процесс-отправитель отправляет сообщение и не ждет ответа. но операция receive является блокирующей.
- полная изоляция процессов – между процессами нет разделяемой памяти. только передача сообщений между процессами.
- коммуникационная прозрачность – поскольку процессы изолированы друг от друга и обмениваются друг с другом только сообщениями, то не составит труда запустить эти же самые процессы на разных машинах – механизм их работы не изменится
- поддержка распределенного кода – из всего вышеперечисленного следует очень простая фича – язык позволяет писать сразу же код, который поддается легкому распределению между машинами в кластере, поскольку на уровне кода абсолютно нет разницы между тем, где работают процессы, на одной ноде или на нескольких

отсюда у приложений на этом языке появляется множество очень полезных свойств:
- отказоустойчивость – в составе языка помимо ERTS имеется набор шаблонов OTP, который позволяет писать легкомасштабируемый и безопасный код. процессы можно объединять в т.н. supervision trees, так что при отключении какого-нибудь процесса, он будет перезапущен.
- прозрачность логики – программы пишутся в декларативном стиле, от чего количество ошибок программиста уменьшается
- горячая замена кода – поскольку некоторые программы являются системами реального времени с высоким уровнем доступности (High availability), то простой для таких систем крайне критичен. erlang поддерживает замену байткода программы БЕЗ остановки виртуальной машины. так и достигается пресловутый uptime = 99,99999999% of time
- виртуальная машина, подобно престарелому баобабу, уже обросла таким количеством оптимизаций, что при соблюдении гайдлайнов и хорошем понимании своих действий позволяет писать максимально производительные приложения…
- … кроме числовых операций. erlang явно создавался не для научных расчетов, поэтому все операции над числами крайне долгие.

поскольку язык существует уже достаточно давно, в ERTS вшито уже достаточно много возможностей по умолчанию, которые позволяют сокращать время разработки, как то:
- упрощение распределенного программирования
- ETS – нечистая хэш таблица. хранит данные в виде erlang-термов, что позволяет не заморачиваться с сериализацией/маршалингом
- mnesia – нереляционная СУБД реального времени (под капотом, это абстракция над сетью ETS). из коробки умеет в масштабируемость в кластере и распределенные транзакции. позволяет писать более-менее сложные запросы с помощью кортежей условий, которые очень похожи на LISP
- leec + yecc – готовые парсер и лексер
- HIPE – альтернативная виртуальная машина, работает еще быстрее BEAM
- NIF + Ports – интерфейс для встраивания C-функций на уровне ядра виртуальной машины
- etc

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

как влиться в разработку?
1) установить erlang из пакетного менеджера / собрать самому
2) Learn Some Erlang For Great Good [http://learnyousomeerlang.com] + Erlang and OTP In Action

я советую для разработки использовать Intellij Idea IDE + erlang plugin, а в качестве простенького менеджера проектов rebar3, чтобы попервой не трахаться с написанием правильных Makefile.
еще есть связка из emacs + distel, но в свете последних версий erlang/OTP пакет distel оказался сломан и на последних версиях erlang не работает (ждем фикс).

в последние годы еще пробился к популярности язык, построенный поверх BEAM, который можно окрестить как "erlang для ленивых" – Elixir. по сути – erlang с ruby синтаксисом. на самом деле, можно начать с него погружение в erlang-среду, потому что всё вышеописанное действительно и для Elixir, но у него намного проще абстракции, да и комьюнити у него, как ни странно, более активное. но я бы не советовал, честно, на нем зацикливаться, потому что Elixir много вещей пересоздает заново, что не очень разумно + чтобы хорошо писать на elixir нужно все же хорошо познать erlang/OTP.

IRC: irc.freenode.net, #erlang
Mailing list: http://erlang.org/mailman/listinfo/erlang-questions

 No.88

В Эрланге/Элексире полезна в основном только натуральная параллелизация и отказоустойчивость всего с этим связанного. Очень ситуационный язык/семейство языков, на мой взгляд.

 No.89

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

 No.90

>>89
Да, это так, просто хотелось обратить особое внимание на его узконаправленность. Это язык для некоторых аспектов промышленного кода, имо. Вообще странно его немного выделять в отдельный тред, тред о ФП в целом зашёл бы лучше.

 No.95

>>90
Создавать треды широкой направленности имо не очень продуктивно, потому что разговор будет идти обо всем, и не о чем одновременно. Если бы делал тред про фп, то делал бы его максимально оторванным от языка и больше о теории.

По поводу нишевости тут достаточно спорно. Я как евангелист вижу скорее то, что на Erlang можно code the world для всего, где не нужны числовые операции (хотя даже это ограничение легко можно обойти с помощью нифов) и воспринимаю ERTS больше как полноценную ОС, чем просто язык. Тред и создал затем, чтобы внести свою лепту в популяризацию языка, чтобы скрипткиддис и ноде.жс брейнлеты познали настоящую силу HPC.

 No.96

Idris пизже. Erlang неюзабельная устаревшая залупа

 No.97

>>96
> Пизже
Чем, поясни. В организации логики или дистре?

> Устаревшее

Чем?

Больше конструктива

 No.167

>>95
Ну а вот зато делать треды про смертельный язык малораспространенной парадигмы вот это прямо делает тред живым, да.

 No.168

>>167
окей, тогда мой следующий тред будет про Node.js, там все крутые пацаны будут

 No.169

File: 1505883837631.png (315.47 KB, 876x199, animatrix_robots_12.png)

>>168
Пора уже



[Return] [Go to top] [ Catalog ] [Post a Reply]
Delete Post [ ]