句子大全

句子大全 > 句子大全

SDCC之编程语言论坛总结:语言的盛宴!

句子大全 2013-10-15 02:53:09
相关推荐

摘要:从CoffeeScript到Dart,从JavaScript到Node.js,从PHP到Go,从Java到JVM,创新工场首席架构师蔡学镛、淘宝数据平台产品部资深前端开发工程师田永强、39健康网技术副总监邢兴、Oracle JVM编译器团队工程师莫枢为我们带来一场“编程语言”盛宴。

1.创新工场首席架构师蔡学镛:Dart进可攻退可守

2012中国软件开发者大会(SDCC2012)的第五场分论坛 编程语言 中,创新工场首席架构师蔡学镛做了题为 认识Google Dart语言 的演讲,深入浅出地帮助研发人员建立了对于Dart的基本了解和判断,并对 Dart是进可攻退可守的语言,攻在Android,守在Web 这一观点做了详尽的论述。

目前市场中,基于Web的研发和应用已经普及。对开发者而言,部署小程序很容易,支持渐进式部署;对于使用者而言,不需要安装极易于使用,而对浏览器厂商来说,更是必争之地。从另一方面来看,Chrome第一,Firefox第二,IE第三,浏览器的飞速发展也使得Web平台演进出现新的变化。而体现在代码方面,就是应用规模较小的时候并不容易体现出不足,但是一到较为复杂应用环境则对语言的挑战更为严格,有些本身存在不足的语言就容易出现混乱。

Dart有四方面优势

总的来看,就是在 生产力、扩充能力、运行速度和起始速度 这四方面存有隐忧。Dart则试图解决这四方面问题。首先,兼容于浏览器:可以转成JavaScript;生产力部分,分成了语言、框架和工具这三个层次。语言方面:容易学习,容易阅读,不易犯错,很多语法糖;框架方面:DOM-Tree,Google Services,Application Framework;工具方面:完整的开发与代码分析工具;扩充能力:结构化的语言更容易开发大型系统;运行速度:做出更快的虚拟机很容易,可设计一个新语言;起始速度:Snapshot帮助速度提升10倍,Tree-shaking减少生成不必要的代码。但是在运行速度、起始速度和兼容浏览器方面,是有矛盾的,因为 Tree-Shaking是在Dart虚拟机上运行的 。

以上这些内容确实是Gart的特点,但是也要看具体环境而分析。在目前热门排名中中,JavaScript第11位,Dart第55位,CoffeeScript第104位。对比Dart与CoffeeScript时各有优势。 我认为,如果想兼容于现有的浏览器环境,而且习惯函数式编程,那么可以采用CoffeeScript,它会是一个比较好的选择。如果不需要兼容浏览器环境,那么Dart的虚拟机大有用处。

兼容于JavaScript VM时对比

不兼容于JavaScript VM时对比

Dart真正腾飞的三个时间点

这个问题进一步延伸,则成为不兼容浏览器的时候,Dart用在哪里?Chrome,比如Android。虽然目前Chrome没有支持Dart,但是当Dart1.0稳定下来之后, 虚拟机被并入Chrome里面就会成为可能。当然,这也牵扯出Oracle和Google在Java方面的争执。所以说,在蔡学镛看来, Dart是进可攻退可守的语言,攻在Android,守在Web 。

谷歌期望的Dart生态结构

不过,蔡学镛同样也对研发者作出建议: 现在投入太早,明年观察。这其中有三个时间点:其一是Dart 1.0 发布;其二是Dart正式成为Chrome的一部分;其三是Android 开始支持 Dart。这其中,最后一点最为重要。

在他看来, Dart:是为了Web而重新发明的Java。 (I said they are Reinventing Java for the Web)。

2.淘宝数据平台产品部资深前端开发工程师田永强:让人痴迷的Node.js

