Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 24-10-2012 05:17 » |
|
подскажите вменяемый самомучитель на русском по языку Erlang имеется книга на английском в виде pdf , но при освоении нового для меня языка английский взрывает мозг (чай не MSDN читать) , тем более, что чтение обычно приходится на вечер. Нашёл несколько русских вводных статей - лишь по основам. Но даже оттуда бульше воспринял, чем с английского текста
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 24-10-2012 05:39 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #2 : 24-10-2012 05:56 » |
|
Проглядел вскользь. Глава 2: Одиночное присвоение подобно школьной Алгебре
Когда я ходил в среднюю школу мой учитель математики говорил нам: "Если есть несколько Х в разных частях одного уравнения, все эти Х означают одно и то же". Именно поэтому мы можем решать уравнения: если мы знаем, что Х+У=10 а X-Y=2, то Х будет 6, а У будет 4 в обоих этих уравнениях.
Но когда я стал изучать мой первый язык программирования мы увидели вот такую фигню: Х=Х+1
Мы все протестовали, говорили "так нельзя делать!", но учитель программирования сказал, что мы неправы и должны забыть все, что мы изучили на математике. Х теперь это вовсе не математическая переменная. Она теперь такая ячейка, подобная маленькой коробочке...
В Эрланге переменные точно такие же, как и в математике. Когда вы присваиваете им значение, вы делаете утверждение - заявляете о непреложном факте. Эта переменная имеет именно это значение. И никак иначе. Бездумное объяснение. Просто надо не выдумывать новые названия, а вдуматься в существующую терминологию. "Переменная" — то, что можно менять. Выше упомянутые X и Y из системы уравнений не являются переменными, они — "неизвестные [значения]", которые в процессе решения надо найти. "Х" — это буква и не несет в себе строгого смысла, хотя нас все детство убеждали в обратном. Дальше идет еще больший бред про "переменные". Как по этому можно изучать язык?
|
|
« Последнее редактирование: 24-10-2012 06:05 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #3 : 24-10-2012 06:29 » |
|
RXL, но слово "переменная" - математическое; просто его программисты прихватизировали и переиначили. "Неизвестное" - это скорее искомое решение в уравнении, что не вполне соответствует смыслу в Prolog, где встречаются и неиспользуемые (безразличные) переменные - неискомые, обозначаемые подчёркиванием.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 24-10-2012 06:35 » |
|
RXL, та, может, и надо ) Спасибо, я ничего вменяемого не нашёл сам. Дома заценю
Добавлено через 5 минут и 12 секунд: Ром, насчёт переменных - там не совсем привычно всё (особенно мне после C++) , и переменных на самом деле нет ) Есть только константы. Этот момент я уже выяснил и уяснил. Присваивания тоже нет, есть констатация факта, что, к примеру,
C=7 A+3 = C+8
откуда следует, что константа C равна 7, а константа A равна 12
|
|
« Последнее редактирование: 24-10-2012 06:40 от Алексей++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 24-10-2012 07:02 » |
|
И функция f() (видимо от flush) сбрасывает привязку имен к константам. Также выход из функции уничтожает связанные в ней имена. Чисто линейное программирование, или, говоря русским языком, большой и шибко умный калькулятор, при написании мануалов к которому можно не один диссер написать. Не могу понять, какое у него позиционирование, зачем он нужен.
|
|
« Последнее редактирование: 24-10-2012 07:04 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 24-10-2012 07:30 » |
|
синтаксис, надо сказать, простой. Только глаз и руку набить надо, чтобы читать его. Всё остальное решается суперудобной работой с кортежами, списками, "Переменными" и рекурсией, насколько я уже смог понять Плюс заточка на многопоточные вычисления "без проблем" (причём потоки могут выполнятся на разных машинах. Но до этого момента я ещё не дошёл, только читал про эту возможность)
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #7 : 24-10-2012 08:26 » |
|
RXL, параллельные вычисления. Чтобы эффективно параллелить, нужно избавиться от состояний (т.е. от переменных как ячеек памяти, когда в один момент времени из переменной можно прочитать одно, а в другой момент уже другое). Где есть состояния, вынужденно возникает синхронизация, что приводит к остановке параллельных процессов и снижению производительности системы.
Так что Erlang - это скорее функциональное программирование; просто синтаксис Prolog'а.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #8 : 24-10-2012 11:21 » |
|
Леш, если под "суперудобной работой" ты сравниваешь с C++, то замечу, что почти в любом скриптовом языке это давно есть и пользоваться действительно очень удобно.
Дим, любую функцию без сохранения внутреннего состояния между вызовами (в контексте C++ читай: без применения статических и глобальных переменных) можно безопасно параллелить, в том числе распределять однотипные задания по разным машинам.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #9 : 24-10-2012 13:54 » |
|
Дим, любую функцию без сохранения внутреннего состояния между вызовами (в контексте C++ читай: без применения статических и глобальных переменных) можно безопасно параллелить Нет. В любой хоть сколь-нибудь сложной программе изрядное количество данных сидит в куче, а сама программа работает с указателями. Такие структуры в куче - тоже глобальные. Если их копировать по любому поводу, то сильно упадёт производительность, и придётся изрядно извращаться с управлением контекстом. C++ по своему синтаксису неудобен для всего этого. Не говоря уже об организации ленивых вычислений и всяких редукций цепочек вызовов в С++. Если же использовать примитивы, то это будет написание на C++ движка функционального языка - смысла нет огород городить.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 24-10-2012 14:54 » |
|
Рома, почитай, и ты поймёшь, что я имел в виду ))
Начал читать - вроде бы ничего переведено. Только там ещё не все главы переведены.
Попытался я распечатать книгу, итак то принтером раз в год пользуемся )) Снегурочка кончилсь на 6 главе. Ну пока хватит )
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 24-10-2012 15:42 » |
|
В любой хоть сколь-нибудь сложной программе изрядное количество данных сидит в куче, а сама программа работает с указателями. Такие структуры в куче - тоже глобальные. Если их копировать по любому поводу, то сильно упадёт производительность, и придётся изрядно извращаться с управлением контекстом. А зачем копировать? Константные указатели и т.п. способы ограничения. Ведь Эрланг нам именно это предлагает — статический контекст. А на счет "удобства" C++ согласен: по сравнению со скриптовыми языками он — мастодонт на сотне подпорок. Леш, на мой взгляд перевод тянет на черновой. Жуткий стиль. Зато бесплатно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #12 : 24-10-2012 19:01 » |
|
А зачем копировать? Константные указатели и т.п. способы ограничения. Ведь Эрланг нам именно это предлагает — статический контекст. Константный указатель запрещает менять сам указатель, но не память по указателю. Константным должно быть всё, а любое изменение - через копирование с замещением. Именно поэтому любое изменение - это точка fork (принцип ветвящихся вселенных), и параллелизм становится максимально возможным для данной структуры кода. Ещё одно правило, которое используется в параллелизме - это то, что одновременно с объектом может производиться только одно модифицирующее действие. Если объект разделяемый, то параллельный доступ к нему синхронизируется и упорядочивается (по шаблону много читателей-один писатель). Если объект неразделяемый, а копируемый, параллельно могут выполняться разные действия над разными копиями.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 24-10-2012 20:34 » |
|
Прочитал несколько глав. И эти люди запрещают мне ковыряться в носу не любят Perl...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 25-10-2012 03:31 » |
|
Леш, на мой взгляд перевод тянет на черновой. Жуткий стиль. Зато бесплатно.
он и так черновой - куча опечаток. Но стиль - от автора, а читается довольно хорошо
|
|
|
Записан
|
|
|
|
|