随着Web变得越来越流行,有些人说移动和桌面应用程序很快就会不复存在.
我们看到像WebGL这样的新技术,它们使用了JS.
当我为WebGL开发时,我必须进行更多优化以获得合理的性能基准,然后我需要为PC或控制台做些什么.
那么为什么我们仍然使用解释的客户端语言呢?这是一个安全问题,硬件(跨平台)问题还是因为很难在Web架构中引入如此大的变化?我知道Web开发人员对即使是最小和最简单的更改也很头疼,比如使用CSS 3,因为不是每个人都有他们的浏览器是最新的.
我是否认为混合语言比编译语言慢?我有意义还是我的假设完全错误?我绝不是JS /网络专家,请教育我.
解决方法
To my knowledge JavaScript is the only language that will execute on the client side after the HTML file has been retrieved from the server.
这是错的.至少在HTML 4.01中,< script> element有一个type属性,允许您指定所需的任何语言. HTML 4.01规范本身在VBScript和Tcl中有示例.
例如,旧版本的Internet Explorer支持VBScript作为ECMAScript的替代脚本语言.有些版本的Chrome支持Dart作为替代脚本语言.有一个项目在Firefox中添加了对PHP,Perl,Python,Ruby,Tcl等的支持.
您还可以使用具有输出ECMAScript的编译器的任何语言,并且现在几乎所有语言都具有该语言,例如,有些编译器可以编译C,C,Java,Scala,C♯,F♯和许多其他的ECMAScript编译器.还有一些语言被明确设计为ECMAScript的超集(例如TypeScript),语义上接近ECMAScript(例如CoffeeScript),或者易于编译为ECMAScript(例如Dart).
As far as I know JavaScript is by no means compiled in anyway and thus it is an interpreted language.
这是错的.所有当前存在的浏览器内ECMAScript执行引擎至少有一个编译器.许多人有几个编译器.至少有一个人没有翻译:
> V8是纯编译的,从来没有任何解释,它总是将ECMAScript源代码编译为二进制本机代码.原始版本有一个编译器,当前版本有两个.
> SpiderMonkey总是将ECMAScript编译为SpiderMonkey字节码.然后,首先将此字节码解释几次以收集统计信息,然后通过几个编译器之一将“热”部分编译为二进制本机代码.
> Nitro总是将ECMAScript编译为Nitro字节码.然后,然后由另一个编译器将“热”部分编译为二进制本机代码.
> Chakra总是将ECMAScript编译为Chakra字节码.然后,然后由另一个编译器将“热”部分编译为二进制本机代码.
事实上,术语“解释语言”和“编译语言”甚至都没有意义.不解释或编译语言.语言就是这样.编译和解释不是语言的特征,它们是编译器或解释器的特征(呃!)语言是一组数学规则和限制.而已. “语言”的概念和“解释”的概念生活在两个完全不同的抽象层次上.如果英语是键入语言,则术语“解释语言”将是类型错误.
每种语言都可以由解释器实现,每种语言都可以由编译器实现.有C和C的解释器,有ECMAScript,PHP,Python和Ruby的编译器.
Am I correct in thinking that interperated languages are slower then compiled ones?
不,首先,就像我上面解释的那样,根本就没有解释或编译语言.只有语言的解释或编译实现.其次,说一种语言比另一种语言慢,没有意义.你可以说的是,某个特定程序在特定机器上的特定环境中由特定版本的特定实现执行时运行得比不同环境中不同实现的不同版本执行的不同程序运行得更快机.
一般而言,典型程序在特定实现中的表现主要取决于花费多少钱,资源,努力,智力,研究,工程和人力,而不是语言的任何特定特征. Oracle HotSpot JVM很快就不是因为它是一个已编译的实现,而不是因为Java是静态类型的(事实上,这完全不相关,因为HotSpot JVM执行JVM字节码,它甚至不知道任何关于Java的东西!),但是因为Oracle而太阳已经投入了大量的资源.具有讽刺意味的是,在Sun收购Smalltalk(!!!)公司及其VM技术之前,Java实际上相当缓慢.是的,这是正确的:HotSpot JVM实际上只是一个稍微修改过的Smalltalk VM,即用于动态语言的VM.
事实上,VM HotSpot是基于开源的,也是VM V8的基础(这也就不足为奇了,因为V8是由开发HotSpot JVM和基于它的Smalltalk VM的一些人开发的.在).
请注意,有两次尝试获取浏览器供应商接受的新语言:
asm.js是一种语言,是ECMAScript的语法和语义子集(意思是任何asm.js程序也是一个语义相同的ECMAScript程序,而且对asm.js一无所知的浏览器只会认为它是ECMAScript和执行它作为ECMAScript并且它将工作)具有某些限制,使其成为编译器的良好目标(例如,创建将C编译为asm.js的编译器相对容易)并且同时是本机代码的良好源代码生成(即它的语义与现代主流通用cpu的语义相对接近).
同样,WebAssembly是一种(二进制)语言,与asm.js具有基本相同的目标,除了不要求它是ECMAScript的适当子集.它是自己独立的语言,受asm.js,LLVM bitcode,ANDF,CIL,JVM字节码,Pascal P-Code等的启发.
Asm.js已经拥有一些浏览器支持,并且由于它只是ECMAScript的一个子集甚至可以在没有支持的浏览器中工作……只是速度较慢. WebAssembly正在获得牵引力,尽管它仍处于实验和原型设计阶段.