Предыдущий пост Поделиться Следующий пост
Scala
lex_kravetski

Товарищу, посоветовавшему язык Scala в качестве лекарства от проблем, выражается безмерная благодарность.

Я ещё не до конца во все детали вник, но это — то, что надо. Это — мечта, терзавшая меня последние полтора года. Чтобы функциональный язык, на который можно без проблем перейти.

Многие спросят: но как же так? Я же недавно писал, что перейти с одного на другое тяжело, поскольку есть код, команда, проблемы переносимости и всё такое. Отвечаю: Scala — это мега-штука. Scala компилируется в байт-код JVM и работает на ней безо всяких патчей. Это, товарищи, плюс таких немерянных размеров, что уже за это можно воздать все почести разом. Но кроме немерянного плюса есть ещё один — немерянный совсем. Для языка Scala джава-объекты прозрачны. Любую java-библиотеку можно безо всяких адаптаторов заюзать из Scala. Мало того, в обратную сторону оное тоже работает. Конечно, с поправками на нюансы каждого из языков, но даже код на С менее совместим с Java и гораздо труднее вызываем.

Таким образом, не потеряв ничего ценного, можно плавно переходить на Scala. При этом писать проекты на двух языках сразу, объединив их в одном проекте и не испытывая проблем. Всем бы так.

Есть, конечно, как правильно замечали, всякие другие варианты — Ruby, например. Но у них и с заюзыванием из Java не так, чтобы удобно. И интерпретируются они, а не компилируются. Да и сами по себе какие-то не такие как надо — я тут про Ruby тоже почитал, не зацепило.

Ещё правильно замечали про Groovy, но он вместе с Ruby скорее для скриптов, а не для основного кода. Генерацию html-страниц на них наверно прикольно писать, но всю программу — это нет.

Правда, недостаток у Scala всё-таки имеется: плагин для Eclipse ещё не отштукатурен до конца. Уже близок к тому, уже работает, но то у них подсказки переделываются, то квик-фиксы, то ещё что-то. Уже почти, но ещё не. Хотя, думаю, за полгода осилят. А за это время я как раз язык заучу.

 

P.S. Пацаны, извините, что я всё про программирование, да про программирование. Взялся тут авто-форму отрефакторить, так столько идей в голову пришло, что спать не могу, всё о них думаю. Под это дело уже не просто библиотека, а чуть ли не парадигма языка образовалась. Ну и, соответственно, мысли в основном вокруг программирования вертятся.


  • 1
(Удалённый комментарий)

Re: Ответ на вашу запись...

Сам язык практически допилен. Интеграция, так и вообще присутствует по определению — у Scala нет других реализаций, кроме как с компиляцией в байт-код для JVM или для .Net. Вот плагины ко всевозможным IDE, они, увы, не доделаны.

Ну вот. А говорил, других языков не советовать.

Re: Ответ на вашу запись...

Товарищ грамотно посоветовал: другой язык, который одновременно не другой. То есть, компилируется в байт-код для JVM, прозрачен для Java и Java прозрачна для него. Такой вариант подходит.

А в чем тогда преимущество по сравнению с Явой? В соответствии функциональной парадигме?

Re: Ответ на вашу запись...

Scala одновременно объектный и функциональный. То есть, бонусы Java сохраняются по идее, но к ним добавляются ещё и функциональные штуки.

Интересно будет прочитать Ваши мысли по поводу парадигмы нового языка. Не напишите?

Re: Ответ на вашу запись...

Когда до конца додумаю. Вкратце, там про организацию взаимодействий объектов.

Эх, завидую... А мне вот пока не удастся перейти на Scala, хотя и очень хотел бы. Я пишу под GWT, а он транслирует непосредственно исходники Java в JavaScript. И Google пока не собирается делать что-то аналогичное для Scala :(

Re: Ответ на вашу запись...

> Эх, завидую... А мне вот пока не удастся перейти на Scala, хотя и очень хотел бы. Я пишу под GWT, а он транслирует непосредственно исходники Java в JavaScript.

Прямо совсем исходники или байт-код? Я просто не в курсе. Зато читал, что у самих разработчиков Scala ведётся работа над адаптацией GWT под это дело.

Re: Ответ на вашу запись...

GWT поддерживает определенный набор классов из JRE. При написании классов можно юзать только этот набор. После этого GWT-компилятор генерирует на основе исходников джаваскрипт.

Re: Ответ на вашу запись...

Про исходники уже ответили выше: да, именно они. Увы.

 >читал, что у самих разработчиков Scala ведётся работа над адаптацией GWT под это дело.

Если так, то это обнадёживает. Будем ждать :)

