虽然我个人不喜欢一种风格而不喜欢另一种风格,但我不认为从Javascript抽象出来的这些框架带来的唯一好处就是它。当然,在抽象整个语言的过程中,会有以前可能变得不可能的事情,反之亦然。决定使用诸如GWT之类的框架来编写vanilla JavaScript取决于很多因素。
使JavaScript与X语言的讨论毫无结果,因为每种语言都有其优点和缺点。相反,通过采用这样一个框架来对将要获得或失去的东西进行客观的成本效益分析,而这只能由你而不是不幸的SO社区来完成。
不知道底层的问题适用于JavaScript,就像它对任何翻译过的源代码一样。你认为有多少人知道jQuery究竟发生了什么,因为他们试图做一个比较,比如$("p") == $("p")
,并且因此返回false
。这不是假设情况,关于同样的问题也有几个问题。学习语言或框架需要时间,如果有充足的时间,开发人员可以理解这些框架的编译源。
上述问题的另一个相关方面是信任。我们不断在较低层次的抽象层次上构建更高层次的抽象,并依靠低层次的东西应该按预期工作的事实。你最后一次深入到C++或Java程序的编译二进制文件中以确保其正确工作?我们不是因为我们相信编译器。例如,当使用这样的框架时,使用JSNI回落到JavaScript并不丢脸。这一切都是用手头的工具以最好的方式解决问题。 JavaScript,Java或C#或Ruby等没有什么神圣之处,它们都是解决问题的工具,虽然它可能成为你的障碍,但它可能是一个真正省时又有利于其他人的工具。
至于我认为网络编程的发展方向,我认为有很多有趣的趋势,或者希望能够成功,例如服务器端的JavaScript。它至少为我解决了非常实际的问题,因为我们可以在Web应用程序中轻松避免代码复制。客户端和服务器端可以共享相同的验证,逻辑等。它还允许编写一个简单的(de)序列化机制,以便RPC或RMI通信变得非常容易。我的意思是这将是非常好的能够写:
account.debit(200);
在客户端,而不是:
$.ajax({
url: "/account",
data: { amount: 200 },
success: function(data) {
..
}
error: function() {
..
}
});
最后,它是伟大的,我们拥有所有这些多样性在框架和解决方案构建Web应用程序,因为下一代解决方案可以从每个解决方案的失败中学习,并专注于他们的成功构建更好,更快,更棒的工具。
+1如果提到'绑定到编译器的提供者'的问题 – 2011-04-19 14:00:35
WebSharper现在是开源的,但考虑到你写这个时,这是一个非常好的答案。 – 2012-07-04 15:52:22
“出于某种原因,所有F#程序员都必须至少能读取C#或VB.NET,否则他们无法访问大多数关于.net框架的信息”。 FWIW,这当然不是真的。 – 2012-11-11 12:45:37