| 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
|
 |
|
|
|
Если будут вопросы - спрашивайте.
|
 |
|
|
Я пока знаю всего одну игру, где применили 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:но почему же тогда когда я делаю как говорите вы, у меня постояно вылетает, а когда я делаю, как говорю я, у меня все ок
Код покажите - на слово я вам не верю
|
 |
|
|
|
|