--- layout: single title: "Luau Recap: March 2021" --- Luau is our new language that you can read more about at [https://roblox.github.io/luau](https://roblox.github.io/luau). It's been a busy month in Luau! [Cross-posted to the [Roblox Developer Forum](https://devforum.roblox.com/t/luau-recap-march-2021/).] ## Typed variadics Luau supports *variadic* functions, meaning ones which can take a variable number of arguments (varargs!) but previously there was no way to specify their type. Now you can! ``` function f(x: string, ...: number) print(x) print(...) end f("hi") f("lo", 5, 27) ``` This function takes a string, plus as many numbers as you like, but if you try calling it with anything else, you'll get a type error, for example `f("oh", true)` gives an error " Type `boolean` could not be converted into `number`" Variadics can be used in function declarations, and function types, for example ``` type T = { sum: (...number) -> number } function f(x: T) print(x.sum(1, 2, 3)) end ``` ## Generic functions [TODO] ## Typechecking improvements * Check bodies of methods whose `self` has type `any` * More precise types for `debug.*` methods * Better typechecking for `Instance:IsA`. ## Performance improvements * Significantly optimized non-variadic function calls, improving performance by up to 10% on call-heavy benchmarks * Improve performance of `math.clamp`, `math.sign` and `math.round` by 2.3x, 2x and 1.6x respectively * Optimized `coroutine.resume` with ~10% gains on coroutine-heavy benchmarks ## Library changes * Added the `debug.info` function which allows retrieving information about stack frames or functions; similarly to `debug.getinfo` from Lua, this accepts an options string that must consist of characters `slnfa`; unlike Lua that returns a table, the function returns all requested values one after another to improve performance. ## New logo Luau now has a shiny new logo! !["New logo!"]({{ site.url }}{{ site.baseurl }}/assets/images/luau.png) ## Coming soon... * Generic variadics! * Better treatment of cyclic requires! * [Anything else?]