Чтобы понять, чем SOP/SymADE отличается от MPS или IP надо вначале разобраться, что у них общего.

Прежде всего, все эти средства разработки программ предполагают переход от представления программы в виде текста к представлению (редактированию и хранению) в виде дерева. В таком подходе нет ничего нового, именно эту идею использует Lisp, что в конечном итоге позволяет ему быть столь мощным средством мета-программирования. Например, возьмём такой простой кусочек кода как выражение 2 * (a + 1). В Lisp-е он будет записан как (* 2 (+ a 1)) - согласно простым правилам: каждый элемент кода кроме простейших атомом отделяется скобками, первым элементов в скобках является "символ" операции, и затем аргументы той операции. В данном случае у нас есть операция умножения (символ *), с аргументами 2 и (+ a 1), то есть второй элемент это операция сложения (символ +) над аргументами a и 1. Это выражение разбирается Lisp-ом и хранится внутри него в виде дерева. Такой синтаксис, конечно, менее удобен, чем привычная нам со школьной скамьи запись. Но он позволяет одну важную вещь - в любом месте программы мы можем использовать любой код (значение которого определяется символом, первым элементом в списке). Что в свою очередь является фундаментом (синтаксическим) для мета-программирования.

Одна из идей лежащих в основе SymADE/MPS/IP - это хранение и манипуляция кодом программы так-же как в Lisp-е, в виде дерева. Но при этом мы можем определять удобный для нас "синтаксис", только в данном случае - это просто способ отображения кода на экране. Тот-же код, который в Lisp-е мы вынуждены хранить и редактировать как (* 2 (+ a 1)), то есть списки/дерево структурированне лишь скобками, в SymADE/MPS/IP может быть отображён привычным нам образом, как  2 * (a + 1). При этом внутри программы мы всё так-же имеем дерево, но за счёт специально задаваемых правил отображения, мы можем показать это дерево в том виде, который нам удобен.

Зачем это нужно? Для этого есть несколько причин. Первая - мы можем отображать нашу программу так, как нам удобно, не ограничивая себя проблемами однозначности синтаксиса, да и сам парсер для разбора текста (для преобразования его во внутреннее представление компилятора) нам не нужен. Второе, это возможность отображатьодин и тот-же код по разному для разных программистов, в зависимости от их предпочтений - начиная с правил оформления кода (отступы, пробелы, переносы строк), и кончая возможностью задать совершенно другой "синтаксис" отображения (одни предпочитают С-подобный синтаксис, другие Pascal-евидный и так далее). Третье, это возможность отображать программу с разным уровнем детализации. Скажем, адепты функционального программирования очень гордятся автоматическим выводом типов функций и переменных, что позволяет им зачастую не указывать эти типы, за счёт чего программа получается намного более компактной и удобной для чтения. Но автоматический вывод типов - ничто, по сравнению с возможностью произвольно задавать уровень детализации отображения программы. Вместо автоматического вывода типов мы можем просто задать нашему IDE не отображать типы - и получить более компактное отображение кода. Мы даже можем задать совершенно "высокоуровневое" отображение кода, чтоб он выглядел как UML диаграммы. При этом мы не меняем сам код, и не генерируем из UML код на другом языке программирования - мы просто таким способом отображаем нашу программу. Четвёртая причина - это полноценная интеграция вновь определённых понятий в IDE. То есть при редактировании кода мы получаем авто-дополнение кода при редактировании, быстрый переход в место определения символов или нахождение всех мест где они используются, мы можем задавать рефакторинг (преобразование узлов дерева одного типа в узлы другого типа) и так далее.

Но есть и ещё одна, на мой взгляд, самая главная причина, по которой имеет смысл отказаться от текстового (Lisp-подобного) представления в пользу кода хранимого в виде дерева с произвольным отображением. Ведь в чём главная сила Lisp-а, ради чего он жертвует выразительностью синтаксиса? Ради возможностей предоставяемых мета-программированием! Возможности писать код который будет генерировать код для вашей программы, проверять правильность кода вашей программы и так далее. Так вот, мета-программирование становится особенно нужным, когда размер кода проекта становится настолько большим, что его уже невозможно поддерживать и развивать используя ограниченный набор понятий языка общего назначения. Использование мета-программирования позволило-бы уменьшить код таких больших проектов в десятки раз, вновь сделав его достаточно простым и понятным, для дальнейшего развития. Но увы, Lisp предоставляет возможности мета-программирования только для программ написанных на Lisp-е. Если ваш проект был написан на С, С++, C#, Pascal, Java и пр. - ничем вам мета-программирование Lisp-а не поможет. Так вот, IDE подобное SymADE/MPS/IP - может вам помочь в этом случае. Для этого необходимо определить в этой среде набор понятий подобный набору понятий в C, C++, C#, Pascal, Java и пр., а затем экспортировать старый проект в данную среду. После этого программист будет видеть код в привычном ему виде, и может продолжать редактировать его как если-бы это был код на его старом языке программирования, но плюс к этому - он получает возможность определять и использовать новые понятия, специфические для его проекта.

