?

Log in

No account? Create an account

Share Next Entry
SOP - Семантически-ориентированное программирование
mkizub
Семантически-ориентированное программирование (SOP), это новая парадигма программирования, хотя и не совсем в привычном понимании этого термина. Обычно мы к парадигмам программирования относим процедурное (императивное) программирование, функциональное, логическое и т.п. К ним можно также отнести ООП, мета-программирование и подобные концепци. Собственно говоря, само слово "парадигма" - означает устоявшийся набор приёмов, понятий, ценностей, способов решать задачу. И оказывается, что "парадигм" в процессе программирования используется несколько больше. Скажем, такой способ решать задачи как использование IDE, баг-трекинга, unit-тестов, методологий организации работы коллектива программистов и многое другое.

Основной задачей технологий, используемых в программировании, является, конечно, возможность создания всё более сложных программ, удешевление разработки программ, повышения их качества. Разумеется, и SOP призвана внести свою лепту в этот процесс развития средств программирования. И делать оно это будет за счёт повышения автоматизации труда программиста. По принципу - пусть человек думает, а компьютер считает. То есть за счёт перекладывания на компьютер рутинную, нетворческую часть нашей работы. Ведь они именно для этого и создавались, не так ли?

Судя по названию, парадигма Семантически-ориентированного программирования предполагает, что программист будет писать программы используя термины максимально приближённые к содержанию решаемой задачи. По существу - это написание DSL (domain-specific language) или eDSL (embedded DSL), с последующим решением задачи используя уже этот специально написанный для решения задачи язык. Это оно, спросит искушённый читатель? - Да, верно, но не только это.

Дело в том, что хотя средств для создания DSL вполне хватает - используют их достаточно редко, предпочитая пользоваться языками общего назначения - C++, Java, Haskell и др. Хотя казалось-бы, пусть мы будем долго запрягать, зато быстро доедем... Так-то оно так, но не совсем так. Раз уж мы не пишем эти языки так часто, то на это должны быть какие-то объективные причины. Вот некоторые из них. Например, то-же использование современных IDE позволяет в несколько раз повысить производительность труда программиста (конечно, в основном для больших проектов). Дело не только в удобстве редактирования и отладке, но и в том, что IDE позволяет ориентироваться в огромном по размере коду проекта. Да, написать собственный DSL можно сравнительно быстро и легко, и он позволит значительно увеличить производительность труда программиста. Но увы, при этом мы потеряем возможность работы в IDE, которое, в лучшем случае, превратиться в простой редактор. Не очень-то много мы и выиграем, а может и проиграем.

Другая возможность, сравнительно редко нами используемая - это мета-программирование. В каком-то смысле мета-программирование является просто средством для создания DSL (а чаще eDSL). Существуют языки которые изначально создавались с расчётом на постоянное расширение средствами мета-программирования, оно в них встроенно изначально. Это такие языки как Forth, Lisp и т.п. Цена их использования - менее удобный синтаксис, чем у языков не имеющих встроенных средств мета-программирования. И увы, они тоже "не пошли", хотя средств в их развитие вложено очень не мало. Возможно, в частности не пошли и потому, что при написании небольших и средних проектов - мета-программирование не особенно и нужно. А вот когда проект становится действительно большим, и тут-бы и использовать его в полный рост... Увы, вам понадобиться вначале переписать весь код на Lisp, и только потом вы получите возможности мета-программирования. Стоит ли говорить, что "за такие деньги" никто мета-программирование не купит.

Вот эти, и многие другие проблемы, возникающие при попытке перейти от программирования с использованием языков общего назначения к семантическому программированию, и призвано решить SOP. Дать в руки инструмент, не просто предназначенный для быстрого и легкого создания DSL/eDSL, но позволяющий использовать всю мощь мета-программирования не принося в жертву другие парадигмы и технологии (такие как IDE), позволяющий "плавно" войти в использование мета-программирования и так далее.

Для реализации этой парадигмы я пишу SymADE (Symbolic Adaptable Development Environment), разработка которого ведётся по адресу http://symade.tigris.org . Технологически реализация подобна IP (Intentional Programming - http://www.intentsoft.com) и MPS (Meta-programming system, реализующая Language-oriented programming - http://www.jetbrains.com/mps). Но именно технологически, потому как в плане идеологии эти системы больше ориентированы на расширение синтаксических возможностей и изначальной интеграции созданных DSL в IDE. А SOP предлагает намного больше, намного. Но об этом я напишу в следующий раз ;)
 
Tags: , , ,