我发现现代函数式编程语言和范式通常非常有趣。许多函数式编程语言都能够通过使用C作为中间语言或使用自己的代码生成器来生成有效的本机代码。我正在谈论像Haskell,OCaml,LISP或Scheme(SBCL,Chiken,Gambit等)这样的语言。但是要知道函数式编程语言需要一个大的运行时库,通常用C语言实现(例如用于垃圾收集),我想问一下是否真的可以用这种语言创建裸金属代码并且只使用它无需返回C(例如,用于OS开发,或在没有操作系统的情况下在嵌入式设备上运行本机代码)?有没有任何函数式编程语言不依赖于运行时(即使它是一个语言子集)?是否有任何函数式语言可以重新实现它所需的运行时(例如,像Ada,D,Nimrod,Pascal这样的语言具有用语言本身编写的运行时)?如今,我对裸机开发有哪些替代功能语言?
答案 0 :(得分:2)
为什么这样讨厌C?功能语言必须使用较低级别的语言来生成机器级代码。
你也可以用非常纯粹的功能方式编写C语言。 C向开发人员提供了遵循她希望的任何编程风格的自由。
您可以通过应用从其他功能语言中学到的原则轻松地遵循C中的功能范例,即:
et.c。
功能C有book with an intro。
我想问一下是否真的可以创建裸机代码 这样的语言只使用它而不需要回到C
裸金属/机器级/目标代码是由二进制数组成的1GL(第一代编程语言),由1和0表示。
使用编译器的大多数3GL或4GL都可以生成目标代码。
是否存在任何不依赖的函数式编程语言 运行时(即使它是一个语言子集)
嗯,在操作系统之上运行的每个应用程序都必须使用操作系统的API。几乎所有流行的操作系统都是用C / C ++编写的。这包括Windows,Linux,MacOS,Android等。
因此,在为操作系统创建应用程序时,您可能不得不依赖于操作系统的运行时环境(通常用C / C ++编写)。
有没有可以重新实现的功能语言 它需要的运行时(例如Ada,D,Nimrod等语言) Pascal具有用语言编写的运行时)
是的,你可以为你想要的任何语言编写自己的运行时库,但这不是一件容易的事。
我对裸机有哪些替代功能语言 发展这些天?
我建议您选择自己喜欢的函数式语言(Haskell,F#,Scala或其他),然后忘记运行时。它有很多很好的理由用C语写成.AFAIK不会很快改变。
通过在Scala中编程,您可以使用JVM,使用F#,CLR或WinRT。也许这些选项可以帮到你。
编辑:如果您真正想问的是是否可以用函数式语言编写操作系统,那么答案是肯定的。
House是一个用Haskell编写的操作系统。 FFI提供了必要的功能,以便(a)调用访问硬件的低级例程,以及(b)明确管理内存。
MirageOS在OCaml中,并且在ML中实现了操作系统。
一般来说,任何"图灵完成"编程语言可用于创建操作系统,大多数函数语言如LISP,Haskell,OCaml等都是图灵完备。
答案 1 :(得分:1)
我认为将会有很少(如果有的话)替代品,因为原语将依赖于系统,而你的目标文件需要拥有它自己的GC。 (函数式语言需要运行时GC)
您可以使用自己喜欢的函数式语言(可能是Scheme)创建自己的特定于域的语言,它使用某种汇编程序(如Sassy)来最终输出原始机器代码。但实际上这只是制作自己的编译器。
使用C作为中间体的更简单的选项。许多人这样做是因为大多数系统都有C编译器。设备附带C中的参考实现。
另一种选择是使像SBCL这样的系统交叉编译到您的架构并将其用作您设备的runtime OS。
BTW:SBCL在其他语言中的实现很少,而不是Common Lisp。主要部分可能是GC。 GC代码可能已在CL中实现,但这会使调试变得更加复杂,并且有一个错误的GC会导致各种奇怪的行为。