06/Feb/2021
Updated on 13/May/2022
-- Discovered Shine, on github.com/richardhundt/shine
-- Yes I know Wren, I don't like forcefully OOP languages
-- There's also Gravity, it looks neat (it's also OOP but doesn't
-- force you to write OOP code), though it seems abandoned
-- I really like, or want to like, Lua for many reason, either because it's
-- so simple and concise, so lightweight and lean for a scripting language,
-- or for it being made in Brazil.
-- But it has some small details that individually make me annoyed, and
-- together make me always not like use it after some time.
-- I will mark them with
-- :| for minor stuff
-- :( for quite annoying stuff
-- Comment notation :|
-- the "--" are fine
-- it's the multi line ones ( --[ --] ) that are ugly and weird,
-- specially the levels thing
-- Fix:
-/
Random stuff -/ can be nested /- here
/-
-- writing 'function' can be long :|
-- function -> fun/c (can be just an alias)
fun something()
end
-- No switch statement :(
switch thing
case 3 then
-- ...
end
case 7,8 then
-- multiple case values
end
else then
-- if everything else fails, do this
end
end
-- no 'continue' for loops :(
-- without it you need to use 'goto' (WHY?)
while true do
if (x%3) == 0 then continue end
-- ...
end
-- meh way to write 'for' loops :|
-- also, not having += -= etc operators :(
-- the ~= for inequality :|
for j=2, j<=10, j += 1 do
if j != 0 then
-- ...
end
end
-- 'elseif', a very stylistic choice thing :|
-- 'elif', or a parser case where 'else if' (in the same line) is a single
-- thing if you want to add complexity
-- variables global by default :(
-- have variables be local by default
-- have a keyword to initialize global vars
b = 2 -- outside function: package/file scope, inside function: function scope
pub c = 10 -- global scope
-- no way to diferentiate declaration and assignment :|
d := thing -- yes, go style identifiers
-- can't index strings :(
-- preferably do it based on 'runes' instead of based on byes
stringo = "egg"
if stringo[1] == "e" then
-- ...
end
-- Or at least a simple way to turn a string into a table
-- (again, split on unicode, not bytes)
if stringo.runes()[2] == "g" then
--...
end
-- no way to set fixed var/param types :|
-- of course these would be optional,
-- it's simply a bit more of useful detail
someone :num = 2
sometwo :str = false -- give error
fun sus(somegg :num) :num -- also have return type
--...
end
-- in the same vain, no true constants :|
PI is 3.14
pub PIE is "apple and cinnamon"
pub Dragon :str is "rawr!"
-- 'is' for declaring consts
-- or something, thist just looks neat
-- no *official* structs/classes implementation :|
-- string.char(v) will halt the program if v isn't an ASCII val :(
-- Metatables feeling weird to use :|
-- This is more of a personal thing, as I generally feel most
-- metaprograming in languages is weird do use. So I don't even have
-- a 'fix' for this one, it's simply meh for me, maybe a Rust-like trait system?
-- These were all my nitpicks/wishes that I had in my mind,
-- feel free to tell me how I'm wrong :)