Зіставлення шаблонів у Clojure vs Scala


12

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

Програми Scala (наприклад, Lift and Play) з гордістю говорять про вміння мов, які відповідають майстерності. Clojure, з іншого боку, має бібліотеку, core.match і вбудований в руйнування, яке також здається потужним.

* Примітка. Причину, що я надихнувся задати це питання, - це те, що я побачив публікацію в блозі, в якій програміст, як експеримент, створив інтерпретатора від скатів, використовуючи і Scala, і Clojure. Він сказав, що матчі Clojure розірвалися після певної тривалості, але не зміг пояснити, чому, але мені дуже цікаво знати. Ви можете знайти цю публікацію тут: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


3
@gnat Блог здається справді випадковим. Мені здається, він насправді не цікавиться поясненнями до блогу як такої, а лише порівнянням того, як певна мова відрізняється у двох конкретних мовах. Хіба це об'єктивно не відповідає?
Довал

3
На захист цього питання: це об’єктивно, добре написано та зрозуміло. Чому не важливо, що ОП прочитала блог перед тим, як опублікувати це питання? Це не змінює якість питання.

1
Це не Gorilla vs. Shark, оскільки він запитує дуже конкретну інформацію про одну дуже специфічну особливість, яка є загальною для обох мов, навіть якщо вона може бути реалізована по-різному в обох. Це набагато більш цілеспрямоване питання, ніж Gorilla vs. Shark.
Евікатос

1
Домовились. Gorilla vs. Shark - це порівняння двох речей, які є незрівнянними, як яблука та апельсини. Порівнюючи реалізацію функції на двох мовах - це не Gorilla vs. Shark. Це специфічне, актуальне і таке питання, яке цікавить експертів. Це не просто питання "допоможіть мені вибрати мову".
Карл Білефельдт

1
Причиною, яку я згадав у блозі, було те, щоб закріпити ваше розуміння того, що мотивувало мене задати питання. Я подумав, що це буде гарною виноскою до мого актуального питання. Я пояснив деякі, щоб вам не потрібно було читати їх самостійно, але включив посилання на випадок, якщо ви це зробили. Я подумав, що * і «замітка» зробили це досить зрозумілим, але я думаю, що я повинен був також додати круглі дужки та рядок тире. PS: акули.
kurofune

Відповіді:


21

У цьому відео, яке я переглянув нещодавно, Річ Хікі коментує, що йому подобається руйнівна частина мов, як Скала, але не стільки відповідна частина шаблону, і він відповідно розробив Clojure. Це, мабуть, пояснює, чому відповідність шаблонів є в бібліотеці і не настільки надійна, хоча види проблем, які спостерігаються в публікації, яку ви згадали, явно помилки.

Те, що Річ Хікі згадує як альтернативу відповідності шаблону, - це мультиметоди . Більшість мов дозволяють вам виконувати поліморфні розсилки на основі типу. Деякі мови дозволяють вам це робити також на основі значення. Використовуючи мультиметоди, Clojure дозволяє робити це на основі будь-якої довільної функції. Це досить потужна концепція.

Це зводиться до принципу, що програмісти, які використовують мову, повинні використовувати найкращі ідіоми мови. Спроба написати скало-код у Clojure матиме свої труднощі, і навпаки.


Дякую за дуже цікаву відповідь на моє запитання. Я ніколи не думав про багато методи таким чином! Здається, це було б непосильним для простих завдань, але, безумовно, потужним. Я згоден і з тим, що ви сказали про ідіому. Я не можу дочекатися, щоб завісити це у Clojure :)
kurofune

Дякую за цю відповідь. Пов'язане відео згадує відповідність шаблону, коли Річ каже: "Якщо у вас є заздрість, що відповідає шаблону, це половина цього, за винятком тієї частини, яка мені не подобається, яка є умовною частиною". github.com/matthiasn/talk-transcripts/pull/90/files#
hawkeye
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.