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

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

阅读更多

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


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

 

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

分享到:
评论
64 楼 sky54521 2011-01-28  
elfmtian 写道
谢谢谢 下载看看

不过我有点看不惯到处人人都说自己忙忙忙,没精力,有那么忙吗?天天忙的加班到晚上10点,人恐怕半个月也撑不下来吧。



我看有人每天加班到10点以后(最早10走),每天如此,加了半年
一点都不夸张
63 楼 elfmtian 2011-01-28  
谢谢谢 下载看看

不过我有点看不惯到处人人都说自己忙忙忙,没精力,有那么忙吗?天天忙的加班到晚上10点,人恐怕半个月也撑不下来吧。
62 楼 bugmenot 2011-01-27  
sky54521 写道
abruzzi 写道
sky54521 写道
楼主,我觉得你应该拿一种js的解析器/编译器/解释器来说明一下(就是把js语言文本的执行过程写一下,即:从js代码的解析过程到浏览器的展现过程)

如果楼主能把这整个过程写详细了,我想没人再感说你不配用“内核”这个名字的

期待楼主能帮我解惑


事实上,前9章是讨论JavaScript的基本概念以及两个编程范式(OO和FP)的,如果细心的话,应该可以看到,这九章都属于“基础知识”这个大的节点的叶子,本来此书的安排还有两个与“基础知识”平行的两个节点:“高级主题”和“实际应用”。
高级主题中本来是打算讨论一下spidermonkey的结构,但是还没有研究透;实际应用部分讨论JS在web中的应用,在服务器端的应用以及在应用程序中的应用。最初整理出来的只有基础知识部分(也就是已经发布到博客上的),以及实际应用部分的部分内容(没有发布),高级主题只有零星的研究(因为分析spidermonkey和v8的时候,发现自己在虚拟机上的水平不够,一直在学习,不敢贸然写),所以后边的两个部分质量不高,就不拿出来现眼了。



现在市面上就是缺这方面的书,如果楼主写出来的话,一时间也不会过时的,我相信肯定会有不少粉丝
其他废话我就不说了,
结论就是:楼主赶紧把书写完吧,更多人期待你没有写完的那部分 O(∩_∩)O哈哈~

这个话题最近在IE Blog、Channel 9上有不少好文章和录像,讲一个网页是如何通过浏览器的各部分合作才展现出来的。其中IE9的名为Chakra的新JS引擎也有深度介绍。光是翻译过来就能给国内的技术圈子带来新鲜资讯。

An Early Look At IE9 for Developers
The Architecture of Full Hardware Acceleration of All Web Page Content
Performance: Profiling how different web sites use browser subsystems
Performance: What Common Benchmarks Measure
Measuring Browser Performance with the Windows Performance Tools
The New JavaScript Engine in Internet Explorer 9
Enhanced Scripting in IE9: ECMAScript 5 Support and More
Chakra: Interoperability Means More Than Just Standards
ECMAScript 5 Part 1: Reusable Code
ECMAScript 5 Part 2: Array Extras
HTML5, Modernized: Fourth IE9 Platform Preview Available for Developers
HTML5, and Real World Site Performance: Seventh IE9 Platform Preview Available for Developers

PDC10 Day 2 Keynote
IE 9 Performance Pipeline Overview
Inside IE 9’s High Performance JavaScript Engine
Inside SPUR - A Trace-Based JIT Compiler for CIL

61 楼 sky54521 2011-01-27  
abruzzi 写道
sky54521 写道
abruzzi 写道
xzxw1115 写道
感谢楼主的分享奉献精神,看不惯没有实际行动而到处扣字眼的人,书名是人起的,作者喜欢叫什么就叫什么,顶楼主,分享万岁,期待你更多文章.


现在这个版本可能还当不起这个名称,但是我会努力让其当的起。孔子曰:“名不正则言不顺,言不顺则事不成”,可能有标题党的嫌疑,我也屡次说明,这个是第0版...的整理稿,但是貌似很多人不习惯也不喜欢看上下文,呵呵。



楼主,我觉得你应该拿一种js的解析器/编译器/解释器来说明一下(就是把js语言文本的执行过程写一下,即:从js代码的解析过程到浏览器的展现过程)

如果楼主能把这整个过程写详细了,我想没人再感说你不配用“内核”这个名字的

期待楼主能帮我解惑


事实上,前9章是讨论JavaScript的基本概念以及两个编程范式(OO和FP)的,如果细心的话,应该可以看到,这九章都属于“基础知识”这个大的节点的叶子,本来此书的安排还有两个与“基础知识”平行的两个节点:“高级主题”和“实际应用”。
高级主题中本来是打算讨论一下spidermonkey的结构,但是还没有研究透;实际应用部分讨论JS在web中的应用,在服务器端的应用以及在应用程序中的应用。最初整理出来的只有基础知识部分(也就是已经发布到博客上的),以及实际应用部分的部分内容(没有发布),高级主题只有零星的研究(因为分析spidermonkey和v8的时候,发现自己在虚拟机上的水平不够,一直在学习,不敢贸然写),所以后边的两个部分质量不高,就不拿出来现眼了。



