C#中的Linq和.net4.5中的异步是不是借鉴了javascript的思想?
请问借鉴了javascript中的什么思想?我发现.net类库怎么越来越像Windows API
请问原先的.NET类库如何不像Windows API,而现在什么改变使得它像了?请正面回答,谢谢。

解决方案 »

  1.   

    很好奇lz发这个帖子冒用Anders的口气,说这些的用意是什么。尤其是使用小号和代理服务器。其实我大概知道你的真实身份,以及你的学校。也许你觉得这个贴争议比较大。其实陈述自己的观点没有什么。也不用搞的那么复杂。
      

  2.   


    好的 那我就简单解释一下,Linq的基础建立在类型推断、扩展方法、lamdba表达式之上的,这谓select form where的SQL形式,你我都明白它就是一块语法糖,实质上select之类的都是一些.net集合中的扩展方法,有些人认为它是神来之笔,可Java阵营心里就不爽了(这个在此就不提了),可是就是这么个神来之笔(不改变底层结构,修改语法树),它的关键就是lamdba表达式,C#之父讲Linq时,举了Javascript、Ruby的例子,C#之父明确表示C#受动态语言的影响,是的,您能想象有一天您写代码诸如var f1=int eat(){};//假如 ,这样写比lamdba表达式还爽
    var f2=delegate(){};//匿名代理
    var f3=()=>{};//.net 3.5
    var f4=function (){};//javascript形式
    是的,就是函数能像数据一样赋值,这就是动态语言的特点C#是一个强类型的静态语言,至于它是怎么实现或者模拟这种动态语言特性的,这个您如果研究下IL就知道了,Linq的目的是解决业务逻辑中数据和程序的不对等性(这是Linq项目的初衷,当初是一个实验项目,研究了好几年,后来是在Anders的帮助下才加入到.net中的),抛开这个内涵不提,它的外在就是语义话API设计的典范,而在这方面,Ruby on Rails ,jQuery都是这方面的典范,Anders也多次提到这些,我询问Anders是否借鉴,这也在情理之中对于异步,任何一个成熟的js库中都有defer这个东西,C#中搞出await关键字,背地里怎么样,您如果看下IL代码,就清楚了对于像不像API问题,如实的说,您的论据我想想确实很有道理
      

  3.   

    呵呵,拜托付点责任成不弄一些似是而非的论点,搞些莫名其操的观点做甚这里不是周立波秀。没必要去整firelong这类文章。园子里的水已经浑了,没必要非把这里搅混
    兄弟给你个建议,想要搅水的话去博客园,别来这里。
      

  4.   

    不要动不动就是你去研究下IL就理解了,就明白了。其实我没有研究IL,这些东西也搞得很明白。这就是计算机科学的力量。埃及人很早就测定了一年是365天,英国的巨石阵每一块石头都对应一个月份的星座。在中西方的古代,很早就有人可以预测日食。很多人对古人的智慧赞叹不已。貌似现代科学也不过如此。如果你真的以为是这样,那就大错特错了。实际上,古人之所以能够做到这些,靠的是精密的测量。而现代天文学则是对天体运动规律的掌握之后,计算得出的。古人可以预测几个月内发生的日食,但是可以计算几千年以后的么?埃及人可以测定地球的公转周期,但是他能根据行星对恒星的摄动测定看不见的遥远行星的公转周期吗?开普勒发现了著名的三定律,他可以对别人说,不信,你测量下就知道了。但是几何学上的定律变成力学上的定理,却只有牛顿的万有引力的理论基础才能实现。看到一些语法现象,一些类库的使用,感兴趣的去探究下源代码,乃至IL或者汇编当然好。但是这绝对不是你学习的重点。试问,你在IL上积累的经验,在另一门语言上有效么?
      

  5.   

    其实结合你另外一个帖子我们就可以知道,你到底在“佩服什么”“惊诧什么”你“佩服”和“惊诧”实际就是上个帖子里,老p说滴 “以后的语言会越来越靠进自然语言”你“惊诧”人家把自然语言引入到了c#里面,你探究他,佩服他的技术实现问题是对我们来说,自然语言被引入进来实际是一种自然倾向,因为技术上,思想上到这个地步了,他就该被引入进来其实没有啥参考js里,计算机语言最终参考的就是自然语言。
      

  6.   

    光说些大道理可能你不爱听,但是其实这比我下面说的更有意义。下面谈谈具体的技术。几个问题,我只能大概说说,如果有兴趣呢,对不起,我不建议你看IL,我建议你看书。首先是LINQ,这一点呢,LINQ版的督察是高手,我只是谈谈我的一点看法。这个LINQ的实质呢,和什么Lambda表达式,Extend Merhod,或者var,没有太大的关系,而且你也没有说完整。实际上,LINQ还用到了如下的语法现象,比如类初始化器,比如泛型接口,比如迭代器算子和yield。当然,最重要的是,它使用了Expression Tree,表达式树和Lambda的配合,使得长期以来我们对C#的认识发生了根本性的改变,而且直接影响了之后的一些有趣的东西。之前我们一直认为,C#编译器的作用是将C#源程序翻译成IL。而CLR则调用JIT产生本地代码并且执行。在表达式树的时候,这一点被打破了。C#可以把一些C#代码编译成描述性的数据(表达式树),而不是最终的代码。这样做,使得运行期间,Linq to SQL 将这些描述性的数据转化为SQL在数据库端查询成为了可能。也正是从这个时候开始,C#编译器的作用变得多元,C#可以为SilverLight,产生代码,而不是CLR。同时,C#可以和DLR交互,实现了动态。最后,微软将开放编译器模型,我们有了Rosyln。当然上面这些只是题外话,LINQ根本的思想是,将描述式编程引入了C#和.NET平台。之前的技术种种,包括你说的那些,使得LINQ成为一个经典的Meta Programming和Domain Language(确切地说,是sub language)的实践。
      

  7.   


    您这样回复就很好嘛  我看着就非常爽  回答到点子上了  这个表达式树就是点子  是不是Linq高手,就看你玩表达式的水平  您如果有兴趣  咱们可以找个例子 PK下表达式树的水平我不是什么高手  当然是抱着学习交流的态度来的
      关于您Rosyln这个东西 我不了解 不知能否介绍一下
      

  8.   

    所以,我们跟你说的一件事情就算别抱着IL或者010101的大腿,自然语言被引入我们双手赞成只是我们跟关心的是语义和思想,而非IL和010101,不同语言不同的大师会有不同的底层手段。那天c++里面出现了linq你也不必奇怪,到了该出现的时候,他自然会出现,而他在c++的实现也许更简单,因为人家有yacc,lex这类更有历史的语法树解析工具
      

  9.   

    至于你说到的Javascript库中使用了一些Prototype(不是那个Prototype库),Closure或者函数式编程的技巧或者风格,这不是Javascript语言的编程思想,而应该归于Pattern或者Practice一类的东西。我记得GoF的设计模式书上就有关于Prototype的模式。也就是说,即便是C++,早于JS出现很多年,一样可以使用这些模式。实际上C/C++的函数指针,使得将函数作为更高阶的函数的参数使用,这除了作为callback以外,的确在一些数学库中被作为普遍的技术使用,甚至在STL里面,我们也能看到类似的用法。我们怎么能说LINQ是借鉴了JS的呢?本身就是通用的理论而已,课本上都有。至于API的设计,更典型的是属于Pattern&Practice了,这个和你上面说的是一回事,就不叙述了。
      

  10.   

    “LINQ根本的思想是,将描述式编程引入了C#和.NET平台。之前的技术种种,包括你说的那些,使得LINQ成为一个经典的Meta Programming和Domain Language(确切地说,是sub language)的实践”
    您这个说法的确如此,但这是Linq的表象,它的实质就是要解决数据和程序的不对等性,它解决没有?我无法做评论,但是它这种编程模式确实是对传统操作数据的一种颠覆
      

  11.   

    最后解释下,因为我是斑竹,所以可以看到一些后台的数据。并不是什么工具。请你说话不要那么肮脏。“学院”化的教育体制你可以反对,但是学院化的理论知识你不能全部排斥。不要相信什么没有学历怎么怎么成为高手了。人家自学的艰苦你不曾看过。很多人说Bill Gates学历不高,实际上人家大学数学相当优秀。实际上他自己说,在成为高手前,他积累了4万小时的编程经验。其实我们都知道,他母亲来自IBM,给了他很好的环境和氛围。在硅谷,他也有很好的圈子,而绝对不是闭门造车。Anders更是如此,Anders对编译器的造诣无可企及,绝对不是因为他像爱迪生那样搞点小发明小创造搞出来的。他做的成就完全是建立在计算机科学理论体系之上的。
      

  12.   

    在我上大学的时候,我也沉浸于算法的研究中,参加了很多的算法比赛。为了写出更精炼的程序和同学PK过。把技术玩得很深。当然那时我钻研的是VB和API。我可以让VB做很多不可思议的事情。这很好。尤其是大学的时候能认识一两个高手同学,一起进步。我想工作以后来看也许这的确没有什么太大的意义,但是会成为你一段美好的回忆。
      

  13.   


    您的说法我赞同,设计模式是一种思想,C当然可以有,整个windows和linux都处处洋溢着设计模式的哲学
    你的叙述中忽略了我的一个关键点 “函数可以当做数据使用,可以赋值” 我是C/C++出身的,学过汇编,win32汇编,可以说我受C派系影响特别严重可是你就此说语言只是一种形式,重要的是思想,恐怕您也是C一族的语言学习者实际上语言有一个更大的派系,就是Lisp派系,建议您看看我转载的Lisp本质,仔细看看作者的阐述,这对学传统C派系语言的我是一种颠覆,相信你也会找到些灵感还是那句话“函数可以当做数据使用,可以赋值”  这一点很神奇 希望你仔细品味下  你要说这没什么神奇的呀,C中也可以呀,这个我当然知道 我如果就是这种境界我当然不会向您屡次提起这句话 建议您好好思考下它的巧妙之处 看下我转载的Lisp本质(主要是写的好 ,在此之前就接触Lisp了) 你或许会有收获
      

  14.   

    我就看看 不说话,我不知道什么事Linq  什么是JS
      

  15.   

    关于Linq,你似乎对引入语法糖很不屑,但你真的就能驾驭这小小的语法糖吗?
    http://www.cnblogs.com/Ninputer/archive/2011/07/03/2096944.html
      

  16.   

    关于Linq,你似乎对引入语法糖很不屑,但你真的就能驾驭这小小的语法糖吗?
    http://www.cnblogs.com/Ninputer/archive/2011/07/03/2096944.html
      

  17.   

    晕,能把装配脑袋给激出来,lz也算厉害了如果jeffreyzhao这位,真是老赵,那就更厉害了
      

  18.   


    要顶一下,前辈呀  最近一直忙于一个图形算法库  打算过了这阵也写一个C#编译器 当初的想法和前辈的思想是一致的,也是编译器的套路,以IL代码为最终目的,这方面的研究在国外还真的很多,开源的也比较多,后来仔细静下心来分析一下,发现即使有这个IL代码作“依托”,实现一个完整的C#编译器几乎是高不可攀,发现用Emit体系(微软建议用这个搞编译器)实现一个真正的C#编译器对我个人来说几乎不可能,后来发现CodeDOM体系也可以,但是仔细想想,这些东西对于练自己的技术很有好处,在大型软件中构建DSL还是真不错的,但实际产品的用途真的不大,后来想法就更简单了,Emit、CodeDOM都不用,我直接把C#做为中间语言,构建可扩展性语法说归说,做归做,做这些东西或许用途不大,但对自己的锻炼绝对是一流的,在此顶一下前辈,谢谢分享精神,祝前辈在.net之路上更上一层楼,更加优秀
      

  19.   

    要顶一下,前辈呀  最近一直忙于一个图形算法库  打算过了这阵也写一个C#编译器 当初的想法和前辈的思想是一致的,也是编译器的套路,以IL代码为最终目的,这方面的研究在国外还真的很多,开源的也比较多,后来仔细静下心来分析一下,发现即使有这个IL代码作“依托”,实现一个完整的C#编译器几乎是高不可攀,发现用Emit体系(微软建议用这个搞编译器)实现一个真正的C#编译器对我个人来说几乎不可能,后来发现CodeDOM体系也可以,但是仔细想想,这些东西对于练自己的技术很有好处,在大型软件中构建DSL还是真不错的,但实际产品的用途真的不大,后来想法就更简单了,Emit、CodeDOM都不用,我直接把C#做为中间语言,构建可扩展性语法说归说,做归做,做这些东西或许用途不大,但对自己的锻炼绝对是一流的,在此顶一下前辈,谢谢分享精神,祝前辈在.net之路上更上一层楼,更加优秀
      

  20.   


    等系统恢复正常再说吧。你知道你能一下发3个帖子,删除的时候弄不好一下子也能全部删除。上次就出现了这样的情况(我不知道是不是正好有另一个斑竹在同时操作,但是csdn缓存有问题),一下把3个重复贴全删掉了刚才试着删其中一个,但是没有删掉,无法确定是不是缓存没有刷新的结果。
      

  21.   

    很多问题都浮于表面呢啊回来再讲讲defer是怎么回事吧。
      

  22.   

    很多问题都浮于表面呢啊回来再讲讲defer是怎么回事吧。