teal-language / tl

The compiler for Teal, a typed dialect of Lua
MIT License
2.03k stars 101 forks source link

`final` as new keyword #700

Open fperrad opened 9 months ago

fperrad commented 9 months ago

Lua 5.4 & Teal support the <const> annotation. That allows immutable variable. But for large use, the annotation syntax is ugly and too long.

My proposal is just a sugar syntax based on a new keyword final: final foo = something --> local foo <const> = something final fn() end --> local fn <const> = function() end

lenscas commented 9 months ago

what would it do if the target isn't lua5.4?

fperrad commented 9 months ago

quoted from https://github.com/teal-language/tl/blob/master/docs/tutorial.md#const-variables

The <const> annotation works in Teal like it does in Lua 5.4 (it works at compile time, even if you're running a different version of Lua).

hishamhm commented 9 months ago

I have restrained myself from making purely cosmetic changes/additions to the "Lua parts of the language" so far, and I don't have immediate plans to change this. But if I were to do this, I'd probably just name it const.

fperrad commented 9 months ago

const is fine too.

For an example (with a small module) of the tedious syntax of annotation, see https://framagit.org/fperrad/lua-Rotas/-/commit/a2c631309aceb778dde93f044f168e56227d33c2

jordan4ibanez commented 8 months ago

I read the previous comments, 5.1 const can just throw an error if you do something dumb, const could be noice for functions too! Like if you want

function(test: const number) 
  test = test + 1
end

would throw an error like that's a const, you're dumb or something more professional during transpile. This would make working with lua 5.1 (like in minetest) soooo much easier