first ast impl