Noop - новый язык для JVM
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.09.09 17:27
Оценка:
Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.

Noop says Yes to

* Dependency injection in the language
* Testability — a seam between every pair of classes
* Immutability
* Readable code is more important than any syntax feature
* Executable documentation that's never out-of-date
* Properties, strong typing, and sensible modern stdlib

Re: Noop - новый язык для JVM
От: thesz Россия http://thesz.livejournal.com
Дата: 18.09.09 11:50
Оценка:
Здравствуйте, nikov, Вы писали:

N>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


N>

N>Noop says Yes to
N>* Dependency injection in the language


Тут я сломался.

http://code.google.com/p/noop/wiki/ProposalForNewableVsInjectable

Это ж ужас!
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re: Noop - новый язык для JVM
От: LaptevVV Россия  
Дата: 18.09.09 11:58
Оценка:
Здравствуйте, nikov, Вы писали:

N>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


Пока нет документа с описанием языка — сложно что-то сказать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Noop - новый язык для JVM
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.09.09 13:11
Оценка:
Здравствуйте, LaptevVV, Вы писали:

N>>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


LVV>Пока нет документа с описанием языка — сложно что-то сказать.


Зато на многое можно повлиять.
Re: Noop - новый язык для JVM
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.09.09 15:14
Оценка: :))) :))) :)
Здравствуйте, nikov, Вы писали:

N>Noop


Кажется, я догадываюсь в какую инструкцию процессора будут компилироваться программы на этом языке.
Re: Noop - новый язык для JVM
От: jenyavb  
Дата: 20.09.09 12:22
Оценка:
Здравствуйте, nikov, Вы писали:

N>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


