Re[12]: Некорректная обработка директивы #line
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 03:09
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я и не расчитывал, что хватит на все =) Я делаю прототип, главное сделать рабочие фичи и посмотреть как это будет в использовании. Потом уже можно пилить и оптимизировать все что угодно.


Потом у тебя будет два выхода из положения:
1. Выбросить прототип и написать все как следует.
2. Увязнуть в наспех слепленной архитектуре. (примерно, как это сейчас происходит с исходниками компилятора)

Так что на "пилить" лучше серьезно не рассчитывать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Некорректная обработка директивы #line
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 03:14
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Для получения списка окон EnumOriginalCodeBlocks (наша реализация) запрашивает у координатора буфер, связанный со сгенерированным кодом и парсит его регулярными выражениями.


Ужас!

ЗЫ

Для хинтов можно попытаться пользоваться их координатором. Может он даст корректное обратное отображение. Тогда вывести хинт не составит труда.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Некорректная обработка директивы #line
От: Ziaw Россия  
Дата: 28.04.10 03:27
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Я и не расчитывал, что хватит на все =) Я делаю прототип, главное сделать рабочие фичи и посмотреть как это будет в использовании. Потом уже можно пилить и оптимизировать все что угодно.


VD>Потом у тебя будет два выхода из положения:

VD>1. Выбросить прототип и написать все как следует.

Прототип движка миграции и генераторов моделей? Влад, там строк 50-100 кода завязано на драйвер. Сам драйвер был часа за 2-3 выдран из Януса и немного подрихтован. Это все можно выкинуть и переписать не напрягаясь, если что-то не устроит. Затрат будет точно не больше, чем я бы писал это с нуля, ибо сейчас у меня больше понимания по требованиям к этому драйверу. На данный момент он устраивает полностью.

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

VD>2. Увязнуть в наспех слепленной архитектуре. (примерно, как это сейчас происходит с исходниками компилятора)


=)
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>
Re[11]: Некорректная обработка директивы #line
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.10 03:55
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>>>Но для него нужен валидный nemerle синтаксис, чего хотелось бы избежать.


VD>>Можно пояснить эту мысль?


Z>
Z>[NRails.Macros.View]
Z>class MyPuperView
Z>{
Z>Код на моем DSL
Z>}
Z>


Z>Выделенное — синтаксический оверхед, особенно MyPuperView.


Как-то не ясно все же что было сказано в исходной цитате.

Что касается твоего гипотетического примера, то все зависит от того, что ты хочешь создать в итоге. Если речь идет о рекурсивных шаблонах а-ля стринг-темплэйт, то класс и методы как базовые элементы дизайна вполне удобны. Сам ДСЛ можно разместить на уровне тел методов.

Еще как варинат вообще не делать глобальных конструкций. Вместо этого можно поступить как в случае с $-строками — создаь макросы уровня выражений которые позволят сильно упростить трансформацию, а саму логику описывать в виде ординарного кода. Тогда вообще не придется менять конструкции верхнего уровня.

Ну, и конечно можно создать внешний ДСЛ. Только при этом главное не нарваться на ошибку допущенную в дизайне asp — когда шаблон превращается в монолитную простыню, а не является рекурсивной структурой. ХМЛ и ХТМЛ — это древесные структуры. А они идеально описываются рекурсией.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Некорректная обработка директивы #line
От: Ziaw Россия  
Дата: 28.04.10 06:01
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Выделенное — синтаксический оверхед, особенно MyPuperView.


VD>Как-то не ясно все же что было сказано в исходной цитате.


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

VD>Что касается твоего гипотетического примера, то все зависит от того, что ты хочешь создать в итоге. Если речь идет о рекурсивных шаблонах а-ля стринг-темплэйт, то класс и методы как базовые элементы дизайна вполне удобны. Сам ДСЛ можно разместить на уровне тел методов.


В итоге я хочу имплементить SparkViewEngine или очень похожий по синтаксису.

VD>Еще как варинат вообще не делать глобальных конструкций. Вместо этого можно поступить как в случае с $-строками — создаь макросы уровня выражений которые позволят сильно упростить трансформацию, а саму логику описывать в виде ординарного кода. Тогда вообще не придется менять конструкции верхнего уровня.


Это плохой путь, вьюха должна выглядеть максимально приближенной к конечному результату. Самый ортодоксальный вариант — haml, все что отличается сильнее него будет неудобно в использовании. Основой должен быть шаблон, код пишется только в случае необходимости. Все рюшечки вокруг самого шаблона — оверхед. Кстати, насколько сложно сделать интеграцию для студии того фукнционала, который реализован asp.net? Пусть в том же стиле, генерится класс с разметкой #line и подсовывается компилятору.

VD>Ну, и конечно можно создать внешний ДСЛ. Только при этом главное не нарваться на ошибку допущенную в дизайне asp — когда шаблон превращается в монолитную простыню, а не является рекурсивной структурой. ХМЛ и ХТМЛ — это древесные структуры. А они идеально описываются рекурсией.


Все что нужно для этого — реализовать функции внутри шаблона и импорт других, в спарке это есть, пусть немного коряво.
Re[8]: Некорректная обработка директивы #line
От: seregaa Ниоткуда http://blogtani.ru
Дата: 28.04.10 07:03
Оценка: 15 (1)
Здравствуйте, VladD2, Вы писали:

S>>Для получения списка окон EnumOriginalCodeBlocks (наша реализация) запрашивает у координатора буфер, связанный со сгенерированным кодом и парсит его регулярными выражениями.

VD>Ужас!
Реализация из питона для поиска окон использовала токенизатор, реализованный в компиляторе. Я по быстрому все это выкинул и на писал простейшее регулярное выржение — писать что то другое в тот момент не было смысла, т.к. еще не было известно, заработает ли поддержка ContainedLanguage вообще.

Предлагаешь использовать парсер Немерле? или обойтись стандартными string.Trim(), string.StartWith(), string.IndexOf() и т.д.?

VD>Для хинтов можно попытаться пользоваться их координатором. Может он даст корректное обратное отображение. Тогда вывести хинт не составит труда.


Для хинта нужны экранные координаты в пикселях, а координатор работает с текстовыми позициями. Да, перевести координаты второго буфера обратно в координаты первого можно, но вот c экранными координатами проблема.

Наша реализация хинтов для определения экранных координат использует view, переданный NemerleSource-у в метод GetDataTipText(IVsTextView view, TextSpan[] textSpan, out string hintText). В случае соурса, связанного со сгенерированным кодом, в качестве вью используется наша затычка, которая не умеет GetPointOfLineColumn(). Я решил проблему так: запрашиваю у студии вью, активное на данный момент и использую его для определения координат хинтов:

IVsTextView activeView = null;
IVsTextManager vsTextMgr = (IVsTextManager)languageService.GetService(typeof(SVsTextManager));
vsTextMgr.GetActiveView(1, null, out activeView);


результат:

Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.