ASP.NET MVC 3 project and Razor
От: Ziaw Россия  
Дата: 14.04.12 19:05
Оценка: 152 (2)
В очередной раз попробовал создать и запустить проект для ASP.NET MVC 3. На этот раз получилось.

Поскольку разор не поддерживается, а aspx я не признаю, пришлось подключить nemerle к razor. Портировал код из F#, тоже более менее работает. Правда парсер совсем тупой, понимает только @(выражение) и @{блок кода}.

К сожалению, выработал весь лимит времени на хобби на ближайшее время, если у кого-то есть желание оформить это в темплейт проекта для студии (хотя бы с aspx или cshtml) — велкам. Я это все равно делать не умею. Разор для немерла явно не продакшен качества, выкладываю только как основу для того, кто захочет сделать нормальный. ИМХО, разумнее всего сейчас использовать cshtml для темплейтов, чтобы нормально вставить немерл в разор нужен рабочий Н2

Код тут: https://github.com/Ziaw/NemerleRazor
Re: ASP.NET MVC 3 project and Razor
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.04.12 18:09
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Разор для немерла явно не продакшен качества, выкладываю только как основу для того, кто захочет сделать нормальный. ИМХО, разумнее всего сейчас использовать cshtml для темплейтов, чтобы нормально вставить немерл в разор нужен рабочий Н2


Н2 нужен чтобы вообще не пользоваться разными разорами, а тупо реализовывать их на коленке за час.

Но все что нужно можно сделать и имеющимися средствами. Как я понимаю, основная проблема — это парсинг вложенных блоков кода. Это элементарно делается с помощью MainParser.ParseExpr(). Кроме того есть PegGrammar, если что.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ASP.NET MVC 3 project and Razor
От: Ziaw Россия  
Дата: 16.04.12 05:06
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Разор для немерла явно не продакшен качества, выкладываю только как основу для того, кто захочет сделать нормальный. ИМХО, разумнее всего сейчас использовать cshtml для темплейтов, чтобы нормально вставить немерл в разор нужен рабочий Н2


VD>Н2 нужен чтобы вообще не пользоваться разными разорами, а тупо реализовывать их на коленке за час.


Имхо, это уже перебор, даже для такого велосипедостроителя как я.

VD>Но все что нужно можно сделать и имеющимися средствами. Как я понимаю, основная проблема — это парсинг вложенных блоков кода.


Нет, основная проблема это, как обычно, поддержка студии. Писать на nhtml в немерле проекте конечно приятнее, чем на cshtml, но платить за это отсутствием подсветки и комплита слишком дорого.

VD>Это элементарно делается с помощью MainParser.ParseExpr().


К сожалению не элементарно Основной парсер однозначно пролетает, потому, что возможны взаимно-рекурсивные контексты:

<ul>
  @foreach (i in items)
  {
    <li>@i</li>
  }
</ul>


VD>Кроме того есть PegGrammar, если что.


К сожалению, я не могу придумать, как применить тут пег, кроме того, чтобы реализовать все с нуля (сейчас просто идет перехват парсера на @). И даже с нуля, грамматика настолько КЗ, что придется реализовать весь расширяемый синтаксис немерла (то есть почти N2). К примеру, после @foreach продолжается код, а после @i идет разметка.
Re: ASP.NET MVC 3 project and Razor
От: ionoy Эстония www.ammyui.com
Дата: 16.04.12 13:14
Оценка: +1
Здравствуйте, Ziaw, Вы писали:
Z>К сожалению, выработал весь лимит времени на хобби на ближайшее время, если у кого-то есть желание оформить это в темплейт проекта для студии (хотя бы с aspx или cshtml) — велкам. Я это все равно делать не умею. Разор для немерла явно не продакшен качества, выкладываю только как основу для того, кто захочет сделать нормальный. ИМХО, разумнее всего сейчас использовать cshtml для темплейтов, чтобы нормально вставить немерл в разор нужен рабочий Н2
Z>Код тут: https://github.com/Ziaw/NemerleRazor

А может и правда не нужен нам nhtml? Больших преимуществ от использования Nemerle в Razor я не вижу, зато есть недостатки:
1. Разор постоянно обновляется, значит нужен человек который будет периодически обновлять правила
2. Люди врядли будут писать исключительно на Немерле, даже если всё будет хорошо работать. Пускай шаблонизатор будет идентичным тому, с чем они и так сталкиваются каждый день — меньше путаницы.

Мне кажется проще форкнуть ориганальный Razor и использовать его в интеграции(если это вообще надо).
ASP.NET веб стэк теперь полностью оупен сорс, так что его вполне можно использовать. http://aspnetwebstack.codeplex.com/
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: ASP.NET MVC 3 project and Razor
От: Аноним  
Дата: 16.04.12 13:26
Оценка:
Здравствуйте, ionoy, Вы писали:

самый большой недостаток 1с это то что у него нет родных библиотек.... А так как по возможностям он сильно отличается от С#, то использование библиотек С# не дает никаких преимуществ немерли против C#
Re[3]: ASP.NET MVC 3 project and Razor
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.12 16:32
Оценка:
Здравствуйте, Ziaw, Вы писали:

VD>>Н2 нужен чтобы вообще не пользоваться разными разорами, а тупо реализовывать их на коленке за час.


Z>Имхо, это уже перебор, даже для такого велосипедостроителя как я.


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

В своей реализации можно много приятных вещей сделать.

Z>Нет, основная проблема это, как обычно, поддержка студии. Писать на nhtml в немерле проекте конечно приятнее, чем на cshtml, но платить за это отсутствием подсветки и комплита слишком дорого.


Это да. Хотя поддержка интеллисенса для 2010 студии стал намного проще. Так что можно и специализированное решение забабахать.

VD>>Это элементарно делается с помощью MainParser.ParseExpr().


Z>К сожалению не элементарно Основной парсер однозначно пролетает, потому, что возможны взаимно-рекурсивные контексты:


Z>
Z><ul>
Z>  @foreach (i in items)
Z>  {
Z>    <li>@i</li>
Z>  }
Z></ul>
Z>


Сдается мне, что подобные конструкции нужно нужно разбирать отдельно. Как я понимаю внутри фигурных скобок у нас должен быть ХТМЛ. Раз так, то имеет смысл разбирать "foreach (i in items)" вручную, а с помощью MainParser.ParseExpr() разбирать только "i" и "items". Чтобы выпарсить это дело нужно просто описать простую грамматику которая выжрет текст по скобкам.

То что при этом количество поддерживаемых конструкций будет ограничено — это даже хорошо. Не будет неконтролируемых эффектов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: ASP.NET MVC 3 project and Razor
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.12 17:55
Оценка:
Здравствуйте, Аноним, Вы писали:

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


Мил человек. Если ты со своим 1с не угомонишься придется тебя по IP банить.

1Эс тут офтоп в общем случае. Если речь идет о сравнении, то еще куда не шло. Но ты сейчас залез в тему посещенную веб-программированию. Причем тут вообще 1с?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: ASP.NET MVC 3 project and Razor
От: Ziaw Россия  
Дата: 16.04.12 20:06
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Нет, основная проблема это, как обычно, поддержка студии. Писать на nhtml в немерле проекте конечно приятнее, чем на cshtml, но платить за это отсутствием подсветки и комплита слишком дорого.


VD>Это да. Хотя поддержка интеллисенса для 2010 студии стал намного проще. Так что можно и специализированное решение забабахать.


Ну это тебе виднее, я зарекся соваться в студию.

Z>>
Z>><ul>
Z>>  @foreach (i in items)
Z>>  {
Z>>    <li>@i</li>
Z>>  }
Z>></ul>
Z>>


VD>Сдается мне, что подобные конструкции нужно нужно разбирать отдельно. Как я понимаю внутри фигурных скобок у нас должен быть ХТМЛ. Раз так, то имеет смысл разбирать "foreach (i in items)" вручную, а с помощью MainParser.ParseExpr() разбирать только "i" и "items". Чтобы выпарсить это дело нужно просто описать простую грамматику которая выжрет текст по скобкам.


Откуда я в парсере знаю, что foreach это ключевое слово и за ним ожидается продолжение из кода?

VD>То что при этом количество поддерживаемых конструкций будет ограничено — это даже хорошо. Не будет неконтролируемых эффектов.


Но потеряется весь смысл. В разоре код может начинаться в любом месте и переходить в разметку тоже почти в любом. Главное, чтобы логика была. Так что в немерле придется либо поддерживать все, либо отказаться от расширение синтаксиса и называть это "что-то напоминающее разор с поддержкой чего-то напоминающего немерле".
Re[5]: ASP.NET MVC 3 project and Razor
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.12 21:31
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Откуда я в парсере знаю, что foreach это ключевое слово и за ним ожидается продолжение из кода?


