- 1
- 2
- 3
- 4
local buff = ""
for line in io.lines() do
buff = buff .. line .. "\n"
end
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
local buff = ""
for line in io.lines() do
buff = buff .. line .. "\n"
end
Несмотря на его безобидный вид, этот код может сильно ударить по быстродействию для больших файлов:
например, чтение файла размером 1 Мб занимает 1,5 минуты
gost 29.03.2018 17:18 # 0
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
SemaReal 29.03.2018 17:22 # +1
guest8 14.05.2020 23:19 # −999
kir_rik 30.03.2018 01:49 # −1
roskomgovno 04.07.2018 23:25 # 0
хуй
хуйхуй
хуйхуйхуй
хуйхуйхуйхуй
итд
Прежде чем GC его заберет у тебя будет тратиться память.
В жабах и CLR для этого есть StringBuilderы
guest8 08.07.2018 09:04 # −999
roskomgovno 08.07.2018 18:11 # 0
Погугли "Shlemiel the painter’s algorithm"
guest8 08.07.2018 19:01 # −999
guest8 09.07.2018 13:17 # −999
roskomgovno 09.07.2018 17:18 # 0
Возможно еще придется находить длину строки. Я не знаю как Lua ее хранит: если строки там null terminated то каждый вызов у нас будет иметь O(длина строки), и тогда будет еще хуже.
roskomgovno 08.07.2018 00:09 # 0
11.6 String Buffers
Suppose you are building a string piecemeal, for instance reading a file line by
line. Your typical code would look like this:
local buff = ""
for line in io.lines() do
buff = buff .. line .. "\n"
end
Despite its innocent look, this code in Lua can cause a huge performance penalty
for large files: for instance, it takes 1.5 minutes to read a 1 MB file on my old
Pentium machine.1
3oJIoTou_xyu 08.07.2018 06:48 # 0
roskomgovno 08.07.2018 00:15 # 0
почему
guest8 08.07.2018 00:53 # −999
guest8 08.07.2018 00:55 # −999
guest8 08.07.2018 00:56 # −999
guest8 08.07.2018 00:57 # −999
roskomgovno 08.07.2018 00:58 # 0
в луа это одно и тоже
guest8 08.07.2018 01:00 # −999
guest8 08.07.2018 01:00 # −999
roskomgovno 08.07.2018 01:04 # 0
guest8 08.07.2018 01:17 # −999
roskomgovno 08.07.2018 01:22 # 0
хуйня-с
вот у строки есть
ташто в table.concat table это модуль(сиречь таблица) а не тип.
Вооще говоря противно конечно, почти так же противно как тот факт што
``"A".find`` это синт ошибка, а
a = ""
a.find --это функция
Lua непредскаузем, как C++:)
guest8 08.07.2018 01:29 # −999
roskomgovno 08.07.2018 01:33 # 0
даже твой пример можно переписать так
guest8 08.07.2018 01:38 # −999
roskomgovno 08.07.2018 01:39 # 0
лол, этоже прототи наследованне (я еще до ООП не дочитал)
roskomgovno 08.07.2018 01:42 # 0
lua: attempt to call method 'concat' (a nil value)
metatableу делегируются вызовы неизветсных методов, вставки, получения длины итд, но только надо это явно сообшщить
guest8 08.07.2018 01:56 # −999
roskomgovno 08.07.2018 02:04 # 0
три раза
пишут что у метатаблы есть метод __index, который вызывается при обращении по индексу при отсутвтвии значения
Вероятно можно это как-то обыграть
guest8 08.07.2018 02:47 # −999
3oJIoTou_xyu 08.07.2018 06:41 # 0
guest8 08.07.2018 02:58 # −999
3oJIoTou_xyu 08.07.2018 06:33 # 0
И к коду выше. Зачем мучаться каждый раз привязывать метатаблицу к таблице, заебешься когда у тебя будет 100500 таблиц и придеться явно каждый раз привязывать данную метатаблицу.
Можно юзнуть метаметод __newindex у _G, главное в рекурсию не улететь. И когда мы будет создавать глобаль уже будет автоматом таблице привязавоться метатаблица с методом __index с той самой библой table.
С локалями данный метод не работает так как локали не создаются в _G а где-то в другом месте. Пока сам не знаю где, не доходило дело и до них.
3oJIoTou_xyu 08.07.2018 06:36 # 0
666_N33D135 08.07.2018 07:07 # 0
Зойчем зосорять просранство имён?
("питух"):format
roskomgovno 08.07.2018 17:30 # 0
работает
("petuh"):upper()
roskomgovno 09.07.2018 17:21 # 0
незасорил пространство имен, проверьт
TOPT 09.07.2018 18:35 # 0
TOPT 09.07.2018 18:51 # 0
TOPT 09.07.2018 18:54 # 0
Ну теперь точно ничего не сделает, потерял ссылку на сам сборщик.
Добро пожаловать утечка
roskomgovno 09.07.2018 21:08 # 0
foo зажат у setmetatable между булками
В луа же так идеома итератора работает
TOPT 10.07.2018 04:14 # 0
roskomgovno 10.07.2018 04:22 # 0
так гц же
>>сборщик мусора в поток параленьно
так, вот отсюда поподробнее.
Я знаю только про корутины которые работают в одном треде операционки.
Разве в луа есть какие-то другие треды?
Что будет если у меня переменная указывает на объект, который забрал гц? Может так быть? Если да, то что будет? nil?
TOPT 10.07.2018 04:29 # 0
Нет не нил, а помоему вывалится с ошибкой. НО ВСЕ ЭТО НИТОЧНО, НАДО БОЛЬШЕ ИСЛЕДОВАНИЙ, я давно с этим баловался
roskomgovno 10.07.2018 04:32 # 0
гарантировать патокабизопастность должен host, в который встроен lua
сам lua для этого средств не имеет
3oJIoTou_xyu 08.07.2018 10:32 # 0
Пиздешь.
file = io.open("petux.txt","r")
file:close()
guest8 08.07.2018 01:35 # −999
roskomgovno 08.07.2018 01:37 # 0
foo = {["spam"] = 42}
можно записать как
foo = {spam = 42}
Что то есть неуловимое от старого JSа где объект есть массив ассоциативный
guest8 08.07.2018 01:19 # −999
guest8 08.07.2018 01:21 # −999
roman-kashitsyn 10.07.2018 11:40 # 0
Sim_salapim 10.07.2018 18:37 # 0
2. Повторил тебе джважды, проверь.
guest8 08.07.2018 09:06 # −999
666_N33D135 08.07.2018 09:20 # 0
Жытон - это Jython? Я на нём ни разу не писал, ты о чём?
guest8 08.07.2018 09:57 # −999
666_N33D135 08.07.2018 10:31 # 0
Я не понял, ты хочешь мутабельную уникодную сьроку? ???
guest8 08.07.2018 12:47 # −999
guest8 08.07.2018 13:19 # −999
guest8 08.07.2018 13:45 # −999
666_N33D135 08.07.2018 13:55 # 0
guest8 09.07.2018 13:13 # −999
666_N33D135 09.07.2018 14:11 # 0
guest8 09.07.2018 14:22 # −999
roskomgovno 08.07.2018 18:02 # 0
Мутабельность строк это, ваще гря, ящик пандоры. Открыли его только в Ruby (и там пришлось ввести понятие symbol чтобы не юзать строки в качестве ключей хеша), остальные языки боятся.
Потому что строки имеют дурную привычку быть инициализированными строковыми литералами, и у тебя 100500 строк, которые все указывают на строчку "pitux" где-то в коде, и когда ты хочешь поменять один символ тебе придетца делать CopyOnWrite со всеми вытекаюшими.
А в случае сишечки так еще и копелятор имеет право сунуть литерал в место, запрешенное для записи (ну в страницу кода там или в сегмент какой-нить).
guest8 09.07.2018 13:14 # −999
MAKAKA 14.05.2020 23:23 # 0
Для ключей они, разумеется, не подходят: нужны символы
666_N33D135 08.07.2018 13:56 # 0
guest8 08.07.2018 14:14 # −999
666_N33D135 08.07.2018 14:26 # 0
guest8 08.07.2018 15:16 # −999
Sim_salapim 08.07.2018 17:55 # −1
Ненавижу, когда пассы руками лезут куда не просят. во время ёбли.
roskomgovno 08.07.2018 17:57 # 0
1) выделает N памяти
2) если место кончается -- делает realloc.
guest8 09.07.2018 13:17 # −999
Sim_salapim 08.07.2018 17:57 # −1
guest8 08.07.2018 21:44 # −999
666_N33D135 09.07.2018 07:06 # 0
guest8 08.07.2018 20:57 # −999
TOPT 09.07.2018 06:29 # 0
ASMOZDOT 09.07.2018 12:18 # 0
ASMOZDOT 09.07.2018 12:20 # 0
ASMOZDOT 09.07.2018 12:18 # 0
ASMOZDOT 09.07.2018 12:05 # 0
guest8 14.05.2020 23:29 # −999
Needless 14.05.2020 23:52 # 0
MAKAKA 14.05.2020 23:57 # 0
guest8 15.05.2020 00:06 # −999
ropuJIJIa 15.05.2020 12:22 # 0
MAKAKA 14.05.2020 23:24 # 0
guest8 14.05.2020 23:30 # −999