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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - SPF под Linux
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Цитата:
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

Что-то очень большой разброс..
Сообщение Добавлено: Вс апр 26, 2009 21:49
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые?

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

Исправляются по мере использования.
Про "ни одну библиотеку" это вы конечно загнули.
Сообщение Добавлено: Вс апр 26, 2009 21:43
  Заголовок сообщения:   Ответить с цитатой
>В spf-4.20\spf4orig оптимзатора нет. Нужно собрать.

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

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

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

(а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)
Сообщение Добавлено: Вс апр 26, 2009 15:52
  Заголовок сообщения:   Ответить с цитатой
Balancer писал(а):
Как дизассемблировать отдельное слово?


spf-4.20\lib\ext\disasm.f

Команда
SEE FIB
Сообщение Добавлено: Вс апр 26, 2009 13:55
  Заголовок сообщения:   Ответить с цитатой
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:40
  Заголовок сообщения:   Ответить с цитатой
>Можно текст программы?

Код:
: 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 11:32
  Заголовок сообщения:   Ответить с цитатой
Balancer писал(а):
Рекурсивное вычисление 40-го числа Фибоначи:


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

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


У меня пока нет доступа к Линуксу.
При сборке случайно, не обнулена переменная BUILD-OPTIMIZER ?
Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.
Сообщение Добавлено: Вс апр 26, 2009 10:48
  Заголовок сообщения:   Ответить с цитатой
Похоже, под 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 01:57
  Заголовок сообщения:   Ответить с цитатой
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) должен будет быть пропатчен в соответствии требованиям конкретного дистрибутива.
Сообщение Добавлено: Сб ноя 08, 2008 02:12
  Заголовок сообщения:   Ответить с цитатой
О, да, мысль с линком -- логичная мысль :-). Обнаружил, что нужно еще добавлять и ссылку на директорию 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. Так работает :-)
Сообщение Добавлено: Пт ноя 07, 2008 01:16
  Заголовок сообщения:   Ответить с цитатой
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, набо будет закончить.
Сообщение Добавлено: Чт ноя 06, 2008 11:25
  Заголовок сообщения:   Ответить с цитатой
В догонку. При работе часто возникает необходимость поиска в листингах фрагмента текста, который бы описывает / иллюстрирует то или иное использование слова. Можно восползоваться вот такой командой:
Код:
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.
Сообщение Добавлено: Ср ноя 05, 2008 13:43
  Заголовок сообщения:  SPF под Linux  Ответить с цитатой
Скачал. Распаковал. Пытаюсь освоить. Запускается, работает. Спасибо доброму человеку, взявшего труд по портированию СПФ на 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:36

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


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