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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Чт июн 27, 2019 14:31 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
Выглядит как дополнительный аргумент для создания вот этой самой тестовой базы. Если все будет постоянно меняться, будет крайне неудобно вообще приступать к работе. Напротив, если будет галочка напротив пункта "теперь тут сделано то-то и то-то, и в дальнейшем будет только улучшаться", то это уже интересно. Словари тут не так важны. В конце концов, многие вещи делаются и без словарей.

Ну в словари иногда запихиваются слова для реализации доп. синтаксиса. Тех же локальны переменных. По факту мне пришлось править только подобные места :)

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

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Чт июн 27, 2019 16:02 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Я в целом что вижу. Скажем, при обсуждении nnCron на соответствующих форумах в целом на Форт внимания особо не обращали. Просто обсуждали, как выполнить то или иное действие. Обсуждение Форта шло в контексте вот этих задач. С любым другим вариантом Форта видится то же самое - если начать реалистичный проект, код и библиотеки будут подтягиваться к нему.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Чт июн 27, 2019 18:59 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Предложения по проекту будут?)
А то у меня отпуск скоро закончится)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Чт июн 27, 2019 19:40 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
TERMINATE долго набирать с клавы чтобы выйти из Форта вежливо, т.е без Ctrl-C. А BYE не в падлу и набрать.

Что играет роль ?DUP (без которого программировать коряво) ? Типа
VAR @ ?DUP IF ненулевое значение переменной нужно здесь THEN

И без DO и LOOP тоже как-то страннО.

Без 0< легко можно обойтись. : 0< 0 < ; Но без U< программировать по настоящему невозможно. От слова совсем. Некоторые алгоритмы не реализуемы. В частности адреса памяти я автоматически сравниваю как беззнаковые, иначе верхняя половина памяти окажется как бы ниже нижней. Вообще применение знаковых сравнений там где это явно не нужно раскладывает по тексту время от времени срабатывающие ошибки. Мы ведь интуитивно думаем беззнаковыми числами, выкидывая из головы что где-то там выше положительные числа вдруг превращаются в отрицательные. Ну и там
: WITHIN ( n1|u1 n2|u2 n3|u3 -- flag ) OVER - >R - R> U< ;

Кста : создатель биткоина применил знаковые там где нужны только беззнаковые и заложил багу. Одно из последствий : https://bitcointalk.org/index.php?topic ... sg51037196
Это один из примеров разложенной по тексту ошибки.


Последний раз редактировалось Ethereal Пт июн 28, 2019 17:26, всего редактировалось 17 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Чт июн 27, 2019 20:06 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Hishnik писал(а):
Что-то уровня "тест, демонстрирующий вычисление суммы элементов массива" и прочее в таком роде.

На http://rosettacode.org можно набрать и задач и реализаций, если кто-то решит заняться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 07:40 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ethereal писал(а):
TERMINATE далго набирать с клавы чтобы выйти из Форта вежливо, т.е без Ctrl-C. А BYE не в падлу и набрать.

Что играет роль ?DUP (без которого программировать коряво) ? Типа
VAR @ ?DUP IF ненулевое значение переменной нужно здесь THEN

И без DO и LOOP тоже как-то страннО.

Без 0< легко можно обойтись. : 0< 0 < ; Но без U< программировать по настоящему невозможно. От слова совсем. Некоторые алгоритмы не реализуемы. В частности адреса памяти я автоматически сравниваю как беззнаковые, иначе верхняя половина памяти окажется как бы ниже нижней. Вообще применение знаковых сравнений там где это явно не нужно раскладывает по тексту время от времени срабатывающие ошибки. Мы ведь интуитивно думаем беззнаковыми числами, выкидывая из головы что где-то там выше положительные числа вдруг превращаются в отрицательные. Ну и там
: WITHIN ( n1|u1 n2|u2 n3|u3 -- flag ) OVER - >R - R> U< ;


