Десять вопросов Мартину Одерски о Scala
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 27.04.07 15:30
Оценка: 232 (19)
Все это начиналось как мини-интервью для специального номера Компьютерры
Автор: Зверёк Харьковский
Дата: 26.02.07
. Я должен был написать пару слов о Scala, для чего задал пять вопросов Мартину Одерски. Но, поскольку в Компьютерру материалы о Scala не попыли, то я решил задать Мартину еще несколько вопросов. Результат можно увидеть на моей страничке:

Русский вариант в моем переводе
Оригинальный, английский вариант

Disclaimer. Я уже не являюсь приверженцем Scala и довольно сильно подзабыл этот язык. Поэтому, пожалуйста, не задавайте мне вопросов по Scala.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Десять вопросов Мартину Одерски о Scala
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.04.07 10:33
Оценка: 98 (9)
eao197,

MO> ... Some areas of interest are concurrency and distribution, pluggable types, staging, virtual classes, and new forms of packagings. Some of this might make it into a future Scala release, but it is far too early to tell.


Много непонятных терминов. Мой поиск, начавшийся где-то 4 месяца назад дал непустые результаты только для staging и virtual types.

Staging это концепция метапрограммирования, впервые реализованная в MetaML. Пример того, как это работает там:
# val triple = (3 + 4, <3 + 4>, lift 3 + 4);
val triple = (7, <3 %+ 4>, <7>) : (int * <int> * <int>)

# fun f (x, y, z) = <8 - ~y>;
val f = fn : ('a * <int> * 'b) -> <int>

# val code = f triple;
val code = <8 %- (3 %+ 4)> : <int>

# run code;
val it = 1 : int

Выражение <e> строит кусок кода, который является представлением e (quotation). Выражение ~e сплайсит код, полученный вычислением e в тело выражения, заключённого в угловые скобки (то есть ~e легально только внутри выражения в угловых скобках). lift e вычисляет e и строит представление результата вычисления. run e вычисляет e чтобы получить кусок кода, а потом вычисляет этот кусок.

Virtual classes — это обобщение виртуальных функций. Представьте себе, что в базовом классе определён внутренний виртуальный класс, который может быть переопределён в потомках подобно тому, как виртуальный метод может быть переопределён в потомках. Примером может служить следующий код
class Graph {
    class Node {
        Edge connect(Node other) { return new Edge(this, other); }
    }
    class Edge {
        Node from, to;
        Edge(Node f, Node t) { from = f; to = t; }
    }
}

Теперь класс ColouredGraph наследует от также мемберов Node и Edge, и может расширять их:
class ColouredGraph extends Graph {
    class Node {
        Colour nodeColour;
    }
}

Теперь новое поле nodeColour добавлено к классу Node, унаследованного от Graph. Клёво, не правда ли?

Эта штуковина не имеет аналогов ни в одном из мэйнстримовых языков, более того, в экспериментальных языках таких как Beta, gBeta, Concord, .FJ, Jx, Caesar и других реализация не является полностью типобезопасной и создать такую систему типов, в рамках которой можно было бы создать виртуальные классы, является нехилой проблемой в теории типов.

Пример возникающих сложностей: предположим, что в раскрашенном графе мы хотим иметь возможность соединять только раскрашенные вершины, но наивная реализация виртуальных классов легко позволяет нам сделать такое.
Graph.Node n = new Graph.Node();
Graph.Node cn = new ColouredGraph.Node();
n.connect(cn); // ???

Следовательно надо иметь возможность различать классы g1.Node и g2.Node для различных графов g1 и g2. И сделать это статически весьма непросто.

В системе типов (надмножество системы типов vObj) Скалы есть projection types, являющихся некоторым приближением к идеалу. Создать же true virtual classes в Скале мешают как теоретические проблемы, так и JVM, так как для успеха Скалы необходимо сохранить двустороннюю совместимость с Java.

Для интересующихся вот статьи:
Tribe: more types on virtual classes — система типов Tribe — некоторое приближение к VC
Scalable component abstractions — система типов vObj и реализация в Scala
On the (un)reality of virtual types — какие проблемы, и как они решаются в (сюрприз!) Ocaml