SDCC2012 编程语言 论坛中,淘宝数据平台产品部资深前端开发工程师田永强带来了题为 全JavaScript堆栈产品的经验分享 Node的核心与红利 的演讲。在他看来,JavaScript的 慢与乱 的问题桎梏了其在后台的发展。他深度分析了Node.js在服务器端的成果以及如何在云时代下思考并行性开发,而历经三年的积累,Node.js现在拥有14576个module 解决方案,形成了比问题还多的技术社区。Q A环节时间很充足,数个极具代表性的问题直指开发语言的实践核心。

Node.js是什么?

网景希望JavaScript是Java+Script。但是作为一种动态、弱类型、基于原型的,通过浏览器可以直接执行的语言,JavaScript一直在人们的印象中,更加适合前端,而不适合于后端。这一方面有浏览器大战中,JavaScript的不作为,另一方面还有其最根本的技术制约。田永强表示: JavaScript一个慢一个乱的问题桎梏了其在后台的发展。 具体来看,就是随着JavaScript引擎性能的大幅提升,JavaScript趋向应用化时,其本身问题更加明显:JavaScript严重依赖浏览器,JavaScriptAPI支离破碎。

有没有办法解决?Javascript的转折者出现了 Ryan Dahl。2009年,Node.js创始人Ryan Dahl最初希望采用Ruby来写Node.js,但是后来发现Ruby虚拟机的性能不能满足要求,后来尝试采用V8引擎,选择了C++语言。虽然Node.js不是Javascript应用,但是其却是一个Javascript的运行环境。提到Javascript,更多人首先想到的是日常使用的浏览器,现代浏览器包含了各种组件,包括渲染引擎、Javascript引擎等,其中Javascript引擎负责解释执行网页中的Javascript代码。作为Web前端最重要的语言之一,Javascript一直是前端工程师的专利。不过,Node.js是一个后端的Javascript运行环境(支持的系统包括*nux、Windows),这意味着开发人员可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行。

Node.js的优势与瑕疵

发展至今,Node.js已经在面向网络的平台 高性能Web服务器中崭露头角,并成为首个将异步提升到业务层面的平台。而对比Nginx,作为服务器,Node.js略逊于Nginx;但Nginx仅仅是Web Server,但Node.js可以面向各个业务方向。

尽管Node.js的优势非常明显,但是也是有所瑕疵。比如单线程,CPU如何利用?单线程,一个异常就会导致进程挂掉;内存使用有所限制?异步如何实现?回调嵌套非常复杂等等。如何解决呢? Node.js三年已累积了14576个module 解决方案比问题还多的技术社区! ,在一个答案比问题多的社区中,有开源的支持,痴迷于Node.js的田永强表示毫无压力。

由于时间充足,问答环节尤为精彩,数个极具代表性的问题如Node.js如何做全站,异构编程模式,JavaScript中的函数和原型链,模块测试,资源支持与调用等直指开发语言的实践核心。敬请关注CSDN后续的SDCC演讲视频。

3. 39健康网技术副总监邢兴:为PHP Web带来惊喜的Go语言!

SDCC2012 编程语言 论坛中,39健康网技术副总监邢兴的演讲主题为 Go语言在PHP Web开发中的实践 。他着重讲述了三个场景并给出了合适的解决方案:一是在某个系统中,一个PHP页面的操作除完成本地数据保存外(如MySQL),还需要向后台服务提交数据。该服务由于压力巨大,响应较慢,延迟较大( 100ms);二是页面多次调用不同的服务生成( 30次调用),各个服务之间的依赖关系较弱,调用相对独立。但由于调用服务较多,虽然每个服务的响应都很快, 但是仍然导致PHP生成页面很慢;三是如何快速实现旧系统的大量PHP代码迁移。

Go是工程化好语言而非技术玩具

邢兴对Go的历程有很深的体会, 我接触go比较晚,最初认为其很普通,其他语言有的他都有,其他语言没有的特性他也没有,而别的语言有好的语法糖他也没有。但是后来通过偶然机会,在设计使用场景的时候,发现go非常实用,是工程化的好语言,而不是技术性的玩具。

