[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: type checking experiments (parser samples)
- From: Asko Kauppi <askok@...>
- Date: Sat, 7 Oct 2006 00:54:20 +0300
There was some discussion about type checking in the LuaOhSix
workshop. I've now experimented with the concept (at a patch level,
on 5.1.1) and come to the point where it's better to stop for a
while, and tell what I've been up to.
Here are syntactic samples, they do parse but don't get runtime-
checked, yet (there's a couple greater hurdles on that..)
-- -1<=v<=3 on input, and -2<= <=2 on return
--
local function mynut( v :range(-1,3) )
: range(-2,2)
return v-1
end
-- more parameters, multiple return types
--
local function mydear( t :string_or_table, i :int, j :int_opt,
n :number_opt )
: string : table : int_opt
--return -- fail
--return 1,2,3 --fail
--return "",{i=5} -- ok
return "",{i=5},33 -- ok
end
-- table structure constraint (can also be covered by a custom
constraint function)
--
local myfear= function( t :{ a=int, b=string }, v :int_opt )
..
end
local function myfear( t :myab, v :int_opt )
..
end
I first planned only to have the function entry/return values checked
(and this can be done in pure Lua, it's not much trouble..) but later
extended to concept to what if _any_ Lua (local) variable could be
tagged as of certain type(s), and that tested each time the variable
is given a new value.
local myvar :int, mystr :string= 10, 0 -- will become "0"
assert.number( myvar )
assert.string( mystr ) -- mystr should have implicitly gotten 0-
>"0" conversion
One could use such technique only where wanting, of course. The
purpose would be to bring Lua a bit towards the static typed
direction, but carefully.
There are some neat side-effects to this. :) Such as ability to
implicitly make those '(%d+)' captures become numbers, without
harming the rest of the Lua population. That was not why I started to
look into this, though.
local a:number, b:any= string.match( "123 456", "^(%d+)%s+(%d+)" )
Will finish this "sometime later". Currently, it's here just to let
you know, and in case someone's up to a similar study.
- asko
Attachment:
sample.lua
Description: Binary data