
Snusmumriken
19.09.2017
15:20:40

Saphire
19.09.2017
15:22:54
В регулярных выражениях, а обычно именно они в таких случаях используются, для "захвата" группы символов используются обычные скобки. ^([a-z]+) на строке "abc123efg" группа \1 будет равна abc.
...и до меня только сейчас доперло, что \0 - всё, что нашли.
Можно тогда было использовать "луч" {80,} - От 80ти символов и до бесконечности*

Snusmumriken
19.09.2017
15:23:19
Смотри, вот тут - протестированный живой пример.
А ещё, мне нужны не группы а повторения символов "более 80".

Saphire
19.09.2017
15:23:47

Google

Snusmumriken
19.09.2017
15:25:27
Я не помнил что есть "лучи", поэтому влепил 100500. Пофигу.
Последний вариант:
найти: (\n[^\n]{80,}\n)
заменить: \n--!!СОКРАТИ БОТВУ, МУДИЛА!!\1
Notepad++ не капчурит в \0 всё что нашли, поэтому нужен капчур. Эх.

Saphire
19.09.2017
15:27:50
Или еще лучше, \n error("...") -- \0

Snusmumriken
19.09.2017
15:28:01
>Или еще лучше, \n error("...") -- \0
Ну это уже издевательство )))
Примерно так хочу
В общем, можно накатать "форматирователь", но это уже полноценная программа-парсер, а не три строчки регулярок ))))
И никто кроме тебя этим заниматься не будет. Мне - лень, уже написал тебе детектор "строк больше чем".
Искать конкатенации и разбивать - сам будешь )))

The Dude
19.09.2017
15:53:05
А напомните, плиз, почему в луа сделали по умолчанию глобальные переменные?
Где-то было обьяснение.

Vadim
19.09.2017
15:57:39
так заказали нефтяники? :)
// вообще, емнип, потому что так было в языке из которого lua развился
SOL, или как-то так

Рома
19.09.2017
18:14:28
Я часто пишу
some_function(
'this is the ' .. beginning ..
'of very ' .. long ..
'пыщь пыщь' .. gsom ..
'string'
)
все читаемо, главное, в такое очень удобно добавлять или убирать, ничего ты не понимаешь в скобках

Philipp
19.09.2017
18:26:30
А никто не сталкивался с проблемой rock_manifest file not found у Luarocks'a?

Google

Philipp
19.09.2017
18:26:35
@moteus например?

Snusmumriken
19.09.2017
20:31:53
Я часто пишу
some_function(
'this is the ' .. beginning ..
'of very ' .. long ..
'пыщь пыщь' .. gsom ..
'string'
)
все читаемо, главное, в такое очень удобно добавлять или убирать, ничего ты не понимаешь в скобках
Тот факт что ты так пишешь - означает то, что ты не делаешь высокопроизводительную лабуду, не знаешь как работает пул строк, или же - никогда не работал со строками на несколько сотен мегабайт/гигабайт.
Если бы знал, писал бы так:
some_function(table.concat{
'this is the', beginning,
'of very ', long,
'пыщ-пыщ', gsom,
'string'
})
Ничего я не понимаю в скобках, мда )))


Philipp
19.09.2017
20:59:32
Тот факт что ты так пишешь - означает то, что ты не делаешь высокопроизводительную лабуду, не знаешь как работает пул строк, или же - никогда не работал со строками на несколько сотен мегабайт/гигабайт.
Если бы знал, писал бы так:
some_function(table.concat{
'this is the', beginning,
'of very ', long,
'пыщ-пыщ', gsom,
'string'
})
Ничего я не понимаю в скобках, мда )))
Так тут вопрос не в конкатенации, а в переносе строк


Рома
19.09.2017
21:03:24
Тот факт что ты так пишешь - означает то, что ты не делаешь высокопроизводительную лабуду, не знаешь как работает пул строк, или же - никогда не работал со строками на несколько сотен мегабайт/гигабайт.
Если бы знал, писал бы так:
some_function(table.concat{
'this is the', beginning,
'of very ', long,
'пыщ-пыщ', gsom,
'string'
})
Ничего я не понимаю в скобках, мда )))
ССЗБ, запили бенчмарк. Я бы сам запилил, но уже поздно и я точно уверен, лол, ну очевидно же! table.concat{} - тут глобальная переменная table достается из кладовки глобальных, из неё берется value по ключу concat, создается таблица, вызывается функция, и все это вместо того чтобы компилятор увидел: ага! да это же конкатенация! склею-ка я строки!

Snusmumriken
19.09.2017
21:04:02
Ох, окей : )

Philipp
19.09.2017
21:04:14
ССЗБ, запили бенчмарк. Я бы сам запилил, но уже поздно и я точно уверен, лол, ну очевидно же! table.concat{} - тут глобальная переменная table достается из кладовки глобальных, из неё берется value по ключу concat, создается таблица, вызывается функция, и все это вместо того чтобы компилятор увидел: ага! да это же конкатенация! склею-ка я строки!
Ой, не лезь, он тебя сожрет
И я помогу :D

Snusmumriken
19.09.2017
21:07:27

Рома
19.09.2017
21:07:59
wtf из реп??

Philipp
19.09.2017
21:08:01
Снус

Snusmumriken
19.09.2017
21:08:15
И чем больше строк ты конкатенируешь, чем большего объёма - тем больше выгода от table.concat.

Philipp
19.09.2017
21:08:17
А нельзя просто в файл засунуть и отделить результат от кода?

Рома
19.09.2017
21:08:27
это наглый мухлеж
на реп не договаривались!

Snusmumriken
19.09.2017
21:09:18
rep - функция, увеличивающая объём )))
Могу без него. Прошу заметить, что реп есть и в том и в другом случаях )))