现在市面上就是缺这方面的书,如果楼主写出来的话,一时间也不会过时的,我相信肯定会有不少粉丝
其他废话我就不说了,
结论就是:楼主赶紧把书写完吧,更多人期待你没有写完的那部分 O(∩_∩)O哈哈~
60 楼 abruzzi 2011-01-27  
sky54521 写道
如果楼主是想做学问的,不只是为了做教程打着出书的幌子,那请扪心自问,有没有真正深入的内核(如果js有内核这么一说的话,我不管到底说的是core还是kernal)

当然,看过楼主这教程的人的水平参吃不齐,有些人还没到这一步,看完肯定有较好的,也有失望的,希望楼主不只是为了哗众取宠

楼主自重啊楼主!!!


如果我的标题是《JavaScript内核第0版.上》,那有可能被人说成太监,则“虽人有百口,口有百舌,不能辩驳。”,哗众取宠,你见过通过这种方式来哗众取宠的吗?《JavaScript Core》V0虽然只是一部分,但是也是历时一年,查阅资料,编写示例写出来的。也不敢说如何辛苦,但是也耗费了大量的时间和精力来做,有完全免费的提供下载,就为了哗众取宠?这个代价未免太大。
59 楼 abruzzi 2011-01-27  
sky54521 写道
abruzzi 写道
xzxw1115 写道
感谢楼主的分享奉献精神,看不惯没有实际行动而到处扣字眼的人,书名是人起的,作者喜欢叫什么就叫什么,顶楼主,分享万岁,期待你更多文章.


现在这个版本可能还当不起这个名称,但是我会努力让其当的起。孔子曰:“名不正则言不顺,言不顺则事不成”,可能有标题党的嫌疑,我也屡次说明,这个是第0版...的整理稿,但是貌似很多人不习惯也不喜欢看上下文,呵呵。



楼主,我觉得你应该拿一种js的解析器/编译器/解释器来说明一下(就是把js语言文本的执行过程写一下,即:从js代码的解析过程到浏览器的展现过程)

如果楼主能把这整个过程写详细了,我想没人再感说你不配用“内核”这个名字的

期待楼主能帮我解惑


事实上,前9章是讨论JavaScript的基本概念以及两个编程范式(OO和FP)的,如果细心的话,应该可以看到,这九章都属于“基础知识”这个大的节点的叶子,本来此书的安排还有两个与“基础知识”平行的两个节点:“高级主题”和“实际应用”。
高级主题中本来是打算讨论一下spidermonkey的结构,但是还没有研究透;实际应用部分讨论JS在web中的应用,在服务器端的应用以及在应用程序中的应用。最初整理出来的只有基础知识部分(也就是已经发布到博客上的),以及实际应用部分的部分内容(没有发布),高级主题只有零星的研究(因为分析spidermonkey和v8的时候,发现自己在虚拟机上的水平不够,一直在学习,不敢贸然写),所以后边的两个部分质量不高,就不拿出来现眼了。
58 楼 sky54521 2011-01-27  
如果楼主是想做学问的,不只是为了做教程打着出书的幌子,那请扪心自问,有没有真正深入的内核(如果js有内核这么一说的话,我不管到底说的是core还是kernal)

当然,看过楼主这教程的人的水平参吃不齐,有些人还没到这一步,看完肯定有较好的,也有失望的,希望楼主不只是为了哗众取宠

楼主自重啊楼主!!!
57 楼 sky54521 2011-01-27  
abruzzi 写道
xzxw1115 写道
感谢楼主的分享奉献精神,看不惯没有实际行动而到处扣字眼的人,书名是人起的,作者喜欢叫什么就叫什么,顶楼主,分享万岁,期待你更多文章.


现在这个版本可能还当不起这个名称,但是我会努力让其当的起。孔子曰:“名不正则言不顺,言不顺则事不成”,可能有标题党的嫌疑,我也屡次说明,这个是第0版...的整理稿,但是貌似很多人不习惯也不喜欢看上下文,呵呵。



楼主,我觉得你应该拿一种js的解析器/编译器/解释器来说明一下(就是把js语言文本的执行过程写一下,即:从js代码的解析过程到浏览器的展现过程)

如果楼主能把这整个过程写详细了,我想没人再感说你不配用“内核”这个名字的

