Почему я не могу писать приложения на Erlang

от автора

Занимаясь долгое время разработкой на php я понял что у программиста есть ряд ограничивающих его непосредственную деятельность факторов: синтаксис, пунктуациясемантика, морфология.

Есть множетсво языков и подходов:

  • ООП — все есть объекты классов и они хранят состояние а программа лишь меняет их
  • ФП — все есть функция которая должна быть вычислена т.к. суть любой программы что-то вычеслить(процессор — в переводе вычислитель)

Иногда оба подхода впадают в крайности — вида любое выражение есть объект, или любое выражение есть функция которая может быть вычисллена e.t.c.
Разумеется любое впадение в крайности в программировании это глупо.

Так же нельзя забывать и о сфере применения любого широконаправленного языка. Ими являются пока-что только два направления:

  • построение UI приложений
  • построение UI-less приложений

Чтобы язык мог работать он должен обеспечивать ряд базовых требований:

  1. Возможность запуска без ОС
  2. Возможность запуска внутри ОС под ее стандартами

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

Erlang позволяет удобно делать некоторые вещи, которые с точки зрения php бы назвались демонизацией — создавать легковесные процессы, контролировать из статусы (а-ля pcntl_waitstatus) и когда они умерли говорить об этом.

php склонен умирать? Да — но авторы Эрланга пошли еще дальше. Чего стоит только фразы Армстронга: Если человек падает и умирает то он выкрикивает: «Я умер от разрыва сердца», или «Я умер от колики двенадцатиперстной кишки».
Есть даже режим запуска демона erlang — который запускает еще один процесс, который перезапускает сам erl-процесс когда тот умрет.
У Erlang есть большая проблема — Erlang это не ОС(вариация на тему XEN для Erlang ни в счет), а виртуальная машина.

Каждый волен относиться к виртуальным машинам по своему личному усмотрению.
Но что же такое виртуальная машина на самом деле?
а это очень просто — VM это ПРОГРАММА. Все что ей хотелось она скомпилировала, все что ей было лень компилировать самой — она передала на ответственность ОС.

К сожалению мы живем в реальном мире, и тут не те ОС которые бы обеспечивали только нужные вещи(EFI BIOS, драйверы). Сейчас мы смотрим на ОС, даже уровня *nix как на набор готовых либ, а в случае с Win/OSX даже как на взаимосвязанный набор этих самых либ. Удали ты что-то — все порушится.
Таким образом для простого программиста который не хочет заморачиваться над всем этим работа с виртуальной машиной превращается не в легкость абстрагирования от аппаратной платформы, а в АД попыток понять как же эта самая ВМ взаимодействует и где(а где — не взаимодействует).

Мы можем сколь угодно долго радоваться легковесной реализации процессов на Erlang и писать настоящие программы, с сокетами и TCP-кластерами.
Но рано или поздно окажется что вдруг оно перестанет работать по причинам связанным с ОС.
Этого нужно избежать и писать программы так, как подсказывает сердце а не ОС или ВМ. Пока Erlang далек от этого.

ссылка на оригинал статьи http://habrahabr.ru/post/194008/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *