Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 04.10.10 07:33
Оценка: 321 (9)
Здравствуйте, hardcase, Вы писали:

H>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.


Парсер пристыкован к компилятору в r9249.
С помощью SharpDevelop теперь возможно создавать Windows-формы на C# и компилировать их ncc.

Внимание: судя по тестам (csparser) на достаточно больших исходных текстах (SharpDevelop IDE, Janus, RServer, SharedSource CLR Implementation) в парсере нехаватет лишь поддержки директив препроцессора, в остальном он способен разбирать корректные исходные тексты на C#.

04.10.10 22:18: Ветка выделена из темы [PEG] Парсер C# 4.0
Автор: hardcase
Дата: 24.08.10
— VladD2
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Компиляция C# 4.0 рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.10 18:22
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Внимание: судя по тестам (csparser) на достаточно больших исходных текстах (SharpDevelop IDE, Janus, RServer, SharedSource CLR Implementation) в парсере нехаватет лишь поддержки директив препроцессора, в остальном он способен разбирать корректные исходные тексты на C#.


Давно пора реализовать обработку препроцессора. Там дел-то на пару часов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Компиляция C# 4.0 рамках проекта Nemerle
От: WolfHound  
Дата: 04.10.10 18:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Давно пора реализовать обработку препроцессора. Там дел-то на пару часов.

Просто там только если делать в два прохода.
Ибо код C# код препроцессора фактически два разных языка переплетающихся в одном файле.
Если же делать в один проход то нужно что-то изобретать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Компиляция C# 4.0 рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.10 19:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Давно пора реализовать обработку препроцессора. Там дел-то на пару часов.

WH>Просто там только если делать в два прохода.
WH>Ибо код C# код препроцессора фактически два разных языка переплетающихся в одном файле.
WH>Если же делать в один проход то нужно что-то изобретать.

Препроцессор настолько примитивен, что его даже руками можно реализовать.

В немерловом лексере он сделан в один проход. Но можно и в два. На это времени почти не уйдет.

ЗЫ

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

В теле #if-а можно было бы менять точку расширения в правиле парсинга пробелов в зависимости от значения выражения #if-а.
Если оно вычисляется в TRUE, в точку расширения запихивать правило которое пропускает все до следующего #endif или #else. Если выражение вычисляется в FALSE, то подставлять обычное правило пропуска пробелов.

При этом останется только корректно среагировать на #endif того #if-а кондишон которого вычислился в FALSE.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компиляция C# 4.0 рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.10 19:25
Оценка:
Это. Ты не хочешь в Скайпе появиться?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Компиляция C# 4.0 в рамках проекта Nemerle
От: AngeL B. Россия  
Дата: 05.10.10 17:31
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Парсер пристыкован к компилятору в r9249.


эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: IT Россия linq2db.com
Дата: 05.10.10 17:40
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?


Yep.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.10 17:56
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?


Да. Но второй язык поддерживается не на 100%.

Во-первых, пока что не поддерживается препроцессор. Но это скоро устраним.
Во-вторых, не все возможности C# 4.0 поддерживаются полностью.
В-третьих, это не совсем C#. Синтаксис поддерживается на 100%, а вот семантика — нет. Фактически — это автоматический конвертер из C# 4.0 в Nemerle, так что в тех случаях когда семантика (поведение) немерла отличается от шарповской, компилируемый код будет вести себя не так как C# 4.0, а как Nemerle. Простейший пример — работа с лямбдами. В отличии от шарпа в немреле есть функциональный тип, так что код вроде:
var f = x => x * x;
WriteLine(f(3));

Будет некорректен с точки зрения шарпа, но корректно с точки зрения немерла, так что оно пройдет компиляцию.

Кроме того будет работать вывод типов немерла.

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

Так что можно подключать к проекту немерла имеющиеся исходники на C# и развивать их уже на немреле.
Работают даже partial-классы. Так что можно иметь часть класса на Nemerle, а часть на C#.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 05.10.10 18:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Работают даже partial-классы. Так что можно иметь часть класса на Nemerle, а часть на C#.


Кстати тут и отличие. Ncc потребует указать для всех частей одинаковые модификаторы доступа.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.10 20:14
Оценка:
Здравствуйте, hardcase, Вы писали:

VD>>Работают даже partial-классы. Так что можно иметь часть класса на Nemerle, а часть на C#.


H>Кстати тут и отличие. Ncc потребует указать для всех частей одинаковые модификаторы доступа.


А шарп нет?

Ну, это уже мелочи, думаю... Таких отличий может быть много.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 06.10.10 19:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>С помощью SharpDevelop теперь возможно создавать Windows-формы на C# и компилировать их ncc.


