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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: SPF под Linux
СообщениеДобавлено: Ср ноя 05, 2008 13:36 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Скачал. Распаковал. Пытаюсь освоить. Запускается, работает. Спасибо доброму человеку, взявшего труд по портированию СПФ на Linux. Тем более приятно, что запустился он на мини Дитрибутиве (к слову, это puppyrus 3.01). Появилось несколько вопросов, хотел бы их озвучить..

Примечание 1.
Распаковал архив в домашнюю директорию. Структуру дистрибутив сберег с Windows. Т.к работаю под root, то получилась у меня следующая структура
Код:
\root
  spf
     lib
     src

каталог devel уже сам сделал.... Что не есть правильно по идеалогии Unix. И создает определенные неудобства. Поясню. Скрипт приходится запускать с полной командной строкой. Примерно, так
Код:
cd /root/spf/devel/~alf/
# ../../spf4 test.f

Если же положить исполняемый модуль spf4 в "правильную" директорию: /usr/sbin/spf было бы куда лучше :-) Если не сложно, можно это учесть в последующих сборках?

Примечание 2.
Попробовал сделать исполняемый модуль, не получилось. Оказывается эта функция завязана на компиляторе gcc. Компилятор сам по себе здоровый и не хочется его тянуть в систему. Можно ли в последующие дистрибутивы сключить необходимые утилиты или, что еще лучше, вообще избавиться от этой зависимости :-)

Примечание 3.
Как логическое продолжение примечан 2. Т.к запускать программулинки все-таки нужно, то привычный в мире Unix способ запуска скриптов не проходит :( Т.е если вставить первую строчку в листинг для запуска скрипта:
Код:
#!/root/spf/spf4
то интерпретатор СПФ на нее начинает ругаться и скрипт не стартует... Можно как-то "научить" интерпретатор строчки такого вида считать комментариями?

Оттаке....


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

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
В догонку. При работе часто возникает необходимость поиска в листингах фрагмента текста, который бы описывает / иллюстрирует то или иное использование слова. Можно восползоваться вот такой командой:
Код:
grep -r --include='*.f' -i ': find' /root/spf/
Она говорит: искать по всем поддиректориям /root/spf/ в фалах *.f подстроку ": find" и выводить перечень этих файлов на консоль. Пример вывода:
Код:
./lib/ext/vocs.f:C" NEAR_NFA" FIND NIP 0=
./lib/ext/debug/tracer.f:    NextWord SFIND DUP 0= ABORT" not found"
./lib/ext/disasm.f:C" UPC" FIND NIP 0=
./lib/ext/disasm.f:: FIND-REST-END ( xt -- addr | 0)
./lib/ext/disasm.f:    ' DUP FIND-REST-END ['] REST-AREA CATCH DROP
./lib/posix/file.f:    LPCTSTR lpFileName, // address of name of file to find path for
./lib/include/tools.f:  NextWord  SFIND  IF DROP TRUE ELSE 2DROP FALSE THEN
./lib/include/float2.f:   BL WORD FIND

оформил в виде bash скрипта, заметно упростил себе жизнь :-) Мне кажется что это несколько проще и комфортнее чем поиск через файловый менеджер (Far, TC) в Windows.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 06, 2008 11:25 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
AlexF, спасибо за feedback.

AlexF писал(а):
Примечание 1.
Если же положить исполняемый модуль spf4 в "правильную" директорию: /usr/sbin/spf было бы куда лучше :-) Если не сложно, можно это учесть в последующих сборках?

Архивы которые сейчас выложены для скачивания - это то что называется source дистрибутивы. Т.е. пользователь их компилирует(там включён собранный бинарник, но это не совсем правильно) и устанавливает сам куда ему удобно. В /usr/bin (а не sbin :) ) можно будет устанавливаться из бинарных пакетов (в релизе точно будет deb пакет). Т.е. из сорс дистрибутива вы всё настраиваете самостоятельно. Например я сейчас сделал так : в ~/bin положил симлинк на spf и добавил этот "пользовательский bin" в PATH в .bashrc (этот каталог удобно использовать и для всяких других вспомогательных скриптов)
Код:
if [ -d ~/bin ]; then
    export PATH=~/bin:$PATH
fi


AlexF писал(а):
Примечание 2.

Попробовал сделать исполняемый модуль, не получилось. Оказывается эта функция завязана на компиляторе gcc. Компилятор сам по себе здоровый и не хочется его тянуть в систему. Можно ли в последующие дистрибутивы сключить необходимые утилиты или, что еще лучше, вообще избавиться от этой зависимости :-)

Нет, я не знаю как избавится от этой зависимости - gcc нужен для линковки (чтобы вызвать ld с нужными параметрами) и для config.c (вычисление платформенно-зависимых констант ОС).

AlexF писал(а):
Примечание 3.
Можно как-то "научить" интерпретатор строчки такого вида считать комментариями?

См. http://spf.sourceforge.net/docs/intro.ru.html#comments
Обратите внимание на пробел после #!

AlexF писал(а):
В догонку. При работе часто возникает необходимость поиска в листингах фрагмента текста, который бы описывает / иллюстрирует то или иное использование слова.

Я для этого использую в .bashrc
Код:
alias ff='find -print0 | xargs -0 grep'

и потом в командной строке
Код:
ff слово


PS Вообще у меня лежит недописанный пост про оборудование рабочей среды spf/linux + vim, набо будет закончить.

