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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Пара вопросов по Форту
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Всем спасибо! Теперь всё стало ясно!
Сообщение Добавлено: Пт сен 04, 2009 12:45
  Заголовок сообщения:   Ответить с цитатой
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 11:47
  Заголовок сообщения:   Ответить с цитатой
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.
Сообщение Добавлено: Пт сен 04, 2009 11:35
  Заголовок сообщения:  Re: Пара вопросов по Форту  Ответить с цитатой
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:22
  Заголовок сообщения:  Пара вопросов по Форту  Ответить с цитатой
Здравствуйте! Я новичок в форте, поэтому, возможно задам глупые вопросы.
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 и массивы - это указатели. Как освободить память, если эти переменные или массивы стали не нужны в программе?

Спасибо!
Сообщение Добавлено: Пт сен 04, 2009 10:37

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


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