C怎么可能没有内部函数,但用C实现的语言可以吗?

Hat*_*end 3 c lua

我最近一直在编写像Lua这样的脚本语言,并且匿名内部函数的存在让我思考.用C语言实现的语言(如Lua)如何在C语言中具有内部函数,无论您做什么,都无法避免在编译期间必须事先声明函数的事实?这是否意味着在C中,实际上有一种方法可以实现内部函数,而这仅仅是实现庞大的代码库以使它们成为可能的问题?

例如

void *block = malloc(sizeof(1) * 1024); // somehow 
// write bytes to this memory address to make it operate
// like an inner function?
// is that even possible?
char (*letterFunct)(int) = ((char (*letterFunct)(int))block;
// somehow trick C into thinking this block is a function?
printf("%c\n", (*letterFunct)(5)); // call it
Run Code Online (Sandbox Code Playgroud)

我缺少的关键概念是如何弥合这一差距,理解为什么某些具有高级功能的语言(类,对象,内部函数,多线程)可以用没有所有这些语言的语言实现?

dbu*_*ush 5

仅仅因为特定语言的编译器/解释器是用C语言编写的,并不意味着该语言必须转换为C然后进行编译.

我不知道Lua,但是在Java的情况下,代码被编译为Java Byte Code,(松散地说)Java VM读取和解释.

原始的C编译器是用汇编语言编写的,原始的C++编译器是用C语言编写的,因此可以用更低级的语言编写更高级语言的编译器.

  • @Hatefiend"在C级别执行"究竟是什么意思,你觉得哪种语言符合这个定义? (2认同)