_________________
http://forth.org.ru/~ygrek


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

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
О, да, мысль с линком -- логичная мысль :-). Обнаружил, что нужно еще добавлять и ссылку на директорию devel иначе не будет работать слово REQUIRE У меня получилась вот такая последовательность действий:
Код:
cd /root/spf
ln spf4 /usr/bin/spf 
ln -s /root/spf/devel/ /usr/bin/

и в итоге в каталоге /usr/bin/ были созданы две ссылки
Код:
/usr/bin/spf       --> /root/spf/spf4
/usr/bin/devel   --> /root/spf/devel/

Предлагаю поведение слова ModuleName для posix версий изменить, пусть оно выдает сразу ссылку не относительно директории из которой запущен интерпретатор, а наперед предопределенную, например, /usr/share/spf/devel Мне кажется, что так будет удобнее...

Спасибо, за совет №3. Так работает :-)


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

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
AlexF писал(а):
О, да, мысль с линком -- логичная мысль . Обнаружил, что нужно еще добавлять и ссылку на директорию devel иначе не будет работать слово REQUIRE

Никаких дополнительных ссылок не надо.

Цитата:
ln spf4 /usr/bin/spf

Здесь вместо хардлинка нужен симлинк (ln -s).

Код:
$ which spf
/home/ygrek/bin/spf
$ ls -al $(which spf)
lrwxrwxrwx 1 ygrek ygrek 31 Июл 20 14:01 /home/ygrek/bin/spf -> /home/ygrek/work/forth/spf/spf4
$ ls -al ~/bin | grep devel
$ ls -al /home/ygrek/work/forth/spf | grep devel
drwxr-xr-x 24 ygrek ygrek   4096 Ноя  1 10:33 devel
lrwxrwxrwx  1 ygrek ygrek     62 Мар 15  2008 ffl -> /home/ygrek/work/forth/spf/devel/~ygrek/work/ffl/ffl-0.6.0/ffl
lrwxrwxrwx  1 ygrek ygrek     64 Мар 23  2008 ffl_test -> /home/ygrek/work/forth/spf/devel/~ygrek/work/ffl/ffl-0.6.0/test/
$ spf
SP-FORTH - ANS FORTH 94 for Linux
Open source project at http://spf.sf.net
Russian FIG at http://www.forth.org.ru ; Started by A.Cherezov
Version 4.19 Build 666 at 06.Nov.2008

~ygrek/lib/linux/readline.f
Ok
BYE

Сейчас spf ищет devel точно так же как в windows - рядом с бинарником - поэтому через хардлинк работать и не будет.
В бинарных пакетах алгоритм поиска devel (а также lib и spf4.ini) должен будет быть пропатчен в соответствии требованиям конкретного дистрибутива.

_________________
http://forth.org.ru/~ygrek


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Похоже, под Linux не работает оптимизатор. Скорость SP-Forth неприятно удивила. Рекурсивное вычисление 40-го числа Фибоначи:

gforth - 13.7 сек.
sp-forth - 9.3 сек.
gcc -O0 - 3.5 сек
tcc - 2.0 сек
java - 1.0 сек
gcc -O3 - 0.7 сек

При чём скорость не зависит от того, включен оптимизатор или выключен (SET-OPT/DIS-OPT).

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

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


Можно текст программы?

Balancer писал(а):
скорость не зависит от того, включен оптимизатор или выключен


У меня пока нет доступа к Линуксу.
При сборке случайно, не обнулена переменная BUILD-OPTIMIZER ?
Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
>Можно текст программы?

Код:
: FIB  DUP 1 > IF 1- DUP RECURSE SWAP 1- RECURSE + ELSE DROP 1 THEN ;
40 FIB . BYE


>При сборке случайно, не обнулена переменная BUILD-OPTIMIZER ?

Я использую готовую сборку с http://downloads.sourceforge.net/spf/spf-4.20.tar.gz

Говорит, что слова BUILD-OPTIMIZER нет.

>Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.

Как дизассемблировать отдельное слово?

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

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


В spf-4.20\spf4orig оптимзатора нет. Нужно собрать.
По моему, нужно запустить make в spf-4.20\src\posix\

Balancer писал(а):
оворит, что слова BUILD-OPTIMIZER


Не должно быть в любом случае. Это директива ЦК.

ЗЫ: По моему там стеки не отделены от кода. Для быстродействия следует отделить.
Для отделения стека данных

1000000 CELL+ ALLOCATE THROW 1000000 + DUP S0 ! SP!

Со стеком возвратов сложнее


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

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


spf-4.20\lib\ext\disasm.f

Команда
SEE FIB


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
>В spf-4.20\spf4orig оптимзатора нет. Нужно собрать.

Ок, попробую.

> spf-4.20\lib\ext\disasm.f

Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые? :)

(а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые?

Лучше форсировать использовать прямые.
Цитата:
(а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)

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

_________________
http://forth.org.ru/~ygrek


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

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
gforth - 13.7 сек.
sp-forth - 9.3 сек.
gcc -O0 - 3.5 сек
tcc - 2.0 сек
java - 1.0 сек
gcc -O3 - 0.7 сек


Код:
gforth - 41.8
gforth-fast - 27.6
spf - 2.3
spf (DIS-OPT) - 3.3

Что-то очень большой разброс..

_________________
http://forth.org.ru/~ygrek


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

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


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

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


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

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