При этом в класс UseImpl будет копироваться код из ImplISome. public в ISome(public ImplISome) означает, что публичные методы ImplISome должны стать публичными методами UseImpl.
2. Разрешить модификатор readonly для лакальных переменных и параметров. Никаких зависимостей во вне. Просто контроль программиста на этапе компиялции. Чтобы можно было написать так:
void F(readonly int i)
{
readonly int s = i.ToStrint() + " xxx";
s += " yyy "; // Ошибка времени компиляции
i++; // Ошибка времени компиляции
}
3. Ввести расширенный препроцессор или нечто вроде мета-языка позволяющего генерировать код во время компиляции создавая тем самым новые языковые конструкции. Так же на базе этой фичи можно будет производить константные компйл-тайм вычисления (статические рассчеты). Причем в них можно будет использовать как информацию о типах полученую парсером, так и из внешинх источников (например, из БД).
4. Ввести поддержку дефолтных параметров.
Это не окончательный список, да и можно обсудить детали/необходимость предложенных мной фич.
... << RSDN@Home 1.1.2 beta 1 >>
22.12.03 13:00: Перенесено модератором из '.NET' — TK
22.12.03 13:00: Перенесено модератором из '.NET' — TK
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: А не залудить ли нам свой язык для дотнета?
Hello, "IT" > > Хачу развитие AOP > Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ведмедь, Вы писали:
В>>А овчинка будет стоит выделки?
VD>Ну, один из бонусов собственная выделка. Т.е. интересных процесс.
VD>Для меня лично это не дело всей жизни, а просто интересный эксперемент. Если загнется, ну и фиг с ним. А выживет, так вообще замечательно.
НИ разу не занимался написанием компиляторов. Интересно было бы попробовать или просто рядом постоять, за плечо позаглядывать
Да пребудет с тобой Великий Джа
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mikа, Вы писали:
VD>>Мне это будет реально полезно.
M>Влад, я думаю к тому моменту тебя будет беспокоить геморрой на заднице и ревматизм в ногах
А что такое "геморрой" _на_ заднице? Объясните плиз..
... << RSDN@Home 1.1.2 beta 1 >>
Re[4]: А не залудить ли нам свой язык для дотнета?
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными. VD>Для начала просто воспоизвести Шарп 2.0. А потом зняться наворотами.
Многовато работы — компилятор писать, разве что на весь сайт устроить PR-компанию.
Наверное, оптимально поступить так. Взять какой-то готовый код компилятора C# и начать его изучать. И народу об этом рассказывать, в виде статей, к примеру. Тогда, даже если проект заглохнет, будет очень ценный положительный результат.
Только вот найти бы такого человека-изучателя.
Ты, Влад, наверное, не захочешь, сам ведь на загруженность жаловался. Тут нужен какой-то доброволец. А вы его за это стимулируйте какими-нибудь невещественными факторами. Ну, там журнал ему бесплатно присылайте, или шапку какую-нибудь с логотипом, прославить посулите на всю страну и т.п. Конечно, SSCLI и Mono на болванку такому кадру тоже слить стоило бы.
У меня таких знакомых нету. Это уж вы там в RSDN в новостях устройте анонсы. Главное, лести не жалейте! Чтоб качественный target на это дело купился
Здравствуйте, beretta, Вы писали:
B>Я тут вспомнил один примерчик. Скажем у нас есть пользовательский интерфейс, логика предикатов хорошо подходит для решения головоломок. Вот и дать ему головоломку оптимального расположения контролов на форме, так что бы нужное было под рукой и нужного размера, а не нужное где-то в сторонке.
Вот у меня тут с 9 октября валяется следующий ремайндер:
Оптимальный интерфейс Ставится задача разработать универсальную методику разрабатывать интерфейс к объектной модели.
Предположим, мы умеем отличать "встроенные" объекты от внешних.
Таким образом, объект представляется набором свойств скалярного либо векторного типа (возможностью матричных индексаторов пренебрегаем).
Для каждого типа свойства у нас зарегистрирован соответствующий визуальный редактор, т.е. компонент.
Теперь возникает задача оптимально расположить эти редакторы в ограниченном пространстве. Пространство комбинаций
Идея в том, чтобы уложить набор редакторов в дерево. Узлами этого дерева являются визуальные контейнеры, а листьями — редакторы. Контейнеры могут быть следующими:
— набор закладок. Отнимает площадь под закладки (чем больше страниц — тем сильнее), но "укладывает" свое содержимое "один под другим"
— горизонтальный набор редакторов
— вертикальное деление на группы
— горизонтальное деление на колонки
Стоит рассмотреть возможность повторного размещения редактора свойства в этом дереве. Критерии оптимальности
Удобство интерфейса определяется количеством избыточной навигации. Для каждого варианта дерева можно посчитать попарное "расстояние" между любыми двумя свойствами, при этом учитываются
— нажатия Tab
— клики
— скроллинг
Пока неясно, как именно учитывать альтернативную навигацию — например, если брать минимум, то наличие комбинации клавиш, привязанной к редактору свойства, сделает дистанцию до него из любого места равной 1.
Если у нас есть статистика переходов между свойствами (матрица N*N), то ее можно использовать для "взвешивания" попарных расстояний и минимизировать функцию Opt = sum(Dist[i, j]*Freq[i, j]).
В отсутствие статистики переходов можно попытаться
а) оптимизировать дерево, исходя из равноправия переходов. Проблема: очевидно, появится множество вариантов с одинаковой стоимостью.
б) ввести категории свойств, и считать, что переходы чаще всего делаются внутри категории.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Andir, Вы писали:
A>Влад, а где ты это взял? В смысле грамматику джея для шарпа? A>Я вот тут смотрю какой-то файлик аля cs-parser.jay — это оно ?
У меня две версии. Один из Моно. Как раз тот что cs-parser.jay. Лругой переписанный мною вариант из крижки ссылку на которую я приводил.
Исползовать Моновскую не охота — так как она гнутая во всех отношениях (главное лицензионно). Да и кривовата. Хотя там прямо в дерево разбор есть.
Могу выложить свою версию (но она конечно далека от завершенности, все элементы есть, но в дерево разбирается пока чуть-чуть).
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Все дело в суппорте, документации, туториалах.
Собственно с сапортом у нас все в порядке (мы как ни как один из первых рунетных сайтов). Примеры тоже сделаем (было бы для чего).
Ну, и главное, что должна быть обратная совместимость с Шарпом. Тогда можно было бы просто махнуть компилятор в студии и пользоваться всеми багами...
PE>А вооще такие идеи были с языком С и С++. Ничего толкового не вышло — была кучку ветвей, которые наполовину живы и все.
Ну, С++ — это совственно и есть одно из удавшихся развитий С. МС++ является чистым развитием С++. Да и Шарп с Васиком от части тоже.
К тому же я не говорю о полностью новой системе. Просто еще один компилятор для дотонета. При таком подходе сложность его создания резко уменьшается. А совместимость с Шарпом позволит не отставать от жизни.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, sugarde, Вы писали:
S>Через 6-7 месяцев у меня вот диплом. В принципе интересуюсь всякими интересными авантюрами. C# может не стоит? Может кого-то из экзотов под .NET портировать? Prolog?
Не. Это без меня. Мне интересен язык на котором я смогу потом сам что-то сделать.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
VD>Для начала просто воспоизвести Шарп 2.0. А потом зняться наворотами.
А почему не Java platform за основу?
Т.е. компиляторы c поддержкрй templates и function pointers есть (http://pizzacompiler.sourceforge.net/)
Среды разаработки — есть и много.
Виртуальных машин — есть и много.
Написать свою компактную VM, легко встраиваимаю и расширяемую за счет C++ (динамически)...
Мой реальный эксперимент: JavaVM — 70-100k. Т.е. её можно просто цеплять к каждому application и забыть вообще про JRE и Framework.
Концептуально ни Java ни C# не являются языками на которых можно писать OC и другие серьезные вещи.
Т.е. в реальной проекте 50% кода требуется делать макс. эффективно. Остальные 50% — это бизнес логика и UI код не связанный с отрисовкой.
Нет идеального языка вообще. Есть языки максимально подходящие для доменов применения.
Использование например Java как языка и средства управления и контроля объектами (периметра) представляется очень удобным (GC, etc.).
Проблема связки Java и С++ (native рабочие модули) в настоящее время в статической природе JNI и его громоздкости.
Т.е. если бы возможно было бы переделать JNI с упором 50% на 50% и с нормальным интерфейсом с C++ — цены бы не было.
Это было бы нечто качественно и принципиально другое и полезное. А так...
Андрей.
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, mikа, Вы писали:
M>>Дык, а может тогда что-нить реально полезное создадите? Я бы спасибо сказал
VD>Мне это будет реально полезно.
Влад, я думаю к тому моменту тебя будет беспокоить геморрой на заднице и ревматизм в ногах
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Stoune, Вы писали:
S>>А мне хорошего аддина для рефакторинга хочется, а то Xtreme C# Refactory что-то не очень.
VD>Будет в Видби. И без аддинов.
Поскорее бы, а то был щасливым человеком пока не попользовался IntelliJ IDEA и несмотря на мою неприязнь к Java и IDE базированіх на ней пристрастился к таким штукам.
Маємо те що маємо. Л.Кравчук:E... << RSDN@Home 1.1.2 beta 1 >>
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ведмедь, Вы писали:
В>>НИ разу не занимался написанием компиляторов. Интересно было бы попробовать или просто рядом постоять, за плечо позаглядывать
VD>Ну, я тоже пока ни одного не сделал. Но теоритически вроде как разобрался.
Вопрос только в том, нужен ли "чистый компилятор" или же какие то надстройки над C# для возможности добавления различных фич в синтаксис C#
Да пребудет с тобой Великий Джа
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mihailik, Вы писали:
M>Многовато работы — компилятор писать, разве что на весь сайт устроить PR-компанию.
Да не так чтобы очень многь. Есть уже готовые вещи.
M>Наверное, оптимально поступить так. Взять какой-то готовый код компилятора C# и начать его изучать. И народу об этом рассказывать, в виде статей, к примеру. Тогда, даже если проект заглохнет, будет очень ценный положительный результат.
Да можно было бы вообще взять Моно и не париться. Но ведь он GNU-тый. А я не хочу проблем с лицензиями.
К тому, же чтобы проникнуться всеми тонкостями лучше делать именно свою реализацию. Иначе многое можно упустить.
M>Только вот найти бы такого человека-изучателя. M>Ты, Влад, наверное, не захочешь, сам ведь на загруженность жаловался.
Да я потихоничку копаюсь. Но времени чтобы это еще и описать у меня нет.
M> Тут нужен какой-то доброволец.
Тут нужна команда. Человек 5. И для начала нужно не делать, а обдумывать... выбирать... пробовать...
M> А вы его за это стимулируйте какими-нибудь невещественными факторами. Ну, там журнал ему бесплатно присылайте, или шапку какую-нибудь с логотипом, прославить посулите на всю страну и т.п.
Это конечно можно.
M>Конечно, SSCLI и Mono на болванку такому кадру тоже слить стоило бы.
Да они вроде в интее доступны. Если тольк с Инетом проблемы...
M>У меня таких знакомых нету. Это уж вы там в RSDN в новостях устройте анонсы. Главное, лести не жалейте! Чтоб качественный target на это дело купился
Мне кажется тут нужна все же команда, т.е. несколько увлеченных людей жаждущих извучать и творить. Можно попробовать создать "RSDN Research". И набрать в него членов.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: А не залудить ли нам свой язык для дотнета?
VD>Мне кажется тут нужна все же команда, т.е. несколько увлеченных людей жаждущих извучать и творить. Можно попробовать создать "RSDN Research". И набрать в него членов.
Я б в ресёч пошелЮ пусть меня запишут
На самом деле если будет время, то я с удовольствием
Да пребудет с тобой Великий Джа
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
AVK>>Так наличие дерева разбора не является прерогативой компилятора.
VD>Это 90% компилятора.
Из курса по построению компиляторов в институте я вынес что это примерно 15-20% Повторюсь — семантический анализатор это очень сложно.
VD>Имея полноценный разбор говорить о полумерах вроде препроцессора просто смешно.
Мне нет. Самопальный язык мне не нужен, а от интеллектуального кодогенератора я не отказался бы.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, VladD2, Вы писали:
AVK>>>Так наличие дерева разбора не является прерогативой компилятора.
VD>>Это 90% компилятора.
AVK>Из курса по построению компиляторов в институте я вынес что это примерно 15-20% Повторюсь — семантический анализатор это очень сложно.
Полность согласен. Хоть и практического опыта в построении компиляторов не имею.
Do not fake yourself ;)
ICQ#: 198114726
Re[8]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mihailik, Вы писали:
B>>Я тут вспомнил один примерчик. Скажем у нас есть пользовательский интерфейс, логика предикатов хорошо подходит для решения головоломок. Вот и дать ему головоломку оптимального расположения контролов на форме, так что бы нужное было под рукой и нужного размера, а не нужное где-то в сторонке.
M>Что-то сомнения гложут, что оно всё правильно уложит. Выйдет, наверное, что-то очень замечательное, но "нечеловеческое". OK слева, Apply сверху, кнопка Close (как одна из самых частых в использовании) — посредине и огромная.
О, это слишком глобально. Например, надо нарисовать диаграмму процессов, аккуратно расположить блоки и стрелочки, примечания. Выигрыш в том, что отпадает необходимость тыкаться мышкой и подгонять по пикселам. Просто кидаешь блок в какую-то часть диаграмы, а программа уже сама подбирает ей достойное место (в данной части рисунка) и при необходимости перегрупперует остальные элементы.
Re[9]: А не залудить ли нам свой язык для дотнета?
M>>Что-то сомнения гложут, что оно всё правильно уложит. Выйдет, наверное, что-то очень замечательное, но "нечеловеческое". OK слева, Apply сверху, кнопка Close (как одна из самых частых в использовании) — посредине и огромная.
B> О, это слишком глобально. Например, надо нарисовать диаграмму процессов, аккуратно расположить блоки и стрелочки, примечания.
А вот в такое применение очень верится. Правильно! Если программисты к людям по-доброму, то и люди в долгу не останутся.
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
VD>Для начала просто воспоизвести Шарп 2.0. А потом зняться наворотами.
VD>Лично меня интересуют следующие фичи: VD>1. Добавление реализации интерфейсов. Нечто вроде: VD>
VD>При этом в класс UseImpl будет копироваться код из ImplISome. public в ISome(public ImplISome) означает, что публичные методы ImplISome должны стать публичными методами UseImpl.
VD>2. Разрешить модификатор readonly для лакальных переменных и параметров. Никаких зависимостей во вне. Просто контроль программиста на этапе компиялции. Чтобы можно было написать так: VD>
VD>void F(readonly int i)
VD>{
VD> readonly int s = i.ToStrint() + " xxx";
VD> s += " yyy "; // Ошибка времени компиляции
VD> i++; // Ошибка времени компиляции
VD>}
VD>
VD>3. Ввести расширенный препроцессор или нечто вроде мета-языка позволяющего генерировать код во время компиляции создавая тем самым новые языковые конструкции. Так же на базе этой фичи можно будет производить константные компйл-тайм вычисления (статические рассчеты). Причем в них можно будет использовать как информацию о типах полученую парсером, так и из внешинх источников (например, из БД).
VD>4. Ввести поддержку дефолтных параметров.
VD>Это не окончательный список, да и можно обсудить детали/необходимость предложенных мной фич.
Ага, и еще возможность вызова protected overriden методов с любого уровня классовой иерархии через явную квалификацию, а не только из базового через base (у кого что болит )
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
VD>Для начала просто воспоизвести Шарп 2.0. А потом зняться наворотами.
VD>Лично меня интересуют следующие фичи: VD>1. Добавление реализации интерфейсов. Нечто вроде: VD>
VD>При этом в класс UseImpl будет копироваться код из ImplISome. public в ISome(public ImplISome) означает, что публичные методы ImplISome должны стать публичными методами UseImpl.
Вариант — сделать реализацию интерфейсов агрегатированием, как в Delphi.
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
B>>Как насчет заглянуть глубже?
VD>Вот с этого места по подробнее...
Пропуская размышления и общение, сопоставимые по объему роману "Война и мир" Толстого, перехожу к делу.
Тема в том, чтоб добавить к членам класса такой член как предикат. Обдумать его сопряжение с обычным императивным программированием и отработать вопросы работы его тела и работы с переменными.
Одна из простых аналогий это RegExp, но она работает только со строками, тут же открывается более широкая возможность.
Для пробы я делал некоторую простенькую реализацию, но получалось ОЧень медленно по скорости. Вот бы заделать на уровне языка, я б тогда с радостью позабывал половину констркций типа if, for, while, switch. Потом, там несколько упрощаются вопросы с исключениями и есть кое что по вопросу событий.
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
VD>Для начала просто воспоизвести Шарп 2.0. А потом зняться наворотами.
Все дело в суппорте, документации, туториалах.
А вооще такие идеи были с языком С и С++. Ничего толкового не вышло — была кучку ветвей, которые наполовину живы и все.
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, beretta, Вы писали:
B>Тема в том, чтоб добавить к членам класса такой член как предикат. Обдумать его сопряжение с обычным императивным программированием и отработать вопросы работы его тела и работы с переменными.
Т.е. функциональное программирование?
B>Одна из простых аналогий это RegExp, но она работает только со строками, тут же открывается более широкая возможность.
Ну, RegExp — это ДКА или на худой конец НКА. Их лучше в качестве библиотек реализовывать. Хотя во многих областях упрощение создания ДКА (вроде Lex-а) было бы очень полезно. Вот только у меня никаких идей по этому поводу, кроме компайл-тайм-мета-программирования.
B>Для пробы я делал некоторую простенькую реализацию, но получалось ОЧень медленно по скорости. Вот бы заделать на уровне языка, я б тогда с радостью позабывал половину констркций типа if, for, while, switch. Потом, там несколько упрощаются вопросы с исключениями и есть кое что по вопросу событий.
А ты не смотрел порты функциональных языков вроде SML на дотнет?
В любом случае эти идеи нужно описать более четко и дать видиние того как это совместить с ОО и процедурным подходами принятыми в Шарпе.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Plutonia Experiment, Вы писали:
PE>>Все дело в суппорте, документации, туториалах.
VD>Собственно с сапортом у нас все в порядке (мы как ни как один из первых рунетных сайтов). Примеры тоже сделаем (было бы для чего).
VD>Ну, и главное, что должна быть обратная совместимость с Шарпом. Тогда можно было бы просто махнуть компилятор в студии и пользоваться всеми багами...
PE>>А вооще такие идеи были с языком С и С++. Ничего толкового не вышло — была кучку ветвей, которые наполовину живы и все.
VD>Ну, С++ — это совственно и есть одно из удавшихся развитий С. МС++ является чистым развитием С++. Да и Шарп с Васиком от части тоже.
VD>К тому же я не говорю о полностью новой системе. Просто еще один компилятор для дотонета. При таком подходе сложность его создания резко уменьшается. А совместимость с Шарпом позволит не отставать от жизни.
А совместимость в данном контексе что значит?
Да пребудет с тобой Великий Джа
Re[3]: А не залудить ли нам свой язык для дотнета?
От:
Аноним
Дата:
09.12.03 17:18
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ведмедь, Вы писали:
В>>А овчинка будет стоит выделки?
VD>Ну, один из бонусов собственная выделка. Т.е. интересных процесс.
VD>Для меня лично это не дело всей жизни, а просто интересный эксперемент. Если загнется, ну и фиг с ним. А выживет, так вообще замечательно.
найти бы как редактор свой в студию вмонтировать, а там проще...
Здравствуйте, VladD2, Вы писали:
VD>2. Разрешить модификатор readonly для лакальных переменных и параметров. Никаких зависимостей во вне. Просто контроль программиста на этапе компиялции. Чтобы можно было написать так: VD>
VD>void F(readonly int i)
VD>{
VD> readonly int s = i.ToStrint() + " xxx";
VD> s += " yyy "; // Ошибка времени компиляции
VD> i++; // Ошибка времени компиляции
VD>}
VD>
это что там происходит в кузнице? — Паскаль доделываете?
нихрена себе.... const в формальных параметрах — вот диво открылось шарпу!
Re[3]: А не залудить ли нам свой язык для дотнета?
Через 6-7 месяцев у меня вот диплом. В принципе интересуюсь всякими интересными авантюрами. C# может не стоит? Может кого-то из экзотов под .NET портировать? Prolog?
В жизни кaждoгo челoвекa бывaют приятные мoменты, кoгдa oн чувствует себя пoлным идиoтoм. Приятнoсть этих мoментoв в пoстижении истины.
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Для меня лично это не дело всей жизни, а просто интересный эксперемент. Если загнется, ну и фиг с ним. А выживет, так вообще замечательно.
Дык, а может тогда что-нить реально полезное создадите? Я бы спасибо сказал
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>НИ разу не занимался написанием компиляторов. Интересно было бы попробовать или просто рядом постоять, за плечо позаглядывать
Ну, я тоже пока ни одного не сделал. Но теоритически вроде как разобрался.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
В>>А овчинка будет стоит выделки?
VD>Ну, один из бонусов собственная выделка. Т.е. интересных процесс.
VD>Для меня лично это не дело всей жизни, а просто интересный эксперемент. Если загнется, ну и фиг с ним. А выживет, так вообще замечательно.
Ты бы лучше объяснил нам, ламерам, как ты все это себе представляешь.. И на чем писать? На С++ или что по-круче?
... << RSDN@Home 1.1.2 beta 1 >>
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, VladD2, Вы писали:
ВВ>Ты бы лучше объяснил нам, ламерам, как ты все это себе представляешь.. И на чем писать? На С++ или что по-круче?
А почему бы не выбрать и сам C#? По скорости компиляции вряд ли это особо будет отставать(парсинг + преобразование в IL-code). Вот только интересно, а расширение с IDE будет? А то как-то не интересно из под Фара кодить.
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mikа, Вы писали:
M>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>Здравствуйте, VladD2, Вы писали:
ВВ>>Ты бы лучше объяснил нам, ламерам, как ты все это себе представляешь.. И на чем писать? На С++ или что по-круче?
M>А почему бы не выбрать и сам C#? По скорости компиляции вряд ли это особо будет отставать(парсинг + преобразование в IL-code). Вот только интересно, а расширение с IDE будет? А то как-то не интересно из под Фара кодить.
Есть же VSIH или как его там.. Ну в общем СДК для встраивания в студию. Причем бесплатный.
... << RSDN@Home 1.1.2 beta 1 >>
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mikа, Вы писали:
M>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>Есть же VSIH или как его там.. Ну в общем СДК для встраивания в студию. Причем бесплатный.
M>SDK и полноценный IDE — это разные вещи.
А чем VS .NET не полноценный ИДЕ?
... << RSDN@Home 1.1.2 beta 1 >>
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, beretta, Вы писали:
B>>Тема в том, чтоб добавить к членам класса такой член как предикат. Обдумать его сопряжение с обычным императивным программированием и отработать вопросы работы его тела и работы с переменными.
VD>Т.е. функциональное программирование?
Исчиление предикатов помоему логическое.
B>>Одна из простых аналогий это RegExp, но она работает только со строками, тут же открывается более широкая возможность.
VD>Ну, RegExp — это ДКА или на худой конец НКА. Их лучше в качестве библиотек реализовывать. Хотя во многих областях упрощение создания ДКА (вроде Lex-а) было бы очень полезно.
Бизнеслогика. Особенно такая, в которой вычисления зависят от множества условий. А тем паче, когда время разработки небольшое, типичный пример: постоянно меняются правила.
VD> Вот только у меня никаких идей по этому поводу, кроме компайл-тайм-мета-программирования.
B>>Для пробы я делал некоторую простенькую реализацию, но получалось ОЧень медленно по скорости. Вот бы заделать на уровне языка, я б тогда с радостью позабывал половину констркций типа if, for, while, switch. Потом, там несколько упрощаются вопросы с исключениями и есть кое что по вопросу событий.
VD>А ты не смотрел порты функциональных языков вроде SML на дотнет?
Я посмотрел F#, но честно сказать мало что понял, вроде и словами написано, а внутренне прочувствать не могу. Но как мне кажеться полномасштабного переноса и не требуеться, реализация исчисления предикатов даст уже многое, трудно представить даже насколько.
VD>В любом случае эти идеи нужно описать более четко и дать видиние того как это совместить с ОО и процедурным подходами принятыми в Шарпе.
Что касаемо идей.
Идея заключаеться в том, что до сих пор улучшения в языке касались группирования потока команд, сначала в процедуры, потом в классы, не затрагивая самого потока. Это дало многое и грех этим не воспользоваться. Исчисление предикатов позволит автоматизировать управление потоком команд. Это первый шаг в сторону декларативного программирования (ДП), ну развития языка c#
Есть один простой вопрос "Почему ДП-шники хвастаются тем, что на их языке так легко создаются и решаются разные головоломки?". Лично у меня есть простой ответ, потому что ДП позволяеть не думать о потоке команд, а сосредоточиться на самой задаче (правилах игры), высвобождая себе мозговой ресурс.
Лирическое отступление.
Имеет место жадное стремление к "чистому ДП". Я спрашиваю "Но ведь в результате у вас слабенькое развитие, худые библиотеки и страшные GUI, единицы последователей", а мне говорят "Сиди и наслаждайся своей исключительностью". Искать взаимопонимание уже не было сил. Кстати говоря, создать чистый ДП вроде как никому так и не удалось, еще и за счет того, что программы в этом случае неэффективны и медленны. Так что даже в продвинутых делают некоторые допущения. А еще и потому, что мало людей, и статистически мала вероятность новых открытий.
Вот и выход я вижу в том, чтоб не переносить все сразу на дотнет, а переносить осмысленно, потихоньку, смакуя каждую составляющую (типа как дженерики) Причем не рождать язык из деклараций, делая допущения, а из языка подниматься (снизу вверх) к ДП. "снизу вверх" — это и есть ключевая идея подхода.
Как я себе все представляю.
Насчет сопряжения пока есть пара вопросов, потому что не знаю как лучше это можно сделать в языке. Идеально было бы если predicate внешне выглядел бы как простой метод, может быть вида:
<modificators> bool MyPredicate( <parameters>)
Тогда возвращаемое значение означало найдено решение или нет, а параметры возвращали само решение. Само тело представляло матрицу вызовов, где по горизонтали были предикаты связанные отношением И, а по вретикали ИЛИ. Синтаксически это выглядело может так:
public predicate MyPredicate( string A, MyClass1 B, MyClass2 C)
{
{ predicate11(A, B, C), predicate12(A, B), predicate13(A, C)}
{ predicate21(A, C), predicate22(B)}
}
Что касаемо нижнего сопряжения, то тут думаю "создатель — бог" Т.е. можно просто сказать что в теле нельзя использовать обычные методы, а можно придумать "соглашение", чтоб заюзать нынешние наработки. Скажем если простой метод (пусть в коде выше это будет predicate12) выбросил исключение, то считается что первая строка решения не имеет, predicate13 уже не рассматривается и решение ищется во второй строке.
От простого метода в теле предиката нам тут главное по оговоренному признаку определить истина или ложь. Например, если использован метод типа bool MyMethod(), то для такого метода возвращаемое значение и будет признаком. А если метод void, то считается, что он всегда возвращает истину.
Вот вкраце об автоматическом управлении потоком, пока тут не затрагивались еще переменные.
... << RSDN@Home 1.1.0 stable, слушаю — звезды >>
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, beretta, Вы писали:
B>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>Есть же VSIH или как его там.. Ну в общем СДК для встраивания в студию. Причем бесплатный.
B>Оба на, последний раз когда я о нем сышал он стоил что то около 10K пиастров
Ты забыл вспомнить до конца — в ГОД!
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Ты бы лучше объяснил нам, ламерам, как ты все это себе представляешь.. И на чем писать? На С++ или что по-круче?
Конечно по-курче! Ладно. Ща создам новую ветку и набросаю свое видение.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, beretta, Вы писали:
VD>>Ну, RegExp — это ДКА или на худой конец НКА. Их лучше в качестве библиотек реализовывать. Хотя во многих областях упрощение создания ДКА (вроде Lex-а) было бы очень полезно.
Я тут вспомнил один примерчик. Скажем у нас есть пользовательский интерфейс, логика предикатов хорошо подходит для решения головоломок. Вот и дать ему головоломку оптимального расположения контролов на форме, так что бы нужное было под рукой и нужного размера, а не нужное где-то в сторонке.
... << RSDN@Home 1.1.0 stable, слушаю — звезды >>
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, mikа, Вы писали:
M>А почему бы не выбрать и сам C#? По скорости компиляции вряд ли это особо будет отставать(парсинг + преобразование в IL-code). Вот только интересно, а расширение с IDE будет? А то как-то не интересно из под Фара кодить.
А это будет просто csc.exe но с расширенными возможностями.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, c-smile, Вы писали:
CS>А почему не Java platform за основу?
Ну, не верю я в Яву.
В Шарпе уже есть 95% нужных возможностей. Так же есть МС++ для низкоуровневого доступа и System.Reflection.Emit для герерации кода.
CS>Среды разаработки — есть и много.
Я предпочитаю VS. Особенно Видби.
CS>Написать свою компактную VM,
У... Это уже не реальная программа действий. И главное не нужная.
CS>Мой реальный эксперимент: JavaVM — 70-100k. Т.е. её можно просто цеплять к каждому application и забыть вообще про JRE и Framework.
В Framework 90% — это библиотеки. Что толку с одного рантайма?
CS>Концептуально ни Java ни C# не являются языками на которых можно писать OC и другие серьезные вещи.
Ты это МС раскажи. Они как раз Лонгхорн на дотнете частично пишут.
CS>Т.е. в реальной проекте 50% кода требуется делать макс. эффективно. Остальные 50% — это бизнес логика и UI код не связанный с отрисовкой.
Эффективность Шарпа с дженириками максимум в 2 раза ниже чем лучшего С++-компилятора. Эффективность МС++ с шаблонами почти равна анменеджед-VC++. Зачем мне еще что-то?
CS>Нет идеального языка вообще. Есть языки максимально подходящие для доменов применения.
А я веду речь о языке максимально подходящем мне, для моих применений. Думаю, что подобные применения у 80% народа, что собрались на этом форуме.
CS>Проблема связки Java и С++ (native рабочие модули) в настоящее время в статической природе JNI и его громоздкости.
Ну, и зачем мне все эти проблемы? В дотнете их нет.
CS>Это было бы нечто качественно и принципиально другое и полезное. А так...
Приципиально другого ничего не получилось бы. Переделывать низкоуровневые вещи я нехочу. Это неразумно. Главное в дотнете — это мощьнейший оптимизатор и огромные библиотеки. Мне не нравится только язык. МС++ слишком громозкий и опасный, а Шарп не имее некотороых фич. К тому же некоторые фичи которые я хочу получить вообще отсутствуют в популярных языках.
Единственное, что может в данном аспекте прильщать в Яве — это переносимость кода. Но она то мне лично ненужна. А стало быть не нужна и Ява.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
Хачу развитие AOP
Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, VladD2, Вы писали:
VD>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
.... VD>Это не окончательный список, да и можно обсудить детали/необходимость предложенных мной фич.
А мне хорошего аддина для рефакторинга хочется, а то Xtreme C# Refactory что-то не очень.
Маємо те що маємо. Л.Кравчук:E... << RSDN@Home 1.1.2 beta 1 >>
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, IT, Вы писали:
IT>Хачу развитие AOP IT>Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
Я это называю "мета-языка позволяющего генерировать код во время компиляции создавая тем самым новые языковые конструкции". Короче п. 3.
Так, что присоеденяйтесь коллега.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: А не залудить ли нам свой язык для дотнета?
Hello, "IT" > > TK>XC# (не так давно вышла бета версии 2.0) http://www.resolvecorp.com/ > > Классная штука, надо будет на досуге поиграться. Они что-то там в факе говорили про доступность исходников, не знаешь где качнуть?
Я там нашел только:
Is XC# open source?
No, the source code for the compiler itself is not provided. However, the source of the compilation attributes (in XCSharp.Attributes.dll) is provided. Also, the source code for the Visual Studio integration is provided (XCSharp.AddIn.dll and XCSharp.VisualStudio.dll). Feel free to use this source code and redistribute it.
т.е. сам компилятор не доступен. открыта только часть внешних интерфейсов. наверное в инсталляторе все должно быть...
вот только смущает один пункт относительно v2.0
(4) Some commercial users have asked about support. Others have asked about
source code. XC# 2.0 will become a commercial product. It will be supported.
The professional version will be priced very competitively (around $200).
The enterprise version will contain the entire source code (around $1000).
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, VladD2, Вы писали:
VD>>В качестве прообраза взять Шарп и добавить в него те фичи что посчитаем нужными.
IT>Хачу развитие AOP IT>Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
VladD2 VD>2. Разрешить модификатор readonly для лакальных переменных и параметров. Никаких зависимостей во вне. Просто контроль программиста на этапе компиялции. Чтобы можно было написать так: VD>
VD>void F(readonly int i)
VD>{
VD> readonly int s = i.ToStrint() + " xxx";
VD> s += " yyy "; // Ошибка времени компиляции
VD> i++; // Ошибка времени компиляции
VD>}
VD>
Это интересная идея.
Хотелось бы уточнить один момент.
Скажем у меня есть class
class TAAA
{
int i;
int GetNext()
{
i++;
return i;
}
}
Вопрос будет ли гипотетически компилироваться такой код?
void F(readonly TAAA aaa)
{
aaa.i=0;
int i=aaa.GetNext();
}
"Практика — критерий истины" (c) Маркс
Re[2]: А не залудить ли нам свой язык для дотнета?
Потому как формальный параметр объявлен с мофикатором ридонли.
здесь
int i=aaa.GetNext();
потому как метод GetNext() объявлен без мофикикатора ридонли
Do not fake yourself ;)
ICQ#: 198114726
Re[5]: А не залудить ли нам свой язык для дотнета?
От:
Аноним
Дата:
10.12.03 07:48
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, <Аноним>, Вы писали:
А>>найти бы как редактор свой в студию вмонтировать, а там проще...
VD>Зачем? Там редактор чуть ли не лучший в мире.
имелась в виду подсветка своих дополнений, списки методов и проч.
Re[3]: А не залудить ли нам свой язык для дотнета?
D_S>потому как метод GetNext() объявлен без мофикикатора ридонли
Хорошо. Таким образом, так как в настоящей спецификации c# модификатор readonly нельзя применять к функциям, вроде как есть необходимость его реализовать. Только вот сделать это мне кажется нельзя, так как спецификация dotNet IMO не позволяет readonly-функции. Или я ошибаюсь? Хотя, конечно, можно попробовать сделать свой собственный атрибут, и, если повезёт, разработчики других языков программирования тоже его поддержат.
"Практика — критерий истины" (c) Маркс
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Yury_Malich, Вы писали:
Y_M>Хорошо. Таким образом, так как в настоящей спецификации c# модификатор readonly нельзя применять к функциям, вроде как есть необходимость его реализовать. Только вот сделать это мне кажется нельзя, так как спецификация dotNet IMO не позволяет readonly-функции. Или я ошибаюсь?
Дык а на фиг тогда свой язык, есди он будет следовать _только_ спецификации и все
Y_M>Хотя, конечно, можно попробовать сделать свой собственный атрибут, и, если повезёт, разработчики других языков программирования тоже его поддержат.
Насколко я понимаю, все ето ляжет только лишь на компайл-тайм. Хотя, конечно... вобщем тут думать надо
Do not fake yourself ;)
ICQ#: 198114726
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, Ведмедь, Вы писали:
В>>>НИ разу не занимался написанием компиляторов. Интересно было бы попробовать или просто рядом постоять, за плечо позаглядывать
VD>>Ну, я тоже пока ни одного не сделал. Но теоритически вроде как разобрался.
В>Вопрос только в том, нужен ли "чистый компилятор" или же какие то надстройки над C# для возможности добавления различных фич в синтаксис C#
Вот-вот! Здесь уже зерно есть. Может, что-то типа препроцессора, который на данный момент отсутствует. А внизу — обязательно шарп от MS. Пусть будет 2-я, 3-я версия, препроцессор мало изменится. А можно и постпроцессор! От!
Re[7]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, ForestLabs, Вы писали:
FL>Здравствуйте, Ведмедь, Вы писали:
В>>Здравствуйте, VladD2, Вы писали:
VD>>>Здравствуйте, Ведмедь, Вы писали:
В>>>>НИ разу не занимался написанием компиляторов. Интересно было бы попробовать или просто рядом постоять, за плечо позаглядывать
VD>>>Ну, я тоже пока ни одного не сделал. Но теоритически вроде как разобрался.
В>>Вопрос только в том, нужен ли "чистый компилятор" или же какие то надстройки над C# для возможности добавления различных фич в синтаксис C#
FL>Вот-вот! Здесь уже зерно есть. Может, что-то типа препроцессора, который на данный момент отсутствует. А внизу — обязательно шарп от MS. Пусть будет 2-я, 3-я версия, препроцессор мало изменится. А можно и постпроцессор! От!
Сам себя продолжу — в таком случае мона всегда отказаться от использования пре-процессора. Просто прогнали через него, получили чистый шарп-код и выбросили эту нашлепку нафиг. К примеру, закончилось или неудовлетворяет его сопровождение и развитие.
Таким вот образом.
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Dr_Sh0ck, Вы писали:
D_S>Здравствуйте, Yury_Malich, Вы писали:
D_S>Дык а на фиг тогда свой язык, есди он будет следовать _только_ спецификации и все
Ну так нам вроде надо корректную обеспесить работу в межязыковой среде DotNet или как? Уже существует один ReadOnlyAttribute(bool ), он применяется для свойств. Если его использовать, надо убедиться, что конфликтов не будет. Я попробовал такой код.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, mikа, Вы писали: M>>Дык, а может тогда что-нить реально полезное создадите? Я бы спасибо сказал :) VD>Мне это будет реально полезно. А спасибо мне рельно бесполезно. ;)
И каким путем пойдем? Cначала сделаем фичи и потом будем думать полезные они или нет.
Или сначала придумаем каких фич сейчас не хватает, и потом будем думать как их привинчивать.
А то уже взялись за редактор, IDE, а что делать не придумали.
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>Вопрос только в том, нужен ли "чистый компилятор" или же какие то надстройки над C# для возможности добавления различных фич в синтаксис C#
Мне кажется, что чистый компилятор даст больше возможностей. Все же наличие дерева разбора кода дает невиданную гибкость. Одной из идей было добавление возможностей метапрограммирования. Их будет не просто сделать без полноценного дерева разбора.
Да и интересно это. Причем не факт, что копаться в мсил-е (в случае надстройки над МС C#) будет в конечном счете проще, чем создать свой компилятор.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, ForestLabs, Вы писали:
FL>Вот-вот! Здесь уже зерно есть. Может, что-то типа препроцессора, который на данный момент отсутствует. А внизу — обязательно шарп от MS. Пусть будет 2-я, 3-я версия, препроцессор мало изменится. А можно и постпроцессор! От!
Препроцесор не даст тех возможностей, что нужны. К тому же усложнится отладка. Ну, а что такое постпроцессор, я даже не знаю. Менять готовую сборку, что ли?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Silver_s, Вы писали:
S_>И каким путем пойдем? Cначала сделаем фичи и потом будем думать полезные они или нет. S_> Или сначала придумаем каких фич сейчас не хватает, и потом будем думать как их привинчивать. S_> А то уже взялись за редактор, IDE, а что делать не придумали.
О том, что делать я уже сказал в теме. Про редактор и ИДЕ — это уже флуд. Народу просто потрепаться охота.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, c-smile, Вы писали:
CS>Влад, вы бы хоть сами прочитали эти статьи...
И не собираюсь. Так же как не собираюсь читать и другую пропаганду. Я имел попыт программирования и на Яве, и на С++, и на Шарпе. И могу адекаватно оценивать предлагаемую мне информацию.
Такие результаты можно получить только использую некорректные сравнения (разные алгоритмы, ошибки и т.п.).
Спешно. Что еще можно сказать? Верь в этот бред и дальше. Я не буду.
Я знаю пару-тройку узких мест в дотнете. Так же знаю цзкие места Явы. И если мне потребуется могу написать тесты унижающие как Яву, так и дотне. Но вот зачем это нужно?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
IT>>Хачу развитие AOP IT>>Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
В>Полность поддерживаю.
Если реализуем, то о чем я говорю АОР будет самым меньшим, что мы получим.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Stoune, Вы писали:
S>Поскорее бы, а то был щасливым человеком пока не попользовался IntelliJ IDEA и несмотря на мою неприязнь к Java и IDE базированіх на ней пристрастился к таким штукам.
Я как-то не часто свой код меняю, но тут столкнулся с изменением чужого кода и тоже оценил эту фичу. Особенно переименование. Это действительно удобнее чем реплэйс с регэкспами.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
TAAA — это ссылочный тип. readonly будет относиться к ссылке, а не к содержимому. Так сейчас сделано в Шарпе. Хотя это уже нужно обсуждать.
Если относить readonly к содержимому объекта, то первый код долже будет выдать ошибку, а второй нет, так как про кишки GetNext() никто не будет знать до реального вызова (она же мжет быть просто в другой сборке).
В принципе можно помечать методы специальным атрибутом и тогда можно будет делать более детальный контроль. Но такой контроль будет доступен только для классов созданных на том же компиляторе.
В общем, по началу будет конторолировать только ссылку. Это уже даст приемущества. А там видно будет.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Dr_Sh0ck, Вы писали:
D_S>Насколко я понимаю, все ето ляжет только лишь на компайл-тайм. Хотя, конечно... вобщем тут думать надо
Согласен. Причем нам пока не васе предпосылки ясны. Вот если воспроизвести хотя бы то что сделано в Шарпе, то многое станет отчетливо ясно и найдутся обходные пути.
Так что предлагаю до конца года подготовиться, а со следующего года приступить к реализации свого двойника Шарпа.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
VD>Мне кажется, что чистый компилятор даст больше возможностей. Все же наличие дерева разбора кода дает невиданную гибкость. Одной из идей было добавление возможностей метапрограммирования. Их будет не просто сделать без полноценного дерева разбора.
Так наличие дерева разбора не является прерогативой компилятора.
По сравнению с джеем
Плюсы
1) Заметно более внятный синтаксис метаязыка
2) Значительно больше вещей описывается декларативно. Например построение синтаксического дерева можно осуществить без написания вставок на целевом языке.
3) Результат генерации — классический синтаксический анализатор, осуществляющий разбор методом рекурсивного спуска. Отлаживать такой код довольно просто.
4) Есть готовый кодогенератор и рантайм для шарпа.
Минусы
1) Непонятная задержка при самом первом вызове лексера. С причинами не разбирался.
2) Какой то бардак в шарповском рантайме с case sensitive лексера. При case sensitive = false все равно почему то чувствителен к регистру.
3) Джавовский стиль кода. Т.е. camel notation методов, вместо свойства методы getProperty()/setProperty().
4) Непонятно насколько соответствует готовая грамматика для шарпа стандарту. Слова "Grammar file for cSharp language which supports most part of the cSharp language spec." настораживают. Если most значит не полностью, если не полностью то почему?
5) Рантайм почему то не вызывает никаких событий, хотя сами события наличествуют.
Вывод: вобщем то даже предпочтительнее джея, при условии доведения до ума рантайма и, возможно, кодогенератора.
Здравствуйте, Silver_s, Вы писали:
S_>Здравствуйте, VladD2, Вы писали:
VD>>Это не окончательный список, да и можно обсудить детали/необходимость предложенных мной фич.
S_>Тогда уж добавь и такую извращенскую фичу (мелочь а приятно):
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ведмедь, Вы писали:
IT>>>Хачу развитие AOP IT>>>Сейчас атрибуты можно читать только с помощью рефлекшин всякими интерсепторами. Хочу, чтобы с помощью атрибутов можно было встраивать в методы куски кода.
В>>Полность поддерживаю.
VD>Если реализуем, то о чем я говорю АОР будет самым меньшим, что мы получим.
У меня есть еще крамольная мысль.... Всем не угодишь, но возможно получится сделать что бы к компилятору можно было клепать плагины и указывать, какие плагины использовать для компилиции того или иного файла или проекта. В зависимости от подключаемыл плагинов компилятора моджет меняться синтаксис ( добавлять к сушествуешему новые синтаксические конструкции или еще чего ). ТО есть пишет где-нибудь вначале файла
#compile use "myplagin"
и потом пользуешь фичи, которые в myplagin сделаны
Что бы разработчки могли писать свои фичи И распросторонять их.. выжывут самые ценные
Но это все мечты, мечты
Да пребудет с тобой Великий Джа
Re[8]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, AndrewVK, Вы писали:
VD>>Мне кажется, что чистый компилятор даст больше возможностей. Все же наличие дерева разбора кода дает невиданную гибкость. Одной из идей было добавление возможностей метапрограммирования. Их будет не просто сделать без полноценного дерева разбора.
AVK>Так наличие дерева разбора не является прерогативой компилятора.
Это 90% компилятора. Имея полноценный разбор говорить о полумерах вроде препроцессора просто смешно.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>У меня есть еще крамольная мысль.... Всем не угодишь, но возможно получится сделать что бы к компилятору можно было клепать плагины и указывать, какие плагины использовать для компилиции того или иного файла или проекта.
О! Классная мысль. Именно так и нужно делать! А подключать фичи можно на базе обычных атрибутов.
В>В зависимости от подключаемыл плагинов компилятора моджет меняться синтаксис ( добавлять к сушествуешему новые синтаксические конструкции или еще чего ). ТО есть пишет где-нибудь вначале файла
В>#compile use "myplagin"
Не лучше так:
[module : DsdnCompilerUse(myplagin)]
В> и потом пользуешь фичи, которые в myplagin сделаны В>Что бы разработчки могли писать свои фичи И распросторонять их.. выжывут самые ценные
В>Но это все мечты, мечты
Мы раждены чтоб сказку сделать! Одназначко!
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>Да нет, тогда уж атрибутами
В>[PropertyAccessor("MyProperty")] В>int myVariable;
В>И что бы если нет свойства MyProperty оно автоматически при компиляции появлялось
Здравствуйте, Igor Trofimov, Вы писали:
ВВ>>Ё#
iT>Нда.. помните про кнутовский "TEX", где E полагается пониже писать? ) iT>Вот сделать также Ё#, и # — как показатель степени...
iT>Вообще много можно нафантазировать про этого неубитого (и даже никем ни разу не виденного) медведя... И как его назвать... И как его продавать...
Да меня вот все мучит возможность скорого вымирания этой буквы в русском языке. Надо же сохранить ее для грядущих поколений..
А потом, и звучит красиво..
... << RSDN@Home 1.1.2 beta 1 >>
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
VD>>Мне кажется тут нужна все же команда, т.е. несколько увлеченных людей жаждущих извучать и творить. Можно попробовать создать "RSDN Research". И набрать в него членов.
В>Я б в ресёч пошелЮ пусть меня запишут В>На самом деле если будет время, то я с удовольствием
Ладно пойду пробивать открытие инициативы RSDN Research!
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Ведмедь, Вы писали:
В>[PropertyAccessor("MyProperty")] В>int myVariable; В>И что бы если нет свойства MyProperty оно автоматически при компиляции появлялось
Мне кажется лучше плесать от свойства:
[Property("_myPropertyVarName", Accessor.GetSet)]
int MyVariable;
Тогда код будет формально совместим с Шарпом и будет поддерживаться студией.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>По сравнению с джеем AVK>Плюсы AVK>1) Заметно более внятный синтаксис метаязыка AVK>2) Значительно больше вещей описывается декларативно. Например построение синтаксического дерева можно осуществить без написания вставок на целевом языке. AVK>3) Результат генерации — классический синтаксический анализатор, осуществляющий разбор методом рекурсивного спуска. Отлаживать такой код довольно просто. AVK>4) Есть готовый кодогенератор и рантайм для шарпа.
Здорово. Но он ведь LL, т.е. леворекурсивный. Это не приведет к тому, что краматику придется описывать на птичьем языке?
И вообще, я как то с ходу не въехал как том у них и что.
Да и Яву надо было ставить. А влом же.
AVK>Минусы AVK>1) Непонятная задержка при самом первом вызове лексера. С причинами не разбирался.
Видимо парсер/лексер строют динамически. А это же конечные автоматы. Их считать надо. Хотя Jey гад все шустро делает.
AVK>2) Какой то бардак в шарповском рантайме с case sensitive лексера. При case sensitive = false все равно почему то чувствителен к регистру.
Ну, на это можно и плюнуть. К тмоу же если что поправим. Исходники то есть.
AVK>3) Джавовский стиль кода. Т.е. camel notation методов, вместо свойства методы getProperty()/setProperty().
Неприятно, но: а) можно пережить, б) можно отрефакторить.
AVK>4) Непонятно насколько соответствует готовая грамматика для шарпа стандарту.
Совсем несоответсвет. Я ее только 10 минут поглядел и нашел 5 не соответсвий. Но это вопрос решаемый (если с ним с самим разобраться).
AVK> Слова "Grammar file for cSharp language which supports most part of the cSharp language spec." настораживают. Если most значит не полностью, если не полностью то почему?
Халтура. Полноценный парсер сделать сложнее. Они сделали упрощенный вариант. Т.е. процентов 70% файлов он съест и ладно. Но простоту отладки и возможности парсера я бы поставил выше этого. К тому же из полностью готовых граматик есть только Моновская для Джея. А она: а) ГНУ-тая, и б) кривоватая (компилирует то на что МС ругается и кое чего нет).
AVK>5) Рантайм почему то не вызывает никаких событий, хотя сами события наличествуют.
Этого я вообще не понял.
Кстати, ты его запустил? У меня что-то с нахрапу не вышло.
AVK>Вывод: вобщем то даже предпочтительнее джея, при условии доведения до ума рантайма и, возможно, кодогенератора.
С Джеем самая большая проблема — это отладка. Она у LALR-парсеров в принципе тяжелая, а у джея еще и средств специальных нет.
К тому же у джея есть еще одна гадость которая для парсинга Шарпа очень неприятна.
Шарп имеет контекстные ключевые слова. Их не много, но это проблема. Первая же проблема возникает при парсинге глобальных атрибутов. Дело в том, что граматика файла в Шарпе выглядит так:
Т.е. Глобальные атрибуты отличаются от обычных только тем что в них обязательно есть attribute-target равный assembly или module. Но assembly и module не являются ключевыми словами! И LALR-парсер не может выделить глобальные атрибуты. Это приводит к дичайшим извратам. Так моновский парсвер вообще плюет на это и реализует не верную граматику. В Моно можно скомпилировать код в котором глобальный атрибут описан у метода или вообще где угодно.
Похожие проблемы (но уже не столь тяжелые) появляются с get/set в свойствах и add/remove в событиях.
Вот интересно этот самый ANTLR позволяет разруливать такие вещи? Ведь при методе рекурсивного спуска и возможности откатов такие вещи должны разруливаться.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здорово. Но он ведь LL, т.е. леворекурсивный.
Ты чего — рекурсия правая, разбор используется левый.
Иными словами идею LL(k) — грамматики можно объяснить так: если имеется уже разобранная часть цепочки, то на основании этого и еще нескольких неразобранных символов мы можем сделать вывод о том, какое правило неоюходимо применить. Таким образом грамматика посуществу не зависит (не считая k последующих символов) от того, что выводится из незаконченной части цепочки. В терминах деревьев этот процесс выглядит следующим образом: дерево вывода цепочки строится начиная с корня и детерминировано сверху вниз.
VD>Это не приведет к тому, что краматику придется описывать на птичьем языке?
Наоборот — файлы грамматик вполне внятны и выглядят как код на объектном языке, а не как куча жутких знаков в формате яка и почти не используются включения кода. Например язык типа SQL вобще описывается чистой грамматикой, при полном отсутствии в описании грамматик кода на шарпе, а на яке даже выделение многострочных комментариев без включения кода не обходится. Ну вобщем скачай грамматики и погляди — кусков кода и жутких псевдосимволов с номерами параметров там нет .
VD>И вообще, я как то с ходу не въехал как том у них и что.
Стандартное рекурсивное описание грамматик, похожее на то что используется в читабельной документации по языкам. Сам парсер представляет собой реализацию классического рекурсивного спуска.
VD>Да и Яву надо было ставить. А влом же.
Да чего там ее ставить — запустил инсталлер и нажал ОК. Рантайм поставить не сложно, если он у тебя уже не стоит . Набери java в консоли — что будет?
AVK>>Минусы AVK>>1) Непонятная задержка при самом первом вызове лексера. С причинами не разбирался.
VD>Видимо парсер/лексер строют динамически.
Нет. Все генерится кодогенератором. Судя по всему виноваты их движки для регексов — в статических свойствах по требованию создаются какие то битовые массивы, которые они используют для вычисления регексов.
VD> А это же конечные автоматы.
В LL грамматиках сам парсер не конечный автомат, а рекурсивный алгоритм. Т.е. в итоге конечно автомат, как и любая программа, но состояние хранится в стеке вызовов.
AVK>>2) Какой то бардак в шарповском рантайме с case sensitive лексера. При case sensitive = false все равно почему то чувствителен к регистру.
VD>Ну, на это можно и плюнуть. К тмоу же если что поправим. Исходники то есть.
Я нашел багу. Эти уродцы при создании хештаблицы с литералами HashCodeProvider нечувствительный указали, а Comparer нет. Править надо CSharpCodeGenerator.java, 1245 строка. Но тут уже нужен jdk чтобы потом скомпилять.
Вобще поглядел я на этот кодогенератор — по сравнению с тем что я приводил в своей статье детский сад. Класс 4500 строк размером и генерит код прямо прошитыми в код вызовами метода println.
AVK>>3) Джавовский стиль кода. Т.е. camel notation методов, вместо свойства методы getProperty()/setProperty().
VD>Неприятно, но: а) можно пережить, б) можно отрефакторить.
Да там похоже генератор не рефакторить, а переписыывать надо . Ну и рантайм рефакторить.
VD> К тому же из полностью готовых граматик есть только Моновская для Джея. А она: а) ГНУ-тая, и б) кривоватая (компилирует то на что МС ругается и кое чего нет).
У ANTLR лицензия без каких либо ограничений.
AVK>>5) Рантайм почему то не вызывает никаких событий, хотя сами события наличествуют.
VD>Этого я вообще не понял.
Ну вот например есть событие EnterRule или Error, только оно нигде не вызывается.
VD>Кстати, ты его запустил? У меня что-то с нахрапу не вышло.
Да вроде без проблем. Примеров там навалом, в том числе и на шарпе.
AVK>>Вывод: вобщем то даже предпочтительнее джея, при условии доведения до ума рантайма и, возможно, кодогенератора.
VD>С Джеем самая большая проблема — это отладка. Она у LALR-парсеров в принципе тяжелая, а у джея еще и средств специальных нет.
Вот с отладкой у рекурсивных парсеров все замечательно. Всегда понятно что разбираешь, поскольку нет никаких невразумительных состояний. Они вот только в отличие от яков умеют только древовидные структуры парсить, но в данном случае это вроде как не критично.
VD>Шарп имеет контекстные ключевые слова.
Ну в том парсере, что есть например get/set в свойстве выделяется в дерево как идентификатор.
Как это можно сделать еще надо вникать, сразу не скажу.
VD>Вот интересно этот самый ANTLR позволяет разруливать такие вещи? Ведь при методе рекурсивного спуска и возможности откатов такие вещи должны разруливаться.
Ну значит и разруливаются. Специальных фичек вроде не заметил, но код то свой втыкать можно, а возможности макроподстановок там довольно богатые. В одном из примеров разбирается выражение из цифр и знаков операций и при парсинге это выражение сразу и вычисляется. Т.е. в итоге получается парсер, который из "1+3*4" выдает на выходе float равный 13. Еще там есть концепция т.н. TreeWalker, которые производят трансформацию исходного дерева в целевое по определенным правилам.
Здравствуйте, AndrewVK, Вы писали:
AVK>Из курса по построению компиляторов в институте я вынес что это примерно 15-20% Повторюсь — семантический анализатор это очень сложно.
Это может и было бы сложно если бы почти все небыло бы сделано в Emit-е. А семантический анализ ты явно преувеличиваешь.
AVK>Мне нет. Самопальный язык мне не нужен, а от интеллектуального кодогенератора я не отказался бы.
Непонимаю чем хуже имень полноценный язык? Кодогенераторы — это полумера. Шаблоны в С++ так популярны потому, что они не являются кодогенераторами, а порождают код прикодный к отладке. На макросах такого не сделаешь.
Ладно. В любом случае пасер нужен. Так что кое что общее у нас есть.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, Igor Trofimov, Вы писали:
ВВ>>Ё#
iT>Нда.. помните про кнутовский "TEX", где E полагается пониже писать? ) iT>Вот сделать также Ё#, и # — как показатель степени...
О! Идея!
С-куб (С2). Вот только жаль писать степень неудобно.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: А не залудить ли нам свой язык для дотнета?
Здравствуйте, VladD2, Вы писали:
AVK>>Мне нет. Самопальный язык мне не нужен, а от интеллектуального кодогенератора я не отказался бы.
VD>Непонимаю чем хуже имень полноценный язык?
Я уже доводы привел. Для меня они очень важны и ты меня пока не убедил в обратном.
VD> Кодогенераторы — это полумера.
B>Я тут вспомнил один примерчик. Скажем у нас есть пользовательский интерфейс, логика предикатов хорошо подходит для решения головоломок. Вот и дать ему головоломку оптимального расположения контролов на форме, так что бы нужное было под рукой и нужного размера, а не нужное где-то в сторонке.
Что-то сомнения гложут, что оно всё правильно уложит. Выйдет, наверное, что-то очень замечательное, но "нечеловеческое". OK слева, Apply сверху, кнопка Close (как одна из самых частых в использовании) — посредине и огромная.
Здравствуйте, AndrewVK, Вы писали:
AVK>Иными словами идею LL(k) — грамматики можно объяснить так: если имеется уже разобранная часть цепочки, то на основании этого и еще нескольких неразобранных символов мы можем сделать вывод о том, какое правило неоюходимо применить. Таким образом грамматика посуществу не зависит (не считая k последующих символов) от того, что выводится из незаконченной части цепочки. В терминах деревьев этот процесс выглядит следующим образом: дерево вывода цепочки строится начиная с корня и детерминировано сверху вниз. AVK>[/q]
Это хорошо. В яке мнея больше всего ломает именно то, что все как в функциональном языке... все задом на перед, как то...
AVK>а на яке даже выделение многострочных комментариев без включения кода не обходится.
Коментарии еще лексер удаляет. Так что таких проблем у яка нет.
AVK> Ну вобщем скачай грамматики и погляди — кусков кода и жутких псевдосимволов с номерами параметров там нет .
Давно скачал. И посмотрел. Что-то мне их граматика еще меньше чем яковская понятна. Возможно с непривычки. Но доки у них фиговые. Я прочел про граматику и мало чего понял. Только общие идеи.
Ты кстати там не нашел толкового туториала или еще чего что можно почитать?
AVK>Стандартное рекурсивное описание грамматик, похожее на то что используется в читабельной документации по языкам. Сам парсер представляет собой реализацию классического рекурсивного спуска.
Не очень то оно у них стандартное. Как раз спецификация Шарпа описана практичкски в терминах яка. Только нет "|" и "-" (которые в яке недопустимы).
AVK>Да чего там ее ставить — запустил инсталлер и нажал ОК. Рантайм поставить не сложно, если он у тебя уже не стоит .
Там 1.1 нужен, а у меня его нет. Надо лезть на Сан...
AVK>Набери java в консоли — что будет?
Y:\RSDN\2003-6\Collections>java
'java' is not recognized as an internal or external command,
operable program or batch file.
AVK>Нет. Все генерится кодогенератором. Судя по всему виноваты их движки для регексов — в статических свойствах по требованию создаются какие то битовые массивы, которые они используют для вычисления регексов.
Блин. Это и есть конечные автоматы.
AVK>В LL грамматиках сам парсер не конечный автомат, а рекурсивный алгоритм. Т.е. в итоге конечно автомат, как и любая программа, но состояние хранится в стеке вызовов.
Лексер — это 100% НКА/ДКА.
Да и без разницы стек не стек. Главное, что нужно строить таблицы переходов.
У мнея лексер вручную написан. Так что тормозить там нечему. Им случаем нельзя его скормить?
И я не понял, тормоза эти при парсинге или в момент генерации кода парсера?
Если при парсинге, то это фигово. Скорость важная вещь.
Джэй работает молниеносно.
AVK>Вобще поглядел я на этот кодогенератор — по сравнению с тем что я приводил в своей статье детский сад. Класс 4500 строк размером и генерит код прямо прошитыми в код вызовами метода println.
Да какая разница какой там кодогенератор? Главное насколько эффективный код он создает...
AVK>Да там похоже генератор не рефакторить, а переписыывать надо . Ну и рантайм рефакторить.
Только еще переписывать нехватает. Может тогда уж на яке? Или пусть так пашет. А рантайм отрефакторим. В Видби это пару часов займет.
AVK>У ANTLR лицензия без каких либо ограничений.
Это большой плюс. Но у джея тоже. Тут вопрос уже в граматике и готовом коде парсера. На них там нет случаем отдельных ограничений?
AVK>Ну вот например есть событие EnterRule или Error, только оно нигде не вызывается.
Козлы! Вещь однозначно нужная. Хотя наверно это можно и инлайном сделать, прямо в правиле.
AVK>Вот с отладкой у рекурсивных парсеров все замечательно. Всегда понятно что разбираешь, поскольку нет никаких невразумительных состояний. Они вот только в отличие от яков умеют только древовидные структуры парсить, но в данном случае это вроде как не критично.
Скорее всего не критично. Хотя у меня к LL-схеме почему-то сразу негативное отношение сложилось. Видимо потому, что для в книжках когда про LL-анализ пишут, все время говорят о проблемах и череззадовом синтаксисе.
AVK>Ну в том парсере, что есть например get/set в свойстве выделяется в дерево как идентификатор.
AVK>
Мля. Эдак каждый дурак умеет. Даже в Моно и то умнее сделали. Они при входе в тело свойства переключают режим лексера и тот начинает выдавать на get/set соотвествующие ключевые слова.
А вот с атрибутами задница. В Моно так просто на них забили. А я выверннулся, но грязно. Джэй выдает конфликт свертка/свертка. Однако парсит правильно. В общем, незнаю. Но вроде это последняя проблема.
AVK>Как это можно сделать еще надо вникать, сразу не скажу.
А дерево он какое строит? Этим процессом можно управлять?
VD>>Вот интересно этот самый ANTLR позволяет разруливать такие вещи? Ведь при методе рекурсивного спуска и возможности откатов такие вещи должны разруливаться.
AVK>Ну значит и разруливаются. Специальных фичек вроде не заметил, но код то свой втыкать можно, а возможности макроподстановок там довольно богатые.
Главный вопрос в чем. У нас есть некая конструкция:
[assembly : assembly(assembly ? assembly : assembly)]
и например:
[return : assembly(assembly ? assembly : assembly)]
Так вот парсер должен определить, что в одном месте (в начале первого тэга) assembly — это токен TokAssembly, а в другом, что это идертификатор. Ну, и первую секцию атрибутов он должен определить как глобальную-секцию-атрибутов, а вторую как просто секцию-атрибутов.
А иначе правильность граматики ридется разруливать семантически. Что криво и гемаройно.
AVK>В одном из примеров разбирается выражение из цифр и знаков операций и при парсинге это выражение сразу и вычисляется. Т.е. в итоге получается парсер, который из "1+3*4" выдает на выходе float равный 13.
Гы. Это стандартный пример яка. Его во всех учебниках суют. Это не то что на джее, это даже на самом первом яке можно было сделать.
AVK> Еще там есть концепция т.н. TreeWalker, которые производят трансформацию исходного дерева в целевое по определенным правилам.
Это очнь полезно.
В общем, нужно определяться.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
AVK>>а на яке даже выделение многострочных комментариев без включения кода не обходится.
VD>Коментарии еще лексер удаляет. Так что таких проблем у яка нет.
Ну так про лексер и речь. Ах да, ты ж свой написал. ANTLR прекрасно генерит лексер, справляющийся с комментариями без написания кода. Впрочем лексер можно и свой написать.
AVK>> Ну вобщем скачай грамматики и погляди — кусков кода и жутких псевдосимволов с номерами параметров там нет .
VD>Давно скачал. И посмотрел. Что-то мне их граматика еще меньше чем яковская понятна. Возможно с непривычки.
Да нормально вроде. Что конкретно тебя смущает?
VD> Но доки у них фиговые. Я прочел про граматику и мало чего понял. Только общие идеи.
Да нормальные вроде доки,я по крайней мере проблем особых не испытывал. Возможно потому что мне такие грамматики и рекурсивный спуск намного лучше знакомы.
VD>Ты кстати там не нашел толкового туториала или еще чего что можно почитать?
Да там же ссылка есть на jGuru, на фак. В факе море доки. В том числе есть там и раздел типа "я чайник" и в первом вопросе подробнейшим образом рассматриваются азы. Погляди.
VD>Не очень то оно у них стандартное.
Например? (Символы # и ^ можешь просто пока опускать, это управление построением дерева)
VD> Как раз спецификация Шарпа описана практичкски в терминах яка. Только нет "|" и "-" (которые в яке недопустимы).
Не знаю, мне почему то грамматики antlr показались более читабельными. Возможно дело привычки. В общем то синтаксис описания грамматики у них в общих чертах очень похож. Главное различие в способе парсинга.
AVK>>Да чего там ее ставить — запустил инсталлер и нажал ОК. Рантайм поставить не сложно, если он у тебя уже не стоит .
VD>Там 1.1 нужен, а у меня его нет. Надо лезть на Сан...
А ты не в курсе того что JVM обратно совместимы?
AVK>>Набери java в консоли — что будет?
VD>
VD>Y:\RSDN\2003-6\Collections>java
VD>'java' is not recognized as an internal or external command,
VD>operable program or batch file.
VD>
VD>
Ну тады качай JRE, это мегов 10.
AVK>>В LL грамматиках сам парсер не конечный автомат, а рекурсивный алгоритм. Т.е. в итоге конечно автомат, как и любая программа, но состояние хранится в стеке вызовов.
VD>Лексер — это 100% НКА/ДКА.
Влад, ты погляди для начала что он генерит, а потом будешь про 100% говорить. Любая программа это 100% конечный автомат, но явно в методе рекурсивного спуска КА не фигурирует. Приведу тебе пример парсера простейщего арифметического выражения. Это грамматика (лексер и опции кодогенератора опущены)
expr
: mexpr (PLUS^ mexpr)* SEMI!
;
mexpr
: atom (STAR^ atom)*
;
atom: INT
;
А это код, который собственно реализует разбор (match выполняет сравнение и сдергивает из потока следующую лексему если совпало).
Где здесь КА?
VD>Да и без разницы стек не стек. Главное, что нужно строить таблицы переходов.
Переходов чего? Состояний? Нет, не нужно.
VD>У мнея лексер вручную написан. Так что тормозить там нечему. Им случаем нельзя его скормить?
Можно, достаточно реализовать этот интерфейс:
public interface TokenStream
{
Token nextToken();
}
Как видишь никаких проблем.
VD>И я не понял, тормоза эти при парсинге или в момент генерации кода парсера?
При парсинге, при первом вызове. Последующие вызовы работают быстро, т.е. это работа статических инициализаторов. Возможно в этом виноват TSQL, у него много ключевых слов.
VD>Джэй работает молниеносно.
Не сам джей, а результат кодогенерации. Вот поэтому я и говорил что возможно рантайм придется доводить до ума. В любом случае если данные статичны значит их можно сразу отсчитать и не считать при каждой заргрузке сборки, явно они где то в рантайме или кодогенераторе накосячили.
AVK>>Да там похоже генератор не рефакторить, а переписыывать надо . Ну и рантайм рефакторить.
VD>Только еще переписывать нехватает. Может тогда уж на яке?
Да на яке тоже проблем хватает. Нет в мире идеала
AVK>>У ANTLR лицензия без каких либо ограничений.
VD>Это большой плюс. Но у джея тоже. Тут вопрос уже в граматике и готовом коде парсера. На них там нет случаем отдельных ограничений?
Не заметил. Да и как можно ограничить использование грамматики?
AVK>>Ну вот например есть событие EnterRule или Error, только оно нигде не вызывается.
VD>Козлы! Вещь однозначно нужная. Хотя наверно это можно и инлайном сделать, прямо в правиле.
Не надо, надо просто немножко подправить кодогенератор. Ты не пугайся, джава не сильно от шарпа отличается .
VD>Скорее всего не критично.
Точно не критично. С-подобные языки очень хорошо ложатся на рекурсивный спуск.
VD>Хотя у меня к LL-схеме почему-то сразу негативное отношение сложилось. Видимо потому, что для в книжках когда про LL-анализ пишут, все время говорят о проблемах и череззадовом синтаксисе.
Проблемы в основном с сильно отличающимися от С языками.
VD>Мля. Эдак каждый дурак умеет. Даже в Моно и то умнее сделали. Они при входе в тело свойства переключают режим лексера и тот начинает выдавать на get/set соотвествующие ключевые слова.
Знаешь, судя по всему шарповскую грамматику писали не очень профессионально. Грамматика джавы к примеру куда интереснее, но там нет контекстно зависимых ключевых слов.
AVK>>Как это можно сделать еще надо вникать, сразу не скажу.
VD>А дерево он какое строит? Этим процессом можно управлять?
Да. Там в итоге генерятся 3 класса Lexer, Parser и TreeParser. Вот последний как раз и строит дерево, которое задается такими правилами
#(root child1 .. child n)
Причем правила могут быть вложенными. Т.е. дерево в А есть В, а в В есть С описывается так.
#(A #(B C))
VD>Главный вопрос в чем. У нас есть некая конструкция: VD>[assembly : assembly(assembly ? assembly : assembly)] VD>и например: VD>[return : assembly(assembly ? assembly : assembly)]
VD>Так вот парсер должен определить, что в одном месте (в начале первого тэга) assembly — это токен TokAssembly, а в другом, что это идертификатор. Ну, и первую секцию атрибутов он должен определить как глобальную-секцию-атрибутов, а вторую как просто секцию-атрибутов.
Здравствуйте, VladD2, Вы писали:
VD>Шарп имеет контекстные ключевые слова. Их не много, но это проблема. Первая же проблема возникает при парсинге глобальных атрибутов. Дело в том, что граматика файла в Шарпе выглядит так:
VD>
Здравствуйте, Andir, Вы писали:
A>Влад, а где ты это взял? В смысле грамматику джея для шарпа? A>Я вот тут смотрю какой-то файлик аля cs-parser.jay — это оно ?
Насчет переходов я пока еще не думал. А вот если брать оптимизацию "поля зрения", то кое что можно предпринять. Для графических объектов типа диграмм можно управлять размером, например, в фокусе большие, подробные и в центре, остальные маленькие, по бокам без полей редактирования. Для чекбоксов и комбобоксов это может и не прокатит. Но у них есть "логическая видимость". Скажем часть свойств закрыта для редактирования или редактирование этих свойств не типично для ситуации (это можно и взвестить, и еше вместе со статистикой). К ситуациям можно отнести начало проекта, сеанса, работа новичка или продвинутого... Определить видимость или ситуацию могут помочь правила, поскольку они (как и в классическом парсинге) помогают установить признаки(факты) на основе разрозненной информации.
Re[9]: А не залудить ли нам свой язык для дотнета?
The stars so gaily glistened... (Fri, 12 Dec 2003 11:42:11 GMT @529)
...while the fading voice of beretta whispered through the darkness:
b> пикселам. Просто кидаешь блок в какую-то часть диаграмы, а программа уже b> сама подбирает ей достойное место (в данной части рисунка) и при b> необходимости перегрупперует остальные элементы.
Какие-то зачатки жэтого вроде в TurboVision были.
Правда там это относилось к однородным элементом типа группа RadioButton
(автоматически подбирались кол-во столбцов и расстояние между), группа
кнопок...