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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Ср янв 18, 2023 10:01 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Проект EasyForth
(реализация на JS некоторого базиса Форт для
Online обучение основам Форт c составлением игры - змейка - играбельна)

P.S. Что интересно у проекта куча форков и такой NVM Learn
Цитата:
Этот проект призван представитьь простое интерактивное изучение NeoVM (виртуальная машина Neo Blockchain).
(*) Обучение на основе "EasyForth!" туториала от @skilldrick по языку FORTH..


И ещё в игровом наполнении Форт, на движке JS

Mako
Mako.js

j e f o r t h . 3 w e


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Ср янв 18, 2023 10:30 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Змейка тут у кого-то из студентов в задании. На Verilog, для ПЛИС.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 30, 2023 22:28 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Один из проектов Forth (Форт) c Github (Rust)
IorForth


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Ср фев 01, 2023 17:22 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
А, не рассмотреть ли и какую то реализацию Форта на ассемблере?
Как пример и неплохо представленный JonesForth на Github в его разных форках и не только на ассемблере?
Перевод JoneForth oт rigidus
NasmJf - он же перенесённый на Nasm ассемблер.
(у меня сходу, почему то, незапустился - пришлось сделать пару мелких правок)
Nasmjf Forth -блог автора порта на Nasm

P.S. Интересно, что автор JonesForth не дощёл до реализации DOES> (на местном сайте есть статья переведённая mOleg по его пониманию)
Некоторые моменты приведённых решений JonesForth выглядят интересными для расширения понимания вариантов реализации Форт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн мар 06, 2023 03:36 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Ilya писал, что под Linux64 пришлось для его задач перейти на применение GO языка,
(если ничего не путаю)
стало интересно, а какие варианты уже реализаций Форт сделали на GO и далее в чём сложившаяся
инфраструктура около GO языка может быть использована в связке с Форт.

Беглый поиск Forth Go на Github находит некоторое число реализаций Форт.

P.S. Под Linux32 загрузил из менеджера пакетов GO и собрал пару реализаций Форт на GO.
Интересно, что и консольный Форт получился в размере около ~2Мб
Такую "большую" библиотеку времени исполнения итогоаый файл включает в себя?

Руководство по языку Go

Ещё недавно издали книгу на русском языке: Фриман - "Pro Go Полное руководство"
Интересно, а Forth на Go может быть и насколько быстрым в сравнении хотя бы с gForth


Ещё немного освоился со сборкой QT5 приложений под Puppy Linux 32, в частности скомпилил LiteIde и Pencil2D,
оболочку QT-box-editor для Tesseract.

Собрал для этого в Deb пакеты пока 5.9.9 версии из исходников отдельных модулей Отсюда с сайта QT
Примеры из книги Шлее по QT 5.10 все собрались, за исключением 46 - Web (Web модуль не собирал в Deb пакет ввиду его большого размера исходников)
Если кому будут интересны отдельные моменты этого процесса, то сделаю небольшое описание.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Ср мар 08, 2023 13:18 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
KPG писал(а):
Ilya писал, что под Linux64 пришлось для его задач перейти на применение GO языка,
(если ничего не путаю)
стало интересно, а какие варианты уже реализаций Форт сделали на GO и далее в чём сложившаяся
инфраструктура около GO языка может быть использована в связке с Форт.

.....
Интересно, что и консольный Форт получился в размере около ~2Мб
Такую "большую" библиотеку времени исполнения итогоаый файл включает в себя?

.....

Ещё недавно издали книгу на русском языке: Фриман - "Pro Go Полное руководство"
Интересно, а Forth на Go может быть и насколько быстрым в сравнении хотя бы с gForth


.....

- всё верно. Именно на GO теперь делаю "верх".
Хоть Go и позиционирутся как "общесистемный" ЯП, но народ в основном его пользует для backend.
У Go весьма хорошо с сетевыми штуками (TCP, UDP, ...) + параллельное выполнение кода ("потоки"), ...

- размеры бинарников конечно впечатляют, но это (видимо) плата за то, что программа не тянет за собой кучу зависимостей (сторонних либ).

- интересная книжка, но самое "смешное", что поиск сразу выдаёт электронную версию этой книги, а купить бумажную хз где ! Эх! Старый я. Люблю лампово-бумажные книги.
Так вроде gforth на Сях написан, а Go всё таки уступает Сям по скорости!?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пт апр 28, 2023 13:29 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
A Forth Interpreter in Ruby
\ This was a project for the third-year course CSC 330: "Programming Languages" at the University of Victoria.
Цитата:
Supported words

