refactor: separate compiler from runtime