Надо просто заложиться на фиксированный набор конструкций через которые можно выйти в Немерл. А уже внутри выражений разбирать произвольные конструкции с учетом макросов.

VD>>То что при этом количество поддерживаемых конструкций будет ограничено — это даже хорошо. Не будет неконтролируемых эффектов.


Z>Но потеряется весь смысл. В разоре код может начинаться в любом месте и переходить в разметку тоже почти в любом. Главное, чтобы логика была. Так что в немерле придется либо поддерживать все, либо отказаться от расширение синтаксиса и называть это "что-то напоминающее разор с поддержкой чего-то напоминающего немерле".


Смысл теряет Разор когда превращается в море кода с островками ХТМЛ.

Разор — это генерилка статических вьюх. Там не должно быть много кода. Там должен быть только код рендеренга.

Лучше обратить внимание на рекурсивность (как шаблонов, так и вложенности ХТМЛ / код). Именно это позволит делать гибкий код рендеренга.

ЗЫ

В прочем, Разор текстовая генерилка. Им никого не удивишь. Все же реактивный фрэймворк был бы куда полезнее. Он реально мог бы стать кллер-аппом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: ASP.NET MVC 3 project and Razor
От: Ziaw Россия  
Дата: 17.04.12 00:06
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Откуда я в парсере знаю, что foreach это ключевое слово и за ним ожидается продолжение из кода?


VD>Надо просто заложиться на фиксированный набор конструкций через которые можно выйти в Немерл. А уже внутри выражений разбирать произвольные конструкции с учетом макросов.


@ — конструкция входа. Конец блока — конструкция выхода. Это единственные конструкции которые есть в разоре.

VD>Смысл теряет Разор когда превращается в море кода с островками ХТМЛ.


Это чушь. Смысл разора в том, чтобы смешать в одном файле код и хтмл. Чем меньше клея тем лучше.

VD>Разор — это генерилка статических вьюх. Там не должно быть много кода. Там должен быть только код рендеренга.


И? Код рендеринга надо писать свободно или только те конструкции, которые ты разрешишь?

VD>Лучше обратить внимание на рекурсивность (как шаблонов, так и вложенности ХТМЛ / код). Именно это позволит делать гибкий код рендеренга.


С этого места подробнее.

VD>В прочем, Разор текстовая генерилка. Им никого не удивишь. Все же реактивный фрэймворк был бы куда полезнее. Он реально мог бы стать кллер-аппом.


Слушай, хватит уже удивлять. Надо сделать продукт который нормально работает. А то получается, что винформсы работают через раз, xaml и asp.net mvc не работают вообще. С остальным тоже проблемы (скачущие версии сборок и требование одной версии у всей команды). Это я тебе не как критик, а как человек много думавший, как можно применить немерл и немного его применяющий.
Re: ASP.NET MVC 3 project and Razor
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 17.04.12 05:04
Оценка: 9 (1)
Здравствуйте, Ziaw, Вы писали:


Z>В очередной раз попробовал создать и запустить проект для ASP.NET MVC 3. На этот раз получилось.


Z>Поскольку разор не поддерживается, а aspx я не признаю, пришлось подключить nemerle к razor. Портировал код из F#, тоже более менее работает. Правда парсер совсем тупой, понимает только @(выражение) и @{блок кода}.


Z>К сожалению, выработал весь лимит времени на хобби на ближайшее время, если у кого-то есть желание оформить это в темплейт проекта для студии (хотя бы с aspx или cshtml) — велкам. Я это все равно делать не умею. Разор для немерла явно не продакшен качества, выкладываю только как основу для того, кто захочет сделать нормальный. ИМХО, разумнее всего сейчас использовать cshtml для темплейтов, чтобы нормально вставить немерл в разор нужен рабочий Н2


Z>Код тут: https://github.com/Ziaw/NemerleRazor


FYI на подходе Razor V2, Энедрю улучшил парсер http://vibrantcode.com/blog/2012/4/13/what-else-is-new-in-razor-v2.html
Re[2]: ASP.NET MVC 3 project and Razor
От: Ziaw Россия  
Дата: 17.04.12 06:02
Оценка:
Здравствуйте, achmed, Вы писали:

A>FYI на подходе Razor V2, Энедрю улучшил парсер http://vibrantcode.com/blog/2012/4/13/what-else-is-new-in-razor-v2.html


То есть полностью переделал. Еще один аргумент в пользу использования cshtml.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.