Я не думаю, что он становится чище или быстрее, чем это; -)
Bah! Я думаю, что я могу сделать немного лучше: -D
import contextlib, cStringIO, sys
@contextlib.contextmanager
def nostdout():
'''Prevent print to stdout, but if there was an error then catch it and
print the output before raising the error.'''
saved_stdout = sys.stdout
sys.stdout = cStringIO.StringIO()
try:
yield
except Exception:
saved_output = sys.stdout
sys.stdout = saved_stdout
print saved_output.getvalue()
raise
sys.stdout = saved_stdout
Который добирается до того, что я хотел изначально, чтобы нормально подавлять вывод, но показывать подавленный вывод, если ошибка была сброшена.
Может быть Простое введение в инструкции Lua 5.1 VM содержит то, что вы ищете?
Также есть таблица с набором инструкций Lua 5.0 ( Рисунок 5) в:
Иерусалимский, Р .; Фигейредо, Луизиана; Селес, В. (2005), «Реализация Lua 5.0», Дж. компании Universal Comp. Sci. 11 (7): 1159-1176
Вы можете найти полный текст с помощью поиска в Google Scholar, и я думаю, что он также находится на lua.org. Эта ссылка используется на странице Lua в Википедии, которая всегда является хорошим местом для поиска подобных вещей. : -)
Единственные спецификации для Lua - это язык, стандартные библиотеки и C API. Создатели Lua намеренно оставили виртуальную машину неуказанной по двум основным причинам:
. Это означает, например, что вам обычно не следует использовать виртуальную машину Lua в качестве цели для компилятора. Если вы хотите узнать, как работает виртуальная машина официального дистрибутива Lua в качестве примера для собственного любопытства, посмотрите другие ответы.