Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Цитата: 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
Что-то очень большой разброс..
[quote] gforth - 13.7 сек. sp-forth - 9.3 сек. gcc -O0 - 3.5 сек tcc - 2.0 сек java - 1.0 сек gcc -O3 - 0.7 сек [/quote]
[code] gforth - 41.8 gforth-fast - 27.6 spf - 2.3 spf (DIS-OPT) - 3.3 [/code]
Что-то очень большой разброс..
|
|
|
|
Добавлено: Вс апр 26, 2009 21:49 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые? Лучше форсировать использовать прямые. Цитата: (а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)
Исправляются по мере использования.
Про "ни одну библиотеку" это вы конечно загнули.
[quote]Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые?[/quote] Лучше форсировать использовать прямые. [quote](а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)[/quote]
Исправляются по мере использования.
Про "ни одну библиотеку" это вы конечно загнули.
|
|
|
|
Добавлено: Вс апр 26, 2009 21:43 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
>В spf-4.20\spf4orig оптимзатора нет. Нужно собрать.
Ок, попробую.
> spf-4.20\lib\ext\disasm.f
Кстати, в SPF под Linux обратные слеши не работают. Соответственно, ни одна библиотека не грузится без переписывания. Это лечится или никто не догадался в системных вызовах сделать их преобразование на прямые?
(а ещё лучше - все либы переписать на прямые, т.к. это более стандартный подход, понимаемый, в том числе, и многими windows-приложениями)
>В 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
[quote="Balancer"]Как дизассемблировать отдельное слово?[/quote]
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!
Со стеком возвратов сложнее
[quote="Balancer"]Я использую готовую сборку[/quote]
В spf-4.20\spf4orig оптимзатора нет. Нужно собрать. По моему, нужно запустить make в spf-4.20\src\posix\
[quote="Balancer"]оворит, что слова BUILD-OPTIMIZER[/quote]
Не должно быть в любом случае. Это директива ЦК.
ЗЫ: По моему там стеки не отделены от кода. Для быстродействия следует отделить.
Для отделения стека данных
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 нет.
>Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.
Как дизассемблировать отдельное слово?
>Можно текст программы?
[code] : FIB DUP 1 > IF 1- DUP RECURSE SWAP 1- RECURSE + ELSE DROP 1 THEN ; 40 FIB . BYE [/code]
>При сборке случайно, не обнулена переменная BUILD-OPTIMIZER ?
Я использую готовую сборку с http://downloads.sourceforge.net/spf/spf-4.20.tar.gz
Говорит, что слова BUILD-OPTIMIZER нет.
>Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.
Как дизассемблировать отдельное слово?
|
|
|
|
Добавлено: Вс апр 26, 2009 11:32 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Balancer писал(а): Рекурсивное вычисление 40-го числа Фибоначи:
Можно текст программы? Balancer писал(а): скорость не зависит от того, включен оптимизатор или выключен
У меня пока нет доступа к Линуксу.
При сборке случайно, не обнулена переменная BUILD-OPTIMIZER ?
Можно дизассемблеровать и посмотреть что там оптимизатор наоптимизировал.
[quote="Balancer"]Рекурсивное вычисление 40-го числа Фибоначи: [/quote]
Можно текст программы?
[quote="Balancer"]скорость не зависит от того, включен оптимизатор или выключен[/quote]
У меня пока нет доступа к Линуксу.
При сборке случайно, не обнулена переменная 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).
Похоже, под 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) должен будет быть пропатчен в соответствии требованиям конкретного дистрибутива.
[quote="AlexF"]О, да, мысль с линком -- логичная мысль . Обнаружил, что нужно еще добавлять и ссылку на директорию devel иначе не будет работать слово REQUIRE [/quote] Никаких дополнительных ссылок не надо.
[quote] ln spf4 /usr/bin/spf [/quote]
Здесь вместо хардлинка нужен симлинк (ln -s).
[code] $ 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 [/code]
Сейчас 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. Так работает
О, да, мысль с линком -- логичная мысль :-). Обнаружил, что нужно еще добавлять и ссылку на директорию devel иначе не будет работать слово REQUIRE У меня получилась вот такая последовательность действий:[code]cd /root/spf ln spf4 /usr/bin/spf ln -s /root/spf/devel/ /usr/bin/[/code] и в итоге в каталоге /usr/bin/ были созданы две ссылки[code] /usr/bin/spf --> /root/spf/spf4 /usr/bin/devel --> /root/spf/devel/[/code]
Предлагаю поведение слова ModuleName для posix версий изменить, пусть оно выдает сразу ссылку не относительно директории из которой запущен интерпретатор, а наперед предопределенную, например, [i]/usr/share/spf/devel[/i] Мне кажется, что так будет удобнее...
Спасибо, за совет №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, набо будет закончить.
AlexF, спасибо за feedback.
[quote="AlexF"]Примечание 1. Если же положить исполняемый модуль spf4 в "правильную" директорию: /usr/sbin/spf было бы куда лучше :-) Если не сложно, можно это учесть в последующих сборках?[/quote] Архивы которые сейчас выложены для скачивания - это то что называется source дистрибутивы. Т.е. пользователь их компилирует(там включён собранный бинарник, но это не совсем правильно) и устанавливает сам куда ему удобно. В /usr/bin (а не sbin :) ) можно будет устанавливаться из бинарных пакетов (в релизе точно будет deb пакет). Т.е. из сорс дистрибутива вы всё настраиваете самостоятельно. Например я сейчас сделал так : в ~/bin положил симлинк на spf и добавил этот "пользовательский bin" в PATH в .bashrc (этот каталог удобно использовать и для всяких других вспомогательных скриптов) [code] if [ -d ~/bin ]; then export PATH=~/bin:$PATH fi [/code]
[quote="AlexF"]Примечание 2.
Попробовал сделать исполняемый модуль, не получилось. Оказывается эта функция завязана на компиляторе gcc. Компилятор сам по себе здоровый и не хочется его тянуть в систему. Можно ли в последующие дистрибутивы сключить необходимые утилиты или, что еще лучше, вообще избавиться от этой зависимости :-)[/quote] Нет, я не знаю как избавится от этой зависимости - gcc нужен для линковки (чтобы вызвать ld с нужными параметрами) и для config.c (вычисление платформенно-зависимых констант ОС).
[quote="AlexF"]Примечание 3. Можно как-то "научить" интерпретатор строчки такого вида считать комментариями?[/quote] См. http://spf.sourceforge.net/docs/intro.ru.html#comments Обратите внимание на пробел после #!
[quote="AlexF"]В догонку. При работе часто возникает необходимость поиска в листингах фрагмента текста, который бы описывает / иллюстрирует то или иное использование слова.[/quote] Я для этого использую в .bashrc [code] alias ff='find -print0 | xargs -0 grep' [/code] и потом в командной строке [code]ff слово[/code]
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.
В догонку. При работе часто возникает необходимость поиска в листингах фрагмента текста, который бы описывает / иллюстрирует то или иное использование слова. Можно восползоваться вот такой командой:[code]grep -r --include='*.f' -i ': find' /root/spf/[/code] Она говорит: искать по всем поддиректориям /root/spf/ в фалах *.f подстроку ": find" и выводить перечень этих файлов на консоль. Пример вывода:[code]./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[/code]
оформил в виде 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 то интерпретатор СПФ на нее начинает ругаться и скрипт не стартует... Можно как-то "научить" интерпретатор строчки такого вида считать комментариями?
Оттаке....
Скачал. Распаковал. Пытаюсь освоить. Запускается, работает. Спасибо доброму человеку, взявшего труд по портированию СПФ на Linux. Тем более приятно, что запустился он на мини Дитрибутиве (к слову, это puppyrus 3.01). Появилось несколько вопросов, хотел бы их озвучить..
Примечание 1.
Распаковал архив в домашнюю директорию. Структуру дистрибутив сберег с Windows. Т.к работаю под root, то получилась у меня следующая структура
[code]\root spf lib src[/code] каталог devel уже сам сделал.... Что не есть правильно по идеалогии Unix. И создает определенные неудобства. Поясню. Скрипт приходится запускать с полной командной строкой. Примерно, так[code] cd /root/spf/devel/~alf/ # ../../spf4 test.f[/code] Если же положить исполняемый модуль spf4 в "правильную" директорию: /usr/sbin/spf было бы куда лучше :-) Если не сложно, можно это учесть в последующих сборках?
Примечание 2. Попробовал сделать исполняемый модуль, не получилось. Оказывается эта функция завязана на компиляторе gcc. Компилятор сам по себе здоровый и не хочется его тянуть в систему. Можно ли в последующие дистрибутивы сключить необходимые утилиты или, что еще лучше, вообще избавиться от этой зависимости :-)
Примечание 3. Как логическое продолжение примечан 2. Т.к запускать программулинки все-таки нужно, то привычный в мире Unix способ запуска скриптов не проходит :( Т.е если вставить первую строчку в листинг для запуска скрипта:[code]#!/root/spf/spf4[/code] то интерпретатор СПФ на нее начинает ругаться и скрипт не стартует... Можно как-то "научить" интерпретатор строчки такого вида считать комментариями?
Оттаке....
|
|
|
|
Добавлено: Ср ноя 05, 2008 13:36 |
|
|
|
|