So flagging the type with my int $i; could help checking at runtime (or compile-time) if ever something else than an integer was assigned to $i and consequently raising an error. (maybe using a "static" bit)²
To avoid further misunderstandings I'm thinking about little snippets, embedded for time-critical loops, but much easier and intuitive than with XS.
The python community uses cython for this purpose facilitating to embed C-code.
I'm writing a little hack emitting elisp snippets out of Perl-Code by translating the optree.
(mainly because I hate writing lisp syntax)
Actually I have to take care for implicit type conversions:
Sure, this can easily be solved by defining an "perl operator like" function pl-concat which does the needed type conversion. This slows down execution but normally thats not too important in emacs. But if I could give the compiler a static hint that $i is an integer, I could make pl-concat a macro which generates the appropriate code at compile time.
Unfortunately I can't read out of the opcodes if $i was explicitly declared as of TYPE integer¹, I have to realize workarounds (e.g naming conventions like $i_INT) to transport this information.
I could read out of the old panther that this kind of usage was intended and it seems natural. Furthermore the docs read like the old usage of fields is deprecated now.
So what are the plans/use cases for TYPE?
Or is it completely deprecated now?
Cheers Rolf
UPDATES:
¹) Example:
line 7 doesn't change if write my $y instead.perl -MO=Concise -e '{package int}; my int $y' 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 2 -e:1) v:{ ->3 5 <2> leaveloop vK/2 ->6 3 <{> enterloop(next->5 last->5 redo->4) v ->4 4 <0> stub v ->5 6 <;> nextstate(main 2 -e:1) v:{ ->7 7 <0> padsv[$y:2,3] vM/LVINTRO ->8
²) Of course this could be achieved using tie, but much slower and with more verbose code.
In reply to Re^2: my TYPE EXPR ?
by LanX
in thread my TYPE EXPR ?
by LanX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |