- 浏览: 3014864 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
笔记都记在笔记本上了,这边记点side-story一般的杂记吧。
到计算机系去旁听了马晓星老师上的程序设计语言概论。周二的第一次课的时候还不知道有这课所以没去。周五(2008-02-22)去跟了第二次课。
接下来准备要讲到Scheme了。到http://www.scheme.com抓了Petite Chez Scheme 7.4的档。
-----------------------------------------------------------------
不知道有多少人关注过Euphoria这种语言。与许多脚本语言一样,它是一种very-high-level语言。不过它宣称自己非常简单而且非常快——官网上的资料称它的先进的解释器比传统的Python和Perl的解释器快30倍。速度就罢了,发展到某个阶段之后大家都会说自己很快的……
它更重要的一个特点应该是它最主要的数据结构,sequence。字串在Euphoria中不过是sequence的语法糖。Sequence本质上是一种线性的异质容器,可以通过下标来访问其中的元素;元素可以是atom或者sequence。下标只能作用于变量(而不能作用于表达式,于是date()[2]这种写法就不行)。
还没仔细看,不过乍一看这sequence跟Lisp里的list看起来好像。于是给我一种直观的感觉,Euphoria就像是命令式的Lisp一般;不过Euphoria貌似没S-expression用。接下来看Scheme相关的时候也顺带一起看看Euphoria来对比吧。
Euphoria中“类型”的意味与其它语言很不一样。由于atom只是数值,则由atom而构成的sequence以及包含有sequence的sequence到最后都肯定是数值。结果user-defined type就变成了数值范围的检查……
Euphoria支持结构化程序设计语言的三种经典结构:顺序,分支,循环。
常见的语法结构都在,if-then-else、for、while等。
Euphoria例子:(来自官方文档)
注意:(2008-02-22)今天老师上课的时候提到了C-like语言里使用花括号来表示代码块的特征。这种语言设计有一个*不太好*的地方,那就是无论是什么语句块都同样以“}”结束,很容易让人对错括号。所以会有在“}”之后标注语句块类型的注释习惯,例如:
要从语言级别根除这个问题,最直观的方式就是“强制”在块的结尾标明语句块的类型。于是很自然的就演变成了类似“end function”“end if”的形式。
习惯真是魔鬼。之前很长一段时间都没办法从C-like语法的惯性中摆脱出来。直觉上不喜欢Pascal也是因为它不是curly-brace系的语言。呵呵,真糟糕。
-----------------------------------------------------------------
(2008-02-24 16:30)刚才在看Channel 9上的Lang.NET 2008相关报道。其中一篇,[url=Dan Ingalls and Allen Wirfs-Brock: On Smalltalk, Lively Kernel, Javascript and Programming the Internet]http://channel9.msdn.com/Showpost.aspx?postid=380959[/url],Dan在讲到JavaScript时提到了对“clean language”的看法,说如果一种语言提供了太多冗余的构造去做同一件事,那么它就不够“clean”。我对这种说法的理解还是不够充分。如果说JavaScript加入了class支持而不抛弃prototype-based的设计,那或许是很冗余,但现在的ECMAScript 3应该还算干净吧(但一点也不“简单”)。
想想看,通过closure来模拟对象,这也是一种强大的能力。当需要一个只有一个公共方法,而又需要保持内部状态的对象时,直接定义一个函数去返回一个内部嵌套的函数,让后者所持有的闭包去保持状态就行。Consise, no?
-----------------------------------------------------------------
(2008-02-28 23:00)突然在想,编程语言最大程度的灵活度莫非就是意味着无类型么。
任何数据结构都可以用表(list)来模拟。记录(record)或者结构(struct)都可以被表模拟。很多不支持记录/结构的语言都会建议使用数组来模拟这类语言构造,而这时候的“数组”也就是一个list。Lisp系的语言依靠表而获得了强大的语言能力(当然更重要的是表的应用方式——S-expression),上面的Euphoria看来也是如此。
不过,一种语言中对表的操作要是只支持CAR/CDR/CONS,而没有下标索引的话,感觉还是稍微缺点什么?
假如索引不限定使用非负整数,而是可以使用任意类型的数据(例如字符串)的话,那不就是泛型的关联数组了么?让我想到ECMAScript……
胡思乱想而已,总之先记下来。
-----------------------------------------------------------------
最近动态语言越来越热门,其中有不少都支持3个C的language constructs:closure、coroutine、continuation。闭包(closure)只在遵循lexical scoping的语言中出现,与嵌套作用域相关。coroutine与continuation都与“保留当前运行状态”相关;前者是说函数能保留自身的执行状态,并能将控制交给(yield)别的函数;后者是说系统能保存当前的执行状态(也就意味着要保存整个运行时stack),并在以后的某个时候能够恢复到先前保存过的某个状态继续执行。(以上描述纯粹是我现在对这3个C的理解,未必正确)。
-----------------------------------------------------------------
根据worse-is-better原理,我一直喜欢的一些feature看来不少都是"worse"的一类呢。诶,原本对ECMAScript 4那么热衷的我,最近越来越觉得它kitchen-sink得太过头了。正所谓“核心概念”太多,使得语言肿胀……
到计算机系去旁听了马晓星老师上的程序设计语言概论。周二的第一次课的时候还不知道有这课所以没去。周五(2008-02-22)去跟了第二次课。
接下来准备要讲到Scheme了。到http://www.scheme.com抓了Petite Chez Scheme 7.4的档。
-----------------------------------------------------------------
不知道有多少人关注过Euphoria这种语言。与许多脚本语言一样,它是一种very-high-level语言。不过它宣称自己非常简单而且非常快——官网上的资料称它的先进的解释器比传统的Python和Perl的解释器快30倍。速度就罢了,发展到某个阶段之后大家都会说自己很快的……
它更重要的一个特点应该是它最主要的数据结构,sequence。字串在Euphoria中不过是sequence的语法糖。Sequence本质上是一种线性的异质容器,可以通过下标来访问其中的元素;元素可以是atom或者sequence。下标只能作用于变量(而不能作用于表达式,于是date()[2]这种写法就不行)。
还没仔细看,不过乍一看这sequence跟Lisp里的list看起来好像。于是给我一种直观的感觉,Euphoria就像是命令式的Lisp一般;不过Euphoria貌似没S-expression用。接下来看Scheme相关的时候也顺带一起看看Euphoria来对比吧。
Euphoria中“类型”的意味与其它语言很不一样。由于atom只是数值,则由atom而构成的sequence以及包含有sequence的sequence到最后都肯定是数值。结果user-defined type就变成了数值范围的检查……
type hour(integer x) return x >= 0 and x <= 23 end type hour h1, h2 h1 = 10 -- ok h2 = 25 -- error! program aborts with a message
Euphoria支持结构化程序设计语言的三种经典结构:顺序,分支,循环。
常见的语法结构都在,if-then-else、for、while等。
Euphoria例子:(来自官方文档)
sequence list, sorted_list function merge_sort(sequence x) -- put x into ascending order using a recursive merge sort integer n, mid sequence merged, a, b n = length(x) if n = 0 or n = 1 then return x -- trivial case end if mid = floor(n/2) a = merge_sort(x[1..mid]) -- sort first half of x b = merge_sort(x[mid+1..n]) -- sort second half of x -- merge the two sorted halves into one merged = {} while length(a) > 0 and length(b) > 0 do if compare(a[1], b[1]) < 0 then merged = append(merged, a[1]) a = a[2..length(a)] else merged = append(merged, b[1]) b = b[2..length(b)] end if end while return merged & a & b -- merged data plus leftovers end function procedure print_sorted_list() -- generate sorted_list from list list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2} sorted_list = merge_sort(list) ? sorted_list end procedure print_sorted_list() -- this command starts the program
注意:(2008-02-22)今天老师上课的时候提到了C-like语言里使用花括号来表示代码块的特征。这种语言设计有一个*不太好*的地方,那就是无论是什么语句块都同样以“}”结束,很容易让人对错括号。所以会有在“}”之后标注语句块类型的注释习惯,例如:
while ( !done ) { switch ( code ) { case OP_ADD: if ( otherCond ) { // ... } else { // ... } // if-else break; // ... default: // ... break; } // switch } // while
要从语言级别根除这个问题,最直观的方式就是“强制”在块的结尾标明语句块的类型。于是很自然的就演变成了类似“end function”“end if”的形式。
习惯真是魔鬼。之前很长一段时间都没办法从C-like语法的惯性中摆脱出来。直觉上不喜欢Pascal也是因为它不是curly-brace系的语言。呵呵,真糟糕。
-----------------------------------------------------------------
(2008-02-24 16:30)刚才在看Channel 9上的Lang.NET 2008相关报道。其中一篇,[url=Dan Ingalls and Allen Wirfs-Brock: On Smalltalk, Lively Kernel, Javascript and Programming the Internet]http://channel9.msdn.com/Showpost.aspx?postid=380959[/url],Dan在讲到JavaScript时提到了对“clean language”的看法,说如果一种语言提供了太多冗余的构造去做同一件事,那么它就不够“clean”。我对这种说法的理解还是不够充分。如果说JavaScript加入了class支持而不抛弃prototype-based的设计,那或许是很冗余,但现在的ECMAScript 3应该还算干净吧(但一点也不“简单”)。
想想看,通过closure来模拟对象,这也是一种强大的能力。当需要一个只有一个公共方法,而又需要保持内部状态的对象时,直接定义一个函数去返回一个内部嵌套的函数,让后者所持有的闭包去保持状态就行。Consise, no?
-----------------------------------------------------------------
(2008-02-28 23:00)突然在想,编程语言最大程度的灵活度莫非就是意味着无类型么。
任何数据结构都可以用表(list)来模拟。记录(record)或者结构(struct)都可以被表模拟。很多不支持记录/结构的语言都会建议使用数组来模拟这类语言构造,而这时候的“数组”也就是一个list。Lisp系的语言依靠表而获得了强大的语言能力(当然更重要的是表的应用方式——S-expression),上面的Euphoria看来也是如此。
不过,一种语言中对表的操作要是只支持CAR/CDR/CONS,而没有下标索引的话,感觉还是稍微缺点什么?
假如索引不限定使用非负整数,而是可以使用任意类型的数据(例如字符串)的话,那不就是泛型的关联数组了么?让我想到ECMAScript……
胡思乱想而已,总之先记下来。
-----------------------------------------------------------------
最近动态语言越来越热门,其中有不少都支持3个C的language constructs:closure、coroutine、continuation。闭包(closure)只在遵循lexical scoping的语言中出现,与嵌套作用域相关。coroutine与continuation都与“保留当前运行状态”相关;前者是说函数能保留自身的执行状态,并能将控制交给(yield)别的函数;后者是说系统能保存当前的执行状态(也就意味着要保存整个运行时stack),并在以后的某个时候能够恢复到先前保存过的某个状态继续执行。(以上描述纯粹是我现在对这3个C的理解,未必正确)。
-----------------------------------------------------------------
根据worse-is-better原理,我一直喜欢的一些feature看来不少都是"worse"的一类呢。诶,原本对ECMAScript 4那么热衷的我,最近越来越觉得它kitchen-sink得太过头了。正所谓“核心概念”太多,使得语言肿胀……
评论
1 楼
lwwin
2008-02-23
对ENDIF还是特别的反感……其实开始的时候一直用的是BASIC的……
直觉上只是觉得{}清爽……
反正只要是类似VC或者编辑器支持JMP&CHECK就可以了^-^
直觉上只是觉得{}清爽……
反正只要是类似VC或者编辑器支持JMP&CHECK就可以了^-^
发表评论
-
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
基于LLVM实现VM的JIT的一些痛点
2014-01-07 17:25 0同事Philip Reames Sanjoy Das http ... -
tailcall notes
2013-12-27 07:42 0http://blogs.msdn.com/b/clrcode ... -
《自制编程语言》的一些笔记
2013-11-24 00:20 0http://kmaebashi.com/programmer ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22245(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21363(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
Function.prototype.bind
2013-09-24 18:07 0polyfill http://stackoverflow. ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
struct做参数不能从寄存器传?
2013-08-28 23:33 0test test test struct Foo { i ... -
也谈类型: 数据, 类型, 标签
2013-08-18 01:59 0numeric tower http://en.wikiped ... -
SDCC 2012上做的JVM分享
2012-10-17 16:35 32540刚把在SDCC 2012做的JVM分享的演示稿上传了。 演示 ... -
运行时支持系统的“重量”
2012-10-12 16:08 0运行时支持系统的“重量” 好久没写博客了,可写的话题已经堆积 ... -
class?metaclass?meta-what?
2011-04-05 19:43 0http://en.wikipedia.org/wiki/Me ... -
“代码模式”与抽象
2010-10-28 15:21 0嗯,我是说“代码模式”,不是“设计模式”;这里指的是在给定的场 ... -
lvalue与rvalue
2010-09-03 00:40 0http://en.wikipedia.org/wiki/Va ... -
动态链接的“依据”
2010-02-09 09:54 0动态链接,意味着在生成的“东西”里留有符号信息,等到运行时再r ...
相关推荐
【推选文档】程序设计语言概论PPT.ppt
程序语言设计概论第三次作业答案,1分评论即可取回,希望有帮助!
程序设计语言概论PPT学习教案.pptx
北京大学程序设计语言概论考试复习
第2章 Java程序设计语言概论.ppt
《数据库系统概论课程设计》-宿舍管理系统详细设计报告.doc 《数据库系统概论课程设计》-宿舍管理系统详细设计报告.doc 《数据库系统概论课程设计》-宿舍管理系统详细设计报告.doc 《数据库系统概论课程设计》-宿舍...
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....
程序语言设计概论第7次作业答案,1分评论即可取回,希望有帮助!
程序语言设计概论第一次作业及答案,慎重使用,1分评论即可取回!
数据库课程设计,实现餐馆管理数据库设计,是《数据库系统概论》的课程设计题目之一。
程序语言设计概论第二次作业答案,1分评论即可取回,希望有帮助!
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....
游戏程序设计概论书中的范例文件! 也就是源程序!
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....
电子政务概论课程形成性考核册答案.pdf
程序语言设计概论7次作业标准答案,来自助教的答案,希望有帮助!
程序语言设计概论第5次作业答案,1分评论即可取回,希望有帮助!
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....