Возможность интеграции в IDE вновь созданных языков программирования или расширения существующих языков программирования, а так-же возможность плавного перехода к использованию мета-программирования - это столь важные преимущества SymADE/MPS/IP-подобных IDE, которые позволят в самом ближайшем времени (в течении нескольких лет) стать им одними из доминирующих средств разработки программ. Особенно в областях, где важно применение DSL (Domain-specific language), и при разработке крупных программных проектов.

Но эти преимущества - это только начало. Точнее, MPS от JetBrains и IP от Intentional Software только приближаются к реализации этих возможностей, и это практически все идеи, заложенные в них. Но в SOP заложено намного больше. Несмотря на технологически подобную реализацию (внутреннее представление программы в виде дерева, хранение его в виде дерева, и произвольное отображение этого дерева, изначальная интеграция новых понятий и языков в IDE), фундамент у SOP намного глубже, и в перспективе позволит пойти намного дальше, чем MPS и IP.

В следующем посте я наконец дойду до различий между SOP/SymADE и MPS, IP.


Вам это будет интересно!

  • SOP - Семантически-ориентированное программирование
  • Вишнёвое дерево.
  • Программы господдержки рынка труда доказали свою эффективность
  • Майское дерево-2008
  • Идеальный текст для Яндекс.Директа


  • Последние новости


    Бхастрика

    Техника бхастрики имеет много общего с капалабхати, но существуют и значительные различия между этими упражнениями. Йоги часто расценивают капалабхати как облегченную разновидность бхастрики, что позволяет использовать последнюю для освоения более сложного этапа очистительной дыхательной гимнастики. Для выполнения бхастрики наибо...
    Читать далее »

    Дхарана и дхьяна, или концентрация и медитация

    Дхарана и дхьяна – шестая и седьмая ступени системы Патанджали. Наряду с пратьяхарой и самадхи они составляют раджа-йогу. Чем отличается концентрация от медитации? При концентрации включается только разум; при медитации – сердце и все существо в целом. При концентрации разум фиксируется на каком-то определенном предмете. Меди...
    Читать далее »

    Йога пальцев

    В руках расположены удивительные энергетические каналы, связанные с целой функциональной системой и носящие название органа, на который они замыкаются. Положение рук – мудра, строго определено каноном и имеет тайный символический смысл. Знатоки мудры насчитывают сотни различных значений в комбинациях и фигурах, изображаемых пальцами. Йо...
    Читать далее »

    Массаж глаз

    Его выполняют, когда чувствуют, что глаза устали во время какой-либо работы (чтение, шитье). Это упражнение может входить в комплекс, но может быть и самостоятельным. 1. Через ноздри делают спокойный и полный вдох. Приближают ладони к глазам так, чтобы получился угол, равный 45°. 2. Через нос делают выдох. В этот момент начинают мас...
    Читать далее »

    Заключение

    Секрет йоги заключается в том, что она взаимодействует с человеком в целом, а не с какой-то одной сферой его физиологической и духовной жизни. Она сопряжена с физическим, умственным, нравственным и духовным развитием индивида. Она укрепляет силы, уже существующие внутри нас. Начиная с улучшения здоровья, благоприобретенного отличного физического состояния, она шаг за шагом охватывает ментальну...
    Читать далее »

    Наули

    Данное упражнение йоги называют устранением прямых мышц живота. Действие наули не имеет ничего общего с уддияной бандхой, хотя отдельные элементы выполнения обоих упражнений совпадают. Исходное положение для наули то же самое, что и для уддияны бандхи. Сначала нужно вдохнуть максимально полно, а затем выполнить уддияну баядху. После этого прямые мышцы живота напрягаются, а живот выпячиваетс...
    Читать далее »

    Процедура полоскания горла

    Необходимо также заботиться о здоровье горла. Миндалины, расположенные в горле, – часть иммунной системы. Они представляют собой барьер, защищающий организм от болезнетворных микробов, проникающих извне. Процедуры вамана-дхаоти и джаля-нети весьма благотворно влияют на состояние горла. Для борьбы с заболеваниями горла есть комплекс упражнений. Гигиеническое полоскание горла солонова...
    Читать далее »