Може хтось, будь ласка, пояснить основні відмінності між Scala, Groovy та Clojure. Я знаю, що кожен з цих компіляцій працює на JVM, але я хотів би просте порівняння між ними.
Може хтось, будь ласка, пояснить основні відмінності між Scala, Groovy та Clojure. Я знаю, що кожен з цих компіляцій працює на JVM, але я хотів би просте порівняння між ними.
Відповіді:
Groovy - це динамічно набрана мова, синтаксис якої дуже близький до Java, з рядом поліпшень синтаксису, що дозволяють полегшити код та менше котловару. Він може працювати через інтерпретатора, а також компілювати, що робить його гарним для швидкого прототипування, скриптів та вивчення динамічних мов без необхідності вивчення нового синтаксису (якщо ви знаєте Java). Як і в Groovy 2.0, він також має зростаючу підтримку статичної компіляції . Groovy підтримує закриття і підтримує програмування в дещо функціональному стилі, хоча це все ще досить далеко від традиційного визначення функціонального програмування.
Clojure - це діалект Lisp з кількома вдосконаленими функціями, такими як Software Transactional Memory . Якщо вам подобається Лісп і хочете використати щось подібне під JVM, Clojure - це для вас. Це, можливо, найбільш функціональна мова, що працює на JVM, і, безумовно, найвідоміша. Крім того, він робить сильніший акцент на незмінність, ніж інші діалекти Ліспа, що робить його ближче до серця любителів функціональної мови.
Scala - це повністю об'єктно-орієнтована мова, більше, ніж Java, з однією з найдосконаліших типів систем, доступних на мовах, що не досліджуються, і, безумовно, найсучаснішою системою типу JVM. Він також поєднує в собі безліч понять і особливостей функціональних мов, не порушуючи орієнтації на об'єкт, але його компроміс щодо функціональних характеристик мови відкладає деяких ентузіастів останніх.
Groovy має гарне сприйняття та популярну веб-структуру в Grails. Він також забезпечує систему побудови Gradle, яка стає популярною альтернативою Maven. Я особисто вважаю, що це мова з обмеженою корисністю, особливо, коли Jython та JRuby починають робити набіги на JVM-землю, порівняно з іншими.
Clojure, навіть знижуючи деякі дуже цікаві функції, має сильну привабливість лише тим, що є діалектом Lisp на JVM. Це, можливо, обмежить його популярність, але я сподіваюся, що довгий час у неї буде лояльна спільнота.
Scala може конкурувати безпосередньо з Java, а також запускати гроші за майже всі аспекти. Наразі вона не може конкурувати за популярністю, і відсутність потужної корпоративної підтримки може перешкоджати її прийняттю у корпоративних середовищах. Це також набагато більш динамічна мова, ніж Java, в сенсі того, як мова розвивається. З точки зору мови, це добре. З точки зору користувачів, які планують записати тисячі рядків коду, це не так.
Як остаточне розкриття, я дуже добре знайомий зі Скалою, і лише знайомий з двома іншими.
Scala розвинулася з чистої функціональної мови, відомої як « Воронка», і являє собою реалізацію майже всіх синтаксисів Java, відрізняючись лише тим, де можна було б досягти чіткого вдосконалення або де це призведе до загрози функціональному характеру мови. Такі відмінності включають одиночні об'єкти замість статичних методів та тип виводу.
Значна частина цього ґрунтувалася на попередній роботі Мартіна Одерського з мовою піци . Інтеграція ОО / ПП виходить далеко за рамки простого закриття і призвела до того, що мова описується як постфункціональна.
Незважаючи на це, він за багатьма ознаками найближчий до Java. В основному завдяки поєднанню підтримки OO та статичного набору тексту, а також завдяки явній цілі в мовному дизайні, що вона повинна дуже тісно інтегруватися з Java.
Groovy прямо вирішує дві найбільші критики Яви
Це, мабуть, синтаксично найближче до Java, не пропонує деяких більш багатих функціональних конструкцій, які надають Clojure та Scala, але все ж пропонує певне еволюційне вдосконалення - особливо для написання програм-скриптів syle.
Groovy має найсильнішу комерційну підтримку з трьох мов, здебільшого за допомогою джерела джерела.
Clojure - це функціональна мова в сім'ї LISP, вона також динамічно набирається.
Такі функції, як підтримка STM, надають їй найкращу підтримку одночасного одночасного використання, тоді як Scala вимагає сторонньої бібліотеки, такої як Akka, щоб її дублювати.
Синтаксично це також найдальша з трьох мов із типового коду Java.
Я також повинен розкрити, що я найбільше знайомий зі Скалою :)
Я ніколи не встиг пограти з клоджуром. Але для scala vs groovy - це слова Джеймса Страчана - творця Groovy
"Хоча моя порада, хоча довгостроково замінює javac - Scala. Я дуже вражений цим! Я можу чесно сказати, якби хтось показав мені програмування у книзі Scala Мартіна Одерського, Lex Spoon & Bill Venners ще в 2003 році. "Мабуть, ніколи б не створили Groovy".
Ви можете прочитати всю історію тут
Їх можна розмежовувати з тим, звідки вони приїжджають або з яких розробників вони орієнтуються в основному.
Groovy трохи схожий на сценарій версії Java. Програмісти Java довго відчувають себе як вдома, коли створюють спритні програми, підтримувані великими архітектурами. Groovy on Grails - це, як випливає з назви, схожий на рамки Rails. Для людей, які не хочуть постійно турбуватися з багатослівністю Java.
Scala - об'єктно-орієнтована і функціональна мова програмування, і програмісти Ruby або Python можуть відчувати себе ближче до цієї. Тут використовується досить багато загальних добрих ідей, які можна знайти в цих мовах програмування.
Clojure - це діалект мови програмування Lisp, тому розробники Lisp, Scheme або Haskell можуть відчувати себе як вдома під час розвитку цієї мови.
Я читаю книгу прагматичних програмістів "Groovy Recipes: Gading the wheel of Java" Скотта Девіса, Copyright 2008 і надрукована у квітні того ж року.
Це трохи застаріло, але з книги чітко видно, що Groovy - це буквально розширення Java. Я можу написати код Java, який функціонує точно як Java, і перейменувати файл * .groovy, і він прекрасно працює. Відповідно до книги, зворотне дійсне, якщо я включаю необхідні бібліотеки. Поки, здається, експерименти це підтверджують.
Очевидно, синтаксис зовсім інший (Groovy найближчий до Яви), але я гадаю, що це не те, про що ви просите.
Якщо вам цікаво використовувати їх для скриптування Java-програми, Scala, мабуть, не є вдалим вибором, оскільки не існує простого способу оцінити це з Java, тоді як Groovy особливо підходить для цієї мети.
eval
потрібно.