Skip to content
/ Cosmo Public

lightweight scripting language loosely based off of Lua

License

Notifications You must be signed in to change notification settings

CPunch/Cosmo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5711ca2 · Dec 30, 2023
Sep 5, 2023
Sep 6, 2023
Sep 6, 2023
Dec 30, 2023
Sep 1, 2023
Feb 9, 2023
Jun 2, 2023
Sep 1, 2023
Oct 28, 2020
Sep 5, 2023
Dec 30, 2023
Dec 30, 2023

Repository files navigation

Cosmo

Usage: ./bin/cosmo [-clsr] [args]

available options are:
-c <in> <out>   compile <in> and dump to <out>
-l <in>         load dump from <in>
-s <in...>      compile and run <in...> script(s)
-r              start the repl

Workflow License

What is a 'cosmo'?

Cosmo is a portable scripting language loosely based off of Lua. Cosmo easily allows the user to extend the language through the use of Proto objects, which describe the behavior of Objects. For example the following is a simple Vector Proto which describes behavior for a Vector-like object.

proto Vector
    func __init(self)
        self.vector = []
        self.x = 0
    end

    func __index(self, key)
        return self.vector[key]
    end

    func push(self, val)
        self.vector[self.x++] = val
    end 

    func pop(self)
        return self.vector[--self.x]
    end
end

let vector = Vector()

for (let i = 0; i < 4; i++) do
    vector:push(i)
end

for (let i = 0; i < 4; i++) do
    print(vector:pop() .. " : " .. vector[i])
end
3 : 0
2 : 1
1 : 2
0 : 3