- 浏览: 3048097 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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 22390(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21489(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 32648刚把在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 ...
相关推荐
【程序设计语言概论】课程概述 这门课程由南京大学计算机软件新技术国家重点实验室的马晓星教授主讲,旨在深入探讨程序设计语言的基本原理、实现技术和评估方法。课程不仅适合计算机科学与技术专业的学生,也对软件...
标题中的“程序语言设计概论第三次作业答案”指的是一个关于程序设计语言理论的课程作业,主要涉及Scheme编程语言。描述中的“希望有帮助!”表明这是一个共享的答案资源,目的是帮助他人解答作业问题。 从标签中...
程序设计语言概论是一门深入探讨编程语言理论和实践的课程,涵盖了语言的定义、特征、设计、实现以及语法和语义等多个方面。这门课程对于理解计算机科学的核心概念至关重要,特别是对于想要从事软件开发、系统设计...
程序设计语言概论PPT学习教案.pptx
"计算机系统概论论文-了解程序设计语言的发展及应用" 这篇论文的目的是为了了解程序设计语言的发展及应用,帮助读者了解计算机系统的概论和程序设计语言的种类、特点及应用。 一、序论 程序设计语言是计算机系统...
通过这个课程设计,学生不仅能深入理解数据库系统的理论知识,还能提高实际操作和问题解决能力,为未来从事数据库相关工作打下坚实基础。在"网吧管理系统5-吴忠军"这个项目中,我们可以期待看到一个完整的、能够满足...
这七份作业标准答案(HWA1至HWA7)提供了对课程核心概念的详细解答,旨在帮助学生理解和掌握程序设计语言的关键要素。 在HWA1中,可能涉及到的基础知识点可能包括编程语言的基本语法结构,如变量声明、数据类型、...
【数据库系统概论 课程设计】的项目是一个用于管理企业员工工资的系统,旨在提高工作效率,确保信息准确。系统包含了人员信息管理和工资管理的核心功能,适用于中小企业和失业单位。设计内容包括了数据库表格的设计...
Java程序设计语言是互联网开发领域中的重要工具,其发展历程始于1991年Sun公司的Green工程,旨在为消费类电子产品创建一种控制语言,最初命名为Oak。随着互联网的迅速发展,1994年,SUN推出了HotJava浏览器,进一步...
### 数据库概论课程设计报告知识点解析 #### 一、项目背景与意义 - **项目背景**:随着教育信息化的推进以及高等教育规模的不断扩大,传统的手工管理学生信息的方法已无法满足高效、准确处理大量学生信息的需求。...
清华大学AI人工智能概论课程 第7章 自然语言处理 含习题 共42页 .pptx 清华大学AI人工智能概论课程 第8章 智能控制技术 含习题 共39页 .pptx 清华大学AI人工智能概论课程 第9章 工业机器人技术 含习题 共58页 ....
电子政务概论课程形成性考核册答案.pdf
在参数传递方面,程序设计语言通常支持按值传递和按引用传递。按值传递创建参数副本,子程序内部的修改不会影响外部变量,而按引用传递则允许子程序直接修改外部变量。当子程序因异常中断时,如果异常被抛出并由外部...
民航概论课程标准.pdf
- 《C程序设计(第三版)》:谭浩强主编,清华大学出版社。 - 《数据库系统实现》:杨冬青,唐世渭,徐其钧等译,机械工业出版社。 为了实现这些功能,学生需要设计和实现表的物理存储结构,包括理解如何在磁盘上...
本压缩包中的"游戏程序设计概论范例文件"提供了深入理解这一领域的关键示例,旨在帮助学习者通过实际代码来探索游戏开发的核心概念。 游戏程序设计的基础始于编程语言的选择,如C++、C#或Python等。这些语言为创建...
通过以上知识点的梳理,我们可以看到,《数据库概论》课程设计实验报告书不仅涵盖了理论知识的学习,还强调了实践技能的培养,旨在让学生全面掌握数据库系统的设计、开发和测试全过程,为将来从事IT行业的相关工作...
### 数据库系统概论课程设计文档 #### 一、题目:学生管理系统 #### 二、设计目标与要求 本设计的目标是开发一个学生管理系统,该系统主要包括三个核心模块:学籍管理、考勤管理和成绩管理。通过这三大模块,可以...