我即将为一个爱好项目启动一个基于 LFS 的 linux 发行版。我计划做一些非常非标准的任务,其中大部分将涉及更改发行版中的几乎所有脚本。(主要是 init 脚本,但我也会编写一组简单的包管理器脚本。)因为我要远离规范,而且我从来都不是动态类型语言的粉丝(perl, python、bash 和其他都很好,但不是我的强项),我想知道是否有人知道实际上已经声明变量的解释语言。
5 回答
通常,静态类型语言是编译语言。我猜原因是,类型的静态分析相当昂贵,您必须深入了解您正在处理的所有代码。完成之后,不将所有信息写入文件感觉很浪费,这样您下次就不必再这样做了。所以你很快就会得到一种编译语言。
另一方面,将编译语言转换为“未编译”语言相当容易。您只是不将编译结果存储在任何地方,而是直接执行它们。我知道提供这种包装器的一种编译器是 GHC,即标准的Haskell编译器。您可以添加#!/usr/bin/runhaskell
到源文件中,然后直接执行它们。而且由于您打算远离规范,因此 Haskell 似乎是完美的选择;)。但预计脚本的启动时间会相当长,因为所有“编译时间”分析和优化都不是免费的。
Haskell 不是为 shell 脚本而设计的,它是一种函数式语言,所以如果你以前从未见过它,可能需要一些时间来适应它。但是它的语法开销很小,而且函数式语言的优势在于抽象,所以我不明白为什么你不能创建一个让 shell 脚本变得有趣的库。甚至还有一些实验性的 Haskell shell,但它似乎更像是一个概念验证而不是真正的解决方案。
一般来说,我会说所有类型分析的开销很大,但我建议你选择你最喜欢的静态类型编译语言并寻找一个像runhaskell
执行用它编写的脚本的包装器。
F#提供了“类型安全、简洁、性能、表现力和脚本”的组合。
快速谷歌。F3、javaFX脚本、Linden Scripting Language(第二人生的脚本),不像第一个答案的评论F#可以作为脚本语言 http://blogs.msdn.com/chrsmith/archive/2008/09/12/脚本在 f.aspx
Felix、Tuga、CFGScript、Talc、Angelscript,并且猜测不止是快速搜索。
道格拉斯
时髦的。默认情况下,它是动态的、鸭式的。而且还支持静态类型。
查看您最喜欢的 shell 中的“排版”命令。bash 和 ksh93 都可以强制整数和字符串,使用引用(变量变量)等。使用 ksh93,您还可以进行浮点数学运算并使用具有属性的对象。静态类型并不能真正为您购买任何在 init 脚本和类似脚本中有用的东西。你主要是读取文件和运行系统命令——这是 shell 真正擅长的。花点时间阅读 O'Reilly 的“学习 Korn Shell”一书,然后再决定所有其他 Unix 的设计都很愚蠢……;)