免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8664 | 回复: 17
打印 上一主题 下一主题

[技术动态] [转] 黑死 java 不商量 [复制链接]

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-30 19:47 |只看该作者 |倒序浏览

http://avboost.com/t/ksbs/339

很久很久以前, 我学习了一门叫 C++ 的语言。那个时候我在写一个叫 Emacs 的软件的变种。源于对 C 和 C++ 的厌恶, 我把我的厌恶都发泄到了用户身上。 如果用户做错了什么,程序会侮辱他,把他叫做火鸡,并把屏幕填满垃圾。

后来 这个 Emacs 版本没人用了,我于是去了 DIM 公司混饭吃。 在那里, 我遇到了同样一群讨厌 C++ 的人 。C++是如此的难用,我们决定设计一个更简单的 C++。

我对 C++ 的第一个讨厌的地方就是 他的内存管理。 太讨厌了! 我得不停的写 new delete, 还得操心 new [] 和 delete [] 的区别。 还得时刻关注一个对象的生命周期,一不小心忘记了就要内存泄漏了。

编写 Emacs 的经历让我很快的想到了 lisp 语言, lisp 语言里带有一个垃圾收集器, 于是,我就把垃圾收集器带到了我的语言里。

因为有了垃圾收集,程序就非常简单咯~ 在也不用操心内存管理了。

等等, 用户要是把指针存到 int 里, 然后再 cast 出来咋办? 垃圾收集没办法对付这种情况啊! 简单! 废了指针不就好了啊~ 。

好的, 我有了一个初步设想了,这个语言应该是

    自动的内存管理 (GC)
    不需要指针

等等, 对象要是分配到栈上和堆上, 又要不同对待了~ 栈对象肯定和堆对象不一样啊! 如何引用对象成员呢? GC如何区分他们? 哎呀, 好麻烦, 没指针好像就没法区别对待 栈对象肯定和堆对象了! 咋办? 好吧,不允许栈对象就是了嘛! 所有的对象都从堆里分配就好了嘛!真好啊,既然所有对象都是在heap上分配的,区分stack和heap的分配就没有必要了。我可以轻易说 Cat x = Cat() 或者 Cat x = Cat("mittens")。

好的, 我有了一个初步设想了,这个语言应该是 - 自动的内存管理 (GC) - 不需要指针 - 所有的对象都从堆分配,变量只是一个引用

那么接下来是 对象的设计了。面向对象的语言是潮流!

C++ 居然支持 C , 所有的东西不都是对象, 这太恐怖了! 面向对象的语言是潮流!怎么能不面向对象呢? 没对象怎么行! 所以 我的语言必须得是 面向对象的语言! 这个是潮流! 既然面向对象, 就要真正的面向对象 所有的东西都是对象 , 哈哈,这是我从 UNIX 那里学来的,我厉害吧!

啥? main() 函数咋办? 切, 放到一个对象里, 做成 static 成员函数就好了 。。。。。。

为了面向对象的时候, 用起来方便, 我决定,所有的对象都继承字一个叫 Object 的对象! 这样才好! 这才漂亮! 这样不用那难学的模板了, 诶, C++ 的模板太难学了, 肯定大家都和我一样学不会的! 我都学不会,别说一般的程序员了!是吧。 只要大家都是一个根出来的, 用不着写模板, 你的算法就是通用的啦~

而且单个根继承下来, 对 GC 来说也变得容易实现了嘛!

好的, 我有了一个初步设想了,这个语言应该是

    自动的内存管理 (GC)
    不需要指针
    所有的对象都从堆分配,变量只是一个引用
    所有的东西都是对象
    所有的对象都直接或者间接继承自 Object
    所有的方法都是虚的

恩,看起来这样的特性不错, 肯定比 C++ 简单啊~ 大家肯定用的比较 happy 的~ 性能这种东西嘛,丢了丢了, 只要写程序快多好,足矣弥补运行效率的损失了, 再说, 就一个默认虚函数而已, 有啥效率损失。 GC 又不是时刻跑,偶尔出来跑一下啦! 这点效率损失是可以接受的! 带来的好处不用多说, Better C++ 啊!

等等, 异常忘记加了, C++ 都有异常, 咱家咋能没有! 靠!加了加了 !

好的, 我有了一个大概设想了,这个语言应该是

    自动的内存管理 (GC)
    不需要指针
    所有的对象都从堆分配,变量只是一个引用
    所有的东西都是对象
    所有的对象都直接或者间接继承自 Object
    所有的方法都是虚的
    支持异常处理

不错, C++ 还有 RTTI , 我的语言怎么能没有? 加了! 还得加的更厚道!

好的, 我有了一个大概设想了,这个语言应该是

    自动的内存管理 (GC)
    不需要指针
    所有的对象都从堆分配,变量只是一个引用
    所有的东西都是对象
    所有的对象都直接或者间接继承自 Object
    所有的方法都是虚的
    支持异常处理
    支持运行时类信息

哈哈! 这语言已经和 C++ 在特性生很接近了, 差不多了, 但是我需要推出一个 杀手级 的特性! 保证把 C++ 秒到棺材里。

他 C++ 不是号称 “跨平台” 么? 我去! 要到处编译的, 每个平台的编译器还都不一样! 算你妹的跨平台! 咱这语言, 必须真正的跨平台!一次编写, 处处运行!

