Wsevolod
С lluv будут два различных loop-а, смысл тогда
Pavel
а это много - 90000грн?
я в гривнах не рублю
usernameak
Pavel
забавно что почти все описание про хард-скилы,а не про софты...
Alexey
usernameak
@Snusmumriken таки не ливнул!
Snusmumriken
Ага, я потому и предложил.
Snusmumriken
А с чего ливнул бы-то?
usernameak
да как то потребность в луа исчезла...
usernameak
зачем мне lua, если у меня в процессе есть целая JVM (а в JVM можно воткнуть почти всё кроме современного JS, в том числе и Lua (причём 5.2!))?
Snusmumriken
Ну типа мало ли, какие-то фишки подцепишь, будешь эксплуатировать. Правда, основная движуха в ЕЩЁ ОДНОМ соседнем флудо-чатике, но там куча некондишна со флудом.
Snusmumriken
Во! Меня дичайше напрягает питон своей работой с аргументами!
Вот я хочу написать две функции:
def foo(a, b, c):
return a + b + c
def bar(a, b):
return a + b
А потом вызывать, мол:
func = foo if a % 2 == 0 else bar
func(a, b, c)
И оно меня пошлёт с попыткой вызова bar! Слишком много аргументов! Уууу!
usernameak
usernameak
но вообще такая вещь как минимум делает плохо JIT'у)
Snusmumriken
Не, не делает. Просто будет две трассы. То же самое будет если добавить условие
Snusmumriken
Любое условие автоматом расщепляет трассу. В луажыте там получается ещё немного хитрее, слезание с трассы/переключение и возвращение на неё может быть почти бесшовным.
usernameak
сразу скажу: я не вникал в то, как работают JIT'ы у динамически типизированных языков)
usernameak
я не настоящий сварщик (c)
Snusmumriken
Ну кароч, трасса это кусок байткода, который очень часто повторяется и таки собрался. Все дополнительные условия добавляют в трассу проверку: надо ли с неё слезть и переключиться на нескомпилированный код или нет. Проверки тоже компиляются.
Snusmumriken
Кстати, jit тоже запрещён яблоком, потому что самомодификация и ваще надо компилятор в приложение встраивать ))0
Внутри luajit сидит tcc и компиляет.
usernameak
есть два вида платформ, закрытые и открытые :D
Snusmumriken
Кста, за счёт tcc, на луажыте можно писать по-настоящему на сишке на луях, если через ffi подрубить уже встроенный в неё tcc. Ну и разумеется, можно дёргать саму луа, открывать новые стейты, пихать в них код и уходить в рекурсию.
Я тут видел некоторое дерьмо.
usernameak
usernameak
это жёсткое дерьмо с запахом углепластика!
Luсky
Да. Круто!
Марат
Aydar
Во! Меня дичайше напрягает питон своей работой с аргументами!
Вот я хочу написать две функции:
def foo(a, b, c):
return a + b + c
def bar(a, b):
return a + b
А потом вызывать, мол:
func = foo if a % 2 == 0 else bar
func(a, b, c)
И оно меня пошлёт с попыткой вызова bar! Слишком много аргументов! Уууу!
Так и должно быть не? Позиционные аргументы все обязательные по правилам языка, какое поведение по-твоему лучше? Чтобы аргументы были необязательными они должны быть именованные. Ну есть ещё один вариант вторая функция у тебя должна принимать a, b, *args например, но тогда ее логику надо переписывать. Не в защиту питона но ты странного хочешь.
Dmitry
Arslan
Arslan
Пройдёт
anton
а как по другому это сделать?
anton
а что если там триллион раз нужно это повторить, каждый раз проверять условие?
anton
не, прикол в том, что иф ты сделаешь один раз, а потом в цикле будешь триллион раз вызывать нужную функцию
anton
я про случай, когда тебе не нужна эта проверка в каждой итерации, потом у тебя могут быть несколько вызовов этой функции, каждый раз иф писать?
anton
ну ок
anton
а если у тебя условие условие трёхэтажное, ты создашь видимо флаг сначала, и будешь его таскать везде
Snusmumriken
Марат
Snusmumriken
То что прописано по умолчанию в ffi — создано исключительно для ffi. Но компилятор tcc умеет компилять строки в оперативную память, и через ffi его можно подрубить.
Dmitry
Во! Меня дичайше напрягает питон своей работой с аргументами!
Вот я хочу написать две функции:
def foo(a, b, c):
return a + b + c
def bar(a, b):
return a + b
А потом вызывать, мол:
func = foo if a % 2 == 0 else bar
func(a, b, c)
И оно меня пошлёт с попыткой вызова bar! Слишком много аргументов! Уууу!
я сразу че-то не сообразил - так можно в питоне, только в bar надо объявить будет positional arguments типо def bar(a, b, *args): ..., и тогда он в себя будет брать bar(a, b, c)
Snusmumriken
Будет, но надо модифицировать функции ))
А если я использую чьи-то библиотечные — надо вокруг них что-то оборачивать, фу.
Dmitry
ну да, тогда не выкрутишься)
Leon174
Leon174
Еще интересней, что она уже была в закладках ((
Дмитрий
🐒
Dmitry
товарищи вопрос - вот я делаю os.execute('ls'), а как мне выдачу этого лс получить в луа?
Aydar
Dmitry
да я видел этот ответ, мол записываем в файл, а потом через попен читаем
Dmitry
смутило что другого способа нет
Dmitry
типо как же так
Dmitry
Dmitry
я думал делается так
os.execute'ls > files.txt'
files = io.popen'files.txt'
Александр
Dmitry
Aydar
Dmitry
тоже попробовал
Dmitry
https://www.gammon.com.au/scripts/doc.php?lua=io.popen
Dmitry
ща вот это буу пробовать
Dmitry
с ассертом почему-то работает
Dmitry
пам пам пам ПААААААМ
Dmitry
я понял почему не работало
Dmitry
потому что я объявлял локал переменную
Dmitry
теперь вопрос почему
Dmitry
то есть
x = io.popen('ls') -> file
local x = io.popen('ls') -> nil
Aydar
Александр
Dmitry
Dmitry
Dmitry
я пишу локал в глобальном скоупе
Aydar
в терминале
Вот поэтому и не работает, каждая строчка в терминале исполняется как отдельный кусок кода, если ты создашь локальную переменную то к моменту начала ввода второй строки локальная переменная перестанет существовать.
Dmitry
Dmitry
окей, интересно
Dmitry
как питониста меня это удивляет))
Dmitry
но прикольно прикольно