gpt4 book ai didi

scripting - 通过 F# 解释脚本

转载 作者:行者123 更新时间:2023-12-02 09:32:56 25 4
gpt4 key购买 nike

我真的很喜欢 F#,但我觉得它不够简洁和简短。我想更进一步。我确实知道我想如何改进它,但我没有制作编译器的经验,所以我想我会让它成为一种脚本语言。然后我意识到我可以使它成为一种脚本语言并使用 F# 对其进行解释,但由于 F# 具有 inline 选项,仍然可以获得几乎 100% 的性能。我对吗?真的有可能在 F# 中制作一个脚本解释器,它会遍历我的脚本并将其转换为大量仿函数之类的东西,从而获得非常好的性能吗?

最佳答案

I really like F# but I feel like it's not succinct and short enough. I want to go further. I do have an idea of how I'd like to improve it but I have no experience in making compilers so I thought I'd make it a scripting language.

F# 通过 F# Interactive 支持脚本场景,所以我建议考虑 internal DSL首先,或在 F# Language UserVoice 上建议功能页面。

Then I realized that I could make it a scripting language and interpret it using F# but still get pretty much 100% performance thanks to F# having the inline option. Am I right?

根据场景,解释代码可能足够快,例如,如果您的应用程序 99% 的时间都花在等待网络、数据库或图形渲染上,那么解释代码的总体成本可能可以忽略不计。对于基于计算的操作而言,情况并非如此。 F# 的内联函数有助于性能调整,但不太可能提供全局 Elixir 。

Is it really possible to make a script interpreter in F#

作为起点,可以为普通 F# 代码编写解释器。例如,您可以使用 F# 的引用机制来获取代码片段或整个模块的抽象语法树 (AST),然后对其求值。下面是一个小的 F# 片段,它计算 F# 代码引用的一小部分:http://fssnip.net/h1

或者,您可以从头开始设计自己的语言...

Is it really possible to make a script interpreter in F# that would go through my script and turn it into lots of functors and stuff and so get really good performance?

是的,您可以设计自己的脚本语言,使用 F# 类型系统定义 AST,然后编写将脚本代码转换为 AST 表示的解析器,最后解释 AST。

解析器

有许多解析选项,包括:

  • 事件模式和正则表达式,例如评估 spreadsheet 中的单元格
  • FsLex & FsYacc,例如 parse SQL
  • FParsec,一个解析器组合库,例如解析 Small Basic

我建议从 FParsec 开始,它有一个很好的教程、大量示例并根据您的代码免费提供基本错误消息。

小例子

下面是一些使用 FParsec 的简单示例解释器,可以帮助您入门:

有趣的基础

不久前,我基于 Microsoft 的 Small Basic 使用 F# 编写了自己的简单编程语言。具有有趣的扩展,例如对元组和模式匹配的支持。它叫做Fun Basic , 有一个带代码完成的 IDE,可在 Windows 应用商店免费获得。 Windows Store 版本被解释(由于对发出代码的限制)并且性能足够。还有一个适用于在 Windows、Mac 和 Linux 上运行的桌面的编译器版本。

Is it really possible to make a script interpreter in F#

所以我想,答案是肯定的,如果您想了解更多信息,可以免费录制我去年在 NDC 伦敦所做的关于如何 Write Your Own Compiler in 24 Hours 的演讲。

我还建议您选择 Peter Sestoft 的 Programming Language Concepts book其中有一章是关于构建您自己的函数式语言的。

关于scripting - 通过 F# 解释脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com