Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс май 29, 2022 06:50

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: сначала было слово
СообщениеДобавлено: Пн окт 06, 2008 13:35 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
Автор: mOleg
дата первой публикации 03.04.2007 в блоге Профита

«сначала было слово»

Большинство литературы посвященной изучению различных языков программирования рассчитаны на читателя, изучающего программирование с нуля. Поэтому повествование обычно начинается с того, как будет правильно сложить (2+3) или 2 3 + , а может (+ 2 3) – то есть с того, как делать самые простые вещи. В итоге при беглом просмотре (я имею в виду программиста), остается непонятно, ради чего создавался тот или иной язык и в чем его основное отличие от остальных, какие идеологические причины заставили создать этот самый язык.

Практически все современные языки программирования рассчитаны на то, что текст программы будет разбит на множество маленьких именованных кусочков, которые в различных языках называются то функциями, то подпрограммами, то процедурами, впрочем, есть и другие названия. У форта именованные кусочки кода называются словами или определениями.

Основным понятием языка форт1является слово2. Каждое слово языка может быть исполнено, но не обязательно должно исполняться. Программа в форт-среде – это набор слов. Обычно для выполнения программы достаточно выполнения последнего определенного понятия (слова). Форт-среда не разбирается в том, является ли очередное слово оператором языка или данными. Слова просто ищутся в списке, называемом словарем3 и при условии нахождения выполняются. Словарей может быть много, и словари тоже являются словами. Каждое новое слово добавляется в словарь с помощью уже существующих слов или их комбинации. Тот словарь, в который добавляется слово, называется текущим4, а тот, из которого исполняется - контекстным5. Современная6 форт-среда умеет работать с одним текущим и несколькими контекстными словарями, причем текущий словарь не обязан находиться в контексте, и список словарей, находящихся в контексте тоже не фиксирован. В отличие, например от Лиспа, базовый словарь форт-среды не является «суперсловарем», то есть не всегда находится в контексте, поэтому возможны ситуации, когда программист сам ограничивает знания системы словарем, в котором нет слов, позволяющих системе прийти в нормальное рабочее состояние. Этот момент позволят создавать совершенно не связанные с базовой средой лексиконы – то есть полностью менять правила поведения среды.

Любое слово можно условно разделить на две части: имя слова7 и содержимое слова. Содержимое слова тоже можно условно разделить на две части: исполнимую часть - код и неисполнимую часть – данные. В зависимости от типа слова содержимое слова может отсутствовать вообще, содержать только код или только данные.

Форт-среда состоит из:

- виртуальной форт-машины8, адаптирующей вычислительную модель используемой аппаратной платформы к принятой в форте;

- механизма обмена данными между словами;

- набора слов, достаточного, как минимум, для дальнейшего развития среды;

- и интерпретатора поступающих данных.

В форт-среде принята 0-операндная вычислительная модель. Это значит, что данные находятся всегда в одном месте, называемом стеком данных, и все параметры от одного слова к другому передаются через этот самый стек данных9. Количество передаваемых данных от одного слова другому во время исполнения не ограничивается и не контролируется системой. Слова всегда берут данные с вершины стека данных и туда же возвращают результат своей работы (это не означает, что в языке нельзя использовать переменные или константы из памяти – можно, но в процессе исполнения слова либо значение этих переменных, либо их адреса в любом случае побывают на стеке).

Интерпретатор - это бесконечный цикл, в котором производится последовательно: чтение очередной лексемы10 из входного потока, поиск ее в контексте, и выполнение.

Компилятор состоит из большого количества слов, находящихся в базовом словаре11 системы. Набор слов компилятора не ограничен, не фиксирован, может быть заменен или переопределен, расширен или урезан. Это значит, что компилятор форт-среды находится внутри среды, доступен для изменения и расширения.

Форт-среда может находиться в одном из двух12 состояний: состояния компиляции или интерпретации. Состояние системы определяется содержимым стандартной переменной STATE. Если в ней находится 0 – режим интерпретации, иначе – компиляции.

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

1 Собственно форт нельзя назвать языком программирования, так как он скорее является средой программирования.

2 В английской транскрипции word, но чаще definition, по-русски так же часто говорят определение.

3 В английской транскрипции vocabulary.

4 В английской транскрипции current vocabulary.

5 В английской транскрипции context vocabulary.

6 На данный момент система, соответствующая стандарту ANSI-94.

7 Ключ или идентификатор, то есть набор данных, благодаря которым может быть найдено содержимое, ассоциируемое с данным ключом.

8 Сокращенно FVM.

9 Для удобства работы в форт-среде разделены стек данных от стека возвратов.

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

11 Базовый словарь системы называется FORTH.

12 Обычно двух, но может быть и больше.


Последний раз редактировалось mOleg Пт окт 10, 2008 03:51, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 06, 2008 13:36 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
вот, решил пусть тут тоже полежит.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 10, 2008 02:44 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
По оформлению - в квадратных скобках обычно ссылки на литературу из списка в конце.
М. ссылки в круглых скобках делать, если нельзя надстрочных индексов?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 10, 2008 02:47 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
in4 писал(а):
М. ссылки в круглых скобках делать, если нельзя надстрочных индексов?

даже не знаю, можно ставить значек ^1 или лучше `1 ?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 10, 2008 08:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
для справки... на форуме работают html-теги sup<sup>верхний индекс</sup> и sub<sub>нижний индекс</sub>
Можно сделать и некоторые спец-символы подобно смайликам, типа: :sum; - знак суммы

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 11, 2008 00:12 
Не в сети
Аватара пользователя

Зарегистрирован: Пт окт 20, 2006 00:14
Сообщения: 32
Откуда: Volgograd
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
WingLion писал(а):
Можно сделать и некоторые спец-символы подобно смайликам, типа: :sum; - знак суммы


Знак суммы не отображается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 11, 2008 07:44 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
NLObP писал(а):
Знак суммы не отображается.

WingLion писал(а):
Можно сделать

"если понадобится"...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB