|
|
|
|
|
by uryga
2274 days ago
|
|
sounds interesting, i'll have a look at the code when i have time. i've mostly done compiler stuff like this with the "one function with a huge switch on the expression type" approach, curious to see what the more OOP-ish way looks like. btw: wow, that cheatsheet is exactly what i had in mind on my first comment, that's the kind of stuff i'd like in a readme! maybe a few excerpts with a link to the whole thing. some more remarks if you're interested: --- in that cheatsheet it'd be cool to also show the generated code for each example, maybe in a collapsible box or sth – in that context the actual semantics of a convtools expression are useful to know. --- have you thought about some magic syntactic sugar? the current approach is kind of visually heavy, since you're basically writing an AST by hand. with some __dunder__ hacking you could easily (?) add a "magic" api like from convtools.magic import magic as m
c.item('key') ->
m['key']
c.call_method('foo', ...) ->
m.meth.foo(...)
c.call_function('bar', ...) ->
m.func.bar(...)
or something similar. it might be a bit too magical for some tastes, but if you're constructing a python expression, it kind of makes sense to use python syntax for that |
|
As for the magic-stuff, I was contemplating designing the API with this approach, but I changed my mind because it would be difficult to tell which python expressions are evaluated at the moment of a conversion definition AND which in the compiled code.
However if we imagine this "magic" API, then it could be even closer to normal python code:
which would resolve everything under the hood.===
as for the collapsable generated code examples -- I've jotted down :)