Только что замечено: автокомплит SharpDevelop в *.cs файлах подсасывает информацию, полученную из *.n файлов.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.10.10 20:11
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Только что замечено: автокомплит SharpDevelop в *.cs файлах подсасывает информацию, полученную из *.n файлов.


Чё? Я не представляю как такое возможно.

К сожалению, в студии даже дизайнер форм не подцепляется. Говорит, что проект не той системы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 07.10.10 16:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, hardcase, Вы писали:


H>>Только что замечено: автокомплит SharpDevelop в *.cs файлах подсасывает информацию, полученную из *.n файлов.


VD>Чё? Я не представляю как такое возможно.


Видимо всему виной Class View. SD поддерживает его автоматически:

/* иЗвиНите зА неРовнЫй поЧерК */
Re: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 09.10.10 18:09
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, hardcase, Вы писали:


H>>Парсер C#4.0, генерирующий AST, вроде как принял законченную форму к r9078. Кому интересно, может посмотреть и ужаснуться.


Теперь посмотреть можно проще: добавил парсер C# в секцию "PowerPack" инсталлятора.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 10.10.10 11:23
Оценка: 40 (1)
Здравствуйте, hardcase, Вы писали:

Заставил компилировться XAML-разметку.
Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:

    <PropertyGroup>
        <MSBuildAllProjects>$(MSBuildAllProjects);$(Nemerle)\Nemerle.MSBuild.targets</MSBuildAllProjects>
        <DefaultLanguageSourceExtension>.cs</DefaultLanguageSourceExtension> <!-- .n -->
        <Language>C#</Language>  <!-- Nemerle -->
    </PropertyGroup>
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.10 13:33
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Теперь посмотреть можно проще: добавил парсер C# в секцию "PowerPack" инсталлятора.


Надо было толкнуть сборку инсталлятора.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.10 13:35
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Заставил компилировться XAML-разметку.

H>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:

H>
H>    <PropertyGroup>
H>        <MSBuildAllProjects>$(MSBuildAllProjects);$(Nemerle)\Nemerle.MSBuild.targets</MSBuildAllProjects>
H>        <DefaultLanguageSourceExtension>.cs</DefaultLanguageSourceExtension> <!-- .n -->
H>        <Language>C#</Language>  <!-- Nemerle -->
H>    </PropertyGroup>
H>


А как это дело будет в студии себя вести?

Хорошо бы создать проект демонстрирующий работу с WPF.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.10 13:36
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Заставил компилировться XAML-разметку.

H>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:

H>
H>    <PropertyGroup>
H>        <MSBuildAllProjects>$(MSBuildAllProjects);$(Nemerle)\Nemerle.MSBuild.targets</MSBuildAllProjects>
H>        <DefaultLanguageSourceExtension>.cs</DefaultLanguageSourceExtension> <!-- .n -->
H>        <Language>C#</Language>  <!-- Nemerle -->
H>    </PropertyGroup>
H>


Кстати, а это дело в других местах нам не повредит? Тому же дизайрену ВинФормсов?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 11.10.10 18:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, hardcase, Вы писали:


H>>Заставил компилировться XAML-разметку.

H>>Для этого пришлось сделать очень смешную вещь в Nemerle.MSBuild.targets:

H>>
H>>    <PropertyGroup>
H>>        <MSBuildAllProjects>$(MSBuildAllProjects);$(Nemerle)\Nemerle.MSBuild.targets</MSBuildAllProjects>
H>>        <DefaultLanguageSourceExtension>.cs</DefaultLanguageSourceExtension> <!-- .n -->
H>>        <Language>C#</Language>  <!-- Nemerle -->
H>>    </PropertyGroup>
H>>


VD>А как это дело будет в студии себя вести?


Ну, этот хак я сделал у себя локально, ради теста.
Я эти свойства используются для компиляции XAML файлов, возможно файлы моделей EntityFramework также их используют.
Студию не проверял, а SharpDevelop-ный дизайнер виндовсформс на эту настройку точно не смотрит (только на xxx.Designer.cs).

В студии визуальный дизайнер WPF не загружается — жалуется что Немерловая интеграция ему null где-то вертает, но XAML редактировать позволяет. В SharpDevelop визуального дизайнера нет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Jack128  
Дата: 17.10.10 13:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, AngeL B., Вы писали:


AB>>эээээ, то есть я правильно понимаю, что компилятор ncc теперь умеет компилировать сразу два языка в зависимости от расширения в рамках одного проекта?


VD>Да.


а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.