由于其演讲方向为实际应用Web开发上的经验分享,和PHP有些关联。所以,邢兴最先介绍的是Web应用的典型技术架构:浏览器/服务器(B/S)模式;服务器后端处理后向浏览器输出HTML文本;模块化不断演进,如CDN、Cache、Logical Service、Database、Searche Engine等。PHP在其中的作用很是重要。 PHP是最好的模板语言,容易学习,容易使用,大家都在用它,大家都喜欢PHP,它的社区也是非常活跃,但是它有一个问题,它没有内建的并行机制。 邢兴表示: 异步的方式,异步的处理,为的是保证系统的容错性。如果我们用异步机制调用一些后端API的时候,如果某个局部宕掉,它不会受到影响,但PHP没有内建的并行机制,怎么处理这个问题?

三个场景解决Go支持并行

在邢兴看来, 支持并行是PHP社区一直在走的一条摩西之路。 这条路上,有着各种尝试,而他们选择了Go。

崇尚实践出真知的邢兴列举了三个场景并分别给出了解决方案。具体来看:

一、在某个系统中,一个PHP页面的操作除完成本地数据保存外(如MySQL),还需要向后台服务提交数据。该服务由于压力巨大,响应较慢,延迟较大( 100ms)。解决方案如下。

二、页面多次调用不同的服务生成( 30次调用),各个服务之间的依赖关系较弱,调用相对独立。但由于调用服务较多,虽然每个服务的响应都很快, 但是仍然导致PHP生成页面很慢。解决方案如下。

三、掌握新语言并不容易,如何快速实现旧系统的大量PHP代码迁移。答案是给Go内嵌一个PHP的SAPI解析环境。

Cgo总是能带来惊喜! 邢兴如此总结。

4.OracleJVM编译器团队工程师莫枢:JVM是多语言的平台

SDCC2012 编程语言 论坛中,Oracle JVM编译器团队工程师莫枢在《JVM 多语言的平台》的演讲中,提到Java最强悍的地方在于编译器非常便于应用。而最初定位在为Java提供丰富的功能平台JVM后期走了更为宽广的路线,支持更多的独立语言。有微博朋友评价为 我这几年听过最深刻的有关JVM的演讲 。

莫枢的演讲内容主要有以下四个方面:为什么在JVM上编写编程语言;在JVM上编写编程语言的时候,这些语言的特性跟JVM会有怎样的不匹配的地方,如果要模拟这些功能,有没有办法做到;JDK7介绍;最后则是一些展望。

在JVM上编写编程语言

在JVM编写编程语言,为什么?最简单就是两方面,一方面是语法,语法就是语言的皮,很多开发者对语法特别看中;另一方面是好看,好看的语法,易于呈现。

一个语言更加重要的地方是它的语意,以及能够有一些什么样的能力。像类型系统,并发模型,安全模型,这是一门语言更加本质的地方,包括语言会在很丰富的语法的下面去包装很多很常用的库,使得这些库在比较顺手的语法上面去使用。

为了编写一些新的平台,除了编写一个新的编程语言之外,大家可以有别的选择。一门编程语言可以使用不同的语法,如果要实现一个库,这个库的实现语言和使用这个库语言不一定一样,但无论如何去使用别的语言去使用这个库,必须要在使用的时候去符合语法,如果有人觉得这个库就应该使用一种自然的语法去实现的话,写一个新语言就是比较好的办法。这两者是不矛盾的,只是不同问题的不同层次而已。通常当要去实现一个比较有趣的功能,希望能够让很大范围的使用者去使用的话,有可能会在上面包装。

第二点也是很重要的,当去编写一个库的时候,不能够限制一个业务的功能,比如如果在Java里面编写一个新库,编写一个新库,通过Java去使用这个库的时候是不能组织用户区使用这些Java已经提供出来的功能,而写一个新的编程语言则是可以做到的。

而要编写一个编程语言,为什么要在JVM呢?因为在JVM上面可以享受到一些非常成熟的底层服务,例如说有动态编译器,可以帮编程语言以很高效的方式去运行起来,然后有非常丰富的接口和支持。

