Oslo

Может кто слышал по подробней, что задумали учителя и наставники ->"Oslo"А то ещё завтра учить надо будет    какой то М
14 ответов

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


Я так понимаю, это они хотят cильно продвинутый UML от Microsofta сделать


Посмотрел я это осло, немного почитал, и понял - ВЕСЧ. Скачал, сейчас разбираюсь. 
Это, судя по всему, задумка для нового проблемно-ориентированного языка...
Насколько я понял, это платформа для создания таких языков. С асмим M я ещё не разбирался, но в SDK входит язык MGrammar. С ним я позанимался. Язык простой и понятный служит для описания грамматики языков. В SDK входят библиотеки, с помощью которых можно быстро построить дерево из кода написанного на языке, описанном при помощи MGrammar. Приведу пример того, что уже намутил  Код написанный на самом MGrammar.
module Math{ language Expression {    token digits="0".."9"+;    token exp = ("e"|"E")("-"|"+")? ("0".."9")#1..3;    token opLevel1_left = "+" => "Sum"    |"-" => "Def";    token bracketOpen = "(" => null;    token bracketClosed = ")"=>null;     token opLevel2_left = "*" => "Product"    |"/" => "Devision";    token identifer = ("a".."z"|"A".."Z")("a".."z"|"A".."Z"|"0".."9")*;    token number = n:(digits ("." digits)? exp?) => Number[n];    syntax argDelimeter = "," => null;        syntax function = n:identifer args:argList    => Function[Name[n], Arguments[args]];    syntax variable = v:identifer => v ;    syntax argList= bracketOpen f:Expr r:(argDelimeter Expr)* bracketClosed    =>   [f, valuesof(r)];    syntax Expr = e:(n:number => n    |var:variable => Variable[var]     |function    |l:Expr left(2) op:opLevel2_left r:Expr =>         id(op)[Left[l],Right[r]]        |l:Expr left(1) op:opLevel1_left r:Expr =>         id(op)[Left[l],Right[r]]        |bracketOpen Expr bracketClosed)=> e;        syntax Main = Expr;    interleave ws = ("\u0020"|"\u0009")+; }}
Грамматика описывает математические выражения, включающие 4 арифметических оператора, числа, переменные и функции.Для примра возьмём выражение AnyFunc(x + 3*cos(y), 2, 3.4e-5, sin(z)).Грамматика генерирует из этого выражения следующее дерево
Main[  [    Function[      Name[        "AnyFunc"      ],      Arguments[        [          Sum[            Left[              Variable[                "x"              ]            ],            Right[              Product[                Left[                  Number[                    "3"                  ]                ],                Right[                  [                    Function[                      Name[                        "cos"                      ],                      Arguments[                        [                          Variable[                            "y"                          ]                        ]                      ]                    ]                  ]                ]              ]            ]          ],          [            Number[              "2"            ]          ],          [            Number[              "3.4e-5"            ]          ],          [            [              Function[                Name[                  "sin"                ],                Arguments[                  [                    Variable[                      "z"                    ]                  ]                ]              ]            ]          ]        ]      ]    ]  ]]
Думаю: написать "ручками" парсер таких выражений было бы намного сложнее, а про изменение я вообще молчу. А здесь добавить, например, оператор возведения в степень - пара строчек.По-моему  - совсем не дурственно.


diadiavova, насколько я понял из этого всего - на входе задаём грамматику языка и выражение, а на выходе имеем дерево разбора?


Partizan, точно. Платформа предназначена для создания проблемно-ориентированных языков, а язык MGrammar - позволяет описывать их грамматику. Судя по всему сам M описывает собственно область на которую ориентирован этот язык. Как оно между собой взаимодействует - я пока не понял.


diadiavova, довольно интересная вещица...


Расскажите по-подробней плз, где такую штуку можно применять А то я что-то не могу пример придумать   


archeg, о какой штуке речь? О предметно-ориентированных языках, технологиях их создания или, конкретно, языках, описывающих грамматики?


archeg, о какой штуке речь? О предметно-ориентированных языках, технологиях их создания или, конкретно, языках, описывающих грамматики?
Вообще имел ввиду именно языки, которые описывают грамматику. Непонятно где было бы удобно его использовать)Под проблемно-ориентированым языком я понял язык который просто ориентирован на конкретно решаемую задачу. Как например язык матЛаба или Хтмл. Вообще каждый язык можно считать ориентированым под конкретную задачу 


Языки, описывающие грамматику, используются очень широко, как средство быстрой разработки компьютерных языков. Создание парсера "ручками" - задача достаточно трудоёмкая. Она включает в себя написание большого количества хоть и не особенно сложного, но при этом сильно запутанного кода. Написание изменение и отладка такого кода - жуткий геморрой. В то же время, структуру языка описать совсем не сложно, и мало того, код разбирающий текст в соответствии с определённой структурой - достаточно стандартен. Поэтому для создания программ, в которых реализуется разбор какого-нибудь языка, используются грамматики. По сути грамматика тоже язык программирования, только более высокого уровня чем то, к чему мы привыкли (декларативная модель).
Под проблемно-ориентированым языком я понял язык который просто ориентирован на конкретно решаемую задачу
Правильно понял, но там есть нюансы. Благодаря тому, что такие языки не пытаются охватить всё, они, обычно имеют простую структуру, кроме того, они , как правило, тоже декларативны, что позволяет описать конкретную задачу, а не способ её реализации. Это не обязательно полноценный язык. На самом деле с такими языками приходится иметь дело постоянно, даже когда запрос в гуголь вводишь, это уже язык, который разбирается и интерпретируется. Туда же можно отнести и язык регулярных выражений и ещё кучу всего.В SDK для Visual Studio есть инструменты для разработки таких языков, встраиваимых в последствии в студию. Там есть специальный язык для их описания  и в самой студии такие языки присутствуют(диаграмма классов, например),  они в основном построены на XML. 


Кстати в википедии(английской) по этому поводу хорошая статья с массой полезных ссылок по темеhttp://en.wikipedia.org/wiki/Domain-specific_language.


Кстати, вот статья в последнем выпуске MSDN Magazine: http://msdn.microsoft.com/ru-ru/magazine/dd419662.aspx. МС наконец-то сделал шаг от кодогенерации по модели до полноценных DSL 


PashaPash, ссылка битая


Partizan, толкьо что кликнул - живая. иди через гугл :(