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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: ForthEC
СообщениеДобавлено: Чт июл 13, 2006 17:10 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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 })
} ( -- )

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 02:05 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Не, ну я ща буду ругаться! Через пару дней у автора Фортека день рождения. Хотел его на форум пригласить. Но раз никому не интересно...
Теоретические выкладки конечно здорово. Но на SUBJ при всей его "обрезанности" можно работать. Пол секунды на компиляцию - и полноценная DLL!
А отсутствие либ как-то даже и лучше - меньше путанницы.

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 10:58 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да нормальный набор. Непонятно с { }, но имеет право на существование.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 12:09 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Да нормальный набор. Непонятно с { }, но имеет право на существование.

Ну это как раз просто - локальные переменные.
А вот с вариациями на тему floating point - мраки. И шо цэ такэ?
Отсутствие стека возвратов конечно сильно затрудняет жизнь, но потом привыкаешь...

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 12:20 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
touch ( -- ) Enable compilation (used after a notouch)

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

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 12:22 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Отсутствие стека возвратов конечно сильно затрудняет жизнь, но потом привыкаешь...

Так это ж вроде компилятор, стек возвратов - удел интерпретаторов (или я неправильно понял?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 13:01 
Не в сети
Administrator
Administrator
Аватара пользователя

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


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

Вроде бы там просто наборы для short и double. Это нормальный вариант, в '94 загрузка на вещественный стек из памяти будет F@ и SF@.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 15:13 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
вопрос писал(а):
Цитата:
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:28 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Или имеются в виду таки локальные переменные?

Проще показать (на примере из "\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 19:33 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Отсутствует CREATE.

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 15, 2006 19:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
вопрос писал(а):
Отсутствует CREATE.

И DOES> к нему нет.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 16, 2006 00:21 
Не в сети
Аватара пользователя

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

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 16, 2006 00:28 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
There is no real dictionary. You've got 128 kB of static variable space, leaving
no room for large arrays.

Кто нибудь обьяснит, что значит это место из readme к Фортек?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ForthEC
СообщениеДобавлено: Вс апр 24, 2016 14:49 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
ForthEC для Kolibri OS
в теме FFire Demo Эффект огня Колибри ОС форума.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ForthEC
СообщениеДобавлено: Вт апр 26, 2016 17:01 
Не в сети

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

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