有人知道任何静态类型的脚本语言吗?

sde*_*sse 12 linux scripting linux-from-scratch package

我即将为一个业余爱好项目启动一个基于LFS的Linux发行版.我计划做一些非标准的任务,其中大部分都涉及更改发行版中的几乎所有脚本.(主要是init脚本,但我也会编写一套简单的包管理器脚本.)因为我要远离常规,因为我从未成为动态类型语言的粉丝(perl, python,bash和其他都很好,但不是我的强项),我想知道是否有人知道实际上已声明变量的解释语言.

sth*_*sth 7

通常,静态类型语言是编译语言.我想原因是,对类型的静态分析相当昂贵,你必须深入了解你正在处理的所有代码.完成后,将所有信息写入文件会感觉很浪费,这样您下次就不必再这样做了.所以你很快就会得到一个编译语言.

另一方面,将编译语言转换为"未编译"的语言相当容易.您只是不将编译结果存储在任何位置,而是直接执行它们.我知道提供这样一个包装器的一个编译器是GHC,标准的Haskell编译器.您可以添加#!/usr/bin/runhaskell到源文件,然后直接执行它们.由于你计划远离常态,Haskell看起来非常合适;).但是期望脚本的启动时间相当长,因为所有"编译时"分析和优化都不是免费的.

Haskell不是用于shell脚本的,它是一种函数式语言,所以如果你以前从未见过它,可能需要一些时间来习惯.但它的语法开销很小,函数式语言的强度也是抽象的,所以我不明白为什么你不能创建一个让shell脚本变得有趣的库.甚至还有一些实验性的Haskell shell,但它似乎更像是一个概念验证,而不是一个真正的解决方案.

一般来说,我会说所有类型分析的开销很大,但我建议你选择你最喜欢的静态类型编译语言,并寻找一个类似于runhaskell执行其中编写的脚本的包装器.

  • 没有*编译语言*.每种语言都可以由编译器或解释器实现.事实上,绝大多数编程语言至少有一个实现.此外,大多数现代语言实现实际上**编译器*和*解释器.既然你提到了Haskell:Hugs是一个Haskell解释器.V8是一个JavaScript编译器.微软的PowerShell是一个编译器.几年前,Bash开发人员正在考虑切换到已编译的实现.HotSpot JVM既是解释器又是编译器 (7认同)

dan*_*uer -2

查看您最喜欢的 shell 中的“typeset”命令。bash 和 ksh93 都可以强制执行整数和字符串、使用引用(变量)等。使用 ksh93,您还可以进行浮点数学运算并使用具有属性的对象。静态类型并不能真正给你带来任何在初始化脚本和类似脚本中有用的东西。您主要将读取文件并运行系统命令 - 这是 shell 真正擅长的事情。在决定所有其他 Unix 的设计都是愚蠢的之前,请花一些时间阅读 O'Reilly 的“学习 Korn Shell”一书……;)