[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Messages posted by: z00n
Forum Index » Profile for z00n » Messages posted by z00n
Author Message
smz wrote:И тут Остапа понесло...
Нижеследующая ф-ция - претендент по номинации "самый быстрый".


У меня она падает при n == 15000. Мне кажется проблема в match.
По поводу алгоритма - понятно, что в старом способе главным замедлителем было поштучное чтение из потока - стандартный способ ускориться в таких случаях - читать в буфер с конца по 4-8K и матчить по нему. Мне кажется, должно быть соизмеримо.
smz wrote:Увы, теперь выдаются 9 последних строк, когда задаёшь 10. А кроме этого, неверно обрабатывается файл, последний байт которого не '\n'.

То что, что написано выше работает правильно, если считать "/nEOF" сторокой. Впрочем я внял, и привел tail в состояние, в котором для 'n' >= 0 он работает как POSIX tail. Ваш вариант тоже правильный (и проходит тесты если заменить nil на "")


http://www.lua.org/pil/16.html
smz wrote:[... то-есть оказался съеден последний байт файла.


Да, это была плохая мысль обрезать последний байт.

smz wrote:
Идея хорошая, только надо подчистить баги (я проверил при n=10, получил последние 6 строк).

Главный баг - это лень - я скопипастил io.open без "rb". Под windows это имеет страшные последствия:
"\r\n" два раза матчится как "\n" (и, кстати, ни разу как "\r").

Чуть почищенный вариант:

Вторая ветка получилась со сложностью O(N) от длины файла - это как-то неправильно. Вот так для файла порядка мегабайта будет раз в 100 быстрее:
Попробуйте убрать : перед Voice
Если будут вопросы - спрашивайте.
miha-ha wrote:z00n

Тут http://harkal.sylphis3d.com/2005/08/10/multithreaded-game-scripting-with-stackless-python/ говорят, что ваш(наш) способ устарел...


Я пока знаю всего одну игру, где применили Stackless Phython - EVE Online. Я в целом согласен с автором по поводу игровой логики, но физику так никто не считает (и не будет в обозримом будущем).
По поводу луа и тредов. Вам нужен шедулер - который будет каждый игровой цикл будить треды, передавать им информацию etc.
Один пример есть в PIL: http://www.lua.org/pil/9.4.html
Пример шедулера со стороны С есть в Game Programming Gems 5. Пример со стороны луа есть в GPG 6 (сейчас я код из статей поищу).
1. Перепишите свои функции, чтобы они были функциями от времени.

2. Координаты в любой момент времени - интеграл скорости игрового
объекта по времени.

3. В современных играх итегрирование производят 60-100
раз в скунду. Самый простой и хреновый способ интегрирования: по Эйлеру:

Хороший, но относительно дорогой способ, Рунге-Кутты 4.
(http://en.wikipedia.org/wiki/Runge–Kutta_methods). На практике
применяется несколько способов быстрее чем RK4 и точнее чем Эйлер -
см. игродельческую литературу.

Немного на эту тему я уже тут писал:
http://www.lua.ru/forum/posts/list/128.page
mozers™ wrote:2moteus
Может быть можно как нить узнать тип и кол-во входных параметров у этих функций?


Забиваете их в google, находите исходники и смотрите в них.
Например ваш пример из Scite
Просто можно только список экспорта посмотреть, ну или метатаблицы распечатать, если объекты создаются. Дальше нужно дизассемблировать оптимизированный машинный код.


А вот так вы, кстати, и состояние стека сможете посмотреть (код по мотивам PIL):


Выдает:
Mister_SER wrote:пару постов назат, ваш код)
не верите что вылетает, сами хоть раз проверить


Я, конечно, проверил перед тем как постить:
Mister_SER wrote:но почему же тогда когда я делаю как говорите вы, у меня постояно вылетает, а когда я делаю, как говорю я, у меня все ок


Код покажите - на слово я вам не верю
 
Forum Index » Profile for z00n » Messages posted by z00n
Go to:   
Powered by JForum 2.1.9 © JForum Team