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читается атрибутом и потенциально может быть изменено. Какого-либо противоречия с Фортом я не вижу, более того, считаю более логичным выбранный подход |
Автор: | 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/ |