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