none
Как создать свой язык программирования на DotNet RRS feed

  • Вопрос

  • Я разбираюсь в сишарп но в нём есть некоторые недостатки и я хочу создать свой язык или усовершенствовать сишарп, но я не знаю, как создать свой интерпритатор (или компилятор) который будет интерпритировать (или компилировать) мой язык, подскажите пожалуйста, буду очень благодарен.Заранее спасибо!!
    29 ноября 2014 г. 18:23

Ответы

  • Или, насколько я понял,
    Вы хотите создать инструмент,
    с помощью которого можно было бы
    защищенные от декомпиляции приложения использовать 
    в качестве базовых классов для наследования?
    Это - да, хотелось бы! Запретный плод особо желанен!
    Но для этого не нужно создавать язык -
    нужно соорудить могучий всеядный декомпилятор.
    Это тоже не просто, хотя и возможно...
    ЦРУ в этом весьма преуспело,
    да и наши пацаны, думаю, не отстают...







    • Изменено QazRdx 30 ноября 2014 г. 14:24
    • Помечено в качестве ответа Xpert0mc 2 декабря 2014 г. 17:08
    30 ноября 2014 г. 11:38

Все ответы

  • Придумываешь семантику, потом пишешь анализатор, строящий семантическое дерево, и по этому дереву генерируешь Intermediate Language, это если вкратце.
    29 ноября 2014 г. 18:47
  • Кратко не получится, поэтому опус в трёх частях.

    Часть 1.

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

    Возможно, ваши проблемы легко решаются с помощью возможностей Visual Studio, мастеров-визардов, дополнительных плагинов для неё. Или с помощью сторонних библиотек/фреймворков. Или с помощью кодогенерации, например, T4.

    Навешивание атрибутов, применение так называемых IOC/DI-фреймворков - могучие приёмы внесения дополнений в код.

    Реально чудеса можно творить с помощью АОП. Это большая тема, если заинтересует, дайте знать.

    Часть 2.

    Всё же пишем свой язык самостоятельно с нуля. Общее направление уже указал Andry_S. Распишу подробнее.

    Определитесь, интерпретатор или компилятор у вас должен быть - это совершенно разные вещи, и подходы к их разработке разные.

    Вы хотите управляемый язык под платформу .NET, как C#? Или другое?

    Прочитайте эту статью: Ela. Разработка интерпретируемого языка программирования на .NET Framework. Сложно? Никто не обещал лёгкой жизни.

    Пример попроще: H#, Создаём свой язык программирования.

    Про синтаксический анализ (то, с чего начинается разбор вашего языка) я писал здесь.

    Если вы действительно будете писать язык с нуля, то нужно знать язык IL - intermediate language. Дайте знать, накидаю ссылок на его изучение.

    Кроме того, никому не нужен язык без среды разработки. Дотнетчики привыкли к Visual Studio, следовательно вам нужно будет позаботиться об интеграции своего языка в эту среду. Чтобы работала подсветка синтаксиса, автодополнение (интеллисенс) и прочие плюшки. А это, скажу я вам, тот ещё квест! Начать можно отсюда: Extending Visual Studio Overview (на русском вроде нет этого материала).

    Как у вас с английским языком? Очень много нужных вам материалов на нём. Посмотрите множество полезных ссылок здесь: How to create a new language for use in Visual Studio.

    Часть 3.

    Обратите внимание на язык Nemerle. Описание в Википедии.

    Главная особенно этого языка - мощная система метапрограммирования. Это позволяет расширять язык, менять его синтаксис и многое другое. При этом он во многом похож на C#, вернее, его легко использовать, зная C#.

    Хотите ввести в язык новое ключевое слово? Не проблема: в Nemerle при помощи макросов добавлены такие слова как for, foreach, if и многие другие (да-да, в ядре языка циклов и условных операторов нет).

    Например, когда появился LINQ, немерлисты легко прикрутили его к своему языку, благодаря макросам. Появились в VB.NET хмл-литералы - легко добавили их (в C# до сих пор нет и не будет). В языке Ruby есть json-литералы - добавили и их.

    Готовится к выпуску язык C# 6. Многие его возможности уже давно реализованы в Немерле. В частности, string interpolation.

    Кому-то захотелось иметь синтаксис, подобный Питону: без фигурных скобок, на отступах - пожалуйста, и это реализовали на макросах.

    В-общем, рекомендую.

    • Предложено в качестве ответа YatajgaEditor 30 ноября 2014 г. 6:32
    29 ноября 2014 г. 21:00
  • Создавать свой язык - себе дороже!
    Эффективней дополнить имеющийся.
    Чего именно Вам не хватает?
    Может быть оно уже есть, но Вы его не видите!
    30 ноября 2014 г. 4:20
  • "Я разбираюсь в сишарп но в нём есть некоторые недостатки" - интересно было бы узнать )

    Сделаем содержимое сообщества лучше, вместе!

    30 ноября 2014 г. 6:29
    Модератор
  • Мне не хватает наследования от нескольких классов, защищенных от декомпиляции приложений, возможности структурного программирования вместе с объектным и вызов главного наследованого класса, как в Java.
    • Изменено Xpert0mc 30 ноября 2014 г. 10:51
    30 ноября 2014 г. 10:48
  • Мне не хватает наследования от нескольких классов, защищенных от декомпиляции приложений, возможности структурного программирования вместе с объектным и вызов главного наследованого класса, как в Java.
    • Изменено Xpert0mc 30 ноября 2014 г. 10:51
    30 ноября 2014 г. 10:49
  • А как написать анализатор.Про Intermediate Language я уже знаю. И раз его затронули, то я не знаю какие есть на него среды программирования. 
    30 ноября 2014 г. 10:55
  • Не совсем понятно.
    Принципы структурного программирования сформулированы давным-давно.
    Все остальные навороты, включая объектное программирование,
    базируются на этих принципах, являются их продолжением и развитием.
    Что можно здесь добавить к тому, что уже существует?

    Защита от декомпиляции - это общая проблема,
    которая и в рамках DotNet как-то худо-бедно решается многочисленными дотфускаторами.

    Не думаю, что частными усилиями можно что-то путное к этому добавить -
    слишком большая работа...

    30 ноября 2014 г. 11:17
  • Или, насколько я понял,
    Вы хотите создать инструмент,
    с помощью которого можно было бы
    защищенные от декомпиляции приложения использовать 
    в качестве базовых классов для наследования?
    Это - да, хотелось бы! Запретный плод особо желанен!
    Но для этого не нужно создавать язык -
    нужно соорудить могучий всеядный декомпилятор.
    Это тоже не просто, хотя и возможно...
    ЦРУ в этом весьма преуспело,
    да и наши пацаны, думаю, не отстают...







    • Изменено QazRdx 30 ноября 2014 г. 14:24
    • Помечено в качестве ответа Xpert0mc 2 декабря 2014 г. 17:08
    30 ноября 2014 г. 11:38
  • Если вы можете, напишите пример или снимите видео и дайте ссылку.
    30 ноября 2014 г. 16:15
  • По адресу http://gcc.gnu.org/svn.html есть очень достойный пример написания компилятора.
    30 ноября 2014 г. 18:14
  • Мне не хватает наследования от нескольких классов

    Это прекрасно решается с помощью агрегации и композиции.

    Кроме того, для платформы .NET есть языки, реализующие множественное наследование. Можете часть кода написать на них, подключив потом dll в проект на другом языке, типа C#.

    А если очень хочется, то можно на методах расширения сделать реализацию интерфейсов: http://stackoverflow.com/a/178368.

    защищенных от декомпиляции приложений

    Вы неправильно выбрали платформу: .NET и Java не для вас. Их практически невозможно защитить от декомпиляции. Обфускаторы частично помогают, но мало. Пишите в нативном коде.

    возможности структурного программирования

    Вы имеете  в виду структурную типизацию вместо номинативной в c#?

    Интерфейсы и обобщённые типы (generics) решают многие вопросы подобного плана. А главное, в дотнете давно уже есть dynamic - при использовании динамики доступна утиная типизация.

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

    30 ноября 2014 г. 18:29
  • напишите пример
    Пример чего?
    30 ноября 2014 г. 18:31
  • Xpert0mc!

    Какова Ваша сверх-задача?
    Если не секрет, какие защищенные классы в каких приложениях
    Вы хотите использовать в качестве базовых?
    Это я к тому, что есть множество API,
    которые позволяют программисту не ломиться в открытые двери,
    а использовать уже готовый интерфейс к интересуемому
    программному обеспечению.
    Возможно, именно это Вам и нужно?

    • Изменено QazRdx 30 ноября 2014 г. 20:16
    30 ноября 2014 г. 20:13
  • Существует множество декомпиляторов - можно погуглить.
    Но, думаю, не все так просто...
    Все-таки нужен серьезный опыт низко-уровнего программирования.
    Если есть возможность купить интересующее Вас ПО,
    то это дешевле, быстрее и проще.
    А может быть есть и нужный Вам API, тогда и вовсе все просто.
    У меня есть опыт восстановления интернет - трафика.
    Но в том далеком и темном прошлом еще не было нужного API.
    Скажу честно, все получилось, и даже совсем неплохо...
    Но чего мне это стоило?..
    А когда этот самый API появился, то все проблемы,
    над которыми я бился много-много дней и ночей,
    были решены левой пяткой.
    2 декабря 2014 г. 18:34