Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Человеку без практического опыта написания сложных распределёных систем, существенно проще писать на ерланге, чем на ++ или Java.
А сравнение с объектными языками - это как минимум говорит о том, что вы не написали ниодного приложения на языке подобном ерлангу.
Решение не иметь изменяемых переменных выйдет боком при написании систем где в случае объектной модели таких переменных много и они изменяются часто.
в случае erlang если вам это потребуется писать много много мелких кусков и плодить много много процессовДейстидельно много много процессов это хорошо, а в случае erlang и очень дешево, там процесс стоит меньше, чем процесс и поток в C#, Java, etc.
Далее вы сами даете решение
Дейстидельно много много процессов это хорошо, а в случае erlang и очень дешево, там процесс стоит меньше, чем процесс и поток в C#, Java, etc.
Каким образом модель с передачей сообщений в рамках одного процессора может быть лучше чем модель с общей памятью?
Мне думается что в такой ситуации не стоит изучать специально Erlang, а пользоваться C + OpenMP, так будет быстрее и проще, и время на пересылку сообщений тратиться не будет.Предел - где-то 8-16 ядер, дальше уже накладные расходы от общей памяти начинают перевешивать.
Предел - где-то 8-16 ядер, дальше уже накладные расходы от общей памяти начинают перевешивать.
в C++ же компилятору придётся проводить сложный семантический анализ кода для распараллеливания, чтобы выяснить, есть ли скрытые зависимости — и в общем случае эта задача там неразрешима
Any sufficiently advanced concurrent program contains an ad hoc, informally-specified, bug ridden, slow implementation of half of Erlang.
производительность программы на С ограничена
Да и стоимость разработки программы на С намного выше...
Я, конечно, не буду спорить, что Erlang изначально для создания GUI-приложений не предназначен. Но, тем не менее, получаться может вполне неплохо.
а чем в вашем понимании интерфейсы в вебе отличаются от "GUI"?
не вижу никакого криминала, кстати, в преобразовании declarative -> imperative, декларативный код сам по себе святым духом исполняться не будет ведь
функциональное/декларативное программирование не привязано к языку.
не вижу разницы — это интерфейс человек-машина, мышкоклавиатурновизуальный
просто сегодня еще есть это разделение из-за несовершенства технологий, а завтра его уже не будет
такого железа никогда не появится
именно это я и сказал — FRP проще в функциональном языке
а учитывая то, что FRP проще "императивной интерактивности" следует то, что программировать GUI в функциональных языках — проще
CGI - это common gateway interface? ну и как его можно сравнивать с GUI фреймворком? это же разные вещи
вот например Yahoo UI library для яваскрипта и GTK очень даже можно сравнить
сложные вещи не работают
не будьте голословны
я пока не вижу ни одной large-scale задачи, которая проще решается на императивном языке
я вас уверяю, что на Erlang кода будет меньше и он будет чище, чем с Java — это подсказывает мне мой опыт в императивных и функциональных языках
сделать для Erlang биндинг к какому-нибудь рендереру для рисования "квадратиков и кнопочек" — много ума не надо
разумеется, если мне надо будет написать почтовый клиент для десктопа — я возьму WPF а не erlang, потому что для Erlang надо писать биндинги, а WPF уже сегодня работает из коробки
для меня, как для пользователя — разницы нет
а самом деле, оптимизирующий компилятор C++ с поддержкой OpenMP на порядок сложнее виртуальной машины Эрланга
хочется продолжить: .. операционные системы :)
вообще-то, объем код сокращается не языком, а программными абстракциями, например — FRP
абстракции проще моделировать на функциональном языке — это факт
а я бы использовал там Erlang - для распределенности, а числодробилку вынес бы в C-код
получилось бы очень эффективно и малой ценой
многие числодробильные задачи раскладываются на scatter/gather, т.е. параллелизм по данным
OpenMP не позволяет разнести числодробление на 1000 машин, а в Erlang это встроено
К примеру моделирование погоды. Я что-то не слышал чтобы там использовали Erlang.
К примеру моделирование погоды. Я что-то не слышал чтобы там использовали Erlang.Да что уж говорить, в таких задачах и Fortran до сих пор используют, и не жалеют об этом ;)
Сравните к примеру CGI с тем же QT или GTK
сломать нафиг весь современный веб
написать простой почтовый GUI-клиент
Вот тут вы смешиваете теплое с мягким. CGI к UI не имеет отношения явно.
Собственно, к этому дело и идет. А вообще, что вы имеете ввиду под "современный веб"?
Занятная идея для саморазвития, надо попробовать. =)
вот недавно писал терминал на Flex/ActionScript с сервером на PHP — никакого http протокола я не видел, работал на уровне SOAP-вызовов
Аналог CGI есть внутри каждого фреймвока аля QT
http протокол...
Вообще, AFAIK, CGI - это стандарт имеющий мало отношения к непосредственно интерфейсу пользователя, это интерфейс связи.
Далее, латентность. Как она зависит от парадигмы языка реализации интерфейса? Латентность, в данном случае, вопрос лишь канала связи.
А это-то причем? Для кода UI это все закрыто бесчисленными абстракциями.
вы вообще веб-приложения писали?
Я про парадигму самого интерфейса.
Это скорее интерфейс преобразования.
Точнее, являются ли они чем-то кроме методики реализации его?
Веб-фреймворк - это уровень абстракции, "учитывать и использовать" это его задача. Причем тут непосредственно UI, о которых изначально шла речь?
Повторяюсь, причем здесь собственно UI?
вызов метода объекта по событию будет менее трудоемко
По идее, реализация приема сообщения и реакции на него в Erlang должна быть просто безукоризненной - это ключевой элемент языка.
Процессы вместо объектов, судя по все тем же стандартным примерам, нисколько не усложняют код, он остается абсолютно прозрачным и логичным.
Процесс плодить для каждого примитива не придется.
Не забывайте еще про генерацию.
Это сильно зависит от их количества.
Кстати, еще интересно, что "тяжеловеснее" - множество процессов, обменивающихся сообщениями, или множество объектов, обменивающихся вызовами методов.
На плюсах обычно люди вообще не думают об этом.
оО
вы что не верите?
$ ./gen_data.py > data
$ wc data
100000 100000 5163077 data
$ grep abc data | wc
254 254 16998
string::find использует самый элементарный алгоритм сравнения, strstr в libc тоже (исходник).
$ g++ -O3 strings.cpp -o strings_cpp
$ gcc -O3 strings.c -o strings_c
$ time ./strings_c < data > /dev/null
real 0m2.419s
user 0m2.348s
sys 0m0.060s
$ time ./strings_cpp < data > /dev/null
real 0m5.682s
user 0m5.512s
sys 0m0.088s
strstr меняется на другой алгоритм, например Бойера—Мура, то код на C++ переписывается с ним же.
кол-во тактов не пропорционально времени выполнения (а о времени выполнения я ни в одном комментарии и не говорил).
в) двухкратное превышение в скорости - это уже затыкает ребят наверху кто о плюсах слишком лестно высказывался (не вы)
Я теперь и вовсе часто поднимаюсь в питон =). Благо, цепляется он к си на раз-два.
Впечатлило с какой скоростью вычислился тот-же факториал от 40000 :)
Интересно написать "оказоустойчивый" веб-сервер. :)
что впрочем уже делается
What's all this fuss about Erlang?