Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 02:39

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - ForthEC
Автор Сообщение
  Заголовок сообщения:  Re: ForthEC  Ответить с цитатой
Автор
ForthEC разместил последнюю версию на Github
Сообщение Добавлено: Вт апр 26, 2016 17:01
  Заголовок сообщения:  Re: ForthEC  Ответить с цитатой
ForthEC для Kolibri OS
в теме FFire Demo Эффект огня Колибри ОС форума.
Сообщение Добавлено: Вс апр 24, 2016 14:49
  Заголовок сообщения:   Ответить с цитатой
Цитата:
There is no real dictionary. You've got 128 kB of static variable space, leaving
no room for large arrays.

Кто нибудь обьяснит, что значит это место из readme к Фортек?
Сообщение Добавлено: Вс июл 16, 2006 00:28
  Заголовок сообщения:   Ответить с цитатой
Ну это что-то вроде более низкоуровневой реализации форта. Лишних звезд с неба не собираем, зато на нем можно писать программы!
Кое-где сыро - некоторые глюки с памятью, встроеных функций для строк - всего ничего...
Однако - такая "расширенная дружба" с ассемблером, это не тормоз, как с java. И, главное,- сам компилятор сделан на Эйфории. В принципе-то какая разница на чем компилятор, если бы не идея с единым типом данных - эйфорийными "рядами". Мы это обсуждали:
http://fforum.winglion.ru/viewtopic.php?t=82
Только в Фортеке ряды не реализованы.
Зато исходники к нему имеются. И эйфория, для знающих С - семечки.
Плюс еще добавить лисповские списки...
Жаль только что форум - место где можно потрепаться, а не поработать коллективно...
Сообщение Добавлено: Вс июл 16, 2006 00:21
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Отсутствует CREATE.

И DOES> к нему нет.
Сообщение Добавлено: Сб июл 15, 2006 19:40
  Заголовок сообщения:   Ответить с цитатой
Отсутствует CREATE.
Сообщение Добавлено: Сб июл 15, 2006 19:33
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Или имеются в виду таки локальные переменные?

Проще показать (на примере из "\examples" - вызов DLL):
1й файл - test.exe:
Цитата:
variable lib
variable fptr
\ Load the dll
z" test.dll" call LoadLibrary a@ lib ! lib @ 0= if bye then
\ Get the address of say_it
z" say_it" lib @ call GetProcAddress a@ fptr !
\ Call it indirectly
z" Hello from test.dll !" fptr @ calli
\ Close the dll and exit the program
lib @ call FreeLibrary
bye

2й файл - test.dll:
Цитата:
include ..\..\include\windef.f
: LibMain { hInstDLL reason reserved }
reason DLL_PROCESS_ATTACH = if
1
else
0
then
\ Pop the arguments of the stack, leaving the return-value
swap drop swap drop swap drop ;@
: say_it { message }
MB_OK z" Message" message NULL call MessageBox drop ;

^ Здесь - вход reason и message.
Нюанс: как бы это прояснить... наверно внешние переменные с поведением констант, т.е @ и ! для них не работают. Ну не знаю я точной терминологии! К тому же особой разницы и нет,- адрес или значение на стеке: с тем же асмом любая константа - переменная.
Хищник писал(а):
Вроде бы там просто наборы для short и double. Это нормальный вариант, в '94 загрузка на вещественный стек из памяти будет F@ и SF@.

Спасибо! Будем ковыряться дальше...
Сообщение Добавлено: Сб июл 15, 2006 15:28
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Цитата:
touch ( -- ) Enable compilation (used after a notouch)

А вот это чего? (как работает?)
touch создаёт файл в консоли UNIX? а тут?

О, это изюминка!!! Пара слов notouch/touch - это переход к ассемблеру (MASM32) в процессе компиляции или внутри слов:
Цитата:
\ Random number generator (borrowed from Paul Dixon)
: random ( -- n )
rngh rng
notouch
pop esi
pop edi
mov edx,[edi]
shr edx,1
mov eax,[esi]
mov ecx,eax
rcr ecx,1
rcl edx,1
mov [edi],edx
shl eax,12
xor ecx,eax
mov eax,ecx
shr eax,20
xor ecx,eax
mov [esi],ecx
and ecx,191
mov eax,ecx
touch a@ ;

При создании готовых EXE/DLL даже временные .asm файлы создаются.
Аналогично и для всяких "ARM, Blackfin, M68000 and SuperH"...
Вообщем асм здесь сплошь и рядом - без него с Фортеком не сработаешься!
Сообщение Добавлено: Сб июл 15, 2006 15:13
  Заголовок сообщения:   Ответить с цитатой
Kamikaze писал(а):
Ну это как раз просто - локальные переменные.


Я так понял, что это спецификация параметров. Или имеются в виду таки локальные переменные?
Kamikaze писал(а):
А вот с вариациями на тему floating point - мраки. И шо цэ такэ?

