Здравствуйте, Аноним, Вы писали:
А>Bruce Eckel написал вчера в своем блоге, что все эти генерики и замыкания доведут жабу до цугундера. Ничего хорошего не получится и Java умрет. Жаль.
А>Шо делать? Си-шарпать?
еще давным давно, Дийкстра описывал программирование на очень популярном в то время PL/1 как управление самолетом у которого на пульте 7000 тумблеров и их количество постоянно растет (много кто слышал об этом языке?).. так и тут, Java эволюционирует как большинство распространенных языков программирования, а именно по басне Сергея Михалкова "Слон-живописец".. но сказать конкретно, какой язык придет ему на смену — покамест рано.. после начала подыхания Java, начнется массовый перевод софта с Java на новую "серебряную пулю" и будут требоваться программеры-полиглоты, которые бедет знать оба языка (новый и Java), то что это будет не Си или Си++ — однозначно, так как в нашем случае языки программирования идут на пути деградации и надо думать, что новый язык еще более изолирует программиста от аппаратуры (а так же даст еще более "мощный" механизм управления памяти, что разработчики GC захлебнутся в слюне с последней мыслью "а почему мы не догадались?!"), снизит требования к его подготовке и даст работу сотне другой тысяч менее грамотных индусов, китайцев и россиян-двоешников.. если увидите такое, то сразу бросайтесь в изучениен, нераздумывая...
p.s.
(сюжет для ненаучно-фантастического романа)
однажды, через сотню лет после смерти последнего видевшего вживую 8 разрядный процессор, какойнибудь программист робко напишет чтонибудь в машинных кодах (ассемлеры тогда уже не будут производиться), покажет окружающим, что его код работает в миллион раз быстрее с той же надежностью и будет распят как еретик и маргинал..
Здравствуйте, raydac, Вы писали:
R>после начала подыхания Java, начнется массовый перевод софта с Java на новую "серебряную пулю"
Гы. Scala да Nemerle? =) Кстати, позавчера начал изучать Scala... эээ... в общем, хожу под себя кипятком и бьюсь головой об стену, чего ж я, дурак, раньше за неё не взялся?
ДГ>Гы. Scala да Nemerle? =) Кстати, позавчера начал изучать Scala... эээ... в общем, хожу под себя кипятком и бьюсь головой об стену, чего ж я, дурак, раньше за неё не взялся?
а что в этом языке такого нового, или что в нём есть такое, чего нет в java или C#?
Здравствуйте, Аноним, Вы писали:
А>Bruce Eckel написал вчера в своем блоге, что все эти генерики и замыкания доведут жабу до цугундера. Ничего хорошего не получится и Java умрет. Жаль.
Одуреть. Брюс, конечно молодец, но как ни заманали.
Главное, вы мне покажите пример хотябы одного языка, который бы умер имея в интерпрайзе миллионы? В С++ полно неправильного дизайна? Он умер? И Java не умрет. Будет не модна, возможно, но не умрет.
unkis,
U>а что в этом языке такого нового, или что в нём есть такое, чего нет в java или C#?
Функции-как-первоклассные-значения, трейты и миксины, паттерн-матчинг, полноценные параметрические типы, абстрактные типы и типы-мемберы, замыкания (сравни с тем, что предлагают Блох сотоварищи и пошли им емэйл с йадом), туплы, структурные типы, ко- и контр- вариантность, экзистенциальные типы, вьюхи и многое другое. Плюс, всё это посыпано некоторым слоем сахара, чтобы визуально уменьшить количество кода.
Вот маленький такой калькулятор, обращаю внимание на функцию eval. По моим субъективным ощущениям, эквивалентный джавовский код будет раза в 4 больше. Плюс появление (анти-)паттерна "визитор".
object Gadts extends Application {
abstract class Term[T]
case class Lit(x: int) extends Term[int]
case class Succ(t: Term[int]) extends Term[int]
case class IsZero(t: Term[int]) extends Term[boolean]
case class If[T](c: Term[boolean],
t1: Term[T],
t2: Term[T]) extends Term[T]
def eval[T](t: Term[T]): T = t match {
case Lit(n) => n
case Succ(u) => eval(u) + 1
case IsZero(u) => eval(u) == 0
case If(c, u1, u2) => eval(if (eval(c)) u1 else u2)
}
Console.println(
// типа "if (1 == 0) 41 else (++41)"
eval(If(IsZero(Lit(1)), Lit(41), Succ(Lit(41)))))
}
Здравствуйте, Дм.Григорьев, Вы писали: ДГ>Гы. Scala да Nemerle? =) Кстати, позавчера начал изучать Scala... эээ... в общем, хожу под себя кипятком и бьюсь головой об стену, чего ж я, дурак, раньше за неё не взялся?
Рановато еще пока на мой взгляд... сыроват.
Я вот тоже жду пока "подсохнет", да и на развитие lift поглядываю.
Но в ближайшие пару лет IMHO еще рано.
Re: На Java можно ставить крест
От:
Аноним
Дата:
05.01.08 04:16
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Bruce Eckel написал вчера в своем блоге, что все эти генерики и замыкания доведут жабу до цугундера. Ничего хорошего не получится и Java умрет. Жаль.
А>Шо делать? Си-шарпать?
Лучше Лиспать
сейчас такая ситуация с большинством разработчиков, что убери гарбадж коллектор и начнут помирать тысячами (как девелоперы).. так что отката на старые языки ждать не стоит
Здравствуйте, Дм.Григорьев, Вы писали:
ДГ>Гы. Scala да Nemerle? =) Кстати, позавчера начал изучать Scala... эээ... в общем, хожу под себя кипятком и бьюсь головой об стену, чего ж я, дурак, раньше за неё не взялся?
Аналогично. Но пока играюсь только, все же решил дождаться доведения до ума модуля Scala Development Tools под Eclipse.
Здравствуйте, raydac, Вы писали:
А>>>Шо делать? Си-шарпать? А>>Лучше Лиспать
R>сейчас такая ситуация с большинством разработчиков, что убери гарбадж коллектор и начнут помирать тысячами (как девелоперы).. так что отката на старые языки ждать не стоит
А кто сказал, что в Лиспе нет сборщика мусора? Грубя говоря Лисп это суперсет для Java, C#, C/С++, итд итп.
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Re[6]: Scala, пеар ...
От:
Аноним
Дата:
05.01.08 10:02
Оценка:
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Lazy Cjow Rhrr, Вы писали:
R>Быстрая сортировка... поражает, насколько код близок к словесному описанию алгоритма в отличие от императивного аналога:
def quicksort(list: List[int]): List[int] = {
R> if (list.length <= 1) list
R> else {
R> val l = list(list.length / 2)
R> quicksort(list filter (l >)) ::: (list filter (l ==)) ::: quicksort(list filter (l <))
R> }
R>}
Вы еще на Haskell не видели
quickSort :: Ord a => a -> a
quickSort [] = []
quickSort (x:xs) = quickSort [y | y <- xs, y < x] ++ [x] ++ quickSort [y | y <- xs, y >= x]
Здравствуйте, <Аноним>, Вы писали:
А>Одуреть. Брюс, конечно молодец, но как ни заманали. А>Главное, вы мне покажите пример хотябы одного языка, который бы умер имея в интерпрайзе миллионы? В С++ полно неправильного дизайна? Он умер? И Java не умрет. Будет не модна, возможно, но не умрет.
Например, прикладное программирование в SAP R/3: язык ABAP/4, в принципе, морально умер (программируя на нем, ошущаешь четко различимый запах разложения), шутка ли, с 80-х годов ничего нового... еще поживет, пока все предприятия у нас не переползут на версию SAP R/3 >= 6.0, там идет на замену Java (а это длительный процесс, ибо миллионы).
По поводу Scala, Nemerle и прочих нишевых языков... думаю, если они полностью и заменят текущих монстров (C++, Java, C#), то очень не скоро, а пока, как и сказал Мартин Одерски:
Scala — это язык общего назначения. Я думаю, что он является альтернативой Java во всех прикладных областях. Большим преимуществом является то, что он делает работу программистов продуктивнее, особенно хороших программистов.
Одна из причин, способных заставить вас обратиться к программированию на Scala, состоит в том, что Scala позволяет увеличить производительность разработчика по сравнению с Java, сохраняя скорость исполнения JVM, существующие инвестиции в Java-код, знания и множество API, имеющихся для JVM. Scala обладает краткостью языков типа Ruby или Python, но при этом статически типизирована, как и Java. Еще одна причина в том, что Scala поставляется с Erlang-подобной библиотекой Actors, которая существенно упрощает параллельное программирование, но работает под JVM.
Эккель молодец, все правильно написал. Если хочется сахара, нужно делать новый язык, имея в виду, при этом, что язык — не серебряная пуля, и никакой язык не отменит необходимости разрабатывать интерфейс, архитектуру и алгоритмы.
А>Шо делать? Си-шарпать?
Писать по старинке. Не обязательно использовать весь тот мусор, который понавесят в новых версиях. А то будет нечитабельное гуано как в скале, в которой синтаксический ###### достиг чуть ли высшего предела, судя по приведенным выше примерам.
def quicksort(lst) {
| [] => []
| x :: xs => quicksort($[y | y in xs, y < x]) + [x] + quicksort($[y | y in xs, y >= x])
}
Тоже с комментариями:
def quicksort(lst) { // отсортировать список
| [] => [] // если список пуст, то возвратить пустой список
| head :: tail =>
// если список состоит из головы (head)
// и любого хвоста (tail, от пустого списка, до списка любого размера), то
// отсортировать первый подсписок
quicksort(
$[y | y in tail, y < head]) // элементы которого меньшие, чем голова исходного списка
+ [head] // прибавить к результату список, состоящий из головы исходного списка
+ quicksort( // отсортировать второй подсписок
$[y | y in tail, y >= head]) // элементы которого больше или равны голове исходного списка
}
Обратил внимание, что в Scala подчистили маленькие несуразности, которые сейчас исправлены даже в C#, а в Java — нет. К примеру, в отношении порядка инициализации членов класса и вызова родительских конструкторов, как следствие, частичное (но оно стоит того) решение проблемы безопасной инициализации, писал об этом здесь: Re[12]: Virtual member call in constructor. Плохо?