期待楼主能帮我解惑
56 楼 abruzzi 2011-01-27  
xzxw1115 写道
感谢楼主的分享奉献精神,看不惯没有实际行动而到处扣字眼的人,书名是人起的,作者喜欢叫什么就叫什么,顶楼主,分享万岁,期待你更多文章.


现在这个版本可能还当不起这个名称,但是我会努力让其当的起。孔子曰:“名不正则言不顺,言不顺则事不成”,可能有标题党的嫌疑,我也屡次说明,这个是第0版...的整理稿,但是貌似很多人不习惯也不喜欢看上下文,呵呵。
55 楼 vb2005xu 2011-01-27  
你们这样写创建类么? 我也发个我写的

xu.pkg('xu._class') ;
(function() {
	xu.setAppInf('SYS_CLASS_NS','xu._class.sys');
	xu.setAppInf('USER_CLASS_NS','xu._class.user');
	
	xu.apply(xu._class,{
		create: function(pkg_n,class_n,p_class,class_impl,is_override){			
			if (xu.verify._null(class_n) || class_n === ""){ return null ;}			
			try {
				var $t_class = eval(pkg_n + "." +class_n);
				if (this.exist($t_class)) {
					var ovr = is_override || false ;
					//trace( "Exist: " + class_n + " Override:" + ovr );
					if (!ovr){return null ;}
				}
			}
			catch(e){
				//如果出异常,说明该类没有定义
			}
					
			if (xu.verify._null(pkg_n) || pkg_n === ""){
				pkg_n = xu.getAppInf('USER_CLASS_NS') ;
			}
			$this_pkg = xu.pkg(pkg_n);	
			//定义父类,将子类的原型 指向父类
			if (xu.verify._null(p_class) || p_class === "" || p_class == 'XClass'){
				p_class = xu._class.sys.XClass ;//这个类在匿名函数中创建
			}
			//定义类
			$t_class = $this_pkg[class_n] = function(){};
			$t_class['__instance_count__'] = 0 ;
			
			// 将子类的原型 指向父类,以此获取属性继承
			$t_class[__proto] = new p_class();
			var __superclass__ = ($t_class[__proto]['__str__']) ? 
				$t_class[__proto]['__str__'](true): 'Object' ;
				
			xu.apply($t_class[__proto],{
				'__pkg__': pkg_n ,			
				'__superclass__': __superclass__,
				'__class__': class_n
			});	
			
			if (!$t_class[__proto]['__str__']){
				$t_class[__proto]['__str__'] = function(isShort){
					if (!isShort)
						return "[class: " + this.__pkg__ + "." + this.__class__ + "]" ;
					return this.__pkg__ + "." + this.__class__ ;
				}			
			}
			
			if (xu.verify._obj(class_impl)){
				xu.apply($t_class[__proto],class_impl);
			} 
			return $t_class ;	
		} ,
		
		/**
		 * 验证类是否存在
		 * @param {String} $class
		 * @return {Boolean}
		 */
		exist: function($class){
			if (xu.verify._func($class)) return true ;
			return false ;	
		}
	});
	//定义基类, 用于框架中所创建的类的基类.
	xu._class.create(xu.getAppInf('SYS_CLASS_NS'),'XClass',Object,{'desc': 'A System Base Class'});	
	Class = xu._class ;
})();
54 楼 xzxw1115 2011-01-27  
感谢楼主的分享奉献精神,看不惯没有实际行动而到处扣字眼的人,书名是人起的,作者喜欢叫什么就叫什么,顶楼主,分享万岁,期待你更多文章.
53 楼 vb2005xu 2011-01-27  
kyfxbl 写道
fch415 写道
花了3分钟,掠读了你的“JS内核”一书。

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

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

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


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


你倒是写点啊,光说不练


支持楼主 对js可以算是精通JS了,写的很好,有的东西我确实知道怎么用,但是让我说我就表达不出来,强烈支持
52 楼 huangheyuan1229 2011-01-27  
下载了还这么多废话,真看不惯有些人的行径,不喜欢可以滚啊,谁求着你看
51 楼 abruzzi 2011-01-27  
javacoreSZ 写道
bugmenot 写道


所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~
大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


别太抠这种概念细节的东西,javaeye里也不适合抠这个。
不管什么器,最终还是要把一程序员写的字符串编译为虚拟机或者物理机能理解的代码而已。

我认为这本书要能叫core,javascript语言的一些能被应用人员使用的特性如闭包等,结合着Runtime Environment讲是必要的。
至于编译过程中用了啥解析技术如LR,LALR,LL.....用了啥属性文法和翻译方案,生成代码优化到什么程度,是否带jit等等,做为application coder来说都是太过于黑盒的东西。一笑而过即可。



嗯,运行上下文这块我确实遗漏掉了,我再整理一下,谢谢你的意见。
50 楼 javacoreSZ 2011-01-27  
bugmenot 写道