Пописал я как-то Groovy (в связочке Groovy On Grails), причём в комерческом проекте, и причём в немаленьком. Штука действительно завораживающая на первых порах. Про Scala слышал, и сейчас с удовольствием прошелся по примерам кода, дабы навскидку сравнить.
Короче, мои выводы: большой разницы между языками нет. Т.е. я бы это расценил как разные имплементации одного и того же. Небольшая разница в синтаксисе.. Причём, как мне показалось, синтаксис Groovy ближе к Java.

В остальном могу сказать какая проблема возникла у нас на проекте: моск джависта мыслит немного другими категориями. Мы сразу набросились на Groovy, продолжая использовать привычные нам паттерны и правила построения веб-проэктов Java. И тут то началась война с ветряными мельницами :) Все каждый день ругались словами "Блин, это хорошо для домашней странички или для блога! А мы тут энтерпрайз-апликухи клепаем и у нас 250 таблиц в базе и полтысчи экранов интерфейса! Мы сума сойдём!"
Причины я вижу следующие (а я думаю што и Scala подстерегают такие же проблемы):
- Первое, и самое главное: програмисты, работавшие с Java и интегрируя их с подобного рода языками используют подходы Java, а они неприменимы и должны быть пересмотрены (ну например, в этих языках понятие "интерфейс" сведено на нет - а в Java оно одно из ключевых - на нём весь Spring держиться)
- некомпилируемый код в 90% случаях проявляет себя только в рантайме (и ни через месяц, ни через год плагин для Эклипса это не исправит - языки не жесткотипизированые, и хоть караул кричи)
- удалить поле в классе, переименовать метод и т.д. IDE вам уже не поможет.
...ещё и проблема перфоманса дала о себе знать.

Для себя решил, что наилучшая сфера использования: короткие закрытые учатки кода с малой спенью связанности или вещи, не предназначенные для повторного использования (всякие экраны UI, например). Для первых это прозрачность алгоритма и превосходная читаемость, для вторых - краткость и простота исполнения.

С удовольствием в будущем прочитаю про опыт внедрения Scala(Groovy) в серьёзные Java-проекты.

> - некомпилируемый код в 90% случаях проявляет себя только в рантайме (и ни через месяц, ни через год плагин для Эклипса это не исправит - языки не жесткотипизированые, и хоть караул кричи)

что значить не жестко типизированные? вроде как Scala статически и строго типизированная. А вот groovy и clojure - да, динамическиe.

> - удалить поле в классе, переименовать метод и т.д. IDE вам уже не поможет.

Да можно это все и в скале и в груве, и в clojure.

Ну по опыту работы с Груви в Эклипсе знаю что "можно", но результат как правило сильно не дотягивает до ожиданий.


Про статическую типизацию Википедию прочитать поленился, просто сделал такой вывод глядя на примеры кода :) Почему-то в маих мозгах жестко зашито, что если есть ключевое слово для декларирования переменной, при этом не обозначающее тип (var, val, def, let...) - то значит типизация скорее всего динамическая.


Круто было бы пример рассмотреть.. Вот нашел такой код на Scala (выводит текущую дату/время во французкой локали):


 import java.util.{Date, Locale}
 import java.text.DateFormat
 import java.text.DateFormat._
 
 object FrenchDate {
   def main(args: Array[String]) {
     val now = new Date  // Выдаст ли компилятор ошибку через 2 строки, если тип будет String?
     val df = getDateInstance(LONG, Locale.FRANCE) // тип переменной как бы не ясен, а мы у неё методы собираемся вызывать
     println(df format now) // неужели компилятор не пропустит, а IDE подсветит, если я опечатоюсь в слове fromat?
   }
 }