Насчёт BYE подумаю, проскакивали такие мысли.
?DUP нет и не будет, ибо это странное слово на мой взгляд.
DO LOOP есть в поставке файл ~er/doloop.f В ядре же их нет, поскольку мне они ни разу не требовались.
WITHIN есть в поставке ~er/data-stack/within.f В ядре нет по той же причине. В той же папке другие редкие слова для стека данных. ROLL NDROP REVERSE
Насчёт >U U< введу.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 11:59 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Victor__v писал(а):
Насчёт BYE подумаю, проскакивали такие мысли.
?DUP нет и не будет, ибо это странное слово на мой взгляд.

Все, что определяется через уже существующее, может быть добавлено или нет, на вкус. Если есть какой-то выход, можно его определить хоть через BYE, хоть через ДОСВИДАНИЯ, это уже вопрос удобства. С ?DUP аналогично:

: ?DUP DUP IF DUP THEN ;

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

Victor__v писал(а):
DO LOOP есть в поставке файл ~er/doloop.f В ядре же их нет, поскольку мне они ни разу не требовались.

Вроде бы достаточно часто нужен счетчик цикла.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 14:15 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
?DUP в ядре не будет, усё если нужно можно определить никто же не мешает.
Вместо DO LOOP я пользуюсь BEGIN WHILE REPEAT совместно со стеком возвратов, мне хватает.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 15:00 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Victor__v писал(а):
Вместо DO LOOP я пользуюсь BEGIN WHILE REPEAT совместно со стеком возвратов, мне хватает.

?DUP можно выразить, если кому-то нужно, а вот DO LOOP сложнее выразить на Форте, лучше на ассемблере (ну или на том, на чем пишется конкретный Форт). BEGIN WHILE REPEAT тут не вполне замена, потому что нужен счетчик цикла.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 15:57 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
Victor__v писал(а):
Вместо DO LOOP я пользуюсь BEGIN WHILE REPEAT совместно со стеком возвратов, мне хватает.

?DUP можно выразить, если кому-то нужно, а вот DO LOOP сложнее выразить на Форте, лучше на ассемблере (ну или на том, на чем пишется конкретный Форт). BEGIN WHILE REPEAT тут не вполне замена, потому что нужен счетчик цикла.


Код:
: DO
0 RLIT,
HERE CELL-
POSTPONE 2>R
HERE
; IMMEDIATE


: LEAVE
2 CELLS LIT, POSTPONE RP@ POSTPONE + POSTPONE RP! 
RET,
; IMMEDIATE


: ?DO
POSTPONE DO
1 LIT, POSTPONE RPICK
S" 0= IF LEAVE THEN" EVALUATE
; IMMEDIATE



: LOOP
S" RP@ 1+! 2R@ = IF LEAVE THEN" EVALUATE
3 [CALL] AGAIN
HERE SWAP !
; IMMEDIATE

: +LOOP
S" RP@ +! 2R@ 1+ < IF LEAVE THEN" EVALUATE
3 [CALL] AGAIN
HERE SWAP !
; IMMEDIATE



' R@ HEADER I LAST-LFA L>CFA ! INLINE


Код:
BEGIN WHILE REPEAT тут не вполне замена, потому что нужен счетчик цикла.

0 >R BEGIN R@ какое-то-число XOR WHILE ... RP@ 1+! REPEAT RDROP
Что Вы тут сложности придумываете?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 16:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
По сравнению с просто "I" огромная разница. Циклы еще характерны для интенсивных вычислений, поэтому чем больше там будет "эмуляции счетчика", тем больше времени будет потрачено вхолостую. Форт, конечно, и так не сверхбыстрый сам по себе, но закладывать такие грабли выглядит странно. Кроме того, обработка двумерных массивов потребует еще J (у меня встречается и K для третьего уровня цикла). Так что это та самая ситуация, когда небольшое добавление может существенно помочь.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 16:49 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Да определить-то не вопрос. Я для твоей Новы уже сделал и проверил :
Код:
: (DO) R> DUP @ >R CELL+ ROT >R 2>R ;
: DO POSTPONE (DO) HERE 0 , ; IMMEDIATE
: I R> R@ SWAP >R ;
: UNLOOP R> RDROP RDROP RDROP >R ;
: LEAVE RDROP RDROP RDROP ;
: (LOOP) R> 2R> 1+ 2DUP = IF 2DROP RDROP CELL+ ELSE 2>R @ THEN >R ;
: LOOP POSTPONE (LOOP) DUP CELL+ , HERE SWAP ! ; IMMEDIATE
Только когда то-же самое на ассемблере то будет куда как быстрее.
Цитата:
?DUP нет и не будет, ибо это странное слово на мой взгляд.
Так ты только для себя пишешь ? И при этом выкладываешь ?
Есть как бы слова core , которые есть у всех Фортов, и странно их состав обрезать. ?DUP (или Фиг-фортовский вариант -DUP) это не странное слово. Когда начнешь его применять вдруг обнаружишь, что оно очень естественное во многих ситуациях. А я бы еще к core словам добавил еще и TUCK , тоже во многих случаях позволяет громоздкое записать кратко.

