Luсky
Luсky
Я на и на инстеде бизнесапы фигачил
WDMR
Luсky
утилиты для работы
Luсky
Специализированные калькуляторы и б.д. к ним.
Sergey
Всем привет! Такой вопрос: я определил для таблицы метаметод __pairs и он работает с pairs, а вот как быть с ipairs?
Snusmumriken
Sergey
Увы, нет. Начиная с 5.3😔
Snusmumriken
Увы, нет. Начиная с 5.3😔
local function myipairs_next(tbl, index)
index = index + 1
local v = tbl[index]
if not v then return end
return index, v
end
local metatable = {}
function metatable:myipairs(index)
index = index or 0
index = index > 0 and index - 1 or index
return myipairs_next, self, index % #self
end
local mytable = setmetatable({1, 2, 3, 4, 5}, {__index = metatable})
for i, v in mytable:myipairs(-4) do
print(i, v)
end
> 2 2
> 3 3
> 4 4
> 5 5
Sergey
Забыл добавить - как минимум. 5.2 не пользовал.
Sergey
Хех, мне нужен именно ipairs, такой вариант не прокатывает...
Snusmumriken
for i = 1, #t do
local v = t[i]
...
end
Sergey
Да это я всё понимаю, но мне нужно именно запретить другим юзерам пользоваться ipairs. Да, я могу запретить __index, но тогда не смогу индексировать таблицу.
Snusmumriken
local oldipairs = ipairs
function ipairs(t, ...)
local mt = getmetatable(t)
if mt and mt.__ipairs then return mt.__ipairs(t, ...) end
return oldipairs(t, ...)
end
Snusmumriken
Sergey
Да, это уже лучше, спасибо!
Snusmumriken
Ещё можно сделать
local ipairs = ipairs
_G.ipairs = nil
Всё, ты своровал функцию и убрал её из глобал скоупа
Snusmumriken
Ещё можно выдать пользователям отдельный ENV, где всё почищено от лишнего.
Вилби
В чем преимущество Луа перед Питоном?
Sergey
В мануале к 5.3 есть загадочная фраза
The ipairs iterator now respects metamethods and its __ipairs metamethod has been deprecated.
. Что за этим кроется - не очень понимаю. Я тоже уважаю метаметоды ), но всё же...
ベクゾッド
Snusmumriken
Потому что питон распиарен и на самоподдуве. Всё нормально.
Вилби
Snusmumriken
Примерно идентичен.
Вилби
Хм...
Snusmumriken
Луа местами попроще синтаксически и механически, но нет либ, которые снижают порог в питон.
Вилби
Snusmumriken
Стандартных.
Snusmumriken
И это тоже обосновано.
Вилби
Без них можной обойтись?
Snusmumriken
Смотря где.
Вилби
Сильно влияет на скорость производительности прогера?
Snusmumriken
Смотря что пишет )
Вилби
😁
Snusmumriken
В среднем, у питона "производительность прогера" выше, потому что куча либ которые можно дёрнуть. С луями надо ставить и уже потом дёрнешь. И не факт что сразу заведётся.
Snusmumriken
Вот тут абсолютно пофигу.
Snusmumriken
Изначально на луа был торч, потом его портировали на питон и начали пиарить питон как топ для мл/матана. И вот это приколдес такой значительный.
Hello, World! 🎄
Вилби
Вилби
Говорят Питон более ресурсоемок к железу?
Snusmumriken
Да, а ещё он более ресурсоёмок по производительности. Но на это пофигу, потому что вся требовательная ерунда делается нативным кодом на сишке и там и там. На луях и питоне ты пишешь сценарии дёргающие нативную ерунду.
Вилби
Луа на чисто Си создан? Не на ++?
Snusmumriken
Чисто на Си.
Hello, World! 🎄
Snusmumriken
Но и на пофигу, потому что это нативная фигня.
Писать же биндинги и нетривиальную ерунду в тысячу раз проще на луа чем на питоне.
По производительности и экономичности самих интерпретаторов с JIT'ом — luajit > pypy.
Вилби
Извиняюсь
Вилби
Есть ли смысл вообще входить с библиотек? Или качественее фундаментально?
Snusmumriken
Я всегда изучаю фундамент первым делом, просто потому что библиотеки — дело наживное, плюс зависимы от платформы.
Luсky
Вилби
Очень мало видео по Луа, иногда сложно понять. Хотя принцип самого когда очень прост
Luсky
Буквари в зет-либ
Hello, World! 🎄
Snusmumriken
https://habr.com/ru/post/346892/
Luсky
Вилби
Luсky
А дальше - тык-тык-тык.
Вилби
Остальное какие то специфические дебри
Sergey
И да, из Луа можно выкинуть всё, что не нужно, часть стандартных библиотек и даже парсер! Ну это если сильное ограничение по памяти. В отличии от Пайтона он очень маленький).
Luсky
а ещё можно луажит ффи и либы ваааау
Вилби
А питон на чем написан?
Snusmumriken
Зависит от реализации.
Александр
Hello, World! 🎄
Hello, World! 🎄
Александр
А питон на чем написан?
Каноничный интерпретатор на Си, в целом бывают реализации на питоне(PyPy), джаве(Jython) и других языках в зависимости от целей разработчиков
Snusmumriken
А питон на чем написан?
Карочи, маленькая прочистка мозгов: язык это просто стандарт. Соглашение что этот текст приведёт к такому поведению, всё.
Дальше уже идут конкретные реализации.
Есть много интерпретаторов луа — PUC-эталонная, Luajit, реализации на шарпе и на чём-то там ещё, даже на Rust. Они обладают немного разным функционалом и различаются по производительности.
Snusmumriken
То же самое с питоном. Есть много версий питона, на С/++, Java и куче всего ещё.
Александр
Cкачал исходники, там C
Интерпретаторы разные бывают. По мимо эталона есть PyPy, CPython, Jython и другие