26. JavaScript 怎样粘合语言特性 function a() { } (function() { var x; obj.aMethod( a(x = 100) ); })(); a undef. yes, x no, next, yeah! a 100 x anonymous 脚本对象 全局 脚本对象 () *anonymous 打开一个闭包 a 100 x = ( ) ( ) . obj ‘ aMethod’ 一次在对象及原型 属性包中的扫描 yes, prop no, undef. P , I P , I , C , rt 过程:
36. JavaScript 引擎的谱系 ECMA Ed3 ECMA Ed4 Opera linear_b(7.0~9.24) futhark(9.5 or 10+) KJS(KDE) JavaScriptCore (in safari/webkit) Konqueror JavaScriptCore C++ Trolltech Qt Script for app. D Simple ECMAScript Engine (2007.08.15, 2.1.1277) NJS 0.25 alpha DMDScript D Language SEE NGS JS Interpreter 0.24 (New Generation Software) C C Free EcmaScript Interpreter (FESI 1.18, 2003.09.29) java JScript JScript.NET DLR WSH ? .NET CLR+CTS Internet Explorer .NET Mono JScript Mono DotGNU JScript Tamarin (AVM2) ActionScript2 ActionScript3 AIR ActionScript1 C Netscape SpiderMonkey ActionMonkey Javascript-C Raino Javascript-Java Raino Narcissus NarrativeJS C java JS Epimetheus Javascript-JS C++ Javascript-C++ JVM
37. Dynamic type system Dynamic method dispatch Dynamic code generation Hosting API DLR vs AVM vs JVM DLR xVM = vm_sys.eval_opcode(Interpreter(JIT, Code)) JIT compiler common compiler infrastructure CLR Javascript IronPython Dynamic VB Ruby Mutil-Languages common infrastructure such as Common Hosting Mechanisms HOST
38. Hosts vs Frameworks vs AIR Microsoft WSH (ActiveX Scripting) JScript VBScript Perl Python ... Bean Scripting Framework (BSF) ( 同上 , more...) BeanShell (A Lightweight Scripting for Java(isn’t javascript!!!) , can use in ant or bsf...) Action Integrated Runtime (AIR, Apollo) WebKit HTML 引擎 (khtml) AVM AS3, SpiderMonkey, IronMonkey(python, ruby) … SQLLite local DB +JSP +XSLT +DB Silverlight +ADODB
39. 其它引擎扩展技术 其它语言的实现 ( P , I , C , rt ) DMonkey( Delphi ) JE-0.019(JavaScript::Engine, Perl ) phpjs 0.01011(PHP/JavaScript interpreter, PHP ) J4P5(Javascript for PHP5, PHP5 ) Ixlib(subset of ECMAscript 4, strict mode, C++ ) 嵌入 (JScript 使用 COM 对象形式嵌入 ) javascript bridge(Delphi) php-js-ext 0.1.2 (JavaScript For PHP) Python-JavaScript Interpreter, PyConUK 2007 Ruby/JS (Using NJS Javascript Interpreter extention)