У тебя в словаре много слов внутренней реализации вроде L>cdwxtFA или NOTF-(VOCS::??) , есть и малополезные вроде 'TAB' , вместо которого можно было писать просто 9 , а вот с самыми нужными беда, беда.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Пт июн 28, 2019 18:11 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
DO LOOP есть в поставке файл ~er/doloop.f
Неправильное оно там
Код:
~ER/DOLOOP.F

: TEST
  -5 5 DO
   I .
  -1 +LOOP
;

TEST TERMINATE
Результат
Код:
NOVA-FORTH CDW ver 1.07 author: Victor Erygin (~er)
5
только один оборот цикла. А должно быть
5 4 3 2 1 0 -1 -2 -3 -4 -5

---------------------------------------------------

Вот так другое дело :
Код:
~ER/DOLOOP.F

: +LOOP
  S" 2R@ - 1- SWAP RP@ +! 2R@ - 1- XOR 0 < IF LEAVE THEN" EVALUATE
  3 [CALL] AGAIN
  HERE SWAP !
; IMMEDIATE

: TEST
  -5 5 DO
   I .
  -1 +LOOP
;

TEST TERMINATE
Переопределил твой кривой +LOOP. Результат :
Код:
NOVA-FORTH CDW ver 1.07 author: Victor Erygin (~er)
5 4 3 2 1 0 -1 -2 -3 -4 -5
И 0< вместо 0 < в определении +LOOP оказалось бы кстати.

---------------------------------------------------

Даже вот так пооптимальнее будет :
Код:
: +LOOP
  S" R@ + R> R@ - OVER R@ - XOR SWAP >R 0 < IF LEAVE THEN" EVALUATE
  3 [CALL] AGAIN
  HERE SWAP !
; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Сб июн 29, 2019 00:04 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
На те еще багу.
Код:
CREATE BUF 11 C, 22 C, 33 C, 44 C,

BUF BUF 1+ 3 MOVE

BUF C@ .
BUF 1+ C@ .
BUF 2+ C@ .
BUF 3 + C@ .
Результат
Код:
NOVA-FORTH CDW ver 1.07 author: Victor Erygin (~er)
11 11 11 11 OK
OK
Это вот так CMOVE может копировать, а MOVE должно дать
11 11 22 33
потому-что у MOVE в строчке-назначении должно оказаться ровно то, что было в строчке-источнике. Ну такое вроде общепринятое понимание что CMOVE это самое быстрое копирование (беспроблемное для заведомо неперекрывающихся строк), а вот MOVE копирование всегда правильное.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova-forth версии
СообщениеДобавлено: Сб июн 29, 2019 00:23 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ethereal,
Спасибо за +LOOP Поправлю.
По поводу отрезка [ RET, ]
Я несколько в недоумении. Есть же слово EXIT

По поводу ?DUP TUCK и иже с ними.
Нова стандарт не поддерживает, ссылаться на core несколько странно.
Цитата:
есть у всех Фортов, и странно их состав обрезать

Все обобщения ложные :)
в Форке от m'Oleg и Кварке хищника нет слова ?DUP Впрочем, давайте забьём на него, ладушки?

По поводу реализации DO LOOP на асме. Можно конечно, но зачем?
Тот же код слова DO в этом плане оптимален. На ассемблере будет точно так же.

Цитата:
Это вот так CMOVE может копировать, а MOVE должно дать
11 11 22 33


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

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4  След.

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


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

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


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

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