Гуглом находятся без проблем
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: Десять вопросов Мартину Одерски о Scala
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.04.07 08:33
Оценка: 4 (1) :))
Здравствуйте, EvilChild, Вы писали:

E>>Disclaimer. Я уже не являюсь приверженцем Scala и довольно сильно подзабыл этот язык.

EC>А можешь рассказать почему?

Последние пару лет я искал язык в качестве замены C++. Таковым мог бы стать Eiffel, если бы не маркетинг его создателя. Или Scala, поскольку программирование на Scala чем-то напоминает программирование на Ruby.

Но я искал более простой язык, чем C++. Который был бы хорошо понятен мне и которому я мог бы учить своих коллег. Пока Scala для меня таковым не является. Некоторые подробности см. http://www.rsdn.ru/Forum/Message.aspx?mid=2422251&amp;only=1
Автор: eao197
Дата: 28.03.07
и http://www.rsdn.ru/Forum/Message.aspx?mid=2423810&amp;only=1
Автор: eao197
Дата: 29.03.07


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

Ну и еще один важный фактор -- для того, чтобы безболезнено продолжать свои текущие проекты мне нужны новые версии ObjESSty и SObjectizer-а. Как сделать эти версии, скажем, на D я себе представляю, а вот как на Scala -- нет.

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Десять вопросов Мартину Одерски о Scala
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.04.07 11:05
Оценка: 18 (2)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

MO>> ... Some areas of interest are concurrency and distribution, pluggable types, staging, virtual classes, and new forms of packagings. Some of this might make it into a future Scala release, but it is far too early to tell.


LCR>Много непонятных терминов. Мой поиск, начавшийся где-то 4 месяца назад дал непустые результаты только для staging и virtual types.


Презентация по pluggable types: http://bracha.org/pluggable-types.pdf
Реализация стадийности для Java: http://loome.cs.uiuc.edu/Jumbo/


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Десять вопросов Мартину Одерски о Scala
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.04.07 12:08
Оценка: 2 (1)
Здравствуйте, EvilChild, Вы писали:

E>>Кроме того, мои задачи более близки к низкоуровневому программированию. Например, насколько востребованны будут функции высшего порядка, лямбды и паттерн-матчинг в задачах эффективной обработки ввода/вывода или реализации таймерных событий -- очень большой вопрос.

EC>А что смущает? Виртуальным функциям и шаблонам применение нашлось, чем перечисленные тобой возможности хуже?

Они не хуже, они другие. С одной стороны, они требуют другого подхода к проектированию. Причем в тех областях, где раньше обычного C с классами хватало с лихвой. Так что уже не факт, что подобное перепроектирование будет оправдано. Кроме того, все это работает в управляемых средах, а в низкоуровневых вещах часто приходится опускаться на уровень ОС. Мне как-то довелось делать реализацию генератора таймерных событий для Linux-а и для Windows. Реализация под Windows работала на уровне чистого WinAPI, в linux-е использовался select, но и реализация там была менее точная. Вот и есть опасение, что будут лишне приключения по подключению к JVM кусков C-шного кода через JNI, а все эти высокоуровневые функциональные фишки не будут восстребованы. Кроме того, еще большой вопрос, насколько эффективны будут реализации на Scala и JVM вещей типа SObjectizer, если посмотреть на тесты Language Shootout, то Scala изрядно проигрывает D и C++.

Я делал как-то построение отчетов по РСУБД на Ruby -- там основные расчеты как раз на блоках кода строились. Вот здесь Scala-вские лямбды бы были в тему. Но это отнюдь не низкоуровневые задачи.

E>>Так что я пока не вижу таких достоинств Scala, которые бы оправдали ее сложность в моих условиях и на моих проектах.

EC>Так замена C++ была найдена? Это D?

Пока да, D. Но до реального начала использования D в критически-важных проектах пройдет еще изрядное количество времени. Так что время может все переиграть, и не один раз.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Десять вопросов Мартину Одерски о Scala
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.07 21:08
Оценка: +1
Здравствуйте, eao197, Вы писали:

