Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 18, 2024 09:47

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Пара вопросов по Форту
СообщениеДобавлено: Пт сен 04, 2009 10:37 
Не в сети

Зарегистрирован: Пн авг 31, 2009 07:24
Сообщения: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте! Я новичок в форте, поэтому, возможно задам глупые вопросы.
1. В современных Фортах (особенно интересует SPF) адресация ячеек массива двух- или 4-байтная? Пытаюсь дойти опытним путём, но что-то не работает:
Код:
CREATE ar 10 ALLOT

: enter ( -- запись чисел в массив )
  9 0 DO
    I 1 + 2 * ar I 2* + !
  LOOP
;

: view ( -- чтение из массива )
  9 0 DO
    ar I 2* + @ . CR
  LOOP
;

Подскажите пожалуйста, в чём ошибка?

2. Переменные VARIABLE и массивы - это указатели. Как освободить память, если эти переменные или массивы стали не нужны в программе?

Спасибо!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Пара вопросов по Форту
СообщениеДобавлено: Пт сен 04, 2009 11:22 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
rv82 писал(а):
Здравствуйте! Я новичок в форте, поэтому, возможно задам глупые вопросы.
1. В современных Фортах (особенно интересует SPF) адресация ячеек массива двух- или 4-байтная? Пытаюсь дойти опытним путём,


А зачем? SPF4, как и многие современные Форт системы для PC
32-х разрядные. Это обычно описывается в описании.
Если система следует стандарту 94года то в ней должно присутствовать
константа CELL показывающая разрядность ячейки Форт системы.

rv82 писал(а):
но что-то не работает:
Код:
CREATE ar 10 ALLOT

: enter ( -- запись чисел в массив )
  9 0 DO
    I 1 + 2 * ar I 2* + !
  LOOP
;

: view ( -- чтение из массива )
  9 0 DO
    ar I 2* + @ . CR
  LOOP
;

Подскажите пожалуйста, в чём ошибка?


Смотря, что требовалось view у Вас считывает 32-х разрядные ячейки
массива с шагом 2
enter помещает I 1+ 2* числа в 32-х разрядные ячейки тоже с шагом 2
Кроме того CREATE ar 10 ALLOT
резервирует 10 байт адресного пространства
правильнее CREATE ar 10 CELL * ALLOT

rv82 писал(а):
2. Переменные VARIABLE и массивы - это указатели. Как освободить память, если эти переменные или массивы стали не нужны в программе?


В общем случае никак т.к. удаление слов из словаря после их компиляции не тривиальная задача. В Форте есть динамическое
выделение памяти ALLOCATE или используйте Хип

P.S.Подобные вопросы задавайте в разделе Форт для начинающих
и попробуйте почитать описание на SPF4 и стандарты по Форт языку:)


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
rv82 писал(а):
1. В современных Фортах (особенно интересует SPF) адресация ячеек массива двух- или 4-байтная?

Минимально-адресуемый блок данных это байт(это определяется процессором). Само значение адреса указывает только на конкретный байт данных в памяти.
Каким именно образом со значениями адреса работают слова форт-системы определяется только самими словами.
Слово ALLOT, например, резервирует место в памяти в байтах, а слово @ кладет на стек сразу четыре байта - именно четырем байтам равна одна ячейка стека.
Поэтому правильно будет так:

Код:
CREATE ar 10 CELLS ALLOT

: enter ( -- запись чисел в массив )
  10 0 DO
    ar I CELLS + ar I CELLS + !
  LOOP
;

: view ( -- чтение из массива )
  10 0 DO
    ar I CELLS + @ . CR
  LOOP
;

и после enter view выведутся значение адресов, в которые записаны эти значения адресов,
ну у меня так:
Код:
5957512
5957516
5957520
5957524
5957528
5957532
5957536
5957540
5957544
5957548
Ок

Да, забыл сказать - слово CELLS умножает число на стеке на 4.

_________________
С уважением, chess


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
rv82 писал(а):
В современных Фортах (особенно интересует SPF) адресация ячеек массива двух- или 4-байтная?


В ANS стандарте есть слова CELL+ CELLS позволяющие абстрагироваться от размера ячеек.
Размер ячейки определяется
0 CELL+ .
или
1 CELLS .

В основном, размер ячеек зависит от платформы форт-системы.
В виндовых приложениях, в основном, используется 4-байтная адресация.

Код:

CREATE ar 10 CELLS ALLOT

: enter ( -- запись чисел в массив  )
  9 0 DO
    I 1 + 2 * ar I CELLS + !
  LOOP
;

: view ( -- чтение из массива )
  9 0 DO
    ar I CELLS + @ . CR
  LOOP
;

enter view



rv82 писал(а):
Как освободить память, если эти переменные или массивы стали не нужны в программе?


Для временного выделения памяти существует ALLOCATE . FREE освобождение.
В СПФ есть средство выделение временного словаря с временной областью памяти
TEMP-WORDLIST . Но я не испытывал в нем потребности.

Может тебя интересуют локальные переменные:
lib\ext\locals.f
мои работают побыстрее
~mak\locals4.f


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

Зарегистрирован: Пн авг 31, 2009 07:24
Сообщения: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Всем спасибо! Теперь всё стало ясно!


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

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


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

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


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

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