Есть множетсво языков и подходов:
- ООП — все есть объекты классов и они хранят состояние а программа лишь меняет их
- ФП — все есть функция которая должна быть вычислена т.к. суть любой программы что-то вычеслить(процессор — в переводе вычислитель)
Иногда оба подхода впадают в крайности — вида любое выражение есть объект, или любое выражение есть функция которая может быть вычисллена e.t.c.
Разумеется любое впадение в крайности в программировании это глупо.
Так же нельзя забывать и о сфере применения любого широконаправленного языка. Ими являются пока-что только два направления:
- построение UI приложений
- построение UI-less приложений
Чтобы язык мог работать он должен обеспечивать ряд базовых требований:
- Возможность запуска без ОС
- Возможность запуска внутри ОС под ее стандартами
Возможность запуска без ОС покажется комуто странным требованием но это лишь от замыленности Вашего взгляда на вещи. Ведь посмотрите — у меня есть процессор, под него есть компилятор. Почему я должен следовать каким-то странным указаниям непонятно-откуда(ОС) и писать реализацию их интерфейсов? Они такие умные, они лучше знают что будет делать моя программа и как управлять ей в их планировщике и когда ее убивать?
Идеология одна платформа — одна ОС это еще хуже чем законы о копирайтах. И когда-нибудь оно обязательно выльется боком.
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/
Добавить комментарий