JBForth

 
+
-
edit
 

Balancer

администратор
★★★★★
Сабж в первом приближении работает.

В нынешнем, совершенно неоптимизированном виде, на чистой математике и вызовах функций (рекурсивное вычисление чисел Фибоначчи) сейчас в 60 раз медленнее, чем нативный код C++.

Думаю, при оптимизации можно будет быстродействие несколько поднять.

Впрочем, ИМХО, и такая скорость тоже ничего.

Время вычисления 40-го числа Фибоначчи, сек:
code text
  1. C++ (VC7) - 3.7
  2. JBForth - 224.4
  3. Perl 5.8.4 - 736.8

Это более 300 млн. функциональных вызовов. Т.е. JBForth сейчас обеспечивает порядка 5 млн. операций в секунду на 3ГГц машине. Вполне достаточно, ИМХО, для чистого программирования на нём разовых немассовых операций l2j (атака, использование скиллов, телепорты и т.п...)

В общем, даже на нынешнем уровне имеем более чем трёхкратное превосходство в скорости над Perl :) (И, соответственно, до десятикратного - над PHP, но это уже лениво считать)

Реализован пока только базовый набор слов для создания своих определений и самый минимум операторов. В ближайших планах - оптимизация, забивка основных слов ядра и интеграция с l2j :)

Основные отличия от классического Форта:
  • И основной стек и стек данных по умолчанию хранят Java-объекты
  • Парсер входного потока написан на Java
  • Полностью изменена идеология Форт-системы. Не больше непрерывного HERE, каждое слово компилируется в отдельную область.
  • Работы со словарями пока не предвидется за ненадобностью
  • Поиск слов при компиляции и интерпретации происходит средствами Java - HashMap.
  • Движок шитого кода реализован на Java.


В остальном - постараюсь соблюсти совместимость со стандартом ANS-94.
 
+
-
edit
 

Balancer

администратор
★★★★★
Наряду с привязкой ко всякой NPC-обработкой, с которой сейчас вожусь, вижу очень удобным реализовать на этом скриптовом движке, например, админские функции. Тогда их можно будет, скажем, пользователю гибко расширять, прописывая не только уровни доступа, но и индивидуальный доступ и т.п. Да ещё и без перезагрузки сервера :)

При достаточно богатой библиотеке можно будет даже вводить новые админские функции (или исправлять/модифицировать старые) не только без перекомпиляции сборки, но даже без рестарта запущенного сервера.
 

nucer

новичок
А нафиг он тебе? ))
Чем джава то не подходит? )
 
+
-
edit
 

Balancer

администратор
★★★★★
Java не подходит тем, что:
1. Слишком сложный и нерасширяемый синтаксис для конечных решений. Java - язык, Forth - метаязык.
2. Неразработчики не смогут расширять Java-функционал. На Форте же скрипты можно дописывать в любой момент, при чём активизируя их даже без перезагрузки сервера.
 

mk2

втянувшийся
Balancer, 25.03.05 23:50:02:
Java не подходит тем, что:
1. Слишком сложный и нерасширяемый синтаксис для конечных решений. Java - язык, Forth - метаязык.
2. Неразработчики не смогут расширять Java-функционал. На Форте же скрипты можно дописывать в любой момент, при чём активизируя их даже без перезагрузки сервера.
 


А он у тебя тоже нерасширяемый - какой интерфей между сервером и скриптом прописан - такой и набор возможностей. Если же это какой-нибудь специально-для-явы интерпретатор, то они обычно умеют ходить в яву по рефлексии, понимают соглашения по java beans именам и пр.
По поводу метаязычности... не мета он, а ассемблер стековой машины. Со всеми вытекающими удобствами, и недостатками.
 

nucer

новичок
mk2 чё то очень умное сказал )) Я переведу
По любому если чел юзер-раздолбай, то ему хоть джава, хоть фортран, хоть xml один хрен.
Этот парсер ораничивается возможностями, которые были заложены в интерфейсе между ним и сервером. И чтоб его расширить надо менять этот интерфейс, а это куда больший гемор, чем просто приписать пару строк в джаве )
На джаве тоже можно без перезагрузки, сам же знаешь наверное о java.lang.reflect
И джава тоже не особо низкоуровневый язык... Офигенная гибкость и расширяемость, а все эти ваши парсеры это лишний гемор ))
 
+
-
edit
 

Balancer

администратор
★★★★★
Судя по всем с Фортом никто ихз вас просто не работал. "Офигенная рсширяемость у Java" - это сильно. "Никакой не метаязык" - тоже...
 
+
-
edit
 

Balancer

администратор
★★★★★
Так. Продолжаем. Делаю реализацию исполнения скрипта прямо в конмандной строке html-файла. Т.е. вместо традиционных

. ...

можно будет писать сразу
...

Это позволит, во-первых, сделать очень гибкой систему вызова и даже отказаться от некоторых модулей. Скажем, вместо

Advance to Warrior

для классмастера можно будет писать просто (пример несколько неуклюжий, но как пример):

Advance to Warrior
 
+
-
edit
 

-=dc=-
-dc-2

новичок
супер 2 мои желания сбылись (отказ от пошаговости и логические операторы) осталось третее несбыточное :) (квесты на яве :P ) но возможно уже непонадобятся.
Мыши плакали, кололись, но все равно жрали кактус.  
+
-
edit
 

Balancer

администратор
★★★★★
Квесты на Яве точно не понадобятся. На Форте они будут и смотреться проще, и писаться быстрее :)

В общем, провёл я тут оптимизацию ядра. Теперь по упомянутому в первом постинге тесту - 135 секунд. Т.е. более, чем в 5 раз быстрее, чем на Perl но всё ещё в 36 раз медленнее чистого Си :)

Резервов на оптимизацию особо больше не вижу, но и этого должно хватать на подавляющее большинство задач.

Кстати, вот ещё где можно применять - администратор прямо с клиента по "//script ..." сможет менять переменные, проводить разные операции, даже программировать на лету действия...

...

Ладно, оптимизацию закончил, пойду писать работу со словарями (типа napespaces в современных ЯВУ, только помощнее). Без них не обойтись, как показала первая практика...
 

Nurgl

втянувшийся
Сорри за оффтоп, но где можно посмотреть ченджлог вчерашней сборки чего в ней нового ?

http://nucer.ru - форум эксклюзивной сборки nucer'а с моими датапаками !  
+
-
edit
 

Balancer

администратор
★★★★★
Нового пока ничего нет. Выставил только access_level = 30 для //server_restart, //announce и //character_disconnect

Кстати, эти параметры для админки, по идее, нужно занести в переменные и считывать их при старте из конфига. Тогда можно будет их менять на лету, без перезагрузки :)

...

По сабжу - 117 секунд.
 

Nurgl

втянувшийся
Balancer, 26.03.05 17:01:59:
Нового пока ничего нет. Выставил только access_level = 30 для //server_restart, //announce и //character_disconnect

Кстати, эти параметры для админки, по идее, нужно занести в переменные и считывать их при старте из конфига. Тогда можно будет их менять на лету, без перезагрузки :)

...

По сабжу - 117 секунд.
snap: 8286
 


А почему такая большая разница в размере файла там походу заготовочки какието есть...
http://nucer.ru - форум эксклюзивной сборки nucer'а с моими датапаками !  
+
-
edit
 

Balancer

администратор
★★★★★
Nurgl, 26.03.05 17:04:29:
А почему такая большая разница в размере файла там походу заготовочки какието есть...
snap: 8289
 


Ну да, там уже Forth в ядре. Правда, не работает ещё. М.б. ещё что-то.

Теперь обновений до полной работоспособности Форт-ядра не будет :)
 
+
-
edit
 

Balancer

администратор
★★★★★
Всё, "Казино" работает :) Первый пример работающего скрипта на JBForth.
code text
  1. : DICE1
  2.         PLAYER@ 4625 4 CHOOSE + DICE
  3. ;
  4.  
  5. : CASINO  ( n -- )
  6.  
  7.         DUP ADENA@ >
  8.         IF
  9.       "Not enough adena" SHOW
  10.       EXIT
  11.         THEN
  12.      
  13.         DICE1
  14.     DICE1
  15.     OVER =
  16.      
  17.     ( stake result flag )
  18.     IF
  19.         6 = IF
  20.                 5 *
  21.                 "You win " . DUP . "adena!!!" .
  22.         ELSE
  23.       2 *
  24.                 "You win " . DUP . "adena!" .
  25.         THEN
  26.      ELSE
  27.       DROP
  28.       NEGATE
  29.                 "You loose " . DUP . "adena." .
  30.      THEN
  31.  
  32.      ADENA+!
  33. ;


