Каковы основные сходства и различия между Scala и Gosu (связанные с Java)?
Я сейчас изучаю Scala и занимаюсь этим в течение последнего месяца. Сегодня ( через Твиттер) я наткнулся на другой язык, который кажется довольно похожим, Госу.
Каковы основные сходства и различия между Scala и Gosu в отношении их наиболее влиятельного родителя, Java? Существуют ли сайты, которые сравнивают и сопоставляют эти два языка?
3 ответа
Да, наша таблица сравнения языков во многом шутка. Особенно "Не Лисп".:)
Как отметил Стивен С. из моего первоначального поста, Gosu в целом проще, чем Scala, а Scala обладает более продвинутыми возможностями, чем Gosu.
Скала и Госу имеют много общего:
Оба статически типизированы, но используют вывод типов, чтобы уменьшить раздувание кода
Оба поддерживают замыкания и более функциональное программирование
Оба обеспечивают дополнительную функциональность поверх существующих библиотек Java, особенно вокруг коллекций.
И вот некоторые отличия:
Gosu не поддерживает общую перегрузку операторов
Gosu не обеспечивает синтаксическую поддержку монад
Обобщения в Gosu проще, чем в Java (за счет правильности), где они более (или, по крайней мере, так же) сложны в Scala (хотя Scala намного лучше справляется с корректностью).
Gosu не поддерживает такие вещи, как неявный аргумент '_' в замыканиях в Scala: он более явный в подобных случаях.
Расширения Gosu для основных библиотек Java менее впечатляющи. Мы свариваем дополнительные методы с существующими типами Java, а не вводим новую иерархию типов.
Есть одно большое различие между Gosu и Scala в функциональности: у Gosu есть то, что мы называем системой открытого типа. Это позволяет людям подключать произвольные ресурсы к компилятору Gosu. Как пример: Gosu (по состоянию на 0.8.5) поддерживает файлы XSD и WSDL в качестве граждан первого класса:
С точки зрения функциональности система открытого типа является настоящим отличием между Gosu и другими статически типизированными языками JVM.
При всем этом, к сожалению, в настоящее время реальность такова, что в некоторых областях Scala гораздо более зрелый, чем Gosu, особенно в области инструментов. Scala имеет отличную поддержку IDE во всех основных IDE. У нас есть плагин Eclipse для Gosu, но он все еще находится в зачаточном состоянии. Точно так же наш плагин IntelliJ очень новый.
Scala имеет очень полный веб-фреймворк Lift. Я не большой поклонник их подхода, но он завершен и многим нравится.
У Gosu также есть веб-фреймворк:
Мне нравится подход Ронина, но я бы так сделал, не так ли? Ronin создается парнями, которые очень хорошо знают Gosu и, таким образом, он использует много функциональности в языке.
Надеюсь, это поможет. Реально, если бы я начинал проект сегодня, я бы, вероятно, выбрал Scala только из-за поддержки инструментов. Однако, если вы хотите выйти в другом направлении, особенно если ваш проект связан с веб-службами или обработкой XSD, Gosu может быть полезным языком для использования. В долгосрочной перспективе я надеюсь, что Gosu станет прагматичным выбором для разработчиков JVM, но только время покажет.
Сравнительная таблица Gosu несколько несправедлива по отношению к Scala: переход с Java прост (вам не нужно использовать все причудливые вещи Scala в начале), а для обобщенных обобщений Scala предлагает не идеальное, но работоспособное решение под названием Манифесты. Конечно, категории, в которых блески Scala отсутствуют (сопоставление с образцом, типы с более высоким родом...)
В этой теме в списке госу-ланга Карсон Гросс подытожил его следующим образом:
Короткий ответ заключается в том, что Gosu проще, чем Scala (более простые обобщения, ограниченная перегрузка операторов), но более жестко статически типизирован, чем, скажем, Groovy.
Есть также эта таблица, но это одно из тех сравнений "наш продукт лучше вашего продукта"; т.е. изначально предвзятым.
Насколько мне известно, Gosu разработан Guidewire для разработки и настройки продукта для конкретного продукта. Таким образом, все пользователи / разработчики Guidewire используют Gosu для программирования. Это основная причина, по которой вы не видите много сообщений, связанных со сценариями Gosu.