LINUX.ORG.RU

[выбор языка] [JVM] Clojure vs Scala vs Java

 


0

2

Всех с наступившим новым годом и доброго (надеюсь) времени суток!

Для себя начал писать игру (делать в праздники особо нечего). Ранее работал с Pygame, Rubygame и пр. Решил реализовать проектик на JVM, следовательно встал выбор инструмента. Собственно выбор стоит между тем, что описано в шапке. С/С++ + SDL/OpenGL не предлагать (Си - буду писать до ишачей пасхи, а цпп - не нравится по «религиозным соображениям»). Хотелось бы «услышать/прочитать» аргументы за и против языков (т.е. лучше взять язык Х так как у него сл. плюсы: <...>, языки У и К имеют следующие минусы: <...>), а так же ссылки на доки/либы по работе с графикой (желательно аналог Pygame), 2D (опять же по религиозным соображениям: имход 2д игры красивее).

Заранее благодарю.



Последнее исправление: i_overdose (всего исправлений: 1)

Кратко так:

1. Clojure - лисп-специфично, на любителя (фанатика)

2. Scala - лучший вариант с поправкой. Поправка: места которые должны быстро работать не должны юзать фичи Scala ) Только Java-style

3. Java - все будет просто хорошо.

И пиши лучше на LWJGL, это штука похожая по фичам с SDL+OpenGL, только для Java. Текстурки можно рисовать в фотошопе/гимпе или в коде с помощью Java2D

vertexua ★★★★★
()
Ответ на: комментарий от vertexua
let rec d f x = match f with
    | `Var y when x=y -> `Int 1
    | `Int _ | `Var _ -> `Int 0
    | `Add(f, g) -> `Add(d f x, d g x)
    | `Mul(f, g) -> `Add(`Mul(f, d g x), `Mul(g, d f x));;

vs

  abstract class Expr
  case class Lit(f: Int) extends Expr
  case class Var[T](x: T) extends Expr
  case class Add(f: Expr, g: Expr) extends Expr
  case class Mul(f: Expr, g: Expr) extends Expr

  def d[T](f: Expr)(x: T): Expr = f match {
    case Var(y) => if (x==y) (Lit(1)) else (Lit(0))
    case Lit(_) => Lit(0)
    case Add(f, g) => Add(d(f)(x), d(g)(x))
    case Mul(f, g) => Add(Mul(f, d(g)(x)), Mul(g, d(f)(x)))
  }
shty ★★★★★
()
Ответ на: комментарий от shty

я намекал на pattern matching, type inference, verbosity, да и вообще ocaml более чистый язык с точки зрения языковых конструкций, хотя последнее - чисто вкусовщина

shty ★★★★★
()
Ответ на: комментарий от vertexua

Clojure не то, чтобы была специфичной для лиспа, она специфична своей более общей ориентацией на функциональное программирование. Как пример, основные структуры данных иммутабельны, а коллекции ленивы. Писать в объектно-ориентированном стиле будет сложно.

Scala можно использовать как улучшенную Java, а можно как приземленный Haskell. Но мне не нравится в ней библиотека коллекций. Функции реализованы не в отдельных простых и законченных модулях, а как методы объектов. Из-за этого такой монстр получился. Наследование с фукнциональным программированием скрещиваются так же, как уж с ежом.

Без коллекций в реальном приложении никуда, а эта библиотека портит все впечатление о языке. И на мой взгляд, ее переписанный вариант выглядит хуже оригинала. Я все понимаю, имплисыты как классы типов - это круто, но когда смотришь на сигнатуру метода map или иерархию коллекций, то сразу возникает ощущение нескладности и переусложненности.

Java по современным меркам слишком примитивна. Для андроида еще сойдет. Для остальных задач я бы взял Scala, закрыв глаза на некоторые ее огрехи (см. выше). Если беспокоит размер библиотеки Scala, то ее можно пропустить через ProGuard, существенно сократив размер приложения.

dave ★★★★★
()
Ответ на: комментарий от shty
infixl 6 :+
infixl 7 :*

-- | Arithmetic (a ring) terms with variables.
-- 
--   Thus, @v@ is an instance of @Eq@, @n@ is an instance of @Num@.
-- 
data Expr v n = Var v | Num n | Expr v n :+ Expr v n | Expr v n :* Expr v n
  deriving ( Show, Eq )

-- | WTF is @d@?
d :: (Eq v, Num n) => Expr v n -> v -> Expr v n
d (Var y)  x | x == y = Num 1 | otherwise = Num 0
d (Num _)  _ = Num 0
d (f :+ g) x = d f x :+ d g x
d (f :* g) x = f :* d g x :+ g :* d f x

прощай, фигурные скобочки ;'(

quasimoto ★★★★
()
Ответ на: комментарий от shty

Ясное дело, это большой плюс. Но потому кода больше. А то что вы привели - динамически типизируемый PH... код.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

отнюдь, ocaml - тоже не динамически типизируемый

shty ★★★★★
()
11 марта 2012 г.
Ответ на: комментарий от vertexua

Так чем Scala то лучше Clojure? Есть учесть что в скале нагромождение из ооп и флп, приправленное дичайшим синтаксисом, можно быть уверенным что большую часть времени ты будешь вспоминать как правильно описывается та или иная синтаксическая конструкция а не решать поставленную перед тобой задачу.

По мне так Clojure идеальный вариант для языка JFF.

anonymous
()
Ответ на: комментарий от anonymous

Так чем Scala то лучше Clojure?

Практически всем. Главное что синтаксис не лиспообразен. Это самый главный плюс любого не лиспа, ибо лисп тошнотен. Статическая типизация, производительность, возможность писать «как на Java» если очень надо. Вообщем то, что любой из этих параметров является преимуществом можно поспорить, но не рекомендую, дело вкуса и спор ни к чему не приведет. Давайте просто выкатывать продукты на любимой платформе и посмотрим кто добьется успеха.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Практически всем.

Вот с этого момента поподробнее пожалуйста.

Главное что синтаксис не лиспообразен. Это самый главный плюс любого не >лиспа, ибо лисп тошнотен.

Совершенно не показатель. Вы же не будете утверждать, что синтаксис языка должен быть понятен любой домохозяйке. Ведь это в корне неверно. Синтаксис и семантика языка должна быть понятно только человеку, который работает с этим языком.

Давайте просто выкатывать продукты на любимой платформе и посмотрим кто добьется успеха.

На счет применимости обоих языков в интерпрайзе можно посмотреть страницы обоих проектов. У каждого можно насчитать около десятка контор которые так или иначе использовали эти языки для разработки коммерческих проектов.

Я все таки думаю что Scala - это такой C++ (в том плане что он сильно переусложен) для платформы Java. Можно и в функциональном стиле фигачить код, а можно и чисто объектно-ориентированном, можно писать код джава-стайл, в итоге получаем мессиво из кода элементы которого относятся к разным парадигмам.

На счет устройства на работу - я честно говоря не видел что бы где-нибудь на территории РФ и бывшего СНГ предлагали работу связанную с этими языками, за рубежом может быть, а пока это только для jff.

Не кажется ли вам что язык слишком переусложенен, ведь много товарищей писали статьи что этот язык so diffucult to learn. В общем как с C++, пока вызубришь и поймешь куда тыкать чтобы оно поехало, весь энтузиазм уже испариться.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.