[HN Gopher] Python Meta Circular Interpreter (2019)
___________________________________________________________________
Python Meta Circular Interpreter (2019)
Author : leonry
Score : 41 points
Date : 2024-12-15 19:46 UTC (3 days ago)
(HTM) web link (rahul.gopinath.org)
(TXT) w3m dump (rahul.gopinath.org)
| albertzeyer wrote:
| In Python, some of the stated use cases, like extracting
| coverage, extracting the call graph, etc, you can get via tracing
| already (sys.settrace,
| https://docs.python.org/3/library/sys.html#sys.settrace).
|
| And I would argue, the other stated use cases are maybe
| interesting to play around with, but nothing you really would
| want in production (I suppose).
|
| Some of the other use cases, you can also achieve by module
| import hooks and rewriting the AST. (E.g. see how PyTest rewrites
| the assertion AST to produce nice error messages:
| https://github.com/pytest-dev/pytest/blob/main/src/_pytest/a...)
| stabbles wrote:
| the pytest example screams for @assert as a macro, if only the
| language supported it
| zem wrote:
| pytype (https://github.com/google/pytype) is based on symbolic
| interpretation of python bytecode, but with the data stack
| storing types rather than values. it works very well and has
| been running in production within google forever.
|
| the nice thing about writing a bytecode rather than an AST
| interpreter is that you can leverage a lot of the work the
| python compiler does, and work with the resulting simplified
| code.
| upghost wrote:
| Er, to be clear, this just seems to be an interpreter -- not a
| meta circular interpreter. I don't see any evidence that it is
| able to evaluate its own definitions or its own API. It doesn't
| have any tools to handle class definitions, object instantiation,
| or method invocation, so I'm not sure by what definition of "meta
| circular" this interpreter fits.
|
| Not trying to knock the project. Very cool code! Just don't
| understand how it qualifies as a "meta circular".
| lihaoyi wrote:
| In contrast, my Metascala JVM
| (https://github.com/lihaoyi/Metascala) is indeed metacircular,
| and can interpret itself 1 and 2 layers deep (each layer 100x
| slower than the layer before!)
| Zambyte wrote:
| This is so cool :D thanks for sharing! This sent me back down
| a small Scala rabbit hole haha
| 082349872349872 wrote:
| Cf https://codewords.recurse.com/issues/seven/dragon-taming-
| wit... , a python->bytecode compiler that can compile itself.
| albertzeyer wrote:
| Somewhat similar: My PyCPython project
| (https://github.com/albertz/PyCPython), where I wrote a C
| interpreter in Python, and then tried to interpret CPython. I
| never really completed this project though.
___________________________________________________________________
(page generated 2024-12-18 23:02 UTC)