Измеритель времени исполнения

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

Latest post of the previous page:

>Однако, увы, проведённые тесты дают следующие результаты:
Найдите в скрипте этот блок:

Code: Select all

if Editor.FileName:find("%.lua$") then
  f,err = loadstring(text)
else
  f,err = require"moonscript".loadstring(text)
end
И замените на:

Code: Select all

local loadstring = Editor.FileName:find("%.[mM][oO][oO][nN]$") and require"moonscript".loadstring or loadstring
f,err = loadstring(text)
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

John Doe wrote:>Это Lua так не совсем верно обрабатывает переводы строк в стиле Windows.
Разве Lua?
А кто? Или Lua, или LuaFar, точнее не скажу. Потому что я передаю far.Message абсолютно корректный с точки зрения ОС текст. В Windows, как известно символ перевода строки состоит из пары CRLF. Да, в юникс-основанных системах только из LF, но мир, увы не совершенен, а Far под Linux ещё не перенесли (впрочем, лично мне хватает и Far под Wine).
John Doe wrote:>Однако, увы, проведённые тесты дают следующие результаты:
Найдите в скрипте этот блок:

Code: Select all

if Editor.FileName:find("%.lua$") then
  f,err = loadstring(text)
else
  f,err = require"moonscript".loadstring(text)
end
И замените на:

Code: Select all

local loadstring = Editor.FileName:find("%.[mM][oO][oO][nN]$") and require"moonscript".loadstring or loadstring
f,err = loadstring(text)
Проще было бы

Code: Select all

if Editor.FileName:find("%.lua$")
изменить на

Code: Select all

if Editor.FileName:lower():find("lua$")
Да, в заверении о том, что макрос и так будет работать, о верном определении типа по расширению я не подумал.

Ладно, пойду, попробую привинтить к LuaManager-у список модулей. Если получится, скоро выложу свежую версию на растерзание.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>А кто? Или Lua, или LuaFar, точнее не скажу.
Разве это не сам фар ожидает в качестве разделителя строк /n?

>Проще было бы
Кстати надо этим же скриптом и померять какой из вариантов быстрее )
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Re: Измеритель времени исполнения

Post by sToLp »

от John Doe и IgorZ.

Благодарю вас! Теперь тесты фрагментов fmlua-макросов можно делать успешнее. С учётом предупреждения John Doe: Если конечно код не содержит макролибовских подстановок (инклудов, констант).

User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>А вот тест фрагмента: [...] Keys("1") [...] первая строка данного фрагмента подменяется на: 1111111111111111111111111[...]
Дальше объяснять надо?
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

John Doe wrote:>А кто? Или Lua, или LuaFar, точнее не скажу.
Разве это не сам фар ожидает в качестве разделителя строк /n?
Отдаёт-то он текст с \r\n! И этот, отданный Farом текст я без изменений передавал far.Message. Незадача получается. Впрочем, проблема уже решена, надо только обновить скрипт в первом посту. Сейчас и сделаю.
John Doe wrote:>Проще было бы
Кстати надо этим же скриптом и померять какой из вариантов быстрее )
Ещё прежде, чем предлагать, померял :) . Одинаково.
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

Версия 1.0.1 - Выкидываются "\r" из переводов строки в показываемом коде. Возможность работы с .fmlua.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>Отдаёт-то он текст с \r\n!
В одном случае редактор, в другом диалог.

P.S.
в Энциклопедии про Message всё сказано.
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

John Doe wrote:>Отдаёт-то он текст с \r\n!
В одном случае редактор, в другом диалог.
Тем не менее, идеологически было бы правильнее, если бы MS тоже перешла на использование одного \n в качестве перевода строки продукт, предназначенный для данной ОС, корректно обрабатывал переводы строки, принятые в этой ОС.

P. S. Если во время набора ответа на последний пост в тот были внесены изменения, ответ не сохраняется. Вместо этого выдаётся информация "сообщение не существует". Это баг или нет?
P. P. S. Энциклопедию почитал. Кстати, жаль, что far.Message не позволяет вместо строки подсунуть первым параметром таблицу со строками. Иногда это было бы удобнее.
Last edited by IgorZ on Fri 17 Oct, 2014 10:15, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>P. S. Если во время набора ответа на последний пост в тот были внесены изменения, ответ не сохраняется.
Это как?

>вместо строки подсунуть первым параметром таблицу
table.concat
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

John Doe wrote:>P. S. Если во время набора ответа на последний пост в тот были внесены изменения, ответ не сохраняется.
Это как?
Нажал "цитировать", набрал ответ, нажал "отправить", получил окно с заголовком "информация" и сообщением "Сообщение не существует.". Открыв тему в другом окне, обнаружил, что за время написания ответа на последний пост тот был изменён.
John Doe wrote:>вместо строки подсунуть первым параметром таблицу
table.concat
Это-то я знаю, но в API поддерживается массив строк, значит, по идее, far.Message мог бы принмать таблицу напрямую, если я правильно понял.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>far.Message мог бы принмать таблицу напрямую
Принимать мог бы, но её же надо передать в фар АПИ.
Для этого таблицу надо преобразовать в массив, что далеко не бесплатно.

Имхо:
Если беспокоиться о производительности, о потреблении памяти, то можно использовать фар апи через ffi.
Если не волноваться, то сойдёт и table.concat.
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

Ну и ладно. Никто не гарантировал, что всё будет в точности так, как хотелось бы. Хотя мечтать - не вредно :) .
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

Подумалось, а может на время теста стоит останавливать сборщик мусора?
IgorZ
Posts: 793
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Измеритель времени исполнения

Post by IgorZ »

John Doe wrote:Подумалось, а может на время теста стоит останавливать сборщик мусора?
А в процессе нормальной работы тестируемого фрагмента сборщик мусора тоже будет остановлен? Что-то я не помню, как он работает, перечитаю и подумаю.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Измеритель времени исполнения

Post by John Doe »

>А в процессе нормальной работы тестируемого фрагмента сборщик мусора тоже будет остановлен?
Останавливать на время тестирования, других вариантов нет.
Post Reply

Return to “Обсуждение макросов”