Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс май 27, 2018 11:49

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 139 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пт авг 16, 2013 21:31 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
getmyip на вход ничего не принимает
Еще я к ACCEPT добавил S , а 6 на 7 не исправил.
Код:
fdef("SACCEPT",7,0,SACCEPT)
   mov   %eax,%edi
   jmp   c_accept

fdef("C_SERV",6,0,C_SERV)
   mov   %eax,%edi
   jmp   c_serv

fdef("MYIP",4,0,MYIP)
   call   DUP
   jmp   getmyip


VoidVolker писал(а):
Как/чем его пересобрать?
$ make

Так и собираю.
make clean
на всякий случай делаю.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пт авг 16, 2013 22:35 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
Код:
fdef("MYIP",4,0,MYIP)
   call   DUP
   jmp   getmyip

А DUP для получения результата функции на вершине стека, правильно? Т.е. в регистре eax.

Mihail писал(а):
VoidVolker писал(а):
Как/чем его пересобрать?
$ make

Так и собираю.
make clean
на всякий случай делаю.

Ага, вот оно как - а у меня без clean не пересобирается почему-то. Таки пересобралось =)
Отлично, сокеты стартуют. Теперь многопоточность - под линуксом это fork и clone. Это тоже все надо подключать как си библиотеку?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
А DUP для получения результата функции на вершине стека, правильно? Т.е. в регистре eax.

Правильно. При использовании TOS для выделения элемента на стеке, перемещение указателя не достаточно .
Нежно еще скопировать TOS.

VoidVolker писал(а):
Это тоже все надо подключать как си библиотеку?

Проще всего, взять пример не Си и вызвать его из Форта.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Сб авг 17, 2013 12:06 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
Проще всего, взять пример на Си и вызвать его из Форта.

Да, примерно так я и хочу сделать.
Вот тут кстати нашел форк для gForth: https://github.com/ayrnieu/forth-garden ... th/fork.fs
Как видно - там си-либы вызываются прямо в форт-коде.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Сб авг 17, 2013 16:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6314
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
mgw писал(а):
Получается, что 32 разрядов не хватает для точности расчетов, правильно я понял?

Почти так. Дело обычно не в самой точности как таковой (32 разряда - это довольно много), а в динамическом диапазоне. Допустим, нам надо обеспечить ошибку в 1%. Мгновенно прикинув в уме, мы можем решить, что хватит и одного байта (и даже 7 бит), потому что достаточно записывать числа от 0 до 100. Но это неправильный подход, потому что так мы обеспечим ошибку в 1% только при максимальном значении измеряемого параметра. А если наши числа будут болтаться в диапазоне 2-3? Тогда отклонение в единицу даст 50 или 33% ошибки. Но если мы добавим разрядов справа, превратив 2-3 в 200-300, то максимальное значении 100 превратится уже в 10 000.

В цифровой обработке сигналов итоговая разрядность определяется не только разрядностью АЦП (для скоростных АЦП она обычно не превышает 12-14) и разрядностью коэффициентов фильтров, но и количеством коэффициентов. 12 бит, умноженные на 16, дадут уже 28-разрядный результат. Если мы возьмем 16 коэффициентов, это добавляет еще 4 бита к возможному значению. Получается 32 разряда в наихудшем случае, когда амплитуда обрабатываемого сигнала максимальна. Здесь есть не такое уж большое пространство для маневра (например, не все коэффициенты равны максимальному числу), но уже вот этот пример с отнюдь не предельными характеристиками не особо влезает в 32 бита.

mgw писал(а):
Пример задачи на ФОРТЕ, в которой не хватает памяти, просто интересно.

Синтез фильтров высоких порядков, разнообразные задачи численного моделирования методом конечных элементов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Вс авг 18, 2013 10:49 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail
А как/куда следует подключать си файлы? Что-то никак не получается. Разобрался:
Makefile
Код:
CC=gcc
LIBS = -ldl -m64

all: spf64

spf64:  main.o amain.o sopen.o clibs.o
   $(CC) -o  spf64 amain.o main.o  sopen.o  clibs.o $(LIBS) -Wl,-Map,messy.map
   objdump -h -S -C -r spf64 > spf64.lss

