Forth
http://www.fforum.winglion.ru/

локальные фреймы данных
http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2354
Страница 3 из 3

Автор:  gudleifr [ Ср мар 28, 2012 20:39 ]
Заголовок сообщения:  Re: локальные фреймы данных

Wlad писал(а):
Если брать семантический уровень реализации модели, то как вы "переход к словам, минуя структуры" обоснуете с точки зрения к атрибутам объектов? ОСОБЕННО, при их изменениисо стороны внешних воздействий?
Прошу прощения, перестал регулярно посещать этот Форум (уж очень, как-то, со всеми не согласен). Поэтому, с опозданием...
Что касаемо атрибутов... Хотелось бы написать, что подобные идеи Forth противопоказаны, с его-то концепцией слово-действие. Но... Сам Мур в своей давнишей книге предложил что-то вроде объектов - поля. С методами... Интересно, это действительно писалось в 70-м году? Мне, все же, кажется, что если Вам нужны атрибуты, их нужно запихнуть внутрь Вашей версии ядра: что-то вроде SmallTalk или словарные статьи ориентированные не на действия, а на параметры. В рамках же стандарта "по Броуди": класс == словарь.

Автор:  mOleg [ Ср мар 28, 2012 20:43 ]
Заголовок сообщения:  Re: локальные фреймы данных

gudleifr писал(а):
Что касаемо атрибутов... Хотелось бы написать, что подобные идеи Forth противопоказаны, с его-то концепцией слово-действие.

Я уже говорил, что у вас странный взгляд на Форт ?
В форке все кроме lfa cчитается атрибутом и потенциально может быть изменено.
Какого-либо противоречия с Фортом я не вижу, более того, считаю более логичным выбранный подход 8)

Автор:  mOleg [ Ср мар 28, 2012 20:53 ]
Заголовок сообщения:  Re: локальные фреймы данных

gudleifr писал(а):
С теми же локалсами. Да, используя их, можно писать почти как на C. Но, зачем писать "как на C"? Покажите мне реально полезную программу, которая после добавления локалсов стала красивее и лучше, чем без них. Докажите, что подобных результатов нельзя добиться используя другие, традиционные для Forth средства.

Да можно, можно, только бывает удобнее и так и этак.
Не всегда пишется качественная продуманная программа, иногда "набросок на коленке" гораздо полезнее и удобнее.

Wlad писал(а):
Например в Обероне-07 вообще запрещён синтаксически доступ к переменной из другого модуля напрямую. Читать - читай! А писать - только через вызов процедуры или метода.

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

Автор:  spf [ Ср мар 28, 2012 22:05 ]
Заголовок сообщения:  Re: локальные фреймы данных

gudleifr писал(а):
В рамках же стандарта "по Броуди": класс == словарь.

Если продолжить эту аналогию, то: методы и свойства класса == элементы словаря (слова).
Но, что будет поставлено в соответствие "объекту" (экземпляру класса)? И, как он создается?

Другая возможная аналогия: словарь ? объект.

Автор:  spf [ Ср мар 28, 2012 22:36 ]
Заголовок сообщения:  Re: локальные фреймы данных

Wlad писал(а):
gudleifr писал(а):
Простой и надежный механизм структур, унаследованный от C. Так, нет же, поощряется создание специальных методов (т.е. слов) для доступа к отдельным полям. И даже в С некоторые пытаются так делать. А в Forth можно сразу перейти к нужным словам, минуя структуры...
Wlad писал(а):
Если брать семантический уровень реализации модели, то как вы "переход к словам, минуя структуры" обоснуете с точки зрения к атрибутам объектов? ОСОБЕННО, при их изменениисо стороны внешних воздействий?


\ "структура"
0
CELL -- A
CELL -- B
CELL -- C
CONSTANT /struct

\ "доступ к отдельным полям"
: getA ( object -- x ) A @ ;
: setA ( x object -- ) A ! ;

\ "перейти к нужным словам, минуя структуры"
WORDLIST CONSTANT object ALSO object CONTEXT ! DEFINITIONS
VARIABLE A VARIABLE B VARIABLE C
: getA ( -- x ) A @ ;
: setA ( x -- ) A ! ;
PREVIOUS DEFINITIONS

\ "изменение со стороны внешних воздействий"
123 object::setA
123 `setA object send-message

Автор:  gudleifr [ Ср мар 28, 2012 23:16 ]
Заголовок сообщения:  Re: локальные фреймы данных

spf писал(а):
...
Нет, рабское подражание нам не нужно. См., например, у Броуди про зеленые и красные яблоки...

Автор:  chess [ Чт мар 29, 2012 13:57 ]
Заголовок сообщения:  Re: локальные фреймы данных

Wlad писал(а):
Вот мне очень бы хотелось глянуть, как это сделано!

Все выглядит очень просто:
Код:
: m1 a) a @ IF 1 ELSE 2 THEN . ;  \ определяем первый модуль с локальной для этого модуля переменной a
+: m2 b) 1 a ! m1 0 a ! m1 ;                       \ определяем второй модуль
                                                                  \ во втором модуле пишем в переменную a первого модуля
m2  ( 1 2 ) \ результат работы второго модуля с включением первого

ps. Идея состоит в том, что локальный словарь первого модуля "растягиваем" на второй модуль, определяемый сразу после первого модуля. Растяжка делается с помощью слова +:
Если бы вместо +: было : , то для второго модуля был бы создан свой локальный словарь, а старый лок. словарь для определения
первого модуля в части имен слов был бы удален. В итоге к переменной а не будет доступа ниоткуда кроме как из модулей 1 и 2.

Страница 3 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/