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

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

или где можно посматреть, все сушествующие команды "квестового движка"
Нубом быть не стыдно, стыдно скрывать что ты нуб!  
AD Реклама Google — средство выживания форумов :)

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