Чтобы понять, чем 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.
Вам это будет интересно!
Последние новости
Бхастрика
Техника бхастрики имеет много общего с капалабхати, но существуют и значительные различия между этими упражнениями. Йоги часто расценивают капалабхати как облегченную разновидность бхастрики, что позволяет использовать последнюю для освоения более сложного этапа очистительной дыхательной гимнастики. Для выполнения бхастрики наибо...Читать далее »
Дхарана и дхьяна, или концентрация и медитация
Дхарана и дхьяна – шестая и седьмая ступени системы Патанджали. Наряду с пратьяхарой и самадхи они составляют раджа-йогу. Чем отличается концентрация от медитации? При концентрации включается только разум; при медитации – сердце и все существо в целом. При концентрации разум фиксируется на каком-то определенном предмете. Меди...Читать далее »
Йога пальцев
В руках расположены удивительные энергетические каналы, связанные с целой функциональной системой и носящие название органа, на который они замыкаются. Положение рук – мудра, строго определено каноном и имеет тайный символический смысл. Знатоки мудры насчитывают сотни различных значений в комбинациях и фигурах, изображаемых пальцами. Йо...Читать далее »
Массаж глаз
Его выполняют, когда чувствуют, что глаза устали во время какой-либо работы (чтение, шитье). Это упражнение может входить в комплекс, но может быть и самостоятельным. 1. Через ноздри делают спокойный и полный вдох. Приближают ладони к глазам так, чтобы получился угол, равный 45°. 2. Через нос делают выдох. В этот момент начинают мас...Читать далее »
Заключение
Секрет йоги заключается в том, что она взаимодействует с человеком в целом, а не с какой-то одной сферой его физиологической и духовной жизни. Она сопряжена с физическим, умственным, нравственным и духовным развитием индивида. Она укрепляет силы, уже существующие внутри нас. Начиная с улучшения здоровья, благоприобретенного отличного физического состояния, она шаг за шагом охватывает ментальну...Читать далее »
Наули
Данное упражнение йоги называют устранением прямых мышц живота. Действие наули не имеет ничего общего с уддияной бандхой, хотя отдельные элементы выполнения обоих упражнений совпадают. Исходное положение для наули то же самое, что и для уддияны бандхи. Сначала нужно вдохнуть максимально полно, а затем выполнить уддияну баядху. После этого прямые мышцы живота напрягаются, а живот выпячиваетс...Читать далее »
Процедура полоскания горла
Необходимо также заботиться о здоровье горла. Миндалины, расположенные в горле, – часть иммунной системы. Они представляют собой барьер, защищающий организм от болезнетворных микробов, проникающих извне. Процедуры вамана-дхаоти и джаля-нети весьма благотворно влияют на состояние горла. Для борьбы с заболеваниями горла есть комплекс упражнений. Гигиеническое полоскание горла солонова...Читать далее »