>MO: Scala является основной частью работы почти 10 человек: меня, 2-х кандидатов наук и 7-х аспирантов.


ахринеть! Немерлу бы такие ресурсы!

Вообще, 10 full time vs. 2 по остаточном приципу, а результат в лучшем случае паритетный. У F#-щиков 2 разработчика full time. А результат тоже похожий. Неясно почему Скала с такими ресурсами не выбилась в лидеры в желтой майке.

ЗЫ

Лучше бы прям суда запостил. Ведь народ поиском пользуется и может пропустить это сообщение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Десять вопросов Мартину Одерски о Scala
От: EvilChild Ниоткуда  
Дата: 28.04.07 18:38
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Disclaimer. Я уже не являюсь приверженцем Scala и довольно сильно подзабыл этот язык.

А можешь рассказать почему?
now playing: Misanthrop — Evacuate
Re[2]: Десять вопросов Мартину Одерски о Scala
От: Андрей Хропов Россия  
Дата: 29.04.07 10:35
Оценка: -1
Здравствуйте, VladD2, Вы писали:

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


>>MO: Scala является основной частью работы почти 10 человек: меня, 2-х кандидатов наук и 7-х аспирантов.


VD> ахринеть! Немерлу бы такие ресурсы!


Да, и желающих приглашают участвовать (за нормальную зарплату!)

VD>Вообще, 10 full time vs. 2 по остаточном приципу, а результат в лучшем случае паритетный. У F#-щиков 2 разработчика full time. А результат тоже похожий. Неясно почему Скала с такими ресурсами не выбилась в лидеры в желтой майке.


Ну тебе кажется что похожий. А так Scala уже в версии 2.4, в отличие от Nemerle (0.9.3.x) и F# (1.1.x).

А вообще у Мартина Одерски большие планы сделать масштабную презентацию на конференции JavaOne в этом году и он пишет книгу по Scala (в этом же интервью).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Десять вопросов Мартину Одерски о Scala
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.04.07 10:52
Оценка: :)
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Да, и желающих приглашают участвовать (за нормальную зарплату!)


Вот же, блин, не справедливость?

АХ>Ну тебе кажется что похожий. А так Scala уже в версии 2.4, в отличие от Nemerle (0.9.3.x) и F# (1.1.x).


Эти цифирьки ровным счетоам ничего не значат.

АХ>А вообще у Мартина Одерски большие планы сделать масштабную презентацию на конференции JavaOne в этом году и он пишет книгу по Scala (в этом же интервью).


Это тоже ничего ровным счетом не значит.

Вот 10 разработчиков работающих на постоянной основе и наличие бабок — это то что доктор прописал.

В общем, как всегда бабло рулит миром.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Десять вопросов Мартину Одерски о Scala
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.07 11:33
Оценка:
Здравствуйте, eao197, Вы писали:

Аналогичное Интервью с разработчиками Nemerle
Автор: Oyster
Дата: 28.04.07
Oyster выложил на форуме по Немерлу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Десять вопросов Мартину Одерски о Scala
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.04.07 11:59
Оценка:
eao197,

E>Презентация по pluggable types: http://bracha.org/pluggable-types.pdf


Хм, вон оно как! Ведь была статья на эту тему: "Static typing where possible, dynamic typing when needed", просто термин был optional types, а не pluggable types.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[3]: Десять вопросов Мартину Одерски о Scala
От: EvilChild Ниоткуда  
Дата: 29.04.07 11:13
Оценка:
Здравствуйте, eao197, Вы писали:

E>Кроме того, мои задачи более близки к низкоуровневому программированию. Например, насколько востребованны будут функции высшего порядка, лямбды и паттерн-матчинг в задачах эффективной обработки ввода/вывода или реализации таймерных событий -- очень большой вопрос.

А что смущает? Виртуальным функциям и шаблонам применение нашлось, чем перечисленные тобой возможности хуже?
Я не собираюсь ни в чём переубеждать, просто интересно.

E>Так что я пока не вижу таких достоинств Scala, которые бы оправдали ее сложность в моих условиях и на моих проектах.

Так замена C++ была найдена? Это D?
now playing: Vicious Circle & Universal Pro — Workout
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.