Рома
19.09.2017
21:12:51
Я от том писал, что конкотэнируй хоть 100 строк с переменными или без, компилятор должен понимать что происходит и в сотню раз быстрее делать дело, чем с вызовом функций и созданием таблицы, когда компилятор не понимает что происходит

Philipp
19.09.2017
21:13:15
Тебе же бенч показали))

Рома
19.09.2017
21:13:22
Но там уловки!
И вы с ним за одно

Google

Philipp
19.09.2017
21:13:31
Какие?

Рома
19.09.2017
21:13:52
Серьезно?
"Тот факт что ты так пишешь - означает то, что ты не делаешь высокопроизводительную лабуду, не знаешь как работает пул строк, или же - никогда не работал со строками на несколько сотен мегабайт/гигабайт."
код:
some_function(
'this is the ' .. beginning ..
'of very ' .. long ..
'пыщь пыщь' .. gsom ..
'string'
)

Philipp
19.09.2017
21:14:44
Какие уловки?
Йо?

Рома
19.09.2017
21:19:27
Ну вот тот код изначальный и код снуса с rep
две разности

Snusmumriken
19.09.2017
21:20:12
Хе, кстати, как ни странно - да, неоднозначно : )
В одних случаях физически быстрее так, в других - иначе.
Но нагрузка на сборщик мусора в любом случае меньше у меня.
На ванильной луа - гарантированно быстрее мой варик.

Рома
19.09.2017
21:23:54
Есть две ситуации:
1) Конкатенация обыкновенная, 'строка' .. переменная .. 'ещё строка', тут компилятор не тупой, делает все быстро.
2) Надо циклом составить одну большую строку, тут компилятор лажает, ведь в луа строки - не массивы байт, как в си, а уникальные ссылки на них, и все это приправлено магией, и concat приходит на помощь

Snusmumriken
19.09.2017
21:25:26
Компилятор есть только у luajit. Иначе - ничего у тебя нет, никто не оптимизирует писульки.

Snusmumriken
19.09.2017
21:29:25
А если увеличить циклы в десять раз, то первый варик прокатит за почти то же время, а без concat - упадёт от переполнения памяти.

Рома
19.09.2017
21:29:47

Philipp
19.09.2017
21:30:02
Что?

Рома
19.09.2017
21:30:21
local str = 'this is the ' .. beginning ..
'of very ' .. long ..
'пыщь пыщь' .. gsom ..
'string'
и все
неужели так сложно?

Philipp
19.09.2017
21:30:40
На малых строках разницы практически не будет

Snusmumriken
19.09.2017
21:30:44
Ага.

Google

Philipp
19.09.2017
21:30:45
Что вообще-то очевидно

Рома
19.09.2017
21:30:50
обернуть в цикл for i = 1, 100500 и вывести время
concat будет медленнее в сто раз

Snusmumriken
19.09.2017
21:31:17
Твой вариант даже быстрее на коротких строках и малых сроках, но засирает оперативку бешено. Потребление памяти я мерять не могу.
А чистить всё равно придётся, и вот на это уйдёт эта "сотня времени", но чуть позже, особенно если ты часто вызываешь.
Опа, или могу мерять потребление памяти.
Но это - совсем уж "буферный" вариант.

Рома
19.09.2017
21:41:10
https://pastebin.com/Ss9bNdkm
я это имел в виду
запусти, у меня луа временно не доступна, тут код concat маньячно-высоконагрузочный, что его не спасет
start = time() пропустил случайн

Admin
ERROR: S client not available

Рома
19.09.2017
21:43:25
и n забыл

Philipp
19.09.2017
21:44:20
Ты же понимаешь, что у тебя в первом цикле строка создается-удаляется?
И в твоем тесте никакого смысла нет?

Рома
19.09.2017
21:44:57
и там ещё косячок есть у меня

Snusmumriken
19.09.2017
21:45:01
Косячки подправил.

Philipp
19.09.2017
21:45:20
На мелких строках теряется

Рома
19.09.2017
21:45:26
concat(t, i — тут вместо i надо ''

Philipp
19.09.2017
21:45:31
А ты закэширую функцию, чтобы он не лез в глобал спейс

Google

Snusmumriken
19.09.2017
21:45:35
Да.
А вот на заполнении буфера - тут всё круто.

Рома
19.09.2017
21:45:40
ровно в сто раз!

Snusmumriken
19.09.2017
21:45:49
Фил, ну прочитай, закешировано всё.
Плюс у меня luajit, т.е. на кеширование пофиг.

Philipp
19.09.2017
21:46:05
Ой
Ссорян, болею
Хуже соображаю
А теперь на больших строках сравни
Ради интереса

Рома
19.09.2017
21:47:57
https://pastebin.com/HbY7JBDM
без ошибок (вроде)

Snusmumriken
19.09.2017
21:49:31
Хмм.

Рома
19.09.2017
21:51:12
но нули после точки думают иначе

Philipp
19.09.2017
21:51:26
Что?

Рома
19.09.2017
21:51:34
concat(t, '', 1, 7) было чтобы concat зря длину не считал
да вы серьезно?)) 0.009 меньше 0.02! правда меньше!

Philipp
19.09.2017
21:52:35
У тебя разряды переноситься перестали?))
Типа в три раза быстрее

Snusmumriken
19.09.2017
21:53:51

Рома
19.09.2017
21:54:04
что такое "собирание"?
в пользу которого

Snusmumriken
19.09.2017
21:54:45
Собирание - типа без табличек и table.concat.
Но для буферизации - table.concat в 100500 раз выгоднее.
И надо посмотреть на потребление памяти.

Рома
19.09.2017
21:55:41
во! без табличек и table.concat быстрее в целых 2.6309.... раз! печенька с полки моя1