是否有任何静态类型的Web脚本语言?[关闭]


12

似乎有两种主要方法来设置Web服务器后端。您可以使用LAMP堆栈,并在服务器端代码中使用PHP或Python(或Ruby或JavaScript,而不以P开头)之类的代码。这些脚本语言往往是动态类型的,具有以下所有缺点:动态类型语言带来的性能,正确性和可维护性,但是更新服务器很容易,因为所有页面生成逻辑都存储在外部脚本中。

广泛使用的另一种主要体系结构样式是ASP.NET,其中页面生成逻辑是用编译代码编写的。这倾向于使用静态类型的语言,因此您获得了受益于编译器的代码,但是所有页面生成逻辑都已编译到服务器中,这意味着如果您需要更改某些内容,则必须关闭服务器,然后用新的版本替换它。

这让我感到奇怪。为了兼顾两者的优势,是否存在使用静态类型的服务器端脚本语言?


2
您是否考虑过使用Go
pswg


4
“动态类型化语言在性能,正确性和可维护性方面的所有缺点”。这些断言充其量是有争议的,最坏的情况是错误的(当今最快的JIT适用于动态类型的语言)。
哈维尔

2
“页面生成逻辑已编译到服务器中,这意味着如果您需要更改某些内容,则必须关闭服务器,并用新的版本替换它。” 有几种服务器环境可以切换到新的二进制文件而不会中断服务。即。uWSGI优雅重载
Javier

1
对于JVM,有几个框架可让您即时重新编译和热插拔。
back2dos 2013年

Answers:


8

更新:更多当前解决方案包括AtScript

您应该尝试使用Google Dart

它具有可选的类型,这意味着您可以添加类型注解,这些注解将在运行时以“已检查”的开发人员模式进行检查,但不是必需的,并且该语言提供了其他动态语言(如python)的许多优点。但是,编辑器会进行类型推断,以尝试帮助您提前发现错误。dart VM速度很快,并且可以生成快照,从而可以将启动时间缩短10倍。它也可以编译为javascript,而且速度很快

这里的主要缺点是这是一种有点新的技术,因此没有太多的库可供使用,老实说,与javascript的互操作性并不像应该的那么简单。此外,该语言仍在开发中,因此不时会有重大更改。


我宁愿推荐TypeScript。类似于dart,但与JavaScript兼容。
Knerd 2014年

4

您的问题基于几个错误的假设。

在执行之前,Python,Ruby都被编译为字节码。该过程是自动的,但是更改应用程序需要完全重新启动。Node.JS的行为方式相同,但编译为机器代码。

可以将ASP.NET代码预编译并复制到服务器,或者根据需要从服务器上的源代码动态编译。IIS处理两种形式的更新都不会导致停机时间为零(更新之后的第一个请求将很慢。)使用Python和Ruby可以将停机时间更新为零,但是具有如此众多的部署选项,这并不是理所当然的。

基于此,我认为您将对任何.NET语言感到满意。


3
脚本语言是一种您可以将其写入文件并运行的语言。没有理由不应该对其进行静态输入。
Florian Margaine 2013年

@FlorianMargaine所以C是一种脚本语言?

@delnan C ++也是如此。
mikerobi 2013年

@mikerobi实际上“我的”也是C ++(也是AFAIK CINT的后继者),我只是搞砸了。

2
@mikerobi如果您探索picoc,您会发现它最初写的全部要点是脚本语言。它不仅是c的解释器,还是一个足够小的解释器,可以嵌入较大的应用程序和设备中,并使他们的用户能够用c编写小脚本。某些语言在脚本编写方面可能比其他语言更好,但是某种语言在编写脚本方面还不错,因为它还没有被使用。归根结底,语言只是语法和语义,实现方式可能千差万别。
yannis 2013年

0

没有理由必须强编译或难以更新已编译的语言。

您可能需要查看一些erlang Web设置,例如Cowboy,Webmachine和氮气。借助Dialyzer,您可以进行非常正确的类型检查,以确保其正确性,并且可以在运行时动态重新加载模块,因为erlang旨在在不中断现有用户的情况下就地升级软件。

另外,webmachine(我使用最多的webmachine)可以非常快。我已经看到Webmachine在Amazon EC2小节点上对API端点的平均响应小于10毫秒!

如果您想进行静态输入,请尝试使用适用于Haskell语言的Yesod框架。Haskell使用非常丰富的类型系统来强类型化。

我没有亲自使用过它,但是我认识的人都喜欢它。


3
不要混淆强类型和静态类型。Haskell具有强大的静态类型,Python具有强大的动态类型。
mikerobi 2013年

0

恕我直言,最好的静态类型的Web脚本语言是d

像解释性脚本语言一样,它可以快速,闪电般地编译脚本。

该语言本身感觉就像是强类型的超级功能JavaScript,例如,比Go强大得多。

像PHP中一样,所有并发内容都是隐藏的,并且模板是用本机代码编译的。

很难找到比这更好的...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.