Forth
http://fforum.winglion.ru/

Как сделать форт-систему без ошибок?
http://fforum.winglion.ru/viewtopic.php?f=4&t=3172
Страница 4 из 4

Автор:  _KROL [ Пн май 14, 2018 19:20 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

+ в голове ))

Автор:  Hishnik [ Пн май 14, 2018 20:18 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

_KROL писал(а):
А можно, опять таки, посмотреть с другой стороны: почему вы все используете строку с нулевым оканчанием, а?

Я уже отмечал - WinAPI использует такое представление для строк, передаваемых в качестве параметров. Кроме того, описывать программный объект единственным идентификатором выглядит правильнее, чем описывать двумя, из которых второй может быть получен из первого.

Автор:  Hishnik [ Пн май 14, 2018 20:18 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

_KROL писал(а):
иногда нормальные мысли предлагал (правда я уже не помню где)

:))

Автор:  Victor__v [ Пн май 14, 2018 22:39 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

mOleg писал(а):
Victor__v писал(а):
Прим. к коду. Можно было и циклы использовать, но мне лень уже.

ну, и что выглядит проще?

Вот это:
Цитата:

: to-str \ addr g m d h m s -- addr
7 REVERSE
DUP >R
6 >R
BEGIN
R@ WHILE
SWAP usign num>s{ >R OVER R@ MOVE R> + }num
-1 RP@ +!
REPEAT
RDROP
S" .dat" >R OVER R@ MOVE R> +
0!
R>
;

: TEST
1000 ALLOCATE THROW
0x0A BASE KEEP!
gmdhms
to-str
;


При этом легко сделать универсальную реализацию для подобных ситуаций. Были б они ещё

Автор:  mOleg [ Пн май 14, 2018 22:46 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Victor__v писал(а):
При этом легко сделать универсальную реализацию для подобных ситуаций. Были б они ещё

что ни говори, решение сложнее выглядит. Тяжеловеснее. Я ведь тоже могу несколько сократить код
лишь выделив: S>D # # DDROP в отдельное определение (тут просто лень победила меня на момент создания)
заметь, я не думаю о памяти (куда класть) я не думаю как перемещать (нет MOVE), не приходится использовать стек возвратов для хранения промежуточных результатов.
Пока меня не убедили ваши доводы по поводу стандартного форматного преобразования,
у того же ВОПРОСа где-то был более интригующий, но, все же чужеродный и излишний по сложности реализации вариант.
И, главное, у вас нет формализованного синтаксиса, который вы заменяете и который достаточно удобен, если уметь пользоваться.

Автор:  Victor__v [ Пн май 14, 2018 22:54 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

_KROL писал(а):
Разве он писал по тому вопросу, который ты задал?

Хищник таки писал.
А то, что тема превратилась в очередной человеческий самогон, так это почти везде.
Надо же поговорить о наболевшем. А тему поднимать лень. Вот и бьют несчастные форт-посылы.

P.S.
Это ещё тов. аднин не начал подозревать неограниченный круг лиц в связях с западом :))

Автор:  Victor__v [ Пн май 14, 2018 23:02 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

mOleg писал(а):
И, главное, у вас нет формализованного синтаксиса, который вы заменяете и который достаточно удобен, если уметь пользоваться.

Ну часто нужен показанный код, а? Поэтому и синтаксиса нет за ненадобностью.
Если уж мне понадобится, что-то похожее для конкретной задачи.
Я сделаю так:
\ xt g m d h m s -- \ xt: addr
: TEST 6 REVERSE 10 BASE KEEP! R:STR 1000 "{un}{un}{un}{un}{un}{un}.dat" SWAP EXECUTE ;
Самый, блин, короткий и высокоуровневый вариант в моём арсенале.

Автор:  mOleg [ Вт май 15, 2018 19:52 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Victor__v писал(а):
Ну часто нужен показанный код, а? Поэтому и синтаксиса нет за ненадобностью.

ну, бывает нужно, но даже не это главное - он, синтаксис, уже есть в форте и очень удачный 8) достаточно только освоить его

Victor__v писал(а):
Если уж мне понадобится, что-то похожее для конкретной задачи.
Я сделаю так:

То есть, кроме решения задачи еще и парсер делать будете?
Ведь я не против альтернативных вариантов и нововведений,
но они должны быть по крайней мере не хуже существующих
(считаю это справедливым требованием).

Victor__v писал(а):
: TEST 6 REVERSE 10 BASE KEEP! R:STR 1000 "{un}{un}{un}{un}{un}{un}.dat" SWAP EXECUTE ;
Самый, блин, короткий и высокоуровневый вариант в моём арсенале.

выглядит забавно, но непонятно
собственно, не ясно совсем вот что: R:STR 1000 "{un}{un}{un}{un}{un}{un}.dat" SWAP EXECUTE

Автор:  Victor__v [ Вт май 15, 2018 21:06 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Цитата:
То есть, кроме решения задачи еще и парсер делать будете?

Это значит, что тупо у меня есть либа для создания строк во время исполнения с возможностью включения символов, чисел и строк. Использовать её для форматного преобразования конечно лишнее, но можно как вариант.
Эх,
R:STR -- слово немедленного исполнения. Берёт из входного потока число: столько байт будет выделено под строку. Далее сама строка вплоть до кавычки. Во время выполнения возвращает адрес начала созданной строки.
При этом команды подстановки {''} {un} {n} и пр. являются обычными форт-словами.
{un} - беззнаковое число.

Автор:  Hishnik [ Ср май 16, 2018 01:21 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Код:
// some quark magic


: GENERATE-FNAME
  FROM EMIT
  ?.SPACE @

    USE C, AS EMIT
    ?.SPACE OFF
   
    TIME&DATE . . . . . .
    0 C,

  ?.SPACE !
  TO EMIT
;

CREATE FILENAME GENERATE-FNAME

FILENAME PRINT

Автор:  mOleg [ Ср май 16, 2018 09:47 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Хищник, прикольно, но и только.

Автор:  Hishnik [ Пт май 18, 2018 14:22 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

Код:
: GENERATE-FNAME
    ?.SPACE OFF
    USE C, AS EMIT
    TIME&DATE . . . . . .    0 C,
;

CREATE FILENAME GENERATE-FNAME


А вот это сущностная часть, если убрать все обрамления. И тут, как бы сказать, видна логика описываемых действий.

Автор:  _KROL [ Вс июн 03, 2018 19:56 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

(комментарий взят из темы "О плюсах и минусах Форта")
vikt писал(а):
mOleg писал(а):
Однако, что значит учебный форт?
Что должно быть в нем в отличие от боевого форта, и как переходить с учебного на боевой?


Учебный форт, в моем понимании, это грамотно написанный проект.
Первое, что бы были видны все структуры.
Это еще и методичка, для создания своих фортов.
Поскольку, разумеется, реализуется не на ассемблере, то естественно должны быть проработаны
затруднения, которые возникнут при реализации на языках высокого уровня.
Например, память может представлять не массив байт, а массив 2 или 4 байтовых слов.
И как хранить строки в словарях и тд.

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

Согласен. Так, пусть будет на Си (ради остальных, чтобы понимали лучше + у меня уже кое-что есть).
Вопросы:
1. Нужна полноценная ВФМ? (точнее, нужен ли стек возвратов?)
2. Команды для общения с внешней средой должны быть "статическими"? Т.е. EMIT допустим как примитив.
P.s. Прошу прощение за долгое отсутствие. После сессии вообще буду активным)

Автор:  mOleg [ Вт июн 05, 2018 17:55 ]
Заголовок сообщения:  Re: Как сделать форт-систему без ошибок?

_KROL писал(а):
1. Нужна полноценная ВФМ? (точнее, нужен ли стек возвратов?)

забавный вопрос.
А вы в курсе, зачем в форте два (и более) стека в основе лежит?
Зачем вы будете путаться в адресах возврата, болтающихся под руками?
Или мало эквилибристики на стеках?

_KROL писал(а):
2. Команды для общения с внешней средой должны быть "статическими"? Т.е. EMIT допустим как примитив.

вообще, никто никому ничего не должен, в Форте уж точно.
Часто EMIT определяется, как векторное слово, а, значит переопределяемое.

Кстати, никто не мешает при переопределении слова связывать новое поведение с уже существующим и используемым.
Другое дело, что глюкало получится знатное.

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