For the best experience on desktop, install the Chrome extension to track your reading on news.ycombinator.com
Hacker Newsnew | past | comments | ask | show | jobs | submit | history | ssize_t's commentsregister

thanks!


Absolutely :) I "discovered" this when researching implementing a new language on top of python. The decorator is completely unnecessary, so you can have a complete language with custom features built entirely on top of the python interpreter.


Speaking of building on top of CPython, you can also go another route with compiling however crazy syntax you can come up with into its bytecode. See e.g. https://pyos.github.io/dg/


I've been toying with the idea of implementing some sort of DSL on top of python but wouldn't really know where to start.

Would you have any pointers (heh) given the discovery you made?


I think the `#coding:` approach is promising. You have to fit your parsing/transpilation into a pretty small time budget (which is a fun challenge on its own) to keep the startup time hit negligible. The source code gets reparsed serval times in certain cases, e.g. when printing a stack trace, so its a good idea to have some sort of caching mechanism.

As far as parsing goes, if you want to stick with python I've had good success with pyparsing [1], otherwise I have a strong preference to do language-related things in OCaml with menhir [2]. I've toyed with wrapping the Python parser in an OCaml library with decent success [3]. But, of course, unless you're optimizing for fun, it's probably a good idea to stick with Python.

Another, weirder, approach is creating a language that happens to be able to be parsed by the same grammar as python, then using a decorator (or similar) to get the source code or the ast to reparse and transpile. As an example you could have something like `a <- b` be the syntax for an actor model message receive dsl (which is valid python).

[1] https://github.com/pyparsing/pyparsing [2] http://gallium.inria.fr/~fpottier/menhir/ [3] https://github.com/georgek42/pyparser


Thanks a mil for the tips.


Syntactic is a module specifically for doing this.

https://github.com/metatooling/syntactic


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search:

HN For You