LINUX.ORG.RU

Luau - Lua с «батарейками», написанный на C++17

 ,


2

5

Luau (GitHub) - встраиваемый, Lua 5.1-совместимый (и частично с Lua 5.2-5.4), язык со следующими улучшениями (или «улучшениями»?):

function foo(x: number, y: string): boolean
    local k: string = y:rep(x)
    return k == "a"
end
type Point = { x: number, y: number }
type Array<T> = { [number]: T }
type Something = typeof(string.gmatch("", "%d"))
for k, v in {1, 4, 9} do
    assert(k * k == v)
end
  • улучшенный repl (используется C-альтернатива readline Isocline)
  • и другие изменения ;)

По соображениям безопасности отсутствуют io, os, package и debug.

(En|Destr)oy!

★★★★★

Последнее исправление: dataman (всего исправлений: 2)

Ответ на: комментарий от dataman

Да просто создай файл напиши в него

local x,y = 0,1
    local function sum (x,y)
        return x + y
    end

Затем миллион строк

 x = sum(x,y);

И в конце

print('result:'..x); -- дабы не заоптимизировало и не выкинуло
print('mem usage KB:'..collectgarbage("count")) -- сколько памяти жрёт
return x -- просто так

И запусти, без этих генераторов, хотя проварить как оно ILR и с генерацией справляется тоже полезно, ведь тупая конкатенация строк беда на больших файлах именно поэтому в бенче оно через таблицы иначе вечность ждать так как переаллокаций будет тьма и GC будет на каждой второй итерации всё обходить =) напиасать миллион раз code = code .. body кажется логичным, но это будет боль.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

$ hyperfine -N --warmup 5 --export-markdown luas.md "lua5.4 generated.lua" "luau generated.lua" "luau -O2 generated.lua" "pluto generated.lua" "luau --codegen generated.lua" "luajit generated.lua"

CommandMean [ms]Min [ms]Max [ms]Relative
lua5.4 generated.lua451.8 ± 5.0445.3459.91.68 ± 0.05
luau generated.lua1150.4 ± 18.41131.01184.74.27 ± 0.13
luau -O2 generated.lua1335.3 ± 16.71316.61374.34.96 ± 0.14
pluto generated.lua973.2 ± 8.2963.5984.93.62 ± 0.10
luau --codegen generated.lua1151.8 ± 21.81137.11212.04.28 ± 0.13
luajit generated.lua269.2 ± 6.7262.0283.01.00
Summary
  luajit generated.lua ran
    1.68 ± 0.05 times faster than lua5.4 generated.lua
    3.62 ± 0.10 times faster than pluto generated.lua
    4.27 ± 0.13 times faster than luau generated.lua
    4.28 ± 0.13 times faster than luau --codegen generated.lua
    4.96 ± 0.14 times faster than luau -O2 generated.lua

Но этот бенчмарк совсем негодный, конечно. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Спасибо!
Я предлагал использовать Luau вместо Lua в некоторых проектах (в Celestia, например), но теперь у меня другой фаворит. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Вопщем luau тормоз :D Что так, что эдак. Pluto выглядит лучше на его фоне. Но я продолжу использовать luajit+comopat5.2 там где мне нужна приличная jit скорость в математике и крутой FFI и lua5.3~4 там где я хочу битиками манипулировать без bit32, а синтаксисом.

Не вижу никаких преимуществ ни в luau ни в pluto ни в подобных, всё крупное что они приносят это иной синтексис и типы, но lua мне нужна как раз потому что типы там гуляют как хотят, для типов есть сишечка, а для всего остального luacheck

Ну, это для меня так, я лучше i = i + 1 буду писать =)

Но этот бенчмарк совсем негодный, конечно. :)

:)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Вопщем luau тормоз :D Что так, что эдак.

Нет. Возьмём, эдак, числодробительный LuaJIT/scimark-fft.lua:

CommandMean [s]Min [s]Max [s]Relative
lua scimark-fft.lua46.104 ± 0.00746.09846.10913.05 ± 0.20
luau scimark-fft.lua38.358 ± 0.14838.25338.46310.86 ± 0.17
luau -O2 scimark-fft.lua39.344 ± 0.91638.69639.99211.14 ± 0.31
luau --codegen scimark-fft.lua11.332 ± 0.02911.31111.3523.21 ± 0.05
luau -O2 --codegen scimark-fft.lua10.867 ± 0.04410.83610.8983.08 ± 0.05
pluto scimark-fft.lua45.819 ± 0.29545.61146.02812.97 ± 0.21
luajit scimark-fft.lua3.533 ± 0.0543.4953.5711.00
Summary
  luajit scimark-fft.lua ran
    3.08 ± 0.05 times faster than luau -O2 --codegen scimark-fft.lua
    3.21 ± 0.05 times faster than luau --codegen scimark-fft.lua
   10.86 ± 0.17 times faster than luau scimark-fft.lua
   11.14 ± 0.31 times faster than luau -O2 scimark-fft.lua
   12.97 ± 0.21 times faster than pluto scimark-fft.lua
   13.05 ± 0.20 times faster than lua scimark-fft.lua
dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

И да и нет, если програ в любом бенче проигрывает другим это не значит что бенч плохой, это значит что она в нём проигрывает =)

У вызова функции тоже есть своя цена и для luau есть смысл избавляться от их вызова там где это возможно руками инлайня код в сам цикл если данные гоняются в цикле по миллиону раз.

Даже вызов функции которая вообще ничего не делает стоит времени копирования данных в стек, даже если она ничего не принимает,и пустышка. Хотя вот последнее надо проверить, но йета потом

А иногда даже бред можно побенчить, просто потому что это интересно :)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от alysnix

наследие «Фортан» ещё до стековой эпохи когда всё на «комон-блоках»(т.е неявных ибо и сами комон-блоки возникли в явном виде позже) - да и функции не были реэнерабельны подефолты ибо стека нет как такового - тока в ручную солнце катать

так то на достаточном классе задач глобал по умолчанию как раз таки соответстует более лаконичным скриптам и более распределённому скриптованию - без создания постоянно живого процесса-напарника - а быстрое многократное на россыпи скриптов быстровыполнили без излишних уровней косвенности и быстро завершились

т.е для встройки это как раз таки логично ибо предполагает именно что подтюнивание тех данных которые пришли и они очевидно для задачи подтюнивания глобальны

qulinxao3 ★★
()
Ответ на: комментарий от qulinxao3

Когда научатся переводить нормально с китайского.

cdtemp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.