Очень он меня заинтересовал, хотелось бы услышать о нем отзывы:
может кто его использовал. Также интересно какая у него лицензия,
вроде написано open source, но ведь он тоже разный бывает,этот
open source , (/usr/share/doc/erlang/copyright читал, но плохое
знание аглицкого и премудростей юрисприденции не дало понять
что можно с ним делать, а что нет (не с ним, наверно, а с его
окружением: модулями, библиотеками, компиляторами, инструментами
и т.п.)) и область применения (например: можно ли на нем написать
ядро ос и др). Может есть какая нибудь литература на русском?
Очень он меня заинтересовал, хотелось бы услышать о нем отзывы:
может кто его использовал. Также интересно какая у него лицензия,
вроде написано open source, но ведь он тоже разный бывает,этот
open source , (/usr/share/doc/erlang/copyright читал, но плохое
знание аглицкого и премудростей юрисприденции не дало понять
что можно с ним делать, а что нет (не с ним, наверно, а с его
окружением: модулями, библиотеками, компиляторами, инструментами
и т.п.)) и область применения (например: можно ли на нем написать
ядро ос и др). Может есть какая нибудь литература на русском?
На нем написан ejabberd, который под gpl распространяется, так что лицензия должна быть с gpl совместима.
Поскольку язык интерпретируемый ядро ос на нем не напишешь
У ерланга есть ряд ключевых фишек:
- потрясающая поддержка многопоточности
- возможность горячей замены кода во время выполнения программы
- функциональная парадигма
- реалтайм
- создан и развивается как индустриальный язык (и на нём созданы весьма большие и успешные системы)
Исходя из этого и стоит смотреть на его применимость. Для написания масштабируемых серверных приложений это весьма подходящий язык.
Кратко говоря, Erlang – это язык программирования общего назначения и среда исполнения. В язык встроена поддержка распределенных и параллельных вычислений.
А если говорить подробнее, то Erlang предлагает разработчику следующее
* Параллельные вычисления. Erlang использует легковесные процессы (не путать с процессами ОС!), не затрагивающие потоки операционной системы. Процессы Erlang - это аналоги процессов ОС в том смысле, что все ссылки на объекты внутри них недоступны другим процессам. Но обеспечивается это не за счет изоляции адресных пространств, а за счет типобезопасности языка и программной изоляции ссылок. Если проводить аналогии с процессами и потоками Windows, процессы Erlang являются чем-то средним между процессом и потоком, так как, с одной стороны являются изолированным объектным пространством, а с другой – непосредственно исполняют код, принадлежащий этому пространству (процессы Windows содержат потоки, которые реально выполняют код, но сами процессы код не выполняют). Основное отличие процессов Erlang от потоков заключается в том, что реализация переключения контекста в Erlang значительно дешевле, чем для потоков, что позволяет существенно повысить эффективность при исполнении множества процессов Erlang на одном процессоре. На практике это означает, что на обычной пользовательской машине можно запустить несколько десятков тысяч процессов Erlang и не ощутить замедления быстродействия системы (по сравнению с аналогичным количеством потоков ОС).
* Надежность. Erlang позволяет выстраивать различные сценарии для отслеживания всевозможных состояний системы – от примитивных (отслеживание состояния различных процессов) до продвинутых (таких, как создание failover-кластеров).
* «Горячая» замена кода. Erlang позволяет отслеживать изменения в системе и загружать обновленные версии кода без остановки всей системы, что особенно важно, если такая остановка невыгодна или невозможна.
* Внешние интерфейсы. Процессы в Erlang-е взаимодействуют друг с другом путем передачи асинхроных сообщений. На этом же принципе построено взаимодействие и с программами, написанными на С/С++ или Java. Существует также интерфейс взаимодействия с .NET.
В состав стандартных библиотек Erlang-а входят, например, следующие продукты:
* Mnesia. Распределенная СУБД.
* Inets. HTTP-клиент и сервер, а также FTP-клиент.
* Orber. CORBA v2.0 Object Request Broker (ORB).
Erlang можно использовать в самых разнообразных областях. На данный момент Erlang с успехом применяется, например:
* Для телекоммуникационного оборудования (например, в компаниях Ericsson и Nortel).
* Для создания сервера ejabberd на основе протокола Jabber.
* Для управления поездами (например, в метро в городе Лион, Франция).
* В БД-приложениях, нуждающихся в режиме, близком к режиму реального времени.
а мне вот интересно, почему во всех статьях, которые мне довелось прочитать, обязательно упоминается про оптимизацию хвостовой рекурсии, но факториал считается как
Почитал немного документацию, разобрал некоторые примеры оттуда. Когда
с помощью четырех строчек кода (не считая, конечно, заголовков etc.)
удалось вычислить факториал 40 000 (!!!) этот язык начисто сьел мой мозг ,
ведь это почти 170 000 знаков (!!!), в общем на него, как минимум, стоит
обратить внимание .
ps При вычислении этого факториала было сьедено 512 Mb RAM и почти 1 Gb Swap.
irb посчитал 40000! отъев 13 метров памяти и не тронув своп вообще (:
рекомендую тебе подумать над моим предыдущим постингом и понять, на что может уйти почти полтора гига памяти (: и почему не надо считать факториал, как
посчитать 40000! - элементарное дело практически для любого скриптового языка.
даже bc легко справляется с этой задачей.
erlang много чем съедает мозг, но только не этим....
irb посчитал 40000! отъев 13 метров памяти и не тронув своп вообще (:
рекомендую тебе подумать над моим предыдущим постингом и понять, на что может уйти почти полтора гига памяти (: и почему не надо считать факториал, как
посчитать 40000! - элементарное дело практически для любого скриптового языка.
даже bc легко справляется с этой задачей.
erlang много чем съедает мозг, но только не этим....
хм... я и не думал что это так просто... конечно это не единственное чем он меня привлек, там много чего интересного
sarutobi
с какого хрена можно было подумать, что я имел ввиду _эту_ оптимизацию ?
я даже не хочу знать, с какой планеты надо прилететь и какой нечеловеческой логикой надо обладать, чтобы придумать какую-то кривую реализацию (до которой я бы никогда не додумался, потому как предпочитаю работающие решения), предположить, что я говорил именно про неё, и потом снисходительно объяснить мне, почему эта кривая реализация не катит (:
когда я писал исходный пост, я вообще не подразумевал никакой реализации.
я просто заметил, что предлагаемая во всех статьях схема вычислений, ну никак не является tail recursive, что весьма странно.
но если тебе так хочется tail recursive вариант, то вполне можно применить что-то вроде
Почитал немного документацию, разобрал некоторые примеры оттуда. Когда
с помощью четырех строчек кода (не считая, конечно, заголовков etc.)
удалось вычислить факториал 40 000 (!!!) этот язык начисто сьел мой мозг smile.gif,
ведь это почти 170 000 знаков (!!!), в общем на него, как минимум, стоит
обратить внимание
>>> f = 1
>>> for i in xrange(1, 40001): f *= i
...
>>> f
20916924222121323633204552567643270264883735443875343418307419679821115057512171
199959730827853610651667896062051197810163196966769575819429
и еще очень много разных циферков.
тут я отрезал кусок, чтобы поместилось, ибо ограничение на длину сообщения.
Так что даже этот ерланг не уникален %)
nerezus
кстати питон тоже функциональный язык...
f=lambda x: x!=0 and x*f(x-1) or 1
For millions of years mankind lived just like animals Then something happened which unleashed the power of our imagination We learned to talk. Pink Floyd, Keep Talking
Фанни
функциональный язык - это не только лямбды.
питон - язык _с элементами, позволяющими делать некоторые вещи в функциональном стиле_. (:
питон имеет такое-же отношение к ФОП, как С++ к ООП....