F # продуктивність проти продуктивності Erlang, чи є доказ того, що VM Erlang швидше?


19

Я вкладав час на вивчення функціонального програмування, і я прийшов до тієї частини, де хочу почати писати проект, а не просто займатися навчальними посібниками / прикладами.

Роблячи моє дослідження, я виявив, що Erlang здається досить потужним, коли йдеться про написання одночасного програмного забезпечення (що є моєю метою), але ресурси та інструменти для розробки не настільки зрілі, як продукти розвитку Microsoft.

F # може працювати на Linux (Mono), щоб ця вимога була виконана, але, оглядаючи Інтернет, я не можу знайти порівнянь між F # і Erlang. Зараз я схиляюся до Ерланга лише тому, що, здається, найбільше натискає, але мені цікаво, чи дійсно є якась різниця в продуктивності між двома системами.

Оскільки я звик розвиватися в .NET, я, ймовірно, можу швидше працювати з F # набагато швидше, ніж Ерланг, але я не можу знайти жодного ресурсу, який би переконав мене, що F # так само масштабований, як Ерланг.

Мене найбільше цікавить симуляція, яка збирається вистрілювати багато стійких повідомлень до стійких вузлів.

Якщо я не зробив хорошої роботи з тим, що намагаюся запитати, будь ласка, попросіть додаткову перевірку.


12
Мови не мають швидкості. Конкретні мовні реалізації, які виконують певну програму на певному вході (це може включати весь зовнішній світ, залежно від програми), мають швидкість.

1
F # працює на .NET під час виконання. Ерланг працює на власному VM. Процеси Ерланга вважаються легкими порівняно з мовами, що знаходяться в його домені (як Scala). Для моделювання нерестуючих вузлів та передачі безлічі повідомлень, чи є .NET / Mono настільки ж хорошим, як VM Erlang, або чи вищий ВМ Erlang?
afuzzyllama

3
@delnan: Мови мають характеристики роботи.
Джон Харроп

2
@JonHarrop Як це? Мова програмування - це лише якийсь синтаксис і пов'язана з ним семантика.

1
@delnan: Семантика розміщує обмеження на оптимізацію. Наприклад, динамічно набрані мови на практиці важко оптимізувати. Відсутність типів значення в JVM призводить до набагато більше розподілу купи, ніж у .NET, і, отже, набагато більший стрес для GC. Як і генератори коду, сміттєзбірники можуть і використовувати інформацію, таку як незмінність, щоб покращити продуктивність. Дизайн мови програмування має величезний вплив на це.
Джон Харроп

Відповіді:


21

Що ви маєте на увазі під "життєздатним"? "Маючи найбільше натискань" - це не обов'язково найкращий спосіб вибору мови.

Претензія Ерланга на славу полягає в його здатності до масової паралелізації. Ось чому його часто використовують у телефонних комутаторах Ericsson. Erlang працює в режимі реального часу, тому ви можете зробити певні гарантії продуктивності щодо цього.

F # вигоди від можливостей оптимізації .NET Jitter. Крім того, сама мова розроблена як високоефективна функціональна мова (це варіант OCaml, широко застосовуваний у фінансовій галузі через свою швидкість).

Зрештою, якщо ви не плануєте одночасно запускати мільйони крихітних агентів (для чого оптимізовано Ерланг), F # має вирішити це завдання.

На цій сторінці пояснюються відповідні випадки використання для Erlang.


Під "життєздатністю" я мав на увазі масштабованість. Я знаю, що наявність преси не означає, що ця мова обов'язково краща, але, здається, Ерланг був доведений (принаймні, Ericsson). Що ви маєте на увазі під агентами? Процеси?
afuzzyllama

1
Так. Ерланг, як було доведено, одночасно обробляє багато телефонних дзвінків на комутаторі Ericsson. Ви повинні з'ясувати, чи схожий ваш випадок використання. Я бачу це як відносно спеціалізований випадок використання; якщо ця характеристика відсутня у вашій заявці, я не бачу жодної переваги у використанні Erlang, а сторінка Erlang насправді описує деякі випадки використання, для яких Erlang не підходить.
Роберт Харві

2
Агенти, актори, це дизайнерська концепція, яка багато підходить для функціональних мовних дискусій; Я здивований, що ви ще не наткнулися на це. en.wikipedia.org/wiki/Agent-based_model
Патрік Хьюз

Іншими словами, чи потрібна вам велика масштабованість (зараз чи зрештою) типу, яку забезпечує Ерланг? Більшість програм - ні.
Роберт Харві

1
F # також має модель агента - використовуючи злегка криптично названий "MailboxProcessor", який є тим самим, що і в Erlang. Я не можу коментувати відносні характеристики продуктивності кожного з них.
FinnNk

7

З цього приводу можна зробити декілька об'єктивних тверджень, оскільки продуктивність цих двох мов сильно залежить від стилю програми та програми.

Єдина порада, яку я можу дати, - це те, що F # має перевагу щодо продуктивності системи статичного типу, і CLR робить гарну роботу, використовуючи це для підвищення продуктивності. F # має асинхронні агенти та передачу повідомлень, але це не було оптимізовано, і синхронний код часто перевищує 10 × швидше.

Ерланг динамічно набирається, що ставить його на істотний мінус з точки зору продуктивності (очікуйте набагато більше боксу), але він був побудований з нуля, щоб підтримувати швидке передавання повідомлень між асинхронними агентами, так що цілком може бути набагато швидше, ніж еквівалентний F # . Однак я не маю жодних результативних результатів, щоб підкріпити це: це лише моє сподівання.

На відміну від цього, і Erlang, і F # є відносно неповторними мовами з невеликими спільнотами, і через різні цільові ринки люди, знайомі з обома, рідкісні. Єдиний, кого я можу придумати, хто майже кваліфікується, - це Jesper Louis Andersen, але я не впевнений, скільки F # він зробив.


4

Ви повинні прочитати цю публікацію Джо Армстронга: http://erlang.org/pipermail/erlang-questions/2012-February/064277.html

Недолік цього в тому, що Ерланг був розроблений не так швидко! У багатьох випадках це досить швидко, але це важливо для таких питань, як відмовостійкість та стабільність.

Правда, і Erlang, і F # - це приємні мови, і, хоча я лише швидко поглянув на F #, я написав книгу про Erlang: Створення веб-додатків за допомогою Erlang, і я можу сказати, що на цій мові працювати цікаво.

Я також хотів би зазначити, що, мабуть, спостерігається бум функціональних мовних книг, які будуть видані в найближчі 6-9 місяців. Мені відомо щонайменше 4 про Erlang (включаючи мою), One на Haskell, а також заголовки на OCaml, Clojure та F #.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.