Боюсь что опечатку вы обнаружите только в рантайме. И если вдруг с помощью IDE решите метод format переименовать в superFormat - врядли ИДЕ об этом догадается. Если же ото не так - то всем большое спасибо, что благодаря вам я узнал, на сколько я отстал от жизни.
Правда тут надо отметить, что словосочитание "статическая/динамическая типизация" тут как бы и не причём. Она вроде как остаёться статической, но проблемы о которых я говорил (актуальные в больших проектах) вроде как есть.


Соре, что использую вас в роли компилятора - но больно уж интересно :) Вдруг реально стоит уделить внимание Scala (и поставит компилятор и плагин) уже имея опыт с Groovy?


Re: Ответ на комментарий...

> val now = new Date // Выдаст ли компилятор ошибку через 2 строки, если тип будет String?

Судя по тому, что я прочитал — выдаст. У now задан тип. Но неявно — он выводится компилятором из первого определения.

> val df = getDateInstance(LONG, Locale.FRANCE) // тип переменной как бы не ясен, а мы у неё методы собираемся вызывать

Обратно же, ясен: тип у df такой, какой определён как возвращаемый у метода getDateInstance.

> println(df format now) // неужели компилятор не пропустит, а IDE подсветит, если я опечатоюсь в слове fromat?

В данном случае сия запись — синоним для df.format(now). В println попадает то, что вернёт вызов функции format (строка, то есть). Поэтому таки да, компилятор выдаст ошибку при опечатке в слове format. Ну, по той же причине, по которой оно для df.fomat(now) выдастся.

(Удалённый комментарий)
Посмотрите коммент выше - ваше мнение также будет интересно.

> С удовольствием в будущем прочитаю про опыт внедрения Scala(Groovy) в серьёзные Java-проекты.

http://www.scala-lang.org/node/1658

http://www.artima.com/scalazine/articles/twitter_on_scala.html

извини за оффтоп - про короткоствол ссылка попалась

******
http://lenta.ru/news/2009/08/30/attack/
******
В Махачкале у командира ОМОНа отняли табельное оружие

На командира ОМОН махачкалинского линейного отдела внутренних дел на транспорте полковника милиции Магомеда Байсултанова совершено нападение, передает в воскресенье агентство "Интерфакс".

Инцидент произошел в Махачкале накануне около 20:00. Байсултанов возвращался домой, когда на одной из улиц неизвестные напали на него сзади, ударили по голове, забрали табельное оружие и скрылись, сообщил источник агентства в правоохранительных органах Дагестана.

Как уточняет агентство ИТАР-ТАСС, нападавшие завладели пистолетом Стечкина.

В результате нападения командир ОМОНа госпитализирован с сотрясением головного мозга, его состояние опасений у врачей не вызывает. Милиция пытается найти злоумышленников и похищенное оружие. По факту нападения на Байсултанова возбуждено уголовное дело.










**************


А вот если бы у него был Короткоствол :):)

Re: извини за оффтоп - про короткоствол ссылка попалась

Ты ж сам когда-то активно выступал за скорейшую легализацию.

Re: извини за оффтоп - про короткоствол ссылка попалась

ты не путай:)

я выступал за легализацию но не за то что с короткостволом сразу моментально решаются все проблемы по безопасности и что все становятся суперменами!

кстати я не против легализации и сейчас.

Re: извини за оффтоп - про короткоствол ссылка попалась

Так и я не против. Что сейчас, что тогда. Я только не вижу в ней никаких реальных сторон, сильно отличающихся от «я могу купить пистолет, потому что оружие вызывает у меня эстетическое удовольствие» и «мне с пистолетом спокойнее ходить, хотя я им вряд ли смогу воспользоваться». Для меня это — поводы приветствовать легализацию, да. Но в среднем будет, как в данной заметке.

Re: извини за оффтоп - про короткоствол ссылка попалась

да заметка она вообще рулит - у командира омона отняли пистолет - это не шутка:) это сильно. тут даже не возразишь что он "не умел пользоваться":)

вот еще оффтопик- про давки в очередях, правда теперь уже в россии (без видео)

http://www.gazeta.ru/news/lastnews/2009/08/30/n_1398484.shtml

Слона-то я и не приметил. Надо будет посмотреть.

Re: Ответ на вашу запись...

Я уже за это время пристально засмотрел. Мега-язык. Я теперь фанат Scala.

  • 1
?

Log in

No account? Create an account