+, -, *, / and MOD: add, subtract, multiply, divide and calculate the division remainder, respectively, for the top two stack values and then push the result back to the stack.
DUP: duplicates the TOS
SWAP: swaps the first two elements on the top of the stack (TOS)
DROP: pops the TOS and discards it
DUMP: prints the stack without modifying it
OVER: takes the second element from the stack and copies it to the TOS
ROT: rotates the top three elements of the stack
. : pops the TOS and prints the value as an integer
EMIT: pops the TOS and prints the value as an ASCII character
CR: prints a newline
=, < and >: all pop two elements from the TOS and push -1 to the TOS if the first element is equal, smaller than, or greater than the second element, respectively; otherwise, 0 is pushed to the TOS
AND, OR and XOR: pop two elements from the TOS and push back bitwise and, or and xor, respectively, of the first and second elements to the TOS
INVERT: pops a value from the TOS and pushes its bitwise negation (inversion) back
." : indicates the beginning of a string that is terminated by a subsequent word that ends with "
EXIT: terminates the program.

User can also define new words which a new word is just a collection of other words and values. A definition starts with the word : and is followed by the name of the new word. Afterwards, the definition follows until a ; word is encountered. For example,

: neg 0 SWAP - ; (input)
ok (output)
5 neg . (input)
-5 ok (output)

The interpreter supports control structure statement IF (ELSE ) THEN, that executes the block if the TOS is -1; else if the TOS is 0 then the block is executed if it exists. In either case, the execution continues after THEN. For example,

6 8 -1 if ." <true> block is executed " else ." <false> block is executed " Then dump (input)
<true> block is executed (output)
[6, 8]
ok

The intereter also supports BEGIN UNTIL and DO LOOP. In BEGIN loops, the loop body is executed until the UNTIL encounters a non-zero value at the TOS. For example,

0 begin dup . 1 + dup 10 > until (input)
0 1 2 3 4 5 6 7 8 9 10 ok (output)

For DO loops, DO pops two values from the stack: begin and end. It sets a loop counter to begin and repeats the loop body while incrementing the counter until it reaches end (similar to Python’s for i in range(begin, end)). The counter can be accessed within the loop by the word I that pushes the current counter to the TOS.

10 0 do i . loop (input)
0 1 2 3 4 5 6 7 8 9 ok (output)

Note: ; does not necessarily have to end on the line where : began. Same goes for THEN/UNTIL/LOOP, and the corresponding IF/BEGIN/DO. Also, I returns an error outside the DO...LOOP construct.

Inaddition, the interpreter allows users to name constants and save values in the heap memory through variables.

VARIABLE <name> defines the variable name. name then becomes a word that pushes its heap memory address to the TOS. In the implementation, the addresses starts at 1000.
<name> ! pops the TOS and stores the popped value in the name’s location at the heap.
<name> @ pushes the value stored in the name’s location to the TOS.
<value> CONSTANT <name> defines the constant name that points to value.
ALLOT pops a value n from the TOS and reserves a contiguous block of size n in the current location of the heap. It is always used in conjunction with CELLS which multiplies the TOS with the cell width (in the implementation, the cell width is set to always be 1). ALLOT is useful for creating contiguous arrays.

Examples

: ? @ . ; (input) (A helper that prints the value stored in the variable’s location)
ok (output)
10 numbers 0 CELLS + ! (input)
ok (output)
20 numbers 1 CELLS + ! (input)
ok (output)
30 numbers 2 CELLS + ! (input)
ok (output)
40 numbers 3 CELLS + ! (input)
ok (output)
2 CELLS numbers + ? (input)
30 ok (output)
3 CONSTANT third (input)
ok (output)
third CELLS numbers + ? (input)
40 ok (output)

...


Запуск в Onlne Ruby


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Вс июл 09, 2023 20:22 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Небольшая учебная реализация "Форт" на Паскаль, запускающаяся Online
https://github.com/timcryt/forth


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Вс июл 09, 2023 20:26 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
: ... ;|BEGIN ... WHILE ... REPEAT|BEGIN ... UNTIL|IF ... ( ELSE ) .,. THEN construnctions cannot be multiline.

Зато Форт! :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Вс сен 03, 2023 19:20 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
LbForth (C)

P.S. ueForth (for posix, esp32, win32, win64, web) собирается с помощью nodejs.
uEforth

Сборки под Windows


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн сен 04, 2023 03:00 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Смотрим.

Код:
typedef void(*builtin)();
builtin builtins[MAX_BUILTIN_ID] = { 0 };


Т.е. построено на базе "указателей на void()". Достаточно быстро работающая схема. Недостаток в современных условиях - ложные срабатывания антивирусов, которые считают подозрительным код, переходящий на динамически добавляемые адреса.

Код:
DispatchMessageA TranslateMessage PeekMessageA GetMessageA


Т.е. кроме консоли есть самый базовый вариант Windows - с ручной обработкой сообщений. Серьезно? Этому стилю программирования уже 30 лет.

Соответственно, вопросы. Для какой программы может это все пригодиться, и почему для нее удобнее именно этот вариант Форта? Аргументы "потому что Форт гибкий, эффективный, настраиваемый" пока не работают, потому что где тут гибкость? Пока видно только процесс забегания в хвост устаревшим стилям разработки с повторением базовых вещей - в итоге придется писать примерно как 30 лет назад, "только на Форте".


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

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


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

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


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

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