Re[9]: Что лучше делать на Nemerle вместо C#
От: Аноним  
Дата: 24.05.11 10:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то там уже не совсем PEG получается. Там для разбора операторов еще TDOP (ака Pratt) должен быть прикручен. Чтобы можно было операторы декларировать удобнее (с приоритетами и левой рекурсией).


Вот что бывает, если packrat-а бояться. С packrat-ом левую рекурсию легче легкого было бы сделать, да еще и в общем виде.

Ну да ладно, посмотрю на досуге, как расширение к Peg прикрутить. Все равно должно быть достаточно просто.
Re[5]: Что лучше делать на Nemerle вместо C#
От: hi_octane Беларусь  
Дата: 24.05.11 10:34
Оценка:
VD>В итоге, в добавок еще и код парсера упростится и станет декларативным.

Посмотрел-покопал, вроде как реализуемо. Но это же всё потеряет смысл когда начнётся переход на Peg+Packratt, так? А переход всё не начинается потому что сходу его не наколбасить даже Wolfhound'у. Может тогда утвердить синтаксис нового парсера, и сделать медленный и простой, но с точками расширения и быстро. А когда придёт Wolfhound и принесёт быстрый парсер — просто заменить.
Re[12]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.05.11 11:52
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Мы собираем инфу от торговых площадок, перерабатываем её, считаем аналитику, индикаторы всякие, скармливаем решателям для подбора параметров торговых стратегий, и потом всё это раздаём назад. Так что если и притянуть космос за уши, то максимум через то что в случае косяка в релизе они там стоимость спутника за секунду просадят и даже не заметят что что-то пошло не так


Похоже, что тебе есть чего показать более сильное, нежели калькулятор. Я даже готов для этого заинсталировать Немерле
Re[8]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 14:12
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>
Z>macro @from(token : VToken)
Z>{
Z>  // parsing token ...
Z>}
Z>// using
Z>def x = from Lorem() ipsum + 42 dolor % 3 sit {"bla bla"} amet, consectetur adipisicing elit;

Z>def y = 1;
Z>


VToken — это какая-то фигня. Должен быть Token.

Z>Как лексер понимает где кончается токен?


Производится свертка по скобкам и ";". К сожалению это означает, что использовать круглые скобки для обрамения реализованного таким образом линка будет невозможно. Например, такое выражение не прокатит:
(from x in xs where x > 2 order by x desc, y asc select x)

в то время как так:
from x in xs where x > 2 order by x desc, y asc select x

или так:
{from x in xs where x > 2 order by x desc, y asc select x}

выйдет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 14:14
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>...Извини, что назвал его парсером, после пега о лексере не думаю вообще.


Короче, вот так может выглядеть макрос:
using Nemerle.Compiler;
using System.Diagnostics;

