• 2006-11-15

    Java开源:SUN使用GPLV2许可证发布Java SE和Java ME实现

    Views: 8763 | No Comments

    太平洋标准时间2006年11月13日, Sun正式宣布使用GPLV2许可证开放Java SE和Java ME源代码.

    Java SE方面. Sun宣布在第一次的代码发布中, 开源的组件包括:javac编译器, 虚拟机, 字节码编译器, 垃圾回收, 线程和安全部分. 第一个代码发布版来自于JDK7的最初构建. 它基本上就是JDK6的最终发布版代码. 2007年春天将发布的包括, JDK6和JDK7的所有非保留模块的源代码和完整的构建脚本, 保留不开源的模块将会以二进制包的形式发行. 所以, 真正的革新发生在JDK7. 有小部分的源代码将保留不开源, 它们基本上都在Java 2D部分, 包括ICC色彩管理库以及字体, 图形rasterizer.

    Java ME方面的开源也很彻底. 11月, 开源基于CLDC的主要手机实现和ME基础框架;十二月底, 高级操作系统手机实现, 包括基于CDC/FP/PBP的设备, 手持设备, 机顶盒和Blu-ray设备. 明年二月, Java设备测试框架开源. 部分牵涉到合作厂商的部分, Sun承诺会和J2SE一样, 尽量沟通协调, 促进尽快开源.

    消息来源: http://blog.csdn.net/programmer_editor/archive/2006/11/14/1383027.aspx

    Posted by ideawu at 2006-11-15 06:59:57
  • 2006-08-24

    心中的大疑问:“国外软件”远远超过了“国产软件”吗?

    Views: 15030 | No Comments

    最近在linuxsir论坛上有位自我感觉良好的朋友的心中产生了一个大大的疑问:“不是说,国外的软件业远超过国内吗,但为何,在国内市场上占主流的还是国产货,而不是外国货?”

    它还举了一些例子:

    1. QQ在中国人中的流行程度远远超过了国外IM产品。

    2. 在杀毒软件方面,像金山,瑞星等,在国内也是深入人心。

    3. 中国的网吧里,大家几乎都在玩QQ游戏。

    4. 还有很多很多其他的方面的软件,比如说用友,金碟,K3等一系列的ERP软件都一直占据着国内的软件市场。

    他心中的疑问爆发了:“ 不是说,国外的软件业远超过国内吗,但为何,在国内市场上占主流的还是国产货,而不是外国货?这到底是怎么一回事?????????????”

    这位同学对软件的理解让人不敢恭维,而且他根据上面的现象得出结论的思路也让人无法理喻:中国人用而且非中国人不用的东西就是高级的。这是什么思维?

    就拿我们身边的软件来说,他考虑了操作系统吗?他考虑了数据库吗?他考虑了开发工具吗(例如Visual Studio,Eclipse,JBuilder等)?他考虑了Photoshop,Flash制作工具吗(即使他使用的是盗版的)?

    民族自豪感是一个民族不可缺少的品质,但是,如果一个民族的自豪感是建立在虚无飘渺的基础之上,这个民族就没有前途了。幸好这位同学无法代表任何一个民族。

    Posted by ideawu at 2006-08-24 13:06:05 Tags:
  • 2006-07-15

    缓存在计算机中的使用

    Views: 9125 | No Comments

    如果计算机中或者计算机间通信的两个实体的速度之比为1:100或者更悬殊时,那么它们之间就有使用缓存(Cache)的必要了。例如CPU/主存与磁盘,CPU/主存与键盘,CPU/主存与打印机等。缓存最先被使用在硬件上,然后在软件中也被应用。最著名的应该是CPU与内存(主存)之间的缓存了。

    缓存的速度比被缓存者的速度快很多。缓存是被缓存者的一个相联的副本,更重要的,它是被缓存者的访问接口。要想访问被缓存者,必须先访问缓存。缓存的改变将导致被缓存者的改变,这就是缓存的一致性问题。主要有两种方法保持缓存的一致性。一种是全写法,另一种是写回法。前一种是在缓存发生改变的同时改变被缓存者;后一种是在缓存改变达到一定程序时才改变被缓存者。前一种安全性更好,但效率受影响;后一种相反。

    缓存的性能指标除了速度之外,最重要的就是合命中率h。命中率等于访问缓存就能找到数据的次数除以总的访问次数,命中率与算法有关。注意,如果数据不在缓存中,那么将浪费一次访问缓存的时间。所以缓存系统的平均访问时间为h*nc+(1-h)*(nc+n)(全概率公式),其中nc为缓存的访问每一次时间,n为被缓存者的每一次访问时间。

    由于缓存容量小,所以需要替换缓存中的某些数据。相关的算法有:FIFO算法,LRU算法,RAND算法。

    • FIFO算法:也就是先进先出算法,最先被缓存的数据将被替换。
    • LRU算法:最近最少使用算法,在软件中一般使用链表来实现。数据每被使用一次,它将被放到表头,被替换的是表尾的数据。这种算法效率很好,所以最常用。
    • RAND算法:随机算法,随机替换数据。

    缓存系统的一个重要问题是缓存与被缓存者的映射(映像)问题,即如何识别缓存中的数据就是被缓存者中的数据。这里使用关键字,如果是内存,使用内存的地址,在软件中使用实体的标识(id)。即缓存中必须有一个字段用来保存数据的标识。相关的算法有

    • 全相联映射:缓存中有一个字段用来保存被缓存者数据的关键字。访问的时候迭代搜索,或者使用HASH法保存和搜索。HASH法浪费缓存的容量,一般在软件中使用,硬件中不使用。
    • 直接映射:如果关键字是有规律的,如内存地址。那么抽取关键字的一部分,另一部分被隐含在缓存和被缓存者的物理空间关系或者其它关系中。一个例子是,如果内存中有0,1,2,3,4,5,6,7号一共8个数据,缓存中有0,1共2个数据。规定0号缓存只能缓存内存中的0,2,4,6号数据中的一个,1号缓存只能缓存1,3,5,7号数据中的一个。当需要访问内存数据n时,先计算出CID = n MOD 2,所以只查找缓存CID,而不需要迭代整个缓存。如果你将上面的关键字转换为二进制,取模运算可以省略,因为模的值已经被隐含在二进制数中,所以关键字的保存也可以只保存二进制数中不包含模值的那部分。
    • 组相联映射:是上面两种的组合。将缓存分成多个组,组的查找使用直接映射,组内数据的查找使用全相联映射。

    因为速度总是与价格联系的,所以缓存永远不会消失。提高缓存性能可以从缓存的硬件性能,替换算法,映射算法3方面着手,还有就是系统的分析,即哪些数据适合被缓存。

    Posted by ideawu at 2006-07-15 07:52:08
  • 2006-07-12

    一台批改选择题试卷的计算机和它的程序设计语言的发展

    Views: 10437 | No Comments

    你见过老师们批改选择题吗?他们拿着一张上面打有孔的纸(答案板),铺到你的试卷上。每一个孔对应了一道选择题的答案,如果他们从一个孔中看到了一个黑点(你的选项),他们就给你的分数加一分。

    事实上,他们在运行一道程序。答案板就是程序的机器代码,由批卷老师(作为机器)运行。如果把答案板按照以下布局(当然试卷在空间上也要与它对应):

    0010
    0100
    0001
    1000
    ....
    

    上面的1表示孔,也就是答案。批卷者从左到右,从上到下查看每一个0或者1,运行这个程序。在这种情况下,批卷者的身体感观(手,眼)和大脑充当了计算机的角色。如果是另一次考试,我们再制作类似的答案板----我们在使用机器语言来写程序!

    怎么编写这种机器代码?假设我们已经制造出了这样一种机器。它的面板有4个按钮,还有放置还没有被打孔的答案板的白板。每按一个按钮,机器就在纸张的相应位置打出一个孔。打完一个孔后,我们卷动一下纸张,再打下一个孔。

    上面的选项很少(机器的位数少,只有4个位),而且指令只有16个中的4个(0001, 0010, 0100, 1000,也就是A, B, C, D四个选项,单选)。所以我们用机器语言来编写这种程序不会感到吃力。不过,我们还是不愿意按动机械按钮,不是吗?

    我们制作出另一种机器。它可以把输入的ABCD打成相应的孔。这时,我们遇到了一个问题。如何制造这样一种机器,它能读入某些输入,而这些输入能够被人轻易地认为是字母而且轻易地按照人脑中所想的字母输入给机器呢?

    我们别管它。我们就假设有这样的一台机器,它能足够聪明地读取我们人类手写的字母序列,并将这些字母序列输出为上面的二进制格式(制作答案板的机器,称做“制板机”)。好了,我们现在终于可以使用汇编语言编写程序了!

    如果有一次考试,试题的答案是1.A 2.B 3.A 4.D,我们就在一张白纸上写下ABAD,然后把这张纸给“制板机”扫描,然后它就生产出了若干张答案板。

    我们为什么不改用机器来判卷,而还是使用人呢?因为我们现在的目的是发展编程语言,而不是发展计算机硬件。虽然两者一般是同时发展的。为了更多关注程序设计,我们假设硬件不变。

    后来,有些人偷懒了。可能是程序员(编写制作答案板程序的人员),也可能是批卷者,谁知道呢?他们根据重排答案的选项,让答案变得很有规律。例如答案变为AABBCCDD(整张试卷一共8道题),或者全是A:AAAAAAAA。好吧,那么就全A或者全B。他们假设答题者足够笨,不会发现里面的玄机。

    于是,我们再造一种机器,我们输入一个A,它就把打印出8个A。或者我们输入(A,16),它就打印出16个A,然后我们把打印出的纸张送给“制板机”扫描并输出答案板。后来,我们又把这种机器和“制板机”结合,不再输出打印有若干个字母的纸张了,而是直接就输出答案板。

    酷啊,(A,16)这种程序代码是不是看起来更高级了!我们有一种比汇编语言更高级的程序设计语言了。

    到目前为止,我们从按动机械按钮的体力劳动者(制作答案板的)进化到了只需要在纸上写下几个字母的蓝领(还是制作答案板的)。

    不过,这里有一个致命的缺点----我们限制了答案必须是有规律的,而且这种规律太过严格,没有考生会认不出来。没有办法,为了发展我们的程序设计语言,我们这样做了。实际在不会有人这样做的。不过,如果你拥有足够的智慧,你可以不需要更改答案的规则,让它仍然有随机性,但是你看出了随机性中的规律性,于是你就根据这种随机中的规律发展出另一种高级语言。

    “制板”这种应用即其机器和程序设计语言发展到头了,我实在想不出如何发展它了。

    Posted by ideawu at 2006-07-12 13:30:18
  • 2006-06-30

    编写简单的计算器。

    Views: 8432 | No Comments

    这个计算器在词法分析器和语法分析器的基础上创建。运行calc,进入下面的操作:

    >>9
    9
    >>3+3
    6
    >>3*6
    18
    >>3*5/2
    7.5
    >>2/3
    0.666667
    >>quit
    

    >>是提示符。

    已经知道的BUG: 不接受[0-9]和4个运算符以外的符号

    进入计算器的首页

    Posted by ideawu at 2006-06-30 09:52:53
  • 2006-06-27

    中国人科技落后不是因为字母和单词

    Views: 9141 | No Comments

    前几天又见所谓的“中文编程”,让我气愤不已。这种所谓的“中文编程”,无非是利用了编译器对多字节文字的支持,将英文字母或者单词一一对应地映射为汉字。

    我曾经写过一篇文章《英语对于编程重要吗?》,得出结论是中国人可以不需要学习任何语言或者文字就可以编程---甚至是中文文盲!现在想想,当时的结论还不够好,现在我说,中国人可以只识别0和1两个符号就可以编程,完全不需要什么“难学”的英文!方法很简单,使用一种你认为好的编码方式,就跟计算机内部一样,用0和1编码所有的英文文字。简单的英文单词你不认识,0和1你还不认识吗?

    有点不着边际了。单个文字或者单词只不过是程序的基本单位。一个程序重要的是一个句子,整个程序。但是,最重要的是源代码后面的编程思想和科学理论!我们知道1,2,3...是阿拉伯数字,而汉字里有一,二,三...与之对应一样。那么数学运算中你会使用阿拉伯数字还是中文数字来表示呢?当然是阿拉伯数字。

    英文字母和单词在编程中有中文文字无法比拟的简洁,而且由字母文字国家的人创造的科技当然与他们的文字密切相关,那么有些人为什么会本末倒置地去追求这种一一对应的“中文编程呢”?

    中国人科技的劣势在语言上,因为我们的母语是汉语。我不是说英语比汉语优秀(很复杂的说法,我不想讨论),我是说,当前的科技,文明,优秀的思想的载体主要是英文,那么不会使用英文的中国人就处于劣势。

    与其追求这种愚蠢的“中文编程”的实践,还不如花精力去学习外国先进的思想并尝试创造我们自己的理论。

    Posted by ideawu at 2006-06-27 17:01:56
|<<<789101112131415>>>| 11/15 Pages, 86 Results.