作为一种实现语言,为什么要用Java去实现别的编程语言呢?其实有很多点,莫枢列举了其中三点。第一点是Java作为一种编程语言,它是比较健壮的,可以通过一种形式反映在程序里面,在Java里面可以非常平和的去处理这些问题;第二点是反射,经常有一些需求需要知道一块数据的类型或者这块数据的某些标记之类的,在Java里面可以使用它的一些接口,去做标记,而语言本身都对反射有支持,所以很方便的得到这些标记;第三点是Java平台上面的工具支持非常多,Java传统上的工具就有很大的优势,提供非常强大的功能。此外还有其他配套工具的支持。

在JVM上实现模拟

Java作为一种编程语言,JVM作为一种运行平台,几乎所有能想象到编程语言都能够实现,虽然这并不代表一定会非常快。因为计算机科学的所有问题都能够通过添加另一层间接来解决,而当所提供的平台没有原生的某些功能提供支持,该如何处理?添加一个解决层或者添加多个解决层去模拟,然后把这些模拟给屏蔽掉,在最上面会觉得这些都能够实现,但实际上底下有些东西实现不了。所以增加间接层唯一不能解决的问题就是间接层太多了,意味着性能会不太好,或者系统维护会比较困难。如果不提供某些功能的直接支持,则可以去模拟它,虽然这些模拟通常意味着这样一些功能在语言里面会比较慢。这里会用几个例子和场景进行解释。

对于大家所关心的JVM到底能不能支持伪调用优化?答案是肯定能。如果用了某一个JVM,刚好有实现某一种伪调用的优化,但并不能保证在所有平台上都能够去使用,而且不是所有的伪调用都那么容易进行优化。伪调用通常在函数式语言里面比较常见,有两种模拟的思路是比较常见,一种是通过驱动循环或者蹦床循环,作为一个特殊的例子,如果一个伪调用是一个直接的伪递归,在方法A里面,最后一个语句是对A自己的调用,就可以直接把伪调用优化成循环,从语言编译成字节码,就可以做到这种转,这是非常高效的。

JDK7两种重要特性

在JDK7里面主要的主题是增强对动态语言的支持。因为动态语言非常重要。在JK7里面有两种非常重要的特性,其中一个是叫做invokudynamic,与之配套的是method handle。通过这样两个新的功能,JDK7的动态语言就可以用比较通用的方式来表达它的一些特性,并告诉JVM,使得开发者更加了解这些语言特性如何跟JVM原本可以优化地方结合在一起,这样就使得动态语言跑得比较快。事实上,在使用invokedynamic之前,这些环节都是死的,有了它之后,无限的地方都变成了用户可编程的地方。

未来来看,JDK7对method handle的实心都比较初步,后面的版本会在这个方面做更加精细的调整,但主要是在JVM自身实现方面做调整,而在API方面调整不会那么大,在JKN里面奠定下一个很好的基础。而在JDK8里面会有一个自身的语言功能Lambda的支持,在这上面会做进一步的优化。

事实上,所以任何新功能要加入到JVM平台里面,步伐都比较慢。在莫枢看来: 虽然有一些现成项目正在进行当中,但是没有保证一定会进入未来的JVM平台。因为要在这么长的历史,这么大的一个平台上面去做任何小的变更都很困难,实现功能是比较容易的部分,但实现功能之后这个功能到底和其他功能怎么样交互,这些交互之间会不会有问题,如果有问题的话怎么去收,这是稍微困难的。然后怎么验证到底实现对不对,这是更加困难的部分。最困难的是什么?最后的20%,就是制定这样一个规范,然后把它放到JVM里面去。因为要用很精确的语言去表述出一个新的功能出来,这个表述必须能够保证有很多不同时间方式能够使它很高效,但是又不能太宽松,不然的话,它的语意就不准确,这个非常困难。

本文为CSDN原创,未经许可或授权不得转载。如需转载请联系market@csdn.net。

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新