Вызов:
code text
  1. <html><title>Renny</title>
  2. <body>
  3. Renny:<br>
  4. You may try play a dice game.<br>
  5.  
  6. <a action="bypass -h script 100 casino">For 100a</a><br>
  7. <a action="bypass -h script 1000 casino">For 1000a</a><br>
  8. <a action="bypass -h script 10000 casino">For 10000a</a><br>
  9. </body>
  10. </html>

 

Pixel

новичок
Да думал, что Форт по понятней будет, все вверх ногами, и где что. хмм....

Вот если бы расписать построчьно, что да как, вот тогда бы хорошо было.
Нубом быть не стыдно, стыдно скрывать что ты нуб!  
+
-
edit
 

Juokelis

новичок
Balancer, 26.03.05 17:01:59:
Нового пока ничего нет. Выставил только access_level = 30 для //server_restart, //announce и //character_disconnect

Кстати, эти параметры для админки, по идее, нужно занести в переменные и считывать их при старте из конфига. Тогда можно будет их менять на лету, без перезагрузки :)
snap: 8286
 


У нас уже в конфиге ;)
 
+
-
edit
 

Balancer

администратор
★★★★★
Pixel, 13.04.05 00:10:23:
Да думал, что Форт по понятней будет, все вверх ногами, и где что. хмм....

Вот если бы расписать построчьно, что да как, вот тогда бы хорошо было.
snap: 11645
 


Просто кодовый блок тут криво отображается, вот и непонятно совсем :)

Распишу попозже у себя в Wiki и обучалку организую...
 
+
-
edit
 

Balancer

администратор
★★★★★
Pixel, 13.04.05 00:10:23:
Вот если бы расписать построчьно, что да как, вот тогда бы хорошо было.
snap: 11645
 


Расписал построчно в http://balancer.ru/computers/langs/forth/j...lessons/casino/
 
+
-
edit
 

Balancer

администратор
★★★★★
Рекомендую поглядывать в http://balancer.ru/computers/langs/forth/jbforth/lessons/

Буду там расписывать примеры, обучалку и т.п. :)
 

Pixel

новичок
Балансер немог бы ты кинуть эти линки

http://balancer.ru/computers/langs/forth/jbforth/lessons/
http://balancer.ru/computers/langs/forth/j...lessons/casino/

в этот топ

http://balancer.ru/forums/index.php?showtopic=256
Нубом быть не стыдно, стыдно скрывать что ты нуб!  
+
-
edit
 

Pixel

новичок
Balancer, 13.04.05 15:32:16:
Кинул.
snap: 11762
 


Спасибо, так они непотеряются :D
Нубом быть не стыдно, стыдно скрывать что ты нуб!  

Pixel

новичок
Балансер, ты немог бы расписать квест, где в условиях, есть следующие
дать персонажу предмет
забрать предмет
выбить из НПЦ что-то
вобщем, квест где есть все эти операции, а то я чегото непойму, как на форте квесты писать.

или где можно посматреть, все сушествующие команды "квестового движка"
Нубом быть не стыдно, стыдно скрывать что ты нуб!  

Pixel

новичок
т.е. как на форте будет выгледеть, этот квест.


271 quest
"Proof of Valor" name
7577 npc ( Pretorian Rukain )
0 step
orc need ( rule 0 )
4 level need ( rule 1 )
1 step empty ( nothing - step only for get instruction )
2 step ( check for items number )
1473 50 quest-items give
1507 1 items award
3 step 2 next empty

475 npc ( Kasha wold )
2 step again ( loop )
1473 ( Kasha Wolf Fang ) 1 quest-items 50 max award
 
Нубом быть не стыдно, стыдно скрывать что ты нуб!  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru