`
abruzzi
  • 浏览: 452780 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JavaScript内核系列第0版整理稿下载

阅读更多

2010年的前半年,我在Javaeye上发表过一个系列文章《JavaScript内核》,虽然名字叫做内核,可能很多人认为陡具内核之名,而无内核之实,也可能另外一些朋友比较喜欢,曾多次问我索要完整版本,由于2010年个人原因,很难找出时间来做这件细致的工作,一直拖到了最近,才完成,望诸位见谅。


进入2011年之后,工作的任务告一段落之后,我得以有时间,有机会来为这个《JavaScript内核》系列做一个收尾工作。之前的计划是:在基础部分讲解完成之后,尽量找一些实例,特别是JavaScript在服务端的应用实例来做一些讨论,或者加入一定的脚本引擎工作机制等方面的讨论,现在不知道今年还有没有足够的时间和精力。原则上来说,如果时间精力不够,我则尽可能的不动笔,否则可能陷入以其昏昏,使人昭昭的尴尬境地。后半部分是否有能力来做暂不讨论,那我就先讲之前的版本整理出来,也有很多朋友向我索要过完整的电子版,不过当时陷于项目开发中,没有时间来做,但愿这个版本不算太晚。

 

文章后的附件即为第0版的整理稿,共有9章,也记录了一些像正式出版物那样的前言后记之类,不论怎么说,这也是心血之作,不想做的太过于随便,请自行斟酌。 

分享到:
评论
44 楼 abruzzi 2011-01-26  
bugmenot 写道
楼主大大,这边继续

3.1.3 原型不是JavaScript特有的概念。最初的JavaScript不是基于原型的。JavaScript也受到80年代末一种基于原型的语言Self的影响,后来才加入了原型。楼主大大可参考http://stackoverflow.com/questions/1951972/prototype-based-language
JavaScript通过原型访问属性是“copy-on-write”,读访问的过程跟书中所述相似,写访问直接在当前对象上赋值

7.3.1 现在JavaScript已经不流行引用计数方式管理内存,主流都转向标记清除或其它tracing算法为基础。
IE的JScript从一开始就是标记清除式,而VBScript则引用计数。IE容易引发内存泄漏主要在JS与DOM交互时,这个边界上是引用计数的。假如有一个DOM节点被附加了一个JS对象,而该JS对象里又有属性指向那个DOM节点,这种引用关系就很容易引发内存泄漏。跟闭包没直接关系。

8.1.1 引用,书中的例子不就跟Java的一样嘛,算不上“跟其他语言不同”



我印象中BE的《history of javascript》中,说到关于当时设计JavaScript时从self, scheme, 和C中获得的灵感,至于是时间上我确实不清楚。

垃圾回收及内存泄漏等问题在这个版本中描述的比较简单,主要是由于我对有些算法还没有深入研究,不便多说,因此篇幅较短,我会找时间专门来研究。

我说的“与其他语言不同”的意思是,像在C语言中,不通过指针,而是局部变量的话:

#include <stdio.h>

typedef struct{
	int value;
}s_integer;

int main(int argc, char *argv[]){
	s_integer a;
	s_integer b, c;
	
	b = a;
	c = a;
	
	a.value = 15;
	
	printf("%d\n", a.value);
	printf("%d\n", b.value);
	printf("%d\n", c.value);
}


修改a,并不会影响到b,c。但是如果a.value=15;这条语句放到b=a,c=a之前的话,则会得到不同的结果。


总之,还是很感谢你,希望读到/关注此系列的朋友能像你一样,言之有物,条理分明。而不是纯粹的牢骚或者攻击。
43 楼 bugmenot 2011-01-26  
楼主大大,这边继续

3.1.3 原型不是JavaScript特有的概念。最初的JavaScript不是基于原型的。JavaScript也受到80年代末一种基于原型的语言Self的影响,后来才加入了原型。楼主大大可参考http://stackoverflow.com/questions/1951972/prototype-based-language
JavaScript通过原型访问属性是“copy-on-write”,读访问的过程跟书中所述相似,写访问直接在当前对象上赋值

7.3.1 现在JavaScript已经不流行引用计数方式管理内存,主流都转向标记清除或其它tracing算法为基础。
IE的JScript从一开始就是标记清除式,而VBScript则引用计数。IE容易引发内存泄漏主要在JS与DOM交互时,这个边界上是引用计数的。假如有一个DOM节点被附加了一个JS对象,而该JS对象里又有属性指向那个DOM节点,这种引用关系就很容易引发内存泄漏。跟闭包没直接关系。

8.1.1 引用,书中的例子不就跟Java的一样嘛,算不上“跟其他语言不同”
42 楼 abruzzi 2011-01-26  
bugmenot 写道
楼主大大,ECMA-262的名字是ECMAScript,但从来没有过叫ECMAScript-262的东西

1.2.3的描述也过时了,从现在这个时刻来看新的主流浏览器,全部都是会编译JS的了
Chrome Chromium - V8,只编译不解释,新版本引入了多层编译
FireFox 4 - JaegerMonkey,基本上只编译并且是多层编译,一开始就编译而不解释,只在trace阶段短暂解释一下
Safari - Nitro,只编译不解释
Opera 10.5 - Carakan,热点编译
IE9 - Chakra,热点编译

1.3.3,UltraEdit也用JavaScript做嵌入脚本,好使

2.1 Date和RegExp等也是内建的对象类型吧

2.1.1 “数字”在JavaScript里的表现要符合IEEE 754双精度浮点数的规定,值得强调
ECMA 262 写道
The Number type has exactly 18437736874454810627 (that is, 264−253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic

不过现在主流高性能JS引擎都想办法优化它,在合理范围内用小整数来存数字

3 ECMAScript与JSON是两个独立的规范,它们甚至在细微处有不兼容的地方,所以用JSON来解释JavaScript对象是不合适的。ECMAScript Harmony还专门为解决与JSON间的兼容性问题而有大量讨论。

sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器



谢谢你的细心,也谢谢你提出的问题,我正在做校正,包括错别字,名词的不统一等问题。
41 楼 abruzzi 2011-01-26  
sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~



1. 为什么叫“内核”,建议先翻下之前的评论.
2. 你的观点“JS是动态语言”,和这个系列是否叫“内核”没有一丁点的关系,请提供充分的论据。
3. JS的引擎,如上边这位朋友bugmenot所列举,有很多的,为什么要深入V8才能说内核,也请给出充分的理由。

40 楼 abruzzi 2011-01-26  
sky54521 写道
bugmenot 写道
sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


我靠,js的解析器和解释器有啥区别?
那你的意思分别指的是?


解析器,解释器之类区别的建议看看这个http://www.iteye.com/topic/492667已经被转了N++次的文章,写的很详细,也很优秀。
39 楼 sky54521 2011-01-26  
bugmenot 写道
sky54521 写道
bugmenot 写道
sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


我靠,js的解析器和解释器有啥区别?
那你的意思分别指的是?

大大请参考:http://www.baidu.com/s?wd=JavaScript+%BD%E2%CE%F6%C6%F7+%BD%E2%CA%CD%C6%F7&n=2



。。。。。。。。。。。。。。
我想起来了,刚学编程的时候有说过,解析器和解释器和编译器的区别。。
38 楼 bugmenot 2011-01-26  
sky54521 写道
bugmenot 写道
sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


我靠,js的解析器和解释器有啥区别?
那你的意思分别指的是?

大大请参考:http://www.baidu.com/s?wd=JavaScript+%BD%E2%CE%F6%C6%F7+%BD%E2%CA%CD%C6%F7&n=2
37 楼 sky54521 2011-01-26  
bugmenot 写道
sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


我靠,js的解析器和解释器有啥区别?
那你的意思分别指的是?
36 楼 bugmenot 2011-01-26  
楼主大大,ECMA-262的名字是ECMAScript,但从来没有过叫ECMAScript-262的东西

1.2.3的描述也过时了,从现在这个时刻来看新的主流浏览器,全部都是会编译JS的了
Chrome Chromium - V8,只编译不解释,新版本引入了多层编译
FireFox 4 - JaegerMonkey,基本上只编译并且是多层编译,一开始就编译而不解释,只在trace阶段短暂解释一下
Safari - Nitro,只编译不解释
Opera 10.5 - Carakan,热点编译
IE9 - Chakra,热点编译

1.3.3,UltraEdit也用JavaScript做嵌入脚本,好使

2.1 Date和RegExp等也是内建的对象类型吧

2.1.1 “数字”在JavaScript里的表现要符合IEEE 754双精度浮点数的规定,值得强调
ECMA 262 写道
The Number type has exactly 18437736874454810627 (that is, 264−253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic

不过现在主流高性能JS引擎都想办法优化它,在合理范围内用小整数来存数字

3 ECMAScript与JSON是两个独立的规范,它们甚至在细微处有不兼容的地方,所以用JSON来解释JavaScript对象是不合适的。ECMAScript Harmony还专门为解决与JSON间的兼容性问题而有大量讨论。

sky54521 写道
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~

大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器
35 楼 sky54521 2011-01-26  
fch415 写道
说明一点:
这里的JSDK(我还未正式发布)是JavaScript Development Kit的缩写,而不是Java Servlet Development Kit的缩写。

JSDK我都已经用上了啊,很不错,里面有对各种对象的关系建模啊
34 楼 feiyan35488 2011-01-26  
javascript 还是非常有发展前途的,看看google的应用就知道了。据google一个工程师介绍他们大部分工程都采用js,开发速度非常快。当解决掉js的运行问题之后,js应该会很快的发展起来的
33 楼 sky54521 2011-01-26  
这种水平的js剖析能称得上“内核”?!
基本是js入门水平,js是动态编程语言,一切都是动态的

所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~
32 楼 vb2005xu 2011-01-26  
写的非常好,我都推荐好几个人看了
31 楼 accphc 2011-01-26  
还是看在线,上面还有讨论,理解的更多一些
30 楼 t42dw 2011-01-26  
技术LZ,你的作品对我帮助那是相当的大...
29 楼 bsq519 2011-01-26  
一定要支持楼主。我正在学习你的杰作!
28 楼 abruzzi 2011-01-26  
huangyulin2015 写道
楼主辛苦了
毕竟是人家辛辛苦苦整理的,支持一下


也谈不上辛苦,如我之前所说,教学相长,在分享知识的同时,自己也会领悟到一些平时忽略掉的东西,并得到很大的启发。
27 楼 λ-lambda 2011-01-26  
我作为UNIX2(还未发布)的作者,尚且不敢贸然写书...
26 楼 huangyulin2015 2011-01-26  
楼主辛苦了
毕竟是人家辛辛苦苦整理的,支持一下
25 楼 abruzzi 2011-01-26  
fch415 写道
花了3分钟,掠读了你的“JS内核”一书。

我的评价是:
1、很多概念自己都没整明白,就敢写书了。比如:this、闭包、内存泄漏、对象定义。
2、很多知识点都没有章节。比如:作用域、引用传递还是值传递。
3、很多机制的阐述上不深入,也能叫Core?

总结:
这是一本只适合初学者看看的JS基础的书,其文字简明、通俗、直白,喜欢以代码例子说明概念,适合作为内部培训材料。

由于你按照书的标准在写,则很多深入概念上存在“误人子弟”的作用。所以我建议你在一些复杂知识点上作"免责申明":该章节的文字并不代表完全真实的概念或机理,仅作为通俗简介来看待,读者意会即可。


呵呵,我作为JSDK的作者,尚不敢贸然写书。现在,敢以书的形式写教程的人真是越来越多了!


谢谢你的“三分钟掠读”以及回复,事实上,这个之所以为第0版整理稿的意思是:它是之前我的一个系列博文《JavaScript内核》的一个整理,这个系列的每一篇之后都有相应的“免责声明”:

引用

附:由于作者本身水平有限,文中难免有纰漏错误等,或者语言本身有不妥当之处,欢迎及时指正,提出建议,参与讨论,谢谢大家!


再一次,这个版本还不能说是书,因此叫第0版,而且只是整理稿。这个电子版里的内容基本上都是假设读者为初学者,而且也是一本主要讨论JS基础概念的“书”。

我觉得以书的形式写教程没有什么问题,毕竟这个电子版是完全免费的,我本人也不曾从中牟利,也没有昧良心。另外,你作为JSDK的作者不贸然写书,跟别人没多大关系吧?知识,分享出来才有意义,如果你是基于不愿意“误人子弟”的初衷,则可以考虑像我这样,发表为一个系列,和大家共同讨论,教学相长,最后整理成电子版本也无不可。

相关推荐

    JavaScript内核系列 pdf

    JavaScript内核系列是一份深入探讨JavaScript编程语言及其内核的宝贵资源,对于正在学习或从事JavaScript开发的学生和程序员来说,它提供了丰富的知识和技术指导。这份资料详细阐述了JavaScript的各个方面,包括语法...

    JavaScript内核高级教程

    JavaScript内核高级教程 对javascript的深入理解

    JavaScript内核系列.pdf

    ### JavaScript内核系列知识点概述 #### 一、JavaScript发展历程与特性 **JavaScript简史:** JavaScript的历史始于20世纪90年代,随着互联网的发展,静态网页已无法满足日益增长的用户交互需求。1996年,网景公司...

    《JavaScript内核系列》和《JavaScript面向对象基础》

    《JavaScript内核系列》和《JavaScript面向对象基础》这两本书籍是深入理解JavaScript语言核心机制和面向对象编程的重要参考资料。JavaScript作为一种广泛应用于Web开发的脚本语言,其内核和面向对象特性对于开发者...

    javaScript 内核解析

    JavaScript,作为一种广泛应用于Web开发的脚本语言,其内核解析是深入理解并高效使用它的关键。本文将探讨JavaScript的历史、基本概念以及它在Web开发中的应用。 JavaScript的诞生源于20世纪90年代,网景公司...

    JavaScript深入系列JavaScript专题系列ES6系列React系列

    首先,"JavaScript深入系列"着重于讲解JavaScript的基础与进阶概念。JavaScript作为一门动态类型的脚本语言,其核心包括变量、数据类型、控制结构、函数、对象、原型链、闭包等。深入理解这些概念,可以帮助开发者...

    深入理解JavaScript系列

    第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新...

    IJavascript是用于Jupyter笔记本的javascript内核.zip

    “IJavascript是用于Jupyter笔记本的JavaScript内核”这个主题揭示了一个关键的信息——JavaScript现在不仅可以用于前端和后端开发,还可以在数据分析和科学计算领域发挥作用。IJavaScript是一个项目,它为Jupyter ...

    JavaScript权威指南(第6版)中文版.pdf百度网盘下载地址

    根据提供的文件信息,我们可以推断出这是一本关于JavaScript编程语言的专业书籍——《JavaScript权威指南》第六版的中文版本,并提供了该书PDF格式的百度网盘下载链接。下面将基于这个信息来提炼出相关的JavaScript...

    JavaScript权威指南第五版

    JavaScript程序员构建JavaScript应用程序时不可获缺的参考书,涉及到JavaScript在Web2.0中的应用

    精通JavaScriptPDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《精通JavaScript》这本书的PDF版本下载链接。但是,为了更好地满足您的需求,我将基于这个主题展开更详细的解释与介绍,包括JavaScript的基本概念、特点以及学习...

    X5内核与原生内核对比

    X5内核包含了TBS(腾讯浏览服务)框架,提供了更强大的JavaScript执行能力、更快的页面加载速度和更好的多媒体支持。它还具备智能预加载、页面渲染优化等功能,旨在提升浏览速度和流畅度。 相比之下,原生内核通常...

    JavaScript权威指南(英文版)

    This fourth edition of the definitive reference to JavaScript, a scripting language that can be embedded directly in web pages, covers the latest version of the language, JavaScript 1.5, as supported ...

    javaScript经典实例

    "JavaScript经典实例"这个主题涵盖了一系列经过实践验证的代码片段和实用技巧,旨在帮助开发者深化对JavaScript的理解并提升技能。 描述中提到“内容丰富”,意味着这个压缩包可能包含了各种类型的JavaScript应用...

    JavaScript 编程精解 中文第三版

    JavaScript 编程精解 中文第三版 JavaScript 编程精解 中文第三版

    JavaScript—The Definitive Guide, 6th Edition[JavaScript权威指南](英文版)

    《O'Reilly精品图书系列:JavaScript权威指南(第6版)》讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScriptAPI。《O'Reilly精品图书系列:JavaScript权威指南(第6版)》涵盖了HTML5和ECMAScript5,很多...

    JavaScript学习资料全面整理

    4. **函数**:JavaScript中的函数是第一类对象,可以作为变量赋值、作为参数传递、作为返回值。函数表达式和函数声明是两种定义函数的方式,其中匿名函数和箭头函数是常见的形式。 5. **对象与原型**:JavaScript的...

    OpenHWGroup的CORE-VRISC-V内核集的文档_JavaScript_CSS_下载.zip

    在"OpenHWGroup的CORE-VRISC-V内核集的文档_JavaScript_CSS_下载.zip"这个压缩包中,我们可以推测包含的资源主要是关于CORE-V RISC-V内核的文档,以及可能用于展示或交互的JavaScript和CSS文件。这些文件可能是用于...

    韩顺平十天javascript全套笔记(整理版).pdf

    韩顺平十天javascript全套笔记(整理版).pdf

Global site tag (gtag.js) - Google Analytics