Автор:
mOleg
Дата публикации: 2009.04.27
публикуется впервые
Языковая среда программирования.
Сразу оговорюсь, что говорить о Форте как о еще одном языке программирования мне не хочется, так как таковым я его не воспринимаю, да и не является он им в полной мере.
Но что же такое Форт, если он не язык программирования?
Для того, чтобы ответить на этот вопрос необходимо немножечко разобраться в том,
как он устроен, на какие базовые абстракции опирается. А базовых абстракций в Форте совсем не много, а именно, всего одна:
слово.
Да, да! – все остальное это особенности реализации Форт-системы, которое можно отнести к вторичным особенностям. То есть к особенностям реализации конкретного Форта, пускай эта особенность и является обычной и привычной, как-то: множество стеков, польская запись и им подобные другие особенности.
Итак, у нас есть слова, которые могут взаимодействовать друг с другом (взаимодействие слов друг с другом обеспечивает среда). Слова сами по себе, это некие последовательности символов, которые являются ключами в
сетевой базе данных (далее просто БД). Причем, каждое слово определено с помощью других слов, то есть является описанием того, что же представляет собой данное слово, и как оно должно себя вести в случае его использования (а это уже как бы из области ИИ – есть такое понятие
«продукции», что очень близко к Форту).
Понятно, что описывать новые слова можно только на основе уже существующих, но, для этого нужно иметь некое полноценное качественное количество слов-понятий уже существующих в системе. Такие базовые слова должны, во-первых, позволять вводить любые новые определения, а во-вторых, поддерживать сам процесс введения этих самых новых определений. То есть нам необходима некая (интер)активная среда, понимающая слова и реагирующая на них адекватным образом – это и есть ФОРТ! И, хотя, есть Форты, не имеющие интерактивной среды, они, по сути, Фортом уже не являются, так как недостаточно одного лишь наследования синтаксиса и вторичных особенностей реализации. Ну, представьте себе только компилирующий (как это делает Си, Фортран, и подобные ЯП) [url=http://ru.wikipedia.org/wiki/Пакетный_файл]cmd[/url] или
rexx или [url=http://ru.wikipedia.org/wiki/Командная_оболочка_UNIX]sh[/url]! Ведь они потеряют весь смысл своего существования, так как именно интерактивность – основа их существования и залог их необходимости. У Форта интерактивность тоже базовая особенность, то есть основополагающая.
То есть, я утверждаю, что ФОРТ – это интерактивная языковая среда!
Причем среда живая, имеющая возможность постоянно развиваться, совершенствоваться; однако и деградировать, и разрушаться так же способна. И не обязательно среда программирования – часто просто управляющая среда или диалоговая система.
В результате, на определение новых понятий (то есть слов) в Форт-среде налагаются обычные для любого живого человеческого языка ограничения с одной стороны, и с другой стороны ограничения, налагаемые реализацией самой интерактивной среды, то есть те самые вторичные особенности реализации.
А какие в естественном живом языке есть ограничения?
Ограничения:
1) слишком длинные и сложные определения сложно удержать в памяти, а значит понять;
2) даже простые выражения могут быть поняты не правильно в случае неточного их определения;
3) даже точные определения могут содержать ошибки (смысловые, идеологические, синтаксические);
4) одно и то же по звучание и написанию слово может использоваться по-разному в зависимости от контекста использования;
5) разные по звучанию и написанию слова могут означать одно и то же;
6) разные по определению слова могут звучать одинаково и при этом находится в одном контексте.
Давайте возьмем классический пример некорректного определения на родном (Русском) языке некоего действия:
«на доске булка, принеси ее»
Теперь попытайтесь ответить на вопрос: что же надо принести? Я бы принес доску с булкой – так надежнее. Но как быть, если скажут: “снаряд в танке, тащи его сюда.” – ведь речь может идти только о том танке, в котором есть снаряд, а может о снаряде, который в конкретном танке, а танки, они ведь тяжелые. Таких примеров из жизни каждый может привести множество (подумав конечно – мы не всегда их замечаем)!
Вот еще один подобный диалог:
- не подскажете, который час?
- да. <и отвечающий молча пошел дальше, не глядя на часы>
Что же произошло в последнем случае? А то, что вопрос в себе уже содержал отрицательный ответ, кстати, отвечающий мог бы ответить с тем же успехом: «нет» - и был бы прав. С точки зрения языка выражения: «да, не подскажу» и «нет, не подскажу» - равнозначны! К чему столь долгое лирическое отступление? Да к тому, что: «кто ясно мыслит – тот ясно излагает» - полностью относится к работе в Форте – точно так же, как в естественном живом языке человеческого общения.
Но давайте пойдем дальше. Все ли понятия можно выразить на любимом нами родном человеческом языке одинаково просто и понятно? Нет, увы, опыт показывает, что даже простые выражения могут быть восприняты (оттранслированы) неверно, выше только что было два таких примера. Что уж говорить о специальных областях, где понятия гораздо сложнее, а определения длиннее!
Пока у нас слов мало, и сами слова достаточно простые особых проблем обычно не возникает. Нам достаточно создавать точные определения и находить им удачные имена (чтобы было удобно с их участием описывать новые определения) и растить свой лексикон.
Со временем наш лексикон растет, «мощность» слов растет, и вместе с ней растет их специализация. Слова начинают что-то значить только в окружении небольшого количества связанных с ними определений. Появляются слова, достаточно удачно выражающие только одно уникальное необходимое действие, и не нужные во всех других случаях. Количество определений становится слишком большим, чтобы можно было отследить и предусмотреть все возможные варианты их использования (заставлять сами слова «узнавать» правильность их использования слишком накладно). И мы приходим к созданию лексиконов: то есть, начинаем группировать слова в изолированные лексиконы, и работать с ними только тогда, когда надо создать определение, затрагивающее именно эту группу слов. В Форте лексиконы называются словарями, причем сами словари так же являются определениями, то есть имеют имена и позволяют с помощью упоминания этих имен использовать скрытые внутри словарей слова. Список словарей, в которых производится поиск имен, называется «контекстом», и как в живом человеческом языке и ограничивает возможное применение слов, и определяет его.
Следующая проблема, с которой мы сталкиваемся, заключается в том, что нам начинает не хватать собственного словаря для использования в качестве имен определений. Кстати, такая же проблема возникает в любой области деятельности: имеющиеся понятия не полностью отражают смысл, да и просто не находится адекватных понятий для выражения через них новых, а использование имеющихся слов живого языка для обозначения того или иного понятия приводит к путанице и «интуитивно неверному пониманию» абстракции, лежащей за понятием.
Поэтому с одним и тем же именем мы начинаем связывать различные определения, а чтобы не путаться, прячем каждое такое определение в собственный словарь.
Естественный порядок слов.
Мы привыкли, что в Русском языке порядок слов не фиксирован жестко, и фразы:
1) я пошел гулять
2) пошел я гулять
3) гулять я пошел
4) я гулять пошел
…
По сути своей сообщают одно и то же. Мы привыкли к такой особенности родного Русского языка, но далеко не все человеческие языки позволяют такой свободный порядок слов. К примеру, Английский язык уже достаточно строго фиксирует порядок частей речи в предложении. Форт оказывается ближе к языку, на котором говорит его Создатель, что, в общем-то, вполне логично и естественно. Приведенная выше фраза на Языке Форт будет, скорее всего, естественно звучать так: я гулять пошел, впрочем, тут не очень удачный пример, так как два глагола в предложении имеется. А глаголы в Форте оканчивают выражение: Вася подальше отправить . При таком расположении частей речи Форт-выражения воспринимаются наиболее естественно: 12345 SAMPLE ! = что с_чем сделать.
Хотя, можно и так: 12345 TO SAMPLE . Но это уже другая особенность языка, иногда приводящая к сложностям.
Форт, то есть языково-ориентированное программирование, основан на естественной модели живого языка, где слова не имеют ни фиксированных интерфейсов, ни жестко заданного контекста применения, и так же могут быть сколько угодно абстрактными (не имеющими строгого физического определения – это как слово: бесконечность, Бог).
Слова в Форте могут отражать что угодно!: например наше отношение к тексту (простой комментарий или смайлик), конкретную железяку в углу стола, абстрактную железяку, которой нет еще в природе, одну машинную команду или даже ее часть, или весь наш проект. В Форте, как и в межчеловеческом языке общения, бывают: глаголы, существительные, прилагательные, союзы, предлоги, и т.п.
Литература:
1. Способ мышления Форт
2. Слово о Форте
3. сначала было слово
4. что такое Форт
5. Что такое словарь
6. Языково-ориентированное программирование: следующая парадигма
7. Искусственный интеллект и экспертные системы
8. Базы данных. Вводный курс