所谓js内核应该是承载js的chrome中使用的js解析器v8
如果你深入v8你再来说js内核吧大哥~~~
大大连解析器和解释器也没分清楚就拿V8举例,且不说V8内部也没有解释器


别太抠这种概念细节的东西,javaeye里也不适合抠这个。
不管什么器,最终还是要把一程序员写的字符串编译为虚拟机或者物理机能理解的代码而已。

我认为这本书要能叫core,javascript语言的一些能被应用人员使用的特性如闭包等,结合着Runtime Environment讲是必要的。
至于编译过程中用了啥解析技术如LR,LALR,LL.....用了啥属性文法和翻译方案,生成代码优化到什么程度,是否带jit等等,做为application coder来说都是太过于黑盒的东西。一笑而过即可。

49 楼 kyfxbl 2011-01-27  
严重支持楼主,楼上有些人,除了发牢骚和无脑攻击,还能干啥?真觉得自己有水平,你也整点教程(如楼主),开源(如温少)出来呗。在论坛上吹牛,有什么意思,搞点实际的
48 楼 kyfxbl 2011-01-27  
fch415 写道
花了3分钟,掠读了你的“JS内核”一书。

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

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

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


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


你倒是写点啊,光说不练
47 楼 λ-lambda 2011-01-27  
Javakeith 写道
λ-lambda 写道
我作为UNIX2(还未发布)的作者,尚且不敢贸然写书...

说这些是什么意思?


往前翻翻,怎么都不看上下文呢?
46 楼 Javakeith 2011-01-27  
λ-lambda 写道
我作为UNIX2(还未发布)的作者,尚且不敢贸然写书...

说这些是什么意思?
45 楼 bugmenot 2011-01-26  
abruzzi 写道
我说的“与其他语言不同”的意思是,像在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之前的话,则会得到不同的结果。

但举例应该拿对等或相似的概念来对比,既然是讲解引用,应该拿其它语言的引用来对比才对。所以如果拿Java、C#、ActionScript 3等语言的引用来跟JavaScript的对比,会看到它们非常相似,并没有多少“不同”。
而这里的C语言例子不合适在于,a, b, c都不是引用,它们都是C语言的结构体的值,而C语言的结构体是值类型而不是引用类型的,概念上差很多,并不能说这是JS与C“在引用上的差异”。

相关推荐

    JavaScript内核系列 pdf

    本资源有助于学生或程序员的学习与开发的相关借鉴,资源详细介绍了Javascript开发技术及内核,是从事JavaScript的程序员或学习横学习的助手

    JavaScript内核系列.pdf

    JavaScript内核系列pdf

    javascript 内核系列 学习

    学习javascript内核系列 拥有一定基础方可学习

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

    NULL 博文链接:https://chuqq.iteye.com/blog/826664

    JavaScript内核高级教程

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

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

    冴羽写博客的地方,预计写四个系列:JavaScript深入系列、JavaScript专题系列、ES6系列、React系列。

    深入理解JavaScript系列

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...

    JavaScript内核系列

    的内容,但是如果没有JavaScript则无法在服务器返回之后动态的在前端修改页面,也无法有 诸如鼠标移 上某页面元素则高亮该元素之类的效果,因此JavaScript的出现大大的丰富了页面的表现,提高了用户体 验。

    《JavaScript宝典 第7版》PDF版本下载.txt

    《JavaScript宝典 第7版》PDF版本下载

    javaScript 内核解析

    从2006年第一次接触JavaScript至今,算来也有四年时间了。上大学的时候,有一段时间沉迷于函数式编程,而那时候对JavaScript的理解仅仅局限在这是用来做网页的一种脚本,那些很恶心的弹出窗口和不断在页面上漂浮的...

    javascript核心

    1.8 JavaScript内核系列 第8章 面向对象的JavaScript(上) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 1.9 JavaScript内核系列 第8章 面向对象的JavaScript(下) . . . . . . . . . ...

    JavaScript权威指南(第5版)PDF版本下载.txt

    JavaScript权威指南(第5版)PDF版本下载

    深入理解JavaScript系列(.chm)

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...

    JavaScript宝典(第7版)

    经典畅销书 JavaScript宝典(第7版) 将帮您实现这些夙愿,它在大量示例代码和可运行脚本的引导下,指导您快速掌握JavaScript基础知识,并制定出最符合预定网站目标的策略。通过认真研读本书,您将可以编写脚本来实现...

    JavaScript系列教程3

    JavaScript系列教程3,JavaScript入门级教程,共三节,前面还有了两节

    《JavaScript宝典(第四版)》.

    《JavaScript宝典(第四版)》.《JavaScript宝典(第四版)》.

Global site tag (gtag.js) - Google Analytics