首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数编程语言和裸机代码?

函数编程语言和裸机代码?
EN

Stack Overflow用户
提问于 2014-07-30 18:40:22
回答 2查看 2.6K关注 0票数 2

我发现现代函数式编程语言和范型总体上非常有趣。许多函数式编程语言都能够通过使用C作为中间语言或使用自己的代码生成器来生成高效的本机代码。我说的是像Haskell、OCaml、LISP或Scheme (SBCL、Chiken、Gambit等)这样的语言。但是知道函数式编程语言需要一个大的运行时库,通常是用C实现的(例如垃圾回收),我想问一下,真的有可能用这种语言创建裸机代码,并且只使用它而不需要返回到C语言(例如,用于操作系统开发,或者用于在没有操作系统的嵌入式设备上运行本机代码)吗?有没有不依赖于运行时的函数式编程语言(即使它是一个语言子集)?有没有什么函数式语言可以让我重新实现它所需要的运行时(例如Ada、D、Nimrod、Pascal等语言本身就有运行时)?现在我有什么替代的函数式语言来进行裸机开发?

EN

回答 2

Stack Overflow用户

发布于 2014-07-30 21:37:42

为什么对C语言如此讨厌?函数式语言必须使用低级语言来生成机器级代码。

你也可以用一种非常纯函数的方式来写C。C为开发人员提供了遵循任何她想要的编程风格的自由。

通过应用从其他函数式语言中学到的原则,您可以轻松地在C中遵循函数式范例,例如:

  • 无突变。

  • No malloc。

  • 避免状态。

基于动词而不是名词的

  • 模型。

  • 使用递归而不是迭代。

  • et.c.c.

有一个指向函数式C。的book with an intro

我想问一下,在这种语言中创建裸机代码,并且只使用它,而不需要返回到C#,这真的可能吗

裸机/机器级/目标代码是由二进制数组成的1GL (第一代编程语言),由1和0表示。

大多数使用编译器的3GL或4GL都可以生成目标代码。

有没有不依赖于运行时的函数式编程语言(即使它是一个语言子集)

好吧,在操作系统之上运行的每个应用程序都必须使用操作系统的API。几乎所有流行的OSes都是用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等等,都是图灵完成语言。

票数 3
EN

Stack Overflow用户

发布于 2014-07-30 23:07:56

我认为将会有很少的选择(如果有的话),因为原语将依赖于系统,并且您的目标文件需要有它自己的GC。(函数式语言需要运行时GC)

您可以使用自己喜欢的函数式语言(也许是Scheme )编写自己的特定于领域的语言,使用某种汇编器(如Sassy )最终输出原始机器代码。但实际上,这只是制作您自己的编译器。

使用C作为中间语言的一个简单得多的选择。因为大多数系统都有一个C编译器,所以很多都是这样做的。设备附带了C语言的参考实现。

另一种选择是让像SBCL这样的系统交叉编译到您的体系结构中,并将其用作设备的runtime OS

顺便说一句:除了Common Lisp之外,SBCL在其他语言中几乎没有实现。主要部分可能是GC。GC代码本可以用CL实现,但这会使调试变得更加复杂,并且使用有but的GC时会出现各种奇怪的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25034714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档