擅长:python、mysql、java
<p>几年前我写了一个编译器,它接受了一种叫做“面条”的lisp语言,并生成了Python字节码。虽然它从来没有变得特别有用,但对于更好地理解公共Lisp(我复制了它的一些特性)和更好地理解Python来说,它是一个非常好的学习体验。</p>
<p>我可以想到两种特殊情况:直接以Python字节码为目标,而不是生成Python并将其传递给Python编译器时可能会有用:</p>
<ol>
<li>完全闭包:在python3.0之前的版本中(在<code>nonlocal</code>关键字之前),如果不借助字节码黑客技术,就不能修改closed over变量的值。您可以改变值,因此通常的做法是让一个闭包引用一个列表,并从内部范围更改其中的第一个元素。这会让人很恼火。但是,限制是语法的一部分,而不是pythonvm。我的语言有显式的变量声明,因此它成功地提供了带有可修改closed over值的“normal”闭包。在</li>
<li>在不引用任何内置项的情况下获取回溯对象。当然是真正的利基案件,但我用它打破了早期版本的“safelite”监狱。请看<a href="http://thepaulprog.blogspot.com/2009/02/safelite-exploit.html" rel="nofollow noreferrer">my posting</a>。在</li>
</ol>
<p>所以,是的,这可能是比它的价值更多的工作,但我喜欢它,你也可能。</p>