Гораздо интереснее то, чему Noop говорит "нет":

  • Any statics whatsoever
  • Implementation inheritance (subclassing)
  • Primitives
  • Unnecessary boilerplate

  • ... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
    Re[2]: Noop - новый язык для JVM
    От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
    Дата: 21.09.09 06:51
    Оценка:
    Здравствуйте, jenyavb, Вы писали:

    J>Здравствуйте, nikov, Вы писали:


    N>>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


    J>Гораздо интереснее то, чему Noop говорит "нет":

    J>

    J>

  • Implementation inheritance (subclassing)


  • вместо наследования будет поддержка композиции (агрегации) ProposalForComposition
    с претензией на оригинальность
    Re: Noop - новый язык для JVM
    От: LaPerouse  
    Дата: 21.09.09 09:33
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>Разработчики из Google начали делать Noop — новый язык для JVM. Часть компилятора написана на Scala.


    N>[q]

    N>Noop says Yes to

    N>* Dependency injection in the language

    N>* Testability — a seam between every pair of classes
    N>* Immutability

    Боюсь, получится еще один хаскель. Тотальная иммутабельность до добра не доводит.

    По-моему, Scala — самый разумный на сегодняшний день выбор. Она поддерживает ФП в той же степени, что и Хаскель, при этом оставляя место и другим парадигмам. По-большому счету, для большинства задач и явы хватало, скала — просто более хорошая, новая ява, а больше ничего и не нужно.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[2]: Noop - новый язык для JVM
    От: nikov США http://www.linkedin.com/in/nikov
    Дата: 21.09.09 10:09
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>По-моему, Scala — самый разумный на сегодняшний день выбор. Она поддерживает ФП в той же степени, что и Хаскель, при этом оставляя место и другим парадигмам. По-большому счету, для большинства задач и явы хватало, скала — просто более хорошая, новая ява, а больше ничего и не нужно.


    В общем-то я согласен. После того как усилиями Adriaan Moors в Scala были добавлены higher-kinded types, в ней стало возможно эмулировать почти все возможности стандартных Haskell type classes. Не хватает только возможности условной реализации классов (например, список является Ordered, если элементы являются Ordered).

    Ну и еще не хватает поддержки rank-N polymorphism на уровне языка (хотя его можно эмулировать).
    Re[3]: Noop - новый язык для JVM
    От: LaPerouse  
    Дата: 21.09.09 13:32
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>Здравствуйте, LaPerouse, Вы писали:


    LP>>По-моему, Scala — самый разумный на сегодняшний день выбор. Она поддерживает ФП в той же степени, что и Хаскель, при этом оставляя место и другим парадигмам. По-большому счету, для большинства задач и явы хватало, скала — просто более хорошая, новая ява, а больше ничего и не нужно.


    N>Не хватает только возможности условной реализации классов (например, список является Ordered, если элементы являются Ordered).


    Не можешь объяснить, как такое возможно? Поддерживает ли данный элемент интерфейс Ordered или нет — это же информация времени выполенения. Наверное, это какой-то навороченный instanceof с диспетчеризацией внутри класса?

    N>Ну и еще не хватает поддержки rank-N polymorphism на уровне языка (хотя его можно эмулировать).


    Боюсь справшивать что это такое, ну да ладно, вроде жили без него, проживем и далее
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[4]: Noop - новый язык для JVM
    От: nikov США http://www.linkedin.com/in/nikov
    Дата: 21.09.09 14:24
    Оценка: 4 (1)
    Здравствуйте, LaPerouse, Вы писали:

    N>>Не хватает только возможности условной реализации классов (например, список является Ordered, если элементы являются Ordered).


    LP>Не можешь объяснить, как такое возможно? Поддерживает ли данный элемент интерфейс Ordered или нет — это же информация времени выполенения. Наверное, это какой-то навороченный instanceof с диспетчеризацией внутри класса?


    Ну как в хаскеле:
    instance  (Ord a) => Ord (Tree a)  where
        (Leaf _)     <= (Branch _)      =  True
        (Leaf x)     <= (Leaf y)        =  x <= y
        (Branch _)   <= (Leaf _)        =  False
        (Branch l r) <= (Branch l' r')  =  l == l' && r <= r' || l <= l'


    Можно создавать Tree, для элементов которых не определен инстанс класса Ord, тогда и для деревьев он не будет определен. А если создадим Tree, элементы которого поддерживают Ord, то сразу получаем возможность упорядочивать и сами деревья. ИМХО, в Scala такое не возможно.

    N>>Ну и еще не хватает поддержки rank-N polymorphism на уровне языка (хотя его можно эмулировать).

    LP>Боюсь справшивать что это такое, ну да ладно, вроде жили без него, проживем и далее

    Ну, проще говоря, это возможность передать куда-то функциональное значение, представляющее generic метод, и уже там, куда мы его передали, вызвать этот метод с разными типами-аргументами. Сейчас в Scala для этого нужно создавать специальный класс-обертку для такого функционального значения (здесь). А существующие расширения хаскеля поддерживают это на уровне языка.
    Re: Noop - новый язык для JVM
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.09.09 21:09
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>

    N>Noop says Yes to


    Общее ощущение от прочитанного — товарищи нашли фатальный недостаток в Яве... ну, вы поняли какой...

    Мое мнение — бредовая затея. Цели мутные. Полное ощущение, что люди живут в мире Явы и поняли что в ней что-то в ней не так, но что так и не поняли, так что пытаются прилепить к ней разные "нужные" вещи вроде ослиного хвоста и ластов.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: Noop - новый язык для JVM
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 22.09.09 21:12
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>В общем-то я согласен. После того как усилиями Adriaan Moors в Scala были добавлены higher-kinded types, в ней стало возможно эмулировать почти все возможности стандартных Haskell type classes.


    А можно на пальцах объяснить — что это такое и с чем едят?
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: Noop - новый язык для JVM
    От: nikov США http://www.linkedin.com/in/nikov
    Дата: 23.09.09 18:28
    Оценка: 91 (5)
    Здравствуйте, VladD2, Вы писали:

    N>>В общем-то я согласен. После того как усилиями Adriaan Moors в Scala были добавлены higher-kinded types, в ней стало возможно эмулировать почти все возможности стандартных Haskell type classes.


    VD>А можно на пальцах объяснить — что это такое и с чем едят?


    Представь, что у тебя есть такая задача:

    Есть много generic коллекций: List, LinkedList, Tree и т.д.
    У всех этих коллекций есть generic метод Map[S], принимающий функцию, применяющий ее ко всем элементам коллекции и возвращающий коллекцию, имеющую тот же тип контейнера, но другой тип элементов.
    Например, у типа List[T] этот метод будет иметь сигнатуру (T -> S) -> List[S], у LinkedList — сигнатуру (T -> S) -> LinkedList[S] и т.д. (пишу на псевдо-коде).

    Теперь, тебе надо написать функцию Map0, которая будет абстрагироваться от конкретного типа коллекции, и вызывать у нее метод Map, передав ей функцию (_ -> 0), которая устанавливает все элементы коллекции в 0. Для этого все коллекции должны реализовывать общий интерфейс с методом Map. Но вот беда: в рамках обычных дженериков C#, Nemerle или Java такого не сделать — у методов Map совершенно разные сигнатуры. Здесь-то как раз и нужны higher-kinded types, то есть дженерики, у которых типы-параметры могут в свою очередь свои типы параметры. Тогда сигнатура метода Map будет такая (опять псевдо-код):

    interface IMapableCollection[TCollection[_], T]
    {
       Map[S] : (T -> S) -> TCollection[S];
    }
    
    class List[T] : IMapableCollection[List, T]
    {
       Map[S] : (T -> S) -> List[S] { /* ... */ }
    }
    
    class LinkedList[T] : IMapableCollection[LinkedList, T]
    {
       Map[S] : (T -> S) -> LinkedList[S] { /* ... */ }
    }
    
    def Map0[TCollection[_], T](coll : TCollection[T]) : TCollection[int] { coll.Map[int](_ -> 0); }


    Тип-параметр TCollection — высшего порядка, потому что он декларирует наличие у него собственных типов-параметров (их имена обычно не важны, поэтому пишется _). При инстанциации типа IMapableCollection вместо TCollection должен быть передан generic тип, имеющий один обычный тип-праметр, без типа-аргумента.

    Более подробно читать диссертацию Adriaan Moors, его статьи, или Scala Language Specification.

    В Haskell аналогичная задача решается классом типов Functor с функцией fmap.
    Re[5]: Noop - новый язык для JVM
    От: nikov США http://www.linkedin.com/in/nikov
    Дата: 23.09.09 18:44
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>Здесь-то как раз и нужны higher-kinded types, то есть дженерики, у которых типы-параметры могут в свою очередь свои типы параметры.

    Здесь-то как раз и нужны higher-kinded types, то есть дженерики, у которых типы-параметры могут в свою очередь иметь свои типы параметры.

    Надо добавить, что в Scala, кроме того, что обычные типы параметры могуть иметь upper и lower констрейнты (последние нужны в некоторых сценариях с контравариантностью), типы-параметры высших порядков тоже могут иметь констрейнты, и их собственные типы-параметры (которые, кстати, тоже могут быть высшего порядка!) тоже могут иметь констрейнты. Причем любой из этих типов параметров может быть как инвариантным, так и ко- или контравариантным, причем не только в трейтах(интерфейсах), но и в конкретных классах, а типы-параметры у типов-параметров высшего порядка — даже в методах.

    Констрейнты в Scala называются bounds.

    Пусть меня поправят специалисты, если я не прав, но по-моему, в Haskell нет никаких аналогов для подобных констрейнтов.
    Re[5]: Noop - новый язык для JVM
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.09.09 18:51
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>Тип-параметр TCollection — высшего порядка, потому что он декларирует наличие у него собственных типов-параметров (их имена обычно не важны, поэтому пишется _). При инстанциации типа IMapableCollection вместо TCollection должен быть передан generic тип, имеющий один обычный тип-праметр, без типа-аргумента.


    Три вопроса:
    1. Нельзя ли выразить этот тип верхнего уровня через ограничение (констрэйн)?
    2. Насколько это нужно на практике? Не является ли это наукой ради науки?
    3. Как эта штука уживается с наличием типов-значений?

    N>Более подробно читать диссертацию Adriaan Moors, его статьи, или Scala Language Specification.

    N>В Haskell аналогичная задача решается классом типов Functor с функцией fmap.

    Аналог fmap можно получить средствами метапрограммирования.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: Noop - новый язык для JVM
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 23.09.09 18:54
    Оценка:
    Здравствуйте, nikov, Вы писали:

    N>...так и ко- или контравариантным, причем не только в трейтах(интерфейсах), но и в конкретных классах, а типы-параметры у типов-параметров высшего порядка — даже в методах.


    Ну, дык у них все типы ссылочные по этому это реализуемо для всех типов. Плата за это — производительность при работе с влэль-типами и отсутствие составных влэлью-типов.

    N>Констрейнты в Scala называются bounds.


    N>Пусть меня поправят специалисты, если я не прав, но по-моему, в Haskell нет никаких аналогов для подобных констрейнтов.


    Остается вопрос — зачем оно все нужно?
    Хаскель мне не нравится в первую очередь своей перенавороченностью. Даже простые вещи в нем имеют ужасающее описание.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Noop - новый язык для JVM
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.09 20:10
    Оценка: +1
    Здравствуйте, jenyavb, Вы писали:

    J>
  • Any statics whatsoever

    Что под статиками они понимают? Статические поля?

    J>
  • Implementation inheritance (subclassing)

    Давно пора приговорить.

    J>
  • Primitives

    ?

    J>
  • Unnecessary boilerplate

    Слова ни о чем.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
  • AVK Blog
    Re[3]: Noop - новый язык для JVM
    От: nikov США http://www.linkedin.com/in/nikov
    Дата: 23.09.09 20:42
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    J>>
  • Any statics whatsoever

    AVK>Что под статиками они понимают? Статические поля?


    Я думаю, и поля и методы. Наверное, будут делать, как в Scala — встроенные в язык singleton objects.
  • Re[4]: Noop - новый язык для JVM
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 23.09.09 20:47
    Оценка: 1 (1)
    Здравствуйте, nikov, Вы писали:

    N>Я думаю, и поля и методы.


    Ну поля — понятно, хотя уж больно фееричная перестраховка, а методы то чем помешали?

    N> Наверное, будут делать, как в Scala — встроенные в язык singleton objects.


    Не вникал подробно, но sigleton objects от проблем статических полей не избавляют
    А вообще, как то по детски там у них все, имхо — ковыряются с мелочами, а на серьезные проблемы ответов не видно. Так языки лет 15-20 назад проектировали.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
    AVK Blog
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.