对动态和静态类型的偏好在很大程度上取决于个人喜好,并且不同的人或多或少会发现它们在不同情况下是合适的。
我的问题是,在客户端网页扩充等方面,是否有可能使用JavaScript的静态类型替代方法?
对动态和静态类型的偏好在很大程度上取决于个人喜好,并且不同的人或多或少会发现它们在不同情况下是合适的。
我的问题是,在客户端网页扩充等方面,是否有可能使用JavaScript的静态类型替代方法?
Answers:
当然,从技术上讲,这种事情不可能存在。强制使用动态类型语言的客户端代码没有什么特别的。
由于另一种语言不太可能被广泛采用,因此最好的选择是创建一个静态类型的JavaScript(即与Java接近的语言)和一个将其转换为普通JavaScript的预处理器。
例如,您的脚本如下所示:
<script type="text/staticjavascript">
String foobar(int foo, String bar) {
String result="";
for (int i=0; i<foo; i++) {
result += bar;
}
return result;
}
</script>
然后预处理器检查每个变量,函数,对象等是否根据其类型正确使用,并将脚本更改为
<script type="text/javascript">
function foobar(foo, bar) {
var result="";
for (var i=0; i<foo; i++) {
result += bar;
}
return result;
}
</script>
每个浏览器都可以处理。
我的问题是,在客户端网页扩充等方面,是否有可能使用JavaScript的静态类型替代方法?
当然。在谷歌Web工具包汇编静态类型的Java与JavaScript ...试想一下:所有的美丽和Java的灵活性,机器生成的JavaScript的全部性能!
认真地说,您可以对各种语言进行此操作,并且许多语言都已经尝试过(也曾经有过C和C#的编译器)。最终结果是否实际取决于您要完成的工作:Google拥有一个用于开发大型客户端应用程序的一致平台,并具有自己的JavaScript引擎可以启动;您可能会发现,采用这种野兽来产生悬停效果,而奇怪的AJAX调用所带来的痛苦要远远超过仅仅学习使用一些未类型化的代码。
它已经存在。
ActionScript 3(Flash和Flex背后的脚本语言)是ECMAScript的一种方言,可实现强类型,您可以使用与JavaScript大致相同的客户端方式(区别在于AS3需要Flash插件,并且被编译)。这些天,我个人试图避开它,但是如果您处于“静态”阵营中,请尝试一下。
这回答了主要问题,现在我们有了这个问题,您的第二个问题变成“ Flash实用吗?” 答案是“是”,有几个“ if”和“ but”
从理论上讲,您可以将任何脚本粘贴到所需的页面上。该<script>
标签有一个type
属性,毕竟。
唯一的障碍是在不同浏览器中的实现方面要获得足够的市场份额,以使其值得使用。
是的,在这一点上不太可能。
</script>
)。如果您确实愿意,可以在其中粘贴Brainf * ck代码。然后,您需要做的就是在您要使用的浏览器中为所选语言实现一个解释器。
<script type="vbscript">
从前...
可行吗? 没有。
可能吗?是!
最好开发自己的JavaScript静态类型替代方法很耗时。最糟糕的是,您将无法说服任何现有的浏览器来实现您的客户端脚本语言,而必须编写自己的脚本。
也许您在这里找到答案:https : //stackoverflow.com/questions/86426/why-require-javascript-rather-than-supporting-a-standard-browser-virtual-machine
注意:我认为,较新的答案尽管得分较低,但是却更具洞察力。
您可以使用haXe之类的语言以静态类型的方式编写代码并将其导出到javascript。JavaScript变得非常快,因此作为一种输出语言就足够了。试图将静态类型的语言强制作为Web标准几乎是不可能的。由于广泛讨论的原因,尝试将静态类型引入JavaScript的尝试失败了。
从技术上讲有可能吗?如果要用Java实现,我会说“非常,非常困难,但有可能”而不会造成明显的性能损失。
我实际上现在正在用Java手写静态类型的DSL,而我发现避免运行时类型检查的唯一方法是使用泛型并抑制“未检查”的警告……也就是说,直到实现时为止。多维数组(类参数在编译时必须是已知的,因此固有地是有限的,而多维数组表示无限数量的类型...)不幸的是,我仍然试图弄清楚这一点-我敢肯定用户定义的类也会遇到类似的问题。
问题是,我一直在解决这些问题,但是坐了一段时间之后,我想出了一个很好的解决方案。因此,要做到这一点并具有静态类型的性能优势(无需运行时类型检查),我想说这是极其困难的,但并非不可能。除了性能,我会说很难,但很有可能。
我知道这是一个古老的问题,只是认为我的经验可能对某人有价值。
从技术上讲,可以使用用户代理(浏览器)支持的任何脚本语言编写客户端脚本。实际上,唯一受广泛支持的语言是JavaScript / ECMAScript。要说服浏览器制造商在此阶段实施和支持一种新语言,不太可能成功。因此,如果您想使用一种新的静态类型的客户端语言,则需要将该新语言转换为JavaScript或在JavaScript中实现一个解释器。
有几个项目已经在做这样的事情。例如,其他答案之一中提到的Google Web Toolkit。
可选的静态类型是ECMAScript的Project Harmony的一部分-我猜它是否会在客户端[基于浏览器的] JavaScript中发生。请参阅以下Wikipedia链接:http : //en.wikipedia.org/wiki/ECMAScript#Future_development