Вроде бы там просто наборы для short и double. Это нормальный вариант, в '94 загрузка на вещественный стек из памяти будет F@ и SF@.
Сообщение Добавлено: Сб июл 15, 2006 13:01
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Отсутствие стека возвратов конечно сильно затрудняет жизнь, но потом привыкаешь...

Так это ж вроде компилятор, стек возвратов - удел интерпретаторов (или я неправильно понял?
Сообщение Добавлено: Сб июл 15, 2006 12:22
  Заголовок сообщения:   Ответить с цитатой
Цитата:
touch ( -- ) Enable compilation (used after a notouch)

А вот это чего? (как работает?)
touch создаёт файл в консоли UNIX? а тут?
Сообщение Добавлено: Сб июл 15, 2006 12:20
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Да нормальный набор. Непонятно с { }, но имеет право на существование.

Ну это как раз просто - локальные переменные.
А вот с вариациями на тему floating point - мраки. И шо цэ такэ?
Отсутствие стека возвратов конечно сильно затрудняет жизнь, но потом привыкаешь...
Сообщение Добавлено: Сб июл 15, 2006 12:09
  Заголовок сообщения:   Ответить с цитатой
Да нормальный набор. Непонятно с { }, но имеет право на существование.
Сообщение Добавлено: Сб июл 15, 2006 10:58
  Заголовок сообщения:   Ответить с цитатой
Не, ну я ща буду ругаться! Через пару дней у автора Фортека день рождения. Хотел его на форум пригласить. Но раз никому не интересно...
Теоретические выкладки конечно здорово. Но на SUBJ при всей его "обрезанности" можно работать. Пол секунды на компиляцию - и полноценная DLL!
А отсутствие либ как-то даже и лучше - меньше путанницы.
Сообщение Добавлено: Сб июл 15, 2006 02:05
  Заголовок сообщения:  ForthEC  Ответить с цитатой
ForthEC
Таки не удержался...
В связи с поднятыми тут вопросами "о наборах слов" - хотелось бы знать Ваше мнение о
Words supported by ForthEC:

! ( n adr -- ) Store the value n at adr
!r+ ( adr n -- adr ) Store n at adr, increment adr by 4 and push it on the stack
". ( adr -- ) Print the string pointed to by adr
' ( -- adr) name Push the address of a user-defined word
( ( -- ) Start a comment
) ( -- ) End a comment
* ( n1 n2 -- n3) Multiply n1 by n2
+ ( n1 n2 -- n3 ) Add n2 to n1
- ( n2 n2 -- n3 ) Subtract n2 from n1
. ( n -- ) Pop the value at the top of the stack and print it
." ( -- ) string Immediately print everything up to the next "
/ ( n1 n2 -- n3 ) Divide n1 by n2
/c ( -- n ) Push the size of a byte (1)
/f ( -- n ) Push the size of a floating point number (8)
/n ( -- n ) Push the size of a stack cell (4)
0< ( n -- f ) Compare n with 0
0= ( n -- f ) Compare n with 0
0> ( n -- f ) Compare n with 0
1+ ( n1 -- n2 ) Add one to n1
1- ( n1 -- n2 ) Subtract one from n1
2* ( n1 -- n2 ) Multiply n1 by two
2/ ( n2 -- n2 ) Divide n1 by two
: ( -- ) name Start a word definition
; ( -- ) End a word definition
;@ ( n -- ) End a word definition and pop the top of the stack into register eax
< ( n1 n2 -- f ) Compare n1 with n2
<< ( n1 n2 -- n3 ) Shift n1 left n2 times
<= ( n1 n2 -- f ) Compare n1 with n2
<> ( n1 n2 -- f ) Compare n1 with n2
= ( n1 n2 -- f ) Compare n1 with n2
> ( n1 n2 -- f ) Compare n1 with n2
>= ( n1 n2 -- f ) Compare n1 with n2
>> ( n1 n2 -- n3 ) Shift n1 right n2 times
@ ( adr -- n ) Reads the value from adr and pushes it one the stack
\ ( -- ) Treat the rest of the line as a comment
a@ ( -- n ) Push the accumulator (eax) on the stack
allot ( n -- ) Allocate n bytes of variable space
and ( n1 n2 -- n3 ) Bitwise AND of n1 and n2
begin ( -- ) Start of begin...while...repeat
bye ( -- ) Abort execution (calls ExitProcess)
c! ( n adr -- ) Stores the low byte of n at adr
c@ ( adr -- n ) Reads one byte from adr and pushes it on the stack as a zero-extended dword
call ( -- ) name Call an external function (eg. Win32 API functions)
calli ( adr -- ) Call the address on the stack
case ( n -- ) Begin a case...endcase
constant ( n -- ) name Declare a constant with the value of n
cr ( -- ) Print the carriage return character
default ( -- ) The default-case in a case...endcase
do ( n1 n2 -- ) Start of do...loop, going from n2 to n1
drop ( n -- ) Drop the top of the stack
dup ( n -- n n ) Duplicate the top of the stack
else ( -- ) The alternative branch of an if...else...then
emit ( n -- ) Print the top of the stack as a character
emms ( -- ) Insert EMMS instruction and clear mmx stack
endcase ( -- ) End of a case...endcase
endof ( -- ) End of an of...endof
erase ( adr n -- ) Set n byte at adr to zero
exit ( -- ) Exit from the current word
expect ( adr n -- ) Read max n bytes from the keyboard and store it at adr
f! ( fp adr -- ) Store a floating point number (64-bit)
f!s ( fp adr -- ) Store a floating point number (32-bit)
f* ( f1 f2 -- f3 ) Floting point multiplication
f+ ( f1 f2 -- f3 ) Floating point addition
f- ( f1 f2 -- f3 ) Floating point subtraction
f< ( f1 f2 -- f ) Floating point compare (less)
f<> ( f1 f2 -- f ) Floating point compare (not equal)
f= ( f2 f2 -- f ) Floating point compare (equal)
f> ( f1 f2 -- f )
f/ ( f1 f2 -- f3 )
f0= ( fp -- f )
f0<> ( fp -- f )
f@ ( adr -- fp )
f@s ( adr -- fp )
false ( -- f ) Push false (0)
fconstant ( fp -- ) name
fcos ( f1 -- f2 ) Take the cosine of f1
fdrop ( fp -- )
fdup ( fp -- fp fp )
ffills ( adr n fp -- )
fill ( adr n1 n2 -- ) Fill n1 bytes at adr with n2
floor ( fp -- n ) Round fp towards zero and store it on the parameter stack
fnegate ( f1 -- f2 ) Negate f1
fpop ( fp -- fp )
fpops ( fp -- fp )
fpush ( n1 n2 -- fp ) Store n1 and n2 on the floating point stack without doing any type conversion
fpushs ( n -- fp ) Store n on the floating point stack without doing any type conversion
fsin ( f1 -- f2 ) Take the sine of f1
fswap ( f1 f2 -- f2 f1 )
fvariable ( -- ) name Declare a floating point variable
i ( -- n ) Push the top element of the loop control stack onto the parameter stack
if ( f -- ) Start of a if...else...then
include ( -- ) name Include a forth file
j ( -- n ) Push the third element of the loop control stack onto the parameter stack
loop ( -- ) End of a do...loop
max ( n1 n2 -- n3 ) n3 is the maximum of n1 and n2
min ( n1 n2 -- n3 ) n3 is the minimum of n1 and n2
mod ( n1 n2 -- n3 ) n3 is n1 modulo n2
negate ( n1 -- n2 ) Negate n1
newline ( -- ) Print the newline character
nip ( n1 n2 -- n2 )
not ( n1 -- n2 ) Bitwise NOT
notouch ( -- ) Disable compilation
null ( -- n ) Put NULL (zero) on the stack
of ( n -- ) Start an of...endof
off ( adr -- ) Stores false at adr
on ( adr -- ) Stores true at adr
or ( n1 n2 -- n3 ) Bitwise OR between n1 and n2
over ( n1 n2 -- n1 n2 n1) Duplicate the second element on the stack
p! ( p adr -- ) Store an mmx register at adr (32-bit)
p@ ( adr -- p ) Read the 32-bit value from adr and put it on the mmx stack
pc+ ( p1 p2 -- p3 ) Add two packed groups of bytes
pc2pw ( p -- p') Convert a group of 4 packed bytes to 4 packed words
pdrop ( p -- )
pdup ( p -- p p )
pick ( n -- ) Duplicate the n:th element on the stack (0=first)
pw* ( p1 p2 -- p3 )
repeat ( -- ) End of a begin...while...repeat
rot ( n1 n2 n3 -- n2 n3 n1 )Rotate the top three elements of the parameter stack
sp0 ( -- adr ) Push the stack base
sp@ ( -- adr ) Push the stack pointer
space ( -- ) Print the space character
spaces ( n -- ) Print n space characters
swap ( n1 n2 -- n2 n1 ) Swap the top two elements of the parameter stack
then ( -- ) End of an if...else...then
touch ( -- ) Enable compilation (used after a notouch)
true ( -- f ) Push the value true (-1)
tuck ( n1 n2 -- n2 n1 n2 )
until ( f -- ) End of a begin...until
variable ( -- ) name Declare an integer variable
w! ( n adr -- )
w@ ( adr -- n )
while ( f -- )
xor ( n1 n2 -- n3 )
z" ( -- adr ) string
{ ( -- ) parameters Specify parameters for a word (eg. : foo { param1 param2 })
} ( -- )
Сообщение Добавлено: Чт июл 13, 2006 17:10

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


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