Цель гранта — преодолеть барьер параллельного программирования, которые стал весьма актуален в свете резко возросшей популярности многоядерных и многопроцессорных вычислительных систем.
Scala — функциональный и объектно-ориентированный язык программирования, основанный на Java и .NET. Он изначально включает некоторые конструкции параллелизации.
В расширенном конкурсном описании проекта (PDF) Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования (domain-specific language, DSL) для каждой из сфер применения, будь то машинное обучение, динамика жидкостей, аналитика или финансовое моделирование. Он приводит Facebook и Google как примеры успешной параллелизации специфических задач (социальный граф и поиск, соответственно).
Но при этом в случае с DSL на основе Scala Одерский предлагает использовать «виртуализацию языка» (language virtualization). Это инновационный подход, в рамках которого сочетаются полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция. На первом уровне каждого DSL создаются высокоуровневые библиотеки на Scala, что практически обеспечивает общую платформу для всего семейства DSL.
Что-то как-то мутно. У нас есть: "полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция"?
Здравствуйте, Ka3a4oK, Вы писали:
KK>Что-то как-то мутно.
Та бабло они так пилят Цивилизованный научный метод распила.
KK>У нас есть: "полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция"?
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Ka3a4oK, Вы писали:
KK>>Что-то как-то мутно.
H>Та бабло они так пилят Цивилизованный научный метод распила.
KK>>У нас есть: "полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция"?
H>Есть. Это сама философия наша.
предметно-ориентированные оптимизации это у вас где?
можно хоть один пример
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
H>>>Есть. Это сама философия наша.
А>> предметно-ориентированные оптимизации это у вас где? А>>можно хоть один пример
H>PegGrammar — посмотри как он предметно оптимизирует.
Видел, очень круто. Вот только оптимизация не предметно ориентированая, а встроенная. Ее нельзя добавить постфактом.
Здравствуйте, Аноним, Вы писали:
H>>PegGrammar — посмотри как он предметно оптимизирует.
А>Видел, очень круто. Вот только оптимизация не предметно ориентированая, а встроенная. Ее нельзя добавить постфактом.
Отлично, раз ты знаешь что такое "предметно ориентированная оптимизация" — дай окружающим определение. В моем понимании это наиболее эффективный с т.з. предметной области код, порождаемый DSL-системой макросов.
KK>Это инновационный подход, в рамках которого сочетаются полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция.
Способ преподнесения уж очень смахивает на мозго%бство и без того неискушённых обывателей. А если говорить по существу, то быстро откроется, что "это давно есть в ЛИСПе"
KK>Что-то как-то мутно. У нас есть: "полиморфные вложения с предметно-ориентированными оптимизациями и поступенчатая компиляция"?
Для начала им стоит пояснить их терминологию, а потом уже меряться письками. Касательно "предметно-ориентированными оптимизациями", звучит почти как "процессоры интел ускоряют интернет" — т.е. какое-то косвенное отношение есть, конечно, но в прямом смысле — тупость несусветная. Оптимизация — это улучшение характеристик чего-то _в_рамках_своей_среды_. Среда здесь — ЦПУ, память, поэтому "предметно-ориентированные" стулья/молекулы/облака здесь не канают. Это первое впечатление от их вброса.
KK>Цель гранта — преодолеть барьер параллельного программирования, которые стал весьма актуален в свете резко возросшей популярности многоядерных и многопроцессорных вычислительных систем.
Ну, мы обзавидовались. Дальше то что? В то что такой грант даст нам наше правительство и тем более Европа я (почему-то) не верю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ну, мы обзавидовались. Дальше то что? В то что такой грант даст нам наше правительство и тем более Европа я (почему-то) не верю.
В том-то и разница. Одерский верил, потому и получил
Здравствуйте, nikov, Вы писали:
VD>>Ага. Верующий. За ним один из крупнейших институтов Европы.
N>И, между прочим, не за красивые глаза.
Да у нас тоже не за красивые глаза пилят гранты .
Что они там такого многопоточного изобретут за эти лимоны? По ссылке очень правильно сказано, что "Скоро создатель Scala Мартин Одерский (Martin Odersky) сможет удвоить численность своей группы разработчиков, сказано в официальном блоге.". Вот это он и сделает.
А вот "Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования" больше на тупой попил денег походит. Во первых скала тупо монолитный не расширяемый язык. А во вторых, сами по себе ДСЛ-и паралелизма не предоставляют. Если задача последовательная, то хоть ты трижды ее на ДСЛ опиши, ничего путного с распараллеливанием не выйдет.
Отличный пример парсинг. ДСЛ в виде грамматики сделать не сложно. Но так как распознование любого следующего символа зависит от распознования предыдущих, то распараллелить процесс невозможно в принципе.
Короче, "конкурсные описания проекта" он видимо очень хорошо пишет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, nikov, Вы писали:
VD>>>Ага. Верующий. За ним один из крупнейших институтов Европы.
N>>И, между прочим, не за красивые глаза.
VD>Да у нас тоже не за красивые глаза пилят гранты .
VD>Что они там такого многопоточного изобретут за эти лимоны? По ссылке очень правильно сказано, что "Скоро создатель Scala Мартин Одерский (Martin Odersky) сможет удвоить численность своей группы разработчиков, сказано в официальном блоге.". Вот это он и сделает.
VD>А вот "Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования" больше на тупой попил денег походит. Во первых скала тупо монолитный не расширяемый язык. А во вторых, сами по себе ДСЛ-и паралелизма не предоставляют. Если задача последовательная, то хоть ты трижды ее на ДСЛ опиши, ничего путного с распараллеливанием не выйдет.
VD>Отличный пример парсинг. ДСЛ в виде грамматики сделать не сложно. Но так как распознование любого следующего символа зависит от распознования предыдущих, то распараллелить процесс невозможно в принципе.
VD>Короче, "конкурсные описания проекта" он видимо очень хорошо пишет.
пример сильного распаралеливания в с++
матричные операции. последовательно ты оперируешь выражениями с сложением/обращением/умножением матриц. а сами операции распаралелены.
Здравствуйте, Аноним, Вы писали:
А>пример сильного распаралеливания в с++
А>матричные операции. последовательно ты оперируешь выражениями с сложением/обращением/умножением матриц. а сами операции распаралелены.
Так сказали же, что дээсэль дээсэлю — рознь. Одни задачи распараллелить можно, другие — нет.
Здравствуйте, VladD2, Вы писали:
VD>Но так как распознование любого следующего символа зависит от распознования предыдущих, то распараллелить процесс невозможно в принципе.
В принципе возможно, можно параллелить списки приоритетного выбора. Нужно парсить все его варианты параллельно, отбрасывая менее приоритетные при нахождении более приоритетного выбора. Таким образом при откате правила у нас уже будет либо полностью либо частично разобранная альтернатива.
Правда сомневаюсь, что переключение контекстов не съест весь профит, в большинстве случаев откаты совсем не глубокие и не затратные.
Здравствуйте, VladD2, Вы писали:
VD>>> Во первых скала тупо монолитный не расширяемый язык.
Скала отлично расширяется через написание плагинов к компилятору, например так в нее (scala 2.8.0 ) добавляли континуации.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования (domain-specific language, DSL) для каждой из сфер применения
Здравствуйте, VladD2, Вы писали:
VD>Отличный пример парсинг. ДСЛ в виде грамматики сделать не сложно. Но так как распознование любого следующего символа зависит от распознования предыдущих, то распараллелить процесс невозможно в принципе.
Кстати, можно попробовать сделать спекулятивный парсинг ветвей в правиле выбора
Здравствуйте, para, Вы писали:
P>Здравствуйте, VladD2, Вы писали:
VD>>Отличный пример парсинг. ДСЛ в виде грамматики сделать не сложно. Но так как распознование любого следующего символа зависит от распознования предыдущих, то распараллелить процесс невозможно в принципе.
P>Кстати, можно попробовать сделать спекулятивный парсинг ветвей в правиле выбора
P>только не знаю, как там со Scope-ами будет...
Здравствуйте, Аноним, Вы писали:
А>пример сильного распаралеливания в с++
А>матричные операции. последовательно ты оперируешь выражениями с сложением/обращением/умножением матриц. а сами операции распаралелены.
Вот скажи, зачем было этот шлак писать, да еще с таким объемом оверквотинга?
Причем тут С++? Это что DSL о которых говорит Одесски? И причем тут распараллеливание того что и так отлино распараллеливается кучей способов? Матричные вычисления — это примитивнейшая задача давно решенная (по много раз) в железе. Возьми любую библиотеку вычислений на GPU и твой С++ залюбится пыль глотать.
В общем, ответ вообще не "в кассу".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Ziaw, Вы писали:
Z>В принципе возможно, можно параллелить списки приоритетного выбора. Нужно парсить все его варианты параллельно, отбрасывая менее приоритетные при нахождении более приоритетного выбора. Таким образом при откате правила у нас уже будет либо полностью либо частично разобранная альтернатива.
Чёйсы почти всегда обламываются на первых же символах. Синхронизация сожрет весь выигрыш.
Z>Правда сомневаюсь, что переключение контекстов не съест весь профит, в большинстве случаев откаты совсем не глубокие и не затратные.
А я не сомневаюсь. Съест с потрохами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, z00n, Вы писали:
VD>>>> Во первых скала тупо монолитный не расширяемый язык. Z>Скала отлично расширяется через написание плагинов к компилятору, например так в нее (scala 2.8.0 ) добавляли континуации.
Принципиально очистка улицы детским совком ничем не отличается от очистки улицы бульдозером.
Z>Синтаксически (с точrи зрения DSL-ов etc.) Скала всегда было очень гибким языком.
Языком все гибко получается.
Z>Вообще, главный недостаток Scala — она не работает под .Net
Она таки работает под .Net (некоторые версии портированы), но как и любым портом сделанным для показухи пользоваться им очень не просто (если вообще возможно).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, para, Вы писали:
P>Кстати, можно попробовать сделать спекулятивный парсинг ветвей в правиле выбора
P>только не знаю, как там со Scope-ами будет...
Здравствуйте, Кодёнок, Вы писали:
KK>>Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования (domain-specific language, DSL) для каждой из сфер применения
Кё>Какая вообще связь между параллелизацией и DSL?
Думаю такая. В Скале с DSL сейчас очень хреново. А поиметь их хочется (на Немерл поглядывали не раз). А тут грант дают под параллельные вычисления. Остается только притянуть за уши DSL к параллелизации и получить грант.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Кодёнок, Вы писали:
KK>>>Одерский объясняет, что естественным способом параллелизации различных приложений является создание предметно-ориентированных языков программирования (domain-specific language, DSL) для каждой из сфер применения
Кё>>Какая вообще связь между параллелизацией и DSL?
VD>Думаю такая. В Скале с DSL сейчас очень хреново. А поиметь их хочется (на Немерл поглядывали не раз). А тут грант дают под параллельные вычисления. Остается только притянуть за уши DSL к параллелизации и получить грант.
parfor дает паралеллизм порядка 70% от возможного на тех задачах что я встречался....
если конкурент превзошел тебя значит надо превзойти конкурента (пиши под 2мя бутылками водки)
как минимум надо делать распаралеливание на уровне последовательности проходов
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, z00n, Вы писали:
VD>>>>> Во первых скала тупо монолитный не расширяемый язык. Z>>Скала отлично расширяется через написание плагинов к компилятору, например так в нее (scala 2.8.0 ) добавляли континуации.
VD>Ну, ты попробуй сам что-нить прикрутить такими методами, а потом уже делай заявления в стиле "хорошо". ОК?
Я таким методом прикрутил алгебраический паттерн-матчинг (Sestoft) к луа и на всех стадиях работы был совершенно счастлив.
Я, разумеется, не использовал plugin API, а просто брал AST(lua) и паттерн-матчингом по нему ходил. Код генерировал тоже длинным образом, типа
val clauses = Clause(ConPat(CTop(n), ps), None, BlockNil, src)::Nil
Ну вот посмотрим пример с сайта скалы:
package localhost
import scala.tools.nsc
import nsc.Global
import nsc.Phase
import nsc.plugins.Plugin
import nsc.plugins.PluginComponent
class DivByZero(val global: Global) extends Plugin {
import global._
val name = "divbyzero"
val description = "checks for division by zero"
val components = List[PluginComponent](Component)
private object Component extends PluginComponent {
val global: DivByZero.this.global.type = DivByZero.this.global
val runsAfter = "refchecks"// Using the Scala Compiler 2.8.x the runsAfter should be written as below
// val runsAfter = List[String]("refchecks");
val phaseName = DivByZero.this.name
def newPhase(_prev: Phase) = new DivByZeroPhase(_prev)
class DivByZeroPhase(prev: Phase) extends StdPhase(prev) {
override def name = DivByZero.this.name
def apply(unit: CompilationUnit) {
for ( tree @ Apply(Select(rcvr, nme.DIV), List(Literal(Constant(0)))) <- unit.body;
if rcvr.tpe <:< definitions.IntClass.tpe)
{
unit.error(tree.pos, "definitely division by zero")
}
}
}
}
}
Чем это отличается от макросов? Прежде всего отсутсвием квазицитирования — поэтому нужно знать API и представлять что делаешь. Boilerplate кой-какой (на сайте скалы лежит темплейт). Так вот мое личное мнение (я его тут неоднократно озвучивал) — что человеку готовому расширять компилятор пофиг чем пользоваться, а большинству (99%+) пофиг то, что у макросов несколько ниже порог вхождения — они все равно не будут этого делать.
Z>>Принципиально это ничем не отличается от макросов, разве что макросы удобнее для мелочевки.
VD>Принципиально очистка улицы детским совком ничем не отличается от очистки улицы бульдозером.
Интересное сравнение — я то сам, например, предпочту бульдозер — т.е. залезть в компилятор и пропатчить там что надо. Плагины почти тоже самое — я прошу AST на определенной стадии и делаю с ним что хочу.
Z>>Синтаксически (с точrи зрения DSL-ов etc.) Скала всегда было очень гибким языком.
VD>Языком все гибко получается.
C-
Z>>Вообще, главный недостаток Scala — она не работает под .Net
VD>Она таки работает под .Net (некоторые версии портированы), но как и любым портом сделанным для показухи пользоваться им очень не просто (если вообще возможно).
Здравствуйте, z00n, Вы писали:
Z>Ну вот посмотрим пример с сайта скалы: Z>
Z>package localhost
Z>import scala.tools.nsc
Z>import nsc.Global
Z>import nsc.Phase
Z>import nsc.plugins.Plugin
Z>import nsc.plugins.PluginComponent
Z>class DivByZero(val global: Global) extends Plugin {
Z> import global._
Z> val name = "divbyzero"
Z> val description = "checks for division by zero"
Z> val components = List[PluginComponent](Component)
Z> private object Component extends PluginComponent {
Z> val global: DivByZero.this.global.type = DivByZero.this.global
Z> val runsAfter = "refchecks"
Z> // Using the Scala Compiler 2.8.x the runsAfter should be written as below
Z> // val runsAfter = List[String]("refchecks");
Z> val phaseName = DivByZero.this.name
Z> def newPhase(_prev: Phase) = new DivByZeroPhase(_prev)
Z> class DivByZeroPhase(prev: Phase) extends StdPhase(prev) {
Z> override def name = DivByZero.this.name
Z> def apply(unit: CompilationUnit) {
Z> for ( tree @ Apply(Select(rcvr, nme.DIV), List(Literal(Constant(0)))) <- unit.body;
Z> if rcvr.tpe <:< definitions.IntClass.tpe)
Z> {
Z> unit.error(tree.pos, "definitely division by zero")
Z> }
Z> }
Z> }
Z> }
Z>}
Z>
Z>Чем это отличается от макросов? Прежде всего отсутсвием квазицитирования — поэтому нужно знать API и представлять что делаешь.
Ага. И еще тем, что это спагети-код решает примитивную и высосанную из пальца задачу. А когда ты начнешь делать новый синтаксис, то окажется что у компилятора куча ограничений которые невозможно преодолеть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.