西西河

主题:【原创】进程的反击 -- zllwy

共:💬48 🌺136
分页树展主题 · 全看首页 上页
/ 4
下页 末页
          • 家园 很多语言说明遇到新的问题,都没有解决好

            就好象如果某种病市场上有很多种药物在卖,那么不用问就知道,这些药没有一种是管用的。有疗效也不治愈。

            我觉得语言很多就说明改变语言不解决问题,而是要改操作系统。

          • 家园 荣幸。

            铁手回帖了。

            回顾一下编程语言的历史,可以发现新的主要语言的出现都是随着编程的需要而兴起的某种新的模式而出现的。高级语言是为了可读,OOP是为了大规模应用的需要(比如代码重用)。现在则是functional language中的很多概念的流行。很多新的语言都试图把传统的语言和functional language中的精华结合起来,给程序员提供更强大的工具,减少编程的错误,提高可读性,提供很多程序中常用的pattern等等。也许你会怀疑到底这些新的功能起了多么重要的作用。至少从我的体会来说,Go的goroutine和CSP模式是我一直在寻找的语言功能。因为我的需要是写大规模并行的web service,用thread显然已经不能适应并发规模了,用event-driven又很难写,而且容易出错,goroutine和channel提供了非常简洁和方便的抽象。最终的结果就是我可以用很少的代码写出可靠而高效的web service。另外的例子就是很多人喜欢用closure或者generator,觉得可以写很精练的代码,所以很多新语言都提供这样的feature。Java 7也要支持closure了。所以,新的语言最终是由需求而产生的。当然,如果你没有这样的需要,也就没有必要追求新的语言了。

        • 家园 看到actor想起微软的CCR与DSS,还有Scala

          微软的robotics studio都到了第三代了,好几年前的东西了,现在好像都并到什么并行库里去了。记得当时看CCR/DSS的case study,Fedex还谁用它写的一个分类邮件的程序,还有好多华尔街在偷偷地用等等,可惜那个team后来没成气候。也是从CCR/DSS开始才找到erlang上,才发现erlang早就大名鼎鼎了几十年了,呵呵。现在又开始流行F#,Scala了等等,这上面的话题可就多了。

          • 家园 展开说说?

            顾非是微软的吗?

            可以展开说说。尤其是F#和robotics studio。后面这个东西是否会加入kinect的支持?Scala有一阵看了一下,觉得搞得太复杂了。现在号称要替代Java,我觉得有点跟Java背道而驰(Java还是一个简单好用的语言,就是有点落后于时代了)。

            • 家园 微软的不是,但想起一段看到的笑话

              一女子结了三次婚但依然保持处女之身。有人问她其中缘由。她说:“我第一次嫁给了一个老头,而他在我们行房之前就死了。第二次,我嫁给了一个海军军官,但战争在我们婚礼的当天爆发了。第三次,我嫁给了一个微软Windows程序员。他只是坐在床边,不断地跟我描述接下去将会多么美好。”

            • 家园 java都落后于时代了。

              那现在C/C++是不是算远古时代的东东了。

              • 家园 Java, C/C++

                Java的问题部分归咎于Sun和JCP,部分归咎于Oracle,多少年了Java不思进取,Java 7的feature更是被Oracle砍了很多。在Java developer的圈子里面有一种Java完蛋了的气氛,大家纷纷讨论Java的后继是什么。Scala很有希望。不过我还是更喜欢Java一点,虽然Java的很多应该有的feature,比如closure,早该有了。

                至于C/C++,应该分开讨论。C作为底层系统的语言我看还没有可以取代它的。C实际上是现代的汇编语言。应该没有人会用C来编写大型应用了。C++基本上被人诟病的很多,设计上很有问题。所以才会有很多新的语言试图修正这些问题。比如D号称是更好的C++。

                甚至OOP的概念现在也在被重新审视。比如inheritance,很多人认为这是一个bad concept,有一篇很有名的blog说inheritance sucks。Go就没有inheritance,而是用interface,类似于duck typing,但是static的。这个就比inheritance要简单,灵活。

                目前在programming language领域里面的创新和进步天天都在发生,如果作为程序员思维还停留满足在Java, C/C++,那很快就会落后的。:-)也许你要问我为什么要关心这些,Java, C/C++够用了。我想作为一个真正精益求精的程序员来说,永远追求更好的编程工具是一件很正常的事情。就像一个机械工程师,你的工具不趁手,你会不会去找更好用的呢。这毕竟影响到你的工作效率。对吧。

                有空我来写写我目前的favorite language: Go。

                • 家园 我见到的很多应用还是用C,甚至是fortran写的多,

                  几十万行应该算是大型吧。当然,也许是因为这些应用一般都有很长很长的历史(有些程序可以回溯到上世纪七八十年代)。现在看C还有很长的寿命,Fortran就算了。

                  现在很多情况下,写程序选用语言还是没法看自己的喜好,而是看自己想写什么样的东西。比如说想写一个跨平台的GUI,可以选的框架比较成熟的就是C/GTK+,C++/QT,Java/swing三样,还有他们的各种绑定。可以选择的语言有限。脚本语言方面,如果是想写Linux系统脚本,bash随手就可以用,什么也不用担心。跨平台的脚本一般考虑Python,最好的万能胶,之前有perl,现在不常用了。微软的批处理脚本就很杯具了,VBScript略好一些而已。当然据说现在到了win7好像有所改善。至于Go,D这样的语言现在只能当玩具玩,没办法库太少。就算lisp这样的老牌的语言,库还是不够丰富。现在的问题就是底层谁都没办法与C竞争(没办法人家操作系统一大半都是用C写的),高级一点的语言,没有个大型的函数库根本没法吸引大家编写应用。

                  说到继承的概念,很多人都做了讨论,像effective java中有就类似的条目。

        • 家园 有空的话希望你能把这个问题展开说说!

          聊聊几笔,这些问题似乎都没法说清楚!

          我的看法是:虽然新技术如雨后春笋般的冒出来,但说到底事情一点没变。所以的工作还是交给OS的Kernel thread来完成。不管进程也好,线程也罢,最后是操作系统的scheduler在安排一个个的Kernel thread在CPU上运行,没有什么讨巧的地方。

          编程语言可以把下面的东西藏起来,给用户友好的开发,运行和debug环境,可以让程序员在更高的一个层次想问题,这一点没有问题。但是到目前为止,我还没有看到一个真正成熟的东西,包括刚刚推出概念的C# 5.0的Asynchronous programming model(Java也差不多)。

          还有一点就是高级的程序语言和库函数可以让你站得很高,但是你站得越高,控制力就越小,性能损失就越大,这是计算机界的一个悖论,概莫能外。所以,有时候我还是喜欢往低走。走到地处往往才能有左右逢源,随心所欲的境界。

          另外,thread heap是怎么回事?我想你是指thread的stack吧?就我所知,绝大多数的编程语言没有为thread allocate heap的概念,也没有heap context这么一说。所以我猜你一定指的是stack。

          • 家园 上层编程模式和底层系统细节

            我想你想说的是这两者的关系。我觉得对于大多数程序员来说,高层的编程模式越来越重要。目前新的编程语言如雨后春笋,不断涌现。说明现有的编程模式已经不适合软件应用的需要,大家迫切期待新的技术或者实现的成熟。随便数来就有不少:clojure, scala, erlang, go, D, Rust, Ocaml, Lua...一个潮流就是越来越多采用functional language的概念,另一个潮流就是Actor或者CSP模型。其实这些概念早就都有了,但为什么到现在才开始被重视呢?我想硬件资源越来越丰富,并行度越来越大,而程序也越来越复杂,这些都是重要的推动力。Functional language的特点就是尽量消除side effect,这样程序的可靠性比较好(不展开了,有兴趣问Google吧)。Actor/CSP模型是适应大规模并行的网络服务的特点。整个趋势就是语言提供越来越高层的抽象。

            至于控制力,自然是越低越强,用C基本可以实现任何东西。但同时你也要付出巨大的代价来建立一个庞大的系统,很多时候都是reinventing the wheel。基本上,除了一些特殊的领域,比如codec之类的,没有谁会在底层写了,因为基本上不现实。

            当然,我的观点而已。:-)

          • 家园 多谢指正

            写太快,回去一看不忍卒读。把指出的地方修改了一下。其实主要想说明在server端并发粒度越来越小。主要推动力就是web service越来越大的并发规模。

            • 家园 前两天,跟Web的人说web service,都不知道

              俺都怀疑俺是不是好长时间没更新知识了

    • 家园 恩...硬件进步了...硬件还不够好

      16M的memory heap限制在处理图片时让人很郁闷。 而且似乎bitmap的资源释放也有问题....

    • 家园 Android的单线程决定了其所搭载应用程序的局限性。

      最近苦恼中,几乎没有办法移植基于pc的应用程序。Android所谓的可靠性是以牺牲功能作为代价的。

      • 家园 你是不是想说iphone?

        android多线程,最典型的是facebook,foursquare之类的notification都是基于后台的service. android的问题不是没有多线程,而是service过多,导致性能有问题....

        iphone ios3.x单线程, ios4.x伪多线程,这才真是无法移植pc应用。

        另外多说一句,从pc移植软件到手机平台是不合潮流的......

分页树展主题 · 全看首页 上页
/ 4
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河