Добавлю — лучше бы этот инструментарий (в широком смысле) упрощали.
На код, потребный для работы Configuration Manager по сравнению с простой сериализацией конфиг-класса глядишь с содроганием, вместо Logging Application Block используешь log4net или nlog, при изменение схемы БД редактирование DataSet (а еще если он от VS2005) — сплошной мат, особенно если без работающей БД. В объекты от EF POCO Generator — поля добавляются через пересоздание таблицы целиком, анекдот про "продуктами от MS можно пользоваться только после SP1" перестал быть анекдотом после выхода VS2010 — лучше бы вместо новых фич — старые допиливали.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Tom, Вы писали:
Tom>>1. Что значит Compiler As Service? Означает ли это что все елементы компилятора будет возможно реюзить.
AVK>Нет.
Tom>> Скажем просто парсер C# можно ли будет использовать?
AVK>В какой то мере.
Tom>>2. Собственно что это даёт
AVK>В основном возможность простого написания собственного не очень навороченного решарпера или сходного по потребным технологиям расширения студии.
Tom>> и в чём отличие от текущего компилятора который можно и сейчас прекрастно вызвать и получить сборку, которую затем можно прекрасно загрузить и выполнить нужный метод из нужного класса.
AVK>В том, что можно получить AST, причем которое еще и модифицировать удастся.
Tom>>В общем в чём праздник то?
AVK>Праздник в основном в managed языковых пакетах с богатыми и понятными внешними интерфейсами, что существенно упростит жизнь тем, кто разрабатывает поддержку собственных фреймворков и инструментов в рамкак студии.
Андрей, а почему бы вам не рассмотреть использование немерловского парсера в самом решарпере. Это бы вас избавило от головной боли самому поддерживать компилятор, с лёгкостью можно добавить парсер любого языка, такого как javascript, вы ведь сейчас именно над этим работаете в решарпере 6.
Здравствуйте, igor609, Вы писали:
I>Андрей, а почему бы вам не рассмотреть использование немерловского парсера в самом решарпере.
— Почему батарея не вела огонь.
— На это было несколько причин. Первая — не было патронов.
Бородатая хохма.
По поводу решарпера, Андрей вроде как в ДжетБрэйнсе на сегодня не работает. Так что вопрос не к нему.
Но ответ в общем-то известен. У этого парсера есть фатальный недостаток. А фатальный недостаток перечеркивает любые достоинства.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>По поводу решарпера, Андрей вроде как в ДжетБрэйнсе на сегодня не работает. Так что вопрос не к нему. VD>Но ответ в общем-то известен. У этого парсера есть фатальный недостаток. А фатальный недостаток перечеркивает любые достоинства.
Может чем обвинять других в необъективности сделал бы что полезное для потенциальных пользователей? Документация API, примеры использования не на Nemerle. У библиотеки действительно есть фатальный недостаток — я не знаю как её прикрутить к своему проекту.
Здравствуйте, igor609, Вы писали:
I>... а почему бы вам не рассмотреть использование немерловского парсера в самом решарпере. Это бы вас избавило от головной боли самому поддерживать компилятор, с лёгкостью можно добавить парсер любого языка, такого как javascript, вы ведь сейчас именно над этим работаете в решарпере 6.
Подозреваю, что Немерле больше добавит проблем чем решит их.
1. У разработчик Решарпера и Немерле очень разные цели. Разработчики Решарпера занимаются созданием коммерчески успешного проекта. Их интересуют такие некрутые вещи как совместимость со спецификацией C# и компилятором Microsoft, поставка продукта вовремя (одновременно с новым релизом студии) и прочее. Разработчики Немерле хотят создать суперЯП, коммерческая сторона вопроса их пока мало интересует.
2. Парсер Немерле совместим с C# 4.0 только синтаксически (и то не на 100%), семантика сильно отличается. Корректная программа на C# 4.0 будет отвергнута компилятором Немерле, или ресолвинг метода укажет на другой метод. Т.е. парсер Немерле для разбора C# использовать нельзя. Можно только использовать Немерле для написания собственного парсера C#. Опять у разработчиков Решарпера есть свой парсер C#, который отлажен и хорошо совместим с C#, зачем его менять? Наличие собственного парсера — это не головная боль, а преимущество дающее стабильность и предсказуемость.
3. Переход на Немерле приведет к тому что разработчики Решарпера станут зависеть от прихоти разработчиков Немерле. Нет никаких гарантий того что новые версии Немерле будут обеспечивать высокий уровень совместимости со старыми версиями или что однажды что-то поломается при добавлении новой суперфичи. Опять же, где взять столько программистов знающих Немерле?
Здравствуйте, Алексей., Вы писали:
А>2. Парсер Немерле совместим с C# 4.0 только синтаксически (и то не на 100%), семантика сильно отличается. Корректная программа на C# 4.0 будет отвергнута компилятором Немерле, или ресолвинг метода укажет на другой метод. Т.е. парсер Немерле для разбора C# использовать нельзя.
Вот только не надо путать людей. Парсер Немерле совместим исключительно с Немерле. Парсер C# — с известной версией C#.
То, что он используется для автоконвертирования C# программ в программы на Nemerle лишь одна из его потенциальных областей применения.
Здравствуйте, hardcase, Вы писали:
H>Вот только не надо путать людей. Парсер Немерле совместим исключительно с Немерле. Парсер C# — с известной версией C#. H>То, что он используется для автоконвертирования C# программ в программы на Nemerle лишь одна из его потенциальных областей применения.
Т.е. ты хочешь сказать что парсер C# на Nemerle полностью (ну или хотя бы на 99,9%) семантически совместим с компилятором C# от Microsoft?
Здравствуйте, Алексей., Вы писали:
А>Т.е. ты хочешь сказать что парсер C# на Nemerle полностью (ну или хотя бы на 99,9%) семантически совместим с компилятором C# от Microsoft?
Как я понял, это просто парсер, он резолвом не занимается, и его семантика не волнует.
Здравствуйте, Алексей., Вы писали:
А>Здравствуйте, hardcase, Вы писали:
H>>Вот только не надо путать людей. Парсер Немерле совместим исключительно с Немерле. Парсер C# — с известной версией C#. H>>То, что он используется для автоконвертирования C# программ в программы на Nemerle лишь одна из его потенциальных областей применения.
А>Т.е. ты хочешь сказать что парсер C# на Nemerle полностью (ну или хотя бы на 99,9%) семантически совместим с компилятором C# от Microsoft?
Я не могу понять как парсер можеть быть семантически совместим с компилятором.
Парсер есть программа распознающая текст, и на выходе у нее дерево синтаксического разбора.
Всетаки компилятор это чуточку более сложная программа, она делает чуть больше чем парсер — помимо синтаксического разбора выполняется семантический анализ и генерируется исполняемый код.
Здравствуйте, hardcase, Вы писали:
H>Я не могу понять как парсер можеть быть семантически совместим с компилятором. H>Парсер есть программа распознающая текст, и на выходе у нее дерево синтаксического разбора. H>Всетаки компилятор это чуточку более сложная программа, она делает чуть больше чем парсер — помимо синтаксического разбора выполняется семантический анализ и генерируется исполняемый код.
Тогда он точно не сможет заинтересовать разработчиков Решарпера. Подозреваю что синтаксический анализ — это от силы 1% от всех трудозатрат.
Здравствуйте, Алексей., Вы писали:
А>Тогда он точно не сможет заинтересовать разработчиков Решарпера. Подозреваю что синтаксический анализ — это от силы 1% от всех трудозатрат.
Здравствуйте, adontz, Вы писали:
A>Может чем обвинять других в необъективности сделал бы что полезное для потенциальных пользователей?
1. Я никого не обвиняю. Я высмеиваю недостатки .
2. Я только и делаю, что "полезное для потенциальных пользователей".
A> Документация API, примеры использования не на Nemerle.
Где-то Х лет назад я слышал подобные слова (чуть ли не от тебя же). По наивности я было даже подумал, что "лед тронулся" (с) и пошел конструктивный интерес, но быстро оказалось, что все это была попытка найти оправданию фатальному недостатку.
OK, попробуем еще раз. Описание PegGrammar в .doc-формате (того самого макроса который позволяет генерировать парсеры).
Пример — парсер C# 4.0. Грамматика из этого примера.
Пример, по проще — строчный калькулятор.
Пример по проще первого, но посложнее второго — парсер ДжаваСктипта.
Тоже не сложный пример — грамматика для XML-литералов. XML-литералы — это макра немерла позволяющая использовать в код на немерле литералы ХМЛ-я поддерживающие квазци-фитироание. Вот пример использования (точнее тесты) этого макроса.
A>У библиотеки действительно есть фатальный недостаток — я не знаю как её прикрутить к своему проекту.
Тоже не вопрос. Здесь находится код формы GUI-теста парсера C#. Собственно он совсем небольшой, так что можно привести его здесь с комментариями:
using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CSharpParser;
namespace CSharpParser.GUI
{
/// <summary>
/// Description of MainForm.
/// </summary>public partial class MainForm : Form
{
public this()
{
InitializeComponent();
}
mutable _parser : Parser;
private btn_parse_Click(_sender : object, _e : System.EventArgs) : void
{
_parser = CSharpParser.Parser(); // создаем парсерdef source = Nemerle.Peg.SourceSnapshot(txt_input.Text); // создаем обертку для кодаdef timer = Diagnostics.Stopwatch.StartNew();
def (pos, result) = _parser.TryParse(source); // парсим кодif(pos > 0) // если разбор прошел успешно...
{
btn_show_error.Visible = false;
def errors = result.GetPrseErrors(); // ...все равно берем список ошибок, так как могли встретиться не фатальные ошибки. Да, да наш парсер поддерживает востановление после обнаружения ошибок! :)
txt_output.Text = $"Parsing took $(timer.Elapsed) $(txt_input.Text.Length / timer.Elapsed.TotalSeconds / 1024)KB/S\nErrors: $(errors.Count)\n..$errors\n" + result.ToString(); // выводим сообщение об ошибках
}
else// произошел фатальный сбой. Парсер не смог продолжить назбор.
{
btn_show_error.Visible = true;
def (_, ids) = _parser.GetMaxRollbackPosAndIds(); // получаем место где это произошло
txt_output.Text = $"Parsing took $(timer.Elapsed) $(txt_input.Text.Length / timer.Elapsed.TotalSeconds / 1024)KB/S\r\nError in inpute.\r\nExpected:\n"
+ $<# ..$(ids; "\r\n "; id => _parser.GetRuleName(id))#>; // формируем сообщение об ошибке
}
}
private btn_show_error_Click (_sender : object, _e : System.EventArgs) : void
{
def (pos, _) = _parser.GetMaxRollbackPosAndIds(); //
txt_input.SelectionStart = pos;
txt_input.ScrollToCaret();
txt_input.SelectionLength = 1;
txt_input.Select();
}
}
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Алексей., Вы писали:
А>3. Переход на Немерле приведет к тому что разработчики Решарпера станут зависеть от прихоти разработчиков Немерле. Нет никаких гарантий того что новые версии Немерле будут обеспечивать высокий уровень совместимости со старыми версиями или что однажды что-то поломается при добавлении новой суперфичи.
У разработчиков Решарпера есть возможность не только поучаствовать в разработке Немерле, но и взять его под свою опеку и непосредственно влиять на все эти процессы.
А>Опять же, где взять столько программистов знающих Немерле?
Фигли его там знать. В JetBrains работают весьма толковые ребята и если что-то их и сдерживает от изучения Немерле, то это ни в коем случае не сложность языка.
А>Переход с C# на Немерле коммерчески невыгоден.
Доказательств и выкладок столь смелого утверждения, я так понимаю, можно не ждать?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
А>>Переход с C# на Немерле коммерчески невыгоден.
IT>Доказательств и выкладок столь смелого утверждения, я так понимаю, можно не ждать?
Доказательств нет и не будет — это же не теорема, всего лишь субъективное мнение. Достаточно оглянуться вокруг и попытаться найти хоть один коммерческий продукт написанный на Немерле. А ведь Немерле в виде прототипа существует уже несколько лет. Т.е. люди голосующие деньгами пока Немерле не выбирают. С публичными некоммерческими программами пока тоже не очень. Есть компилятор и библиотека Немерле. Может есть еще проекты о которых я не знаю.
Можно встречный вопрос? Почему BLToolkit, на мой взгляд весьма интересная библиотека, по-прежнему на C#, а не на Немерле? Спрашиваю не ради подкола, а в плане узнать обоснование неперевода на Немерле.
Здравствуйте, VladD2, Вы писали:
A>>У библиотеки действительно есть фатальный недостаток — я не знаю как её прикрутить к своему проекту. VD>Тоже не вопрос. Здесь находится код формы GUI-теста парсера C#. Собственно он совсем небольшой, так что можно привести его здесь с комментариями:
И я должен был искать в репозитории? Ну можно же это как-то так оформить, чтобы можно было найти.
Здравствуйте, Алексей., Вы писали:
А>>>Переход с C# на Немерле коммерчески невыгоден. IT>>Доказательств и выкладок столь смелого утверждения, я так понимаю, можно не ждать?
А>Доказательств нет и не будет — это же не теорема, всего лишь субъективное мнение.
Я так и думал.
А>Достаточно оглянуться вокруг и попытаться найти хоть один коммерческий продукт написанный на Немерле.
Это тоже как я понимаю всего лишь субъективное мнение? Или под критерий "хоть один коммерческий продукт" подпадают только те продукты, создатели которых не тусуются на RSDN?
А>А ведь Немерле в виде прототипа существует уже несколько лет. Т.е. люди голосующие деньгами пока Немерле не выбирают. С публичными некоммерческими программами пока тоже не очень. Есть компилятор и библиотека Немерле. Может есть еще проекты о которых я не знаю.
Есть, которые ты не знаешь.
А>Можно встречный вопрос? Почему BLToolkit, на мой взгляд весьма интересная библиотека, по-прежнему на C#, а не на Немерле? Спрашиваю не ради подкола, а в плане узнать обоснование неперевода на Немерле.
В этом нет смысла. Работы много, а получится тоже самое. Другое дело используя идеи и наработки Булкита написать новую библиотеку работы с данными. С обновлённой архитектурой, использованием макросов, без рудиментов и атавизмов. Это задача интересная и многообещающая. Например, можно с определённой долей уверенности сказать, что использование такой библиотеки будет порождать код, работающий с той же производительностью или быстрее рукописного, что, изспользуя сегодняшние средства, недостижимо.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
А>>Достаточно оглянуться вокруг и попытаться найти хоть один коммерческий продукт написанный на Немерле. IT>Это тоже как я понимаю всего лишь субъективное мнение? Или под критерий "хоть один коммерческий продукт" подпадают только те продукты, создатели которых не тусуются на RSDN?
А какие коммерческие продукты на Немерле создали у те, кто тусуется на РСДН? Я не подначиваю, просто ничего о них не слышал.
А>>Можно встречный вопрос? Почему BLToolkit, на мой взгляд весьма интересная библиотека, по-прежнему на C#, а не на Немерле? Спрашиваю не ради подкола, а в плане узнать обоснование неперевода на Немерле. IT>В этом нет смысла.
Здравствуйте, adontz, Вы писали:
А>>>Достаточно оглянуться вокруг и попытаться найти хоть один коммерческий продукт написанный на Немерле. IT>>Это тоже как я понимаю всего лишь субъективное мнение? Или под критерий "хоть один коммерческий продукт" подпадают только те продукты, создатели которых не тусуются на RSDN?
A>А какие коммерческие продукты на Немерле создали у те, кто тусуется на РСДН? Я не подначиваю, просто ничего о них не слышал.
Например, товарищ, который пилит рельсы, признался, что сам же их используе в своих коммерческих продуктах. Ещё несколько человек утверждали, что используют. Всех не помню. Где-то в форуме Немерле была ветка с несколькими такими признаниями
А>>>Можно встречный вопрос? Почему BLToolkit, на мой взгляд весьма интересная библиотека, по-прежнему на C#, а не на Немерле? Спрашиваю не ради подкола, а в плане узнать обоснование неперевода на Немерле. IT>>В этом нет смысла.
A>А вот теперь я подначиваю.
В чём подначка?
Если нам не помогут, то мы тоже никого не пощадим.