Набагато менше йдеться про модель актора і набагато більше про те, як важко правильно написати щось аналогічне OTP в C ++. Крім того, різні операційні системи забезпечують кардинально різні налагодження та системні засоби, а віртуальна машина Ерланга та декілька мовних конструкцій підтримують єдиний спосіб з'ясувати, що саме роблять усі ці процеси, які було б дуже важко зробити рівномірним способом (або, можливо, зробити на декількох платформах. (Важливо пам’ятати, що Erlang / OTP передує поточному шуму щодо терміна "модель актора", тому в деяких випадках подібні дискусії порівнюють яблука та птеродактилі; чудові ідеї схильні до незалежних винаходів.)
Все це означає, що, хоча ви, звичайно, можете написати набір програм "актор" на іншій мові (я знаю, я давно це робив на Python, C та Guile, не усвідомлюючи цього до того, як зіткнувся з Ерлангом, включаючи форму монітори та посилання, і до того, як я коли-небудь почув термін "модель актора"), розуміння того, як насправді виникають процеси вашого коду і що відбувається серед нихнадзвичайно важко. Erlang застосовує правила, які ОС просто не може без капітального ремонту ядра - капітального ремонту ядра, який, мабуть, не був би корисним у цілому. Ці правила виявляються як загальними обмеженнями для програміста (які завжди можна отримати, якщо вам це дійсно потрібно), так і основними обіцянками, які гарантує система для програміста (які можуть бути навмисно порушені, якщо вам це дійсно потрібно).
Наприклад, це передбачає, що два процеси не можуть спільно використовувати стан, щоб захистити вас від побічних ефектів. Це не означає, що кожна функція повинна бути "чистою" в тому сенсі, що все є референтно прозорим (очевидно, ні, хоча зробити стільки своєї програми як референтно прозорою, наскільки практичною, є чіткою ціллю дизайну більшості проектів Erlang), а навпаки, що дві процеси не постійно створюють перегонові умови, пов'язані зі спільним станом або суперечками. (Це, до речі, більше, що означає "побічні ефекти" в контексті Ерланга; до речі, знаючи, що може допомогти вам розшифрувати частину дискусії, ставлячи під сумнів, чи є Ерланг "справді функціональним чи ні" в порівнянні з Хаскеллом чи іграшковими "чистими" мовами) .)
З іншого боку, час виконання Erlang гарантує доставку повідомлень. Цього дуже не вистачає в середовищі, де ви повинні спілкуватися виключно через некеровані порти, канали, спільну пам'ять та загальні файли, ядром ОС яких є єдине управління (а управління ядром ОС цими ресурсами є вкрай мінімальним порівняно з тим, що Erlang час виконання). Це не означає, що Erlang гарантує RPC (у будь-якому випадку передача повідомлень не є RPC, а також не викликання методу!), Це не обіцяє, що ваше повідомлення адресується правильно, і не обіцяє, що процес, яким ви є намагається надіслати повідомлення, що існує або живе. Це просто гарантує доставку, якщо річ, до якої ви відправляєте, справді дійсна на той момент.
На цій обіцянці побудовано обіцянку, що монітори та посилання є точними. І виходячи з цього, середовище виконання Erlang робить всю концепцію "мережевого кластера" як би тане, як тільки ви зрозумієте, що відбувається з системою (і як використовувати erl_connect ...). Це дозволяє вам вже перестрибнути безліч хитрих випадків паралельності, що дає велику перевагу кодуванню успішного випадку, замість того, щоб занурюватися в болото захисних технік, необхідних для голого паралельного програмування.
Отже, насправді не йдеться про потребу в мові Erlang, а про час роботи та вже існуючий OTP, що виражається досить чисто, а реалізація будь-чого близького до нього іншою мовою є надзвичайно складною. OTP - це просто важкий вчинок. У тому ж ключі нам також не потрібен С ++, ми могли б просто дотримуватися необробленого двійкового введення, Brainfuck і розглянути Assembler нашою мовою високого рівня. Нам також не потрібні поїзди або кораблі, оскільки всі ми знаємо, як ходити і плавати.
Все сказане, байт-код віртуальної машини добре задокументований, і з’явилося ряд альтернативних мов, які компілюються до нього або працюють із середовищем виконання Erlang. Якщо ми розділимо запитання на мовну / синтаксичну частину ("Чи повинен я розуміти Місячні руни, щоб робити паралелізм?"), І частину платформи ("Чи є OTP найзрілішим способом досягнення паралелізму, і чи допоможе він мені в цьому найскладніше , найпоширеніші підводні камені, які можна знайти в паралельному розподіленому середовищі? "), тоді відповідь (" ні "," так ").