namespace Nemerle.Linq.Syntax
{
  public macro @from(query : Token)
    syntax ("from", query)
  {
    assert2(false);
    def queryText = query.ToString();
    Message.Hint($<#"$queryText"#>);
    <[ $(queryText : string) ]>
  }
}

а так его применение:
using System.Console;
using Nemerle.Linq.Syntax;

def text = from x in xs where x > 2 order by x desc, y asc select (x, y);
WriteLine(text);

Данная "реализация" тупо выводит текст и локешон. Вот только с локейшоном проблема. Он задается криво. Но я это сейчас поправлю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Что лучше делать на Nemerle вместо C#
От: hi_octane Беларусь  
Дата: 24.05.11 14:15
Оценка: +1
I>Похоже, что тебе есть чего показать более сильное, нежели калькулятор. Я даже готов для этого заинсталировать Немерле

В первой Матрице были такие хорошие слова "знать путь и идти по нему это совсем разные вещи". Вот поставь Nemerle, прочти статьи Влада, презентацию посмотри, выбери из всего что я писал то что тебе больше понравилось и начинай писать именно то, что тебе самому надо. Вот у нас первые макросы были вообще копипастой со стандартных
Автор: hi_octane
Дата: 01.11.10
, и живы до сих пор.

А как вопросы будут — спрашивай. Тут если вопрос по делу — подсказывают ещё лучше чем на хвалёных англоязычных форумах.
Re[15]: Что лучше делать на Nemerle вместо C#
От: IT Россия linq2db.com
Дата: 24.05.11 14:16
Оценка:
Здравствуйте, Ikemefula, Вы писали:

VD>>Ентерпроайз не ентерпрайз — без разрицы.

I>Есть разница и очень большая.

Какая?
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 14:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Вот что бывает, если packrat-а бояться. С packrat-ом левую рекурсию легче легкого было бы сделать, да еще и в общем виде.


Пакрата бояться в лес не ходить. Левую рекурсию он не поддерживает. И сам по себе он на практике не применим в следствии дичайших тормозов. Потому его и выбросили после первых тестов. Если ктому-то хочется поиграться в игрушки и сделать реализацию которая будет пригодна для неспешного использования в не критичных к скорости местах, то флаг ему в руки. Мы же херной не занимаемся. У нас четкий ценз для алгорита — он должен быть применим для построения парсеров реальных ЯП. И его должно быть можно использовать в IDE.

А> Ну да ладно, посмотрю на досуге, как расширение к Peg прикрутить. Все равно должно быть достаточно просто.


Pratt (TDOP) это очень не сложный алгоритм. Плюс он еще позволяет оперировать на более высоком уровне — использовать приоритеты операторов. Победа левой рекурсии — это всего лишь приятный побочный эффект. Вольфхаунд придумал как объединить алгоритмы рекурсивного спуска с откатами (используемого для разбора PEG) и Pratt. На словах все выглядит очень красиво. Осталось дождаться когда эта красота будет реализована. Вот только этот процесс явно затягивается .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 15:10
Оценка:
Здравствуйте, hi_octane, Вы писали:

VD>>В итоге, в добавок еще и код парсера упростится и станет декларативным.


_>Посмотрел-покопал, вроде как реализуемо. Но это же всё потеряет смысл когда начнётся переход на Peg+Packratt, так?


PEG+Pratt. Pratt — это TDOP (Top Down Operator Precedence). Да и не совсем PEG там получается. Вольфхаунд предлагает вместо приоритетного выбора использовать перебор всех вариантов и выбор правила которое смогло съесть максимум входной строки и не обломаться.

Но, таки — да. Реализация о которой я говорил пойдет в помойку.

_>А переход всё не начинается потому что сходу его не наколбасить даже Wolfhound'у. Может тогда утвердить синтаксис нового парсера, и сделать медленный и простой, но с точками расширения и быстро. А когда придёт Wolfhound и принесёт быстрый парсер — просто заменить.


Откровенно говоря не очень ясно зачем нужно писать лишний код. Уж лучше подождать вольфхаунда или точно убедиться, что он ничего не сделает и тогда уже взять все в свои руки.

У меня сейчас работа есть. Нужно пилить интеграцию с VS 2010. Хардкейс тоже занят. Он переводит Н1 на сменняемые беэкэнды.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 15:11
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Посмотрел-покопал, вроде как реализуемо. Но это же всё потеряет смысл когда начнётся переход на Peg+Packratt, так? А переход всё не начинается потому что сходу его не наколбасить даже Wolfhound'у. Может тогда утвердить синтаксис нового парсера, и сделать медленный и простой, но с точками расширения и быстро. А когда придёт Wolfhound и принесёт быстрый парсер — просто заменить.


А потом Н2 — это долгая история. Мы еще довольно долго не увидим конечный результат. Так что Н1 пока что имеет смысл развивать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.05.11 16:00
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>В первой Матрице были такие хорошие слова "знать путь и идти по нему это совсем разные вещи". Вот поставь Nemerle, прочти статьи Влада, презентацию посмотри, выбери из всего что я писал то что тебе больше понравилось и начинай писать именно то, что тебе самому надо.


Вот и в тебе заговорил ВладД2 Стать, презентации — это все пройденый этап. Я уже говорил, что против Немерле_без_макросов ничего против не имею.

Т.е. меня интересует именно легаси код Немерла взрослого проекта, а не компилятора/демки/куркулятора. Интересует с целью выяснить, во что превращается проект через год-два скажем.

Наверняка у тебя в проекте есть куча классов общего назначения, которые делают чтото полезное и правятся месяцами а то и годами, правильно ? Вот на них и интересно взглянуть. Желательно без макросов и что бы PM проявился по-взрослому.

Например проекты на С++ после смены состава команды часто скатываются в какую то вакханалию в коде. С питоном например такого не происходит. Мне важно знать, что будет с Немерле.
Re[16]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.05.11 16:08
Оценка:
Здравствуйте, IT, Вы писали:

VD>>>Ентерпроайз не ентерпрайз — без разрицы.

I>>Есть разница и очень большая.

IT>Какая?


В энтерпрайзе свобода выбора технических решений как правило сильно ограничена. Мне лично, например, нравится Mercurial, а не TFS. Но все наши проекты за малым исключением на TFS и я точно знаю что Меркуриала в обозримом будущем точно не будет.

Вне энтерпрайза свобода выбора технических решений шире, нет всякой бюрократии и потому часто люди могут себе позволить пользовать даже беты для продуктовых проектов.

По этой причине очень странно слышать "А ты слышал, что есть люди что живут вообще без продуктов от MS?" при чем от человека, который пользует офис, вижлу, винду, .Net и прочую дрянь от того же Микрософта.
Re[7]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.05.11 16:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>PEG+Pratt. Pratt — это TDOP (Top Down Operator Precedence). Да и не совсем PEG там получается. Вольфхаунд предлагает вместо приоритетного выбора использовать перебор всех вариантов и выбор правила которое смогло съесть максимум входной строки и не обломаться.


А нельзя ли вместо Pratt заюзать другое слово ? А то сильно созвучно с Prat
Re[9]: Что лучше делать на Nemerle вместо C#
От: Ziaw Россия  
Дата: 24.05.11 16:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Производится свертка по скобкам и ";". К сожалению это означает, что использовать круглые скобки для обрамения реализованного таким образом линка будет невозможно. Например, такое выражение не прокатит:

VD>
VD>(from x in xs where x > 2 order by x desc, y asc select x)
VD>


Потестил, как раз это нормально прокатывает.

VD>в то время как так:

VD>
VD>from x in xs where x > 2 order by x desc, y asc select x
VD>

VD>или так:
VD>
VD>{from x in xs where x > 2 order by x desc, y asc select x}
VD>

VD>выйдет.

И это тоже.

И даже это:
    def t = (from x in [1, 2, 3] 
            select 
            {
              def a = 42;
              x + a
            }).Split(' ');


Но вот тут фейл:
    def t = (from x in [1, 2, 3] 
            let b = {
              def a = 42;
              x + a
            } // токен кончается здесь
            select b).Split(' ');


В expression tree его перевести, видимо, не получится, но для IEnumerable оно выглядит вполне логично.
Re[17]: Что лучше делать на Nemerle вместо C#
От: Ziaw Россия  
Дата: 24.05.11 16:34
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>В энтерпрайзе свобода выбора технических решений как правило сильно ограничена. Мне лично, например, нравится Mercurial, а не TFS. Но все наши проекты за малым исключением на TFS и я точно знаю что Меркуриала в обозримом будущем точно не будет.


То, что все будет на TFS решил какой-то человек. Если подойти к нему и внятно объяснить преимущества mercurial и если эти преимущества действительно есть и если этот человек радеет за дело, а не за то, чтобы его поменьше тревожили, тогда все будет.

Если хоть одно условие не выполняется — меркуриала не будет. Только энтерпрайз тут ни при чем.
Re[8]: Что лучше делать на Nemerle вместо C#
От: WolfHound  
Дата: 24.05.11 16:51
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А нельзя ли вместо Pratt заюзать другое слово ? А то сильно созвучно с Prat

Нельзя. Ибо автора завут: Vaughan Pratt
http://en.wikipedia.org/wiki/Pratt_parser
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Что лучше делать на Nemerle вместо C#
От: Аноним  
Дата: 24.05.11 17:27
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Пакрата бояться в лес не ходить. Левую рекурсию он не поддерживает.


Чо, правда? http://www.cs.ucla.edu/~todd/research/pepm08.html

VD> И сам по себе он на практике не применим в следствии дичайших тормозов.


Откуда там тормоза? Память жрет, да, ну так на кой надо жрать больше чем на один top level declaration?

VD> Мы же херной не занимаемся. У нас четкий ценз для алгорита — он должен быть применим для построения парсеров реальных ЯП. И его должно быть можно использовать в IDE.


Ну и что не так с Packrat?
Re[12]: Что лучше делать на Nemerle вместо C#
От: WolfHound  
Дата: 24.05.11 17:58
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А> Чо, правда? http://www.cs.ucla.edu/~todd/research/pepm08.html

Это уже давно прочитано.
Только это уже не пакрат, а его расширение.
И толку от этой поддержки весьма не много.
Ибо чуть менее чем все случаи возникновения левой рекурсии это описание операторов. А им одной левой рекурсии маловато. Им еще ассоциативность с приоритетами подавай. А тут уже рулит Pratt со страшной силой.

А> Откуда там тормоза?

От того что запоминание требует вычислительных ресурсов и обращий к памяти, а это уже пошли промахи кеша и тому подобные радости.

А>Память жрет, да, ну так на кой надо жрать больше чем на один top level declaration?

Если запоминать не все, то это уже не пакрат.
Кстати в моем парсере есть запоминание последнего применения правила.
Но пакратом это его не делает. Ибо линейное время разбора не гарантирует.

А> Ну и что не так с Packrat?

Тормоза и дикий жор памяти.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Что лучше делать на Nemerle вместо C#
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.05.11 18:15
Оценка:
Здравствуйте, Ziaw, Вы писали:

I>>В энтерпрайзе свобода выбора технических решений как правило сильно ограничена. Мне лично, например, нравится Mercurial, а не TFS. Но все наши проекты за малым исключением на TFS и я точно знаю что Меркуриала в обозримом будущем точно не будет.


Z>То, что все будет на TFS решил какой-то человек. Если подойти к нему и внятно объяснить преимущества mercurial и если эти преимущества действительно есть и если этот человек радеет за дело, а не за то, чтобы его поменьше тревожили, тогда все будет.


Господи, ну и представление

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

А если если подразделения А, Б и Ц которые по разным причинам сопротивляются, то снова нужно убедить и их. А у них, например, взгляд будет отличный от твоего — ну, скажем, они будут ратовать за Git или за SVN.

В итоге будет тупо или холивар или волокита или просто отфутболят, если ты пойдешь напрямик к главному боссу. А может быть и похуже — против тебя тупо могут замутить интригу. Просто потому что переход на Mercurial уменьшает бюджет одной из команд.

Z>Если хоть одно условие не выполняется — меркуриала не будет. Только энтерпрайз тут ни при чем.


Ага-ага Такой наивняк что я даже не знаю что и сказать.

Ты пойми, большие корпорации медлительные не просто так, а в силу определенных причин, как раз потому, что "подойти поговорить" работает не так как тебе кажется.

Что бы влезать в такое дело, нужно провести рекогносцировку, выяснить диспозицию сил всех сторон, отработать технику на других решениях, дождаться хорошего момента, заработать хорошую репутаци, найти хорошего сторонника и только тогда действовать. И то в этом случае может оказаться, что главный босс не такой идеальный, как тебе казалось.
Re[8]: Что лучше делать на Nemerle вместо C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.11 18:17
Оценка:
Здравствуйте, Ikemefula, Вы писали:

VD>>PEG+Pratt. Pratt — это TDOP (Top Down Operator Precedence). Да и не совсем PEG там получается. Вольфхаунд предлагает вместо приоритетного выбора использовать перебор всех вариантов и выбор правила которое смогло съесть максимум входной строки и не обломаться.


I>А нельзя ли вместо Pratt заюзать другое слово ? А то сильно созвучно с Prat


Это имя автора алгоритма. Алгоритм называется Top Down Operator Precedence (TDOP).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.