main.o: main.c
   $(CC) -c -g -m64 -mtune=i686 main.c
   objdump -x -S main.o > main.lss

sopen.o: spf/sopen.c
   $(CC) -c -g -m64 -mtune=i686 spf/sopen.c

clibs.o: clibs.c
   $(CC) -c -g -m64 -mtune=i686 clibs.c

amain.o: spf/amain.S spf/img.s
   $(CC) -c -g -m64 -mtune=i686 spf/amain.S

spf/img.s:  spf/src/linux/*.f spf/src/compiler/*.f spf/src/*.f spf/_mak/djgpp/gdis.f
   spf/bbuild.sh


clean:
   -rm -f spf64
   -rm -f *.o


Баг в длине строки в amain.S:
Код:
fdef("_SLITERAL-CODE",0xA ,0 ,_SLITERALsubCODE)

А должно быть:
Код:
fdef("_SLITERAL-CODE",14 ,0 ,_SLITERALsubCODE)

Еще:
Код:
fdef("VALUE-CODE",0xE , 0, VALUEsubCODE)
fdef("'TYPE",7 ,0,ticTYPE )
fdef("REPOSITION-FILE",9,0 ,REPOSITIONsubFILE)
fdef("'(ABORT'')",7,0,ticcABORTdticcend)
fdef("_QUSER-VALUE-CODE",0x10 ,0 ,_QUSERsubVALUEsubCODE)

Код:
fdef("VALUE-CODE",10 , 0, VALUEsubCODE)
fdef("'TYPE",5 ,0,ticTYPE )
fdef("REPOSITION-FILE",15,0 ,REPOSITIONsubFILE)
fdef("'(ABORT'')",10,0,ticcABORTdticcend)
fdef("_QUSER-VALUE-CODE",17 ,0 ,_QUSERsubVALUEsubCODE)


И как сохранить форт-программу в бинарник?
Как передать более одного параметра со стека в си-функцию?
Почему отключено USER-VALUE? Не работает?
Что с кодировками? В некоторых файлах часть комментариев нормально отображается, а часть - квадратиками.
main.c:261:
Код:
s_open(8880,"localhost");

Зачем? Почему-то во время выхода через BYE оно выдает "connect err".
amain.s:914
Код:
fdef("CLOSE-FILE",10,0 ,CLOSEsubFILE)
      mov    %eax,%edi
      call   read
      retq

Так вот почему оно ошибку выдает при попытке закрыть что-то )

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc



За это сообщение автора VoidVolker поблагодарил: Mihail
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Вс авг 18, 2013 21:12 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Поймал какой-то странный глюк второй раз уже:
Код:
$ make
...
spf/bbuild.sh
rm: невозможно удалить «img.ss»: Нет такого файла или каталога
mv: не удалось выполнить stat для «img.s»: Нет такого файла или каталога
spf/bbuild.sh: 4: spf/bbuild.sh: ./spforig: not found

Хотя тот же spforig на месте, копирование из бэкапа этих файлов не дает ровным счетом никакого эффекта.

Этот глюк возникает при изменении любого файла из каталога spf/src - даже если содержимое не менялось, т.е. просто при сохранении файла. Специально проверял - исходный и сохраненный файл совпадают байт-в-байт. Это как так? Попробовал просто изменить дату файла - результат такой же.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 09:16 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Добавил fork() - работает. Как отключить новый дочерний процесс от консоли - чтобы он не принимал данные с консоли?
А при попытке его остановить из спф-а приводят к непрерывному цикличному выводу Ok в консоли.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 12:24 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
Добавил fork() - работает. Как отключить новый дочерний процесс от консоли - чтобы он не принимал данные с консоли?


Для PFE был пример сокет сервера с fork-ом. Что-то ненайти.
fork по сути 2-й запуск той-же программы. Т.ч. по моему, он не особо и нужен.
В fpauk.6 есть пример использования pthread на Си.
Можно использовать для LinuxSPF64. Только для нового потока,
в r14d нудно записать его базу для юзоровских переменных.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 12:40 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
А остальные вопросы?
Mihail писал(а):
Для PFE был пример сокет сервера с fork-ом.

Это-то у меня уже давно есть.
Mihail писал(а):
fork по сути 2-й запуск той-же программы. Т.ч. по моему, он не особо и нужен.

Как это не нужен?! Нужен конечно - сегодня все процессоры многоядерные. А в сокет-сервере в любом случае нужна многопоточность и параллельная обработка запросов. Тем более в линуксе два основных способа создания потоков - fork и clone.
Mihail писал(а):
Только для нового потока, в r14d нудно записать его базу для юзоровских переменных.

А откуда взять её? Можно пример?

Не работает ZTYPE:
Код:
CREATE n 0x3132333435363738 , 0 , n ZTYPE


А как в сишной функции вызвать форт процедуру? Для clone().

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 13:54 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
А в сокет-сервере в любом случае нужна многопоточность и параллельная обработка запросов.

Да. Решать эту проблему вызовом нового приложения не удобно из за необходимости передавать ему параметры.

VoidVolker писал(а):
Mihail писал(а):
Только для нового потока, в r14d нудно записать его базу для юзоровских переменных.

А откуда взять её? Можно пример?


Можно выделить на вершине кодофайла
Код:
CREATE NEW-UP USER-HERE ALLOT

Можно аллокировать
Код:
USER-HERE  ALLOCATE THROW VALUE NEW-UP

Потом не плохо было-бы проинициализировать значениями главного потока.
Код:
R0 CONCTANT OPERATOR
OPERATOR   NEW-UP  USER-HERE MOVE


VoidVolker писал(а):
Код:
s_open(8880,"localhost");

Зачем? Почему-то во время выхода через BYE оно выдает "connect err".
a


Это я смотрел, как s_open передаются параметры.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 14:24 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
Да. Решать эту проблему вызовом нового приложения не удобно из за необходимости передавать ему параметры.

Ну а как иначе передать ему номер сокета для приема входящих данных? И вообще - форк, это не запуск нового приложения, а частичное копирование уже запущенного процесса. Для запуска приложений используется execve(). Это в винде есть процессы и потоки, а в линуксе - и процесс и поток по сути одно и то же. После вызова fork() управление возвращается одновременно и родителю и потомку, но с разными параметрами на стеке - родитель получает ноль, а потомок - свой ID. Я вот хочу еще clone сделать - но ему нужно передавать функцию стартовую.

Не хватает 2OVER, D=.

Ошибка в amain.S:276
Код:
fdef("w!",2,0,Wsave)

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 16:23 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
Не хватает 2OVER, D=


В http://fpauk.narod.ru/gfwords.html можно взять.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 17:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
В http://fpauk.narod.ru/gfwords.html можно взять.

Что-то там нет ассемблерного определения 2OVER.
Так что на счет остальных вопросов? См. ЛС.
VoidVolker писал(а):
И как сохранить форт-программу в бинарник?
Как передать более одного параметра со стека в си-функцию?
Почему отключено USER-VALUE? Не работает?
Как отключить новый дочерний процесс от консоли - чтобы он не принимал данные с консоли?
А при попытке его остановить из спф-а приводят к непрерывному цикличному выводу Ok в консоли.
Как в сишной функции вызвать форт процедуру? Для clone().
Что с кодировками? В некоторых файлах часть комментариев нормально отображается, а часть - квадратиками.
Код:
$ make
...
spf/bbuild.sh
rm: невозможно удалить «img.ss»: Нет такого файла или каталога
mv: не удалось выполнить stat для «img.s»: Нет такого файла или каталога
spf/bbuild.sh: 4: spf/bbuild.sh: ./spforig: not found

Этот глюк возникает при изменении любого файла из каталога spf/src - даже если содержимое не менялось, т.е. просто при сохранении файла.

Еще бы сделать вывод нормального сообщения об ошибке - номер строки в файле и позиция.

Нету USER-VECT.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: SPF/Linux
СообщениеДобавлено: Пн авг 19, 2013 21:13 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1253
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
в r14d нудно записать

А как? Можно пример?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 139 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10  След.

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


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

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


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

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