这TMD的有点意思哈!恩,简单, 咱设计个虚拟机不就完了么! 把咱这个语言的程序用虚拟机跑起来, 只要移植虚拟机就可以了。

恩,最终的语言应该这样的

    自动的内存管理 (GC)
    不需要指针
    所有的对象都从堆分配,变量只是一个引用
    所有的东西都是对象
    所有的对象都直接或者间接继承自 Object
    所有的方法都是虚的
    支持异常处理
    支持运行时类信息
    程序运行在虚拟机上,一次编写处处运行,真正的跨平台

拍屁股决定了语言特性后, 咱就马上开始实现这个语言了! 当然, 实现这个语言还得靠 c++. 否则咱拿什么编译这个语言啊!

这语言写着写着, 咱又发现了几个问题, 首先 int char 这类的类型, 他放到堆上不太好啊!

好吧,打个补丁, 把这几个类型叫做 primitive 类型, 和 C 一样, 分配在栈上好了。

过了一段时间后, 我的主管大力的称赞了我的新语言,然后它被推向了市场, 冠名为 Ksbs 语言。

这个语言引起了很大的轰动, 我很自豪, 因为我把 C++ 所有不好的地方都消灭了, 哈哈哈! 我伟大~

至于 GC 和解释执行导致的效率问题, 我也开始通过更厉害的 GC 算法和 JIT 编译器来弥补了。 我找了几个 benchmark , 证明 GC 比 手工管理内存还快, 另外找了写枪手来批评一下 C++, 整个市场接受度良好! 哼~

在多年的实践里, 我发现了这么一个事实, GC 虽然能管理内存, 但是管理不了其他资源, 比如文件描述符。这些资源程序员必须小心管理, 否则容易发生资源泄漏问题。

我了个去!! 这是很严重的问题! 靠! 怎么没有人告诉我 !! 我听说 C++ 发明了 RAII 机制, 可以自动的管理包括内存在内的一切资源。 这不科学! C++ 一定是垃圾的语言! 我的语言才是最优秀的!

好吧, 加入 finalize 机制好了! 恩恩, 对, 用 finalize 释放其他资源。 哈哈, 我真聪明! 有了 finalize 机制就可以释放其他资源了嘛! 一般的对象都只有内存的啦,所以多一个机制并没有引入太大的复杂度, 对吧?

我很不安, C++ 发明了 sharedptr , 这玩意, 一下子让我的 GC 黯然失色! 靠, 得想个办法诋毁! 动员公司的力量, 创造舆论! sharedptr 有原子操作, 多核情况下性能不行!!shared_ptr 无法处理循环引用!

恩恩, 就这样攻击一下, 另外再找几个例子, GC 的性能比 shared_ptr 高的。

果然, 大家都开始唾弃 shared_ptr 了, 说 GC性能更好 ! 恩恩, 我安心了。

但是, 我对摩尔过于乐观了, 我的语言时不时的遭到 “被彻底抛弃,使用 C++ 重写” 的威胁, 我得想个办法!

对! 支持调用 C++ 的程序不就好了! 让他们把比较性能敏感的部分用 C++ 给重写就好了, 别整个重写啊!

对啊, 我还得教育大家, “把性能关键的部分用 C++编写, 其他部分用 ksbs 写” 这样的观念给植入大众的脑袋!总之不能让大家觉得全部用 C++ 写是个更好的选择!

以上就是我设计 Ksbs 语言的历史, 哈哈, 我是 Ksbs 之父!膜拜我吧!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:15程序设计版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-22 14:11:11程序设计版块每日发帖之星
日期:2015-09-25 06:20:00每日论坛发贴之星
日期:2015-09-25 06:20:00
2 [报告]
发表于 2013-08-30 21:37 |只看该作者
这个作者的微博,蛮有意思的

论坛徽章:
0
3 [报告]
发表于 2013-08-31 01:12 来自手机 |只看该作者
这么happy,翻译不错。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
4 [报告]
发表于 2013-08-31 09:26 |只看该作者
这文章放这里就对了。
这里缺啥都不缺java黑。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [报告]
发表于 2013-08-31 11:48 |只看该作者
我一直认为:踢足球的是流氓,看足球的是傻屄!
晕,写错了,应该是:创造Java的是骗子,用Java的是呆屄!

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
6 [报告]
发表于 2013-08-31 11:55 |只看该作者
回复 5# bruceteen


    Java并没有什么不好, 不好的是, Java被滥用了。 Java的应用范围远远高于它的Java的适用范围, 这是一种被高估的语言

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
7 [报告]
发表于 2013-08-31 13:07 |只看该作者
....

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
8 [报告]
发表于 2013-08-31 13:55 |只看该作者
folklore 发表于 2013-08-31 11:55
回复 5# bruceteen
Java并没有什么不好, 不好的是, Java被滥用了。 Java的应用范围远远高于它的Java的适用范围, 这是一种被高估的语言

这个观点我第一次看到,仔细想来,可能是对的。比如 Perl 和 PHP,在特定场合是非常合适的。
反而,一个特定场合的语言,如果一定要增加其语法,搞成通用语言,可能恰得其反连原本适合的场合都会失去,我觉得Java可能就是这样一个吸血过多的怪胎,难学难用又无特长。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2013-08-31 15:04 |只看该作者
有点好笑  

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
10 [报告]
发表于 2013-08-31 15:45 |只看该作者
狗日的淘宝, 狗日的阿里, 狗日的JAVA
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP