24
回答
原语,库和开发
华为云数据库免费试用   

发这个帖子,是因为大多人搞不清库和(系统)原语的区别.这种区别对于技术选择,非常重要.

原语: 实质是由软件提供的一组服务,以API形式暴露. 例如 win32api, posix, directx 以及OCI等. 原语背后是系统级别的软件,或者芯片直接提供的服务. 软件依赖系统原语的时候,不需要运行库支持. 只需要能够按照特定的方式呼叫服务即可.原语从系统设计以来,变化很慢,一般都是增量变化,软件可以高度依赖原语.并且系统提高的服务质量都非常高. 举例说明,win32api 从NT4 到win7,只是少量的api增加,几乎没有变化.这就是windows系统提供的服务.posix 已经快20年不变了

库: 是由逻辑段代码和数据定义组成的文件集合. 类似MFC, STL,Boost, Swing, GTK,QT.....等. 库最终服务实现,无法脱离原语. 库可以实现不依赖原语的逻辑段. 有时候, 库只是实现对原语的包装,据说是为了提高开发效率,但是能做到这点的,非常罕见. 还有一种库,是"呼叫"原语的包装或者协议包装,比如JDBC和servlet. 依赖这种东西,取决于后端服务的软件. Java是不可靠的平台,所以用这种语言开发,只能依赖 jdbc和servlet.不应该有其他依赖.

开发: 开发首选对原语进行依赖. 避免对库进行依赖,除非库本身能够提高开发,测试效率. 对于java这种被阉割的语言, 只有在所有的服务,比如数据服务都委托第三方的时候,才可以选择.类似客户运用,必须禁止以swing 这样的东西进行开发,因为它在呼叫系统原语的功能非常弱. GTK, QT也要尽可能避免,除非有清晰的对于Unix平台的需求. MFC, STL, Boost这种库, 除非在legacy系统当中,否则也应该禁止使用,他们的设计,以及质量,都太糟糕了,这些东西比较适合喜欢浪费生命在电脑前面,做不出玩意,抱怨社会的人.

案例:

windows 和unix都分别提供了原语级别的队列服务,但是如果选择java, 就无法使用这些服务.所以OS世界就诞生了很多如activemq这样的垃圾软件,又大又糟糕. 如果使用原语,分别都只需要很少几行代码就能实现异步队列服务,前提是,使用能够呼叫系统的语言,比如C#/win, php/unix.

Delphi 能成为开发win之王,很大程度就是对原语能完整的呼叫,并且提供成套控件. 软件又小又快. Java则正好相反.

以上是面临市场竞争的时候,务必遵循的原则.否则,开发的投入都要打水漂.

之所以说 OS软件大多都是垃圾, 因为大多无法提供原语级别服务,或者这个服务质量糟糕.很多都是原语的"极其糟糕的"包装,冠之以 "面相对象"或者其他"热门" 的"高手"术语".

 

 

举报
宏哥
发帖于6年前 24回/5K+阅
共有24个评论 最后回答: 5年前

不做平台化的开发,就看不清你这些道理。国内能安心做平台化开发的不多。更多是从功能点看业务。认为什么什么需求好,上线就有多少多少用户量。结果不被TX,我都觉得可惜。

 

引用来自“中山野鬼”的答案

不做平台化的开发,就看不清你这些道理。国内能安心做平台化开发的不多。更多是从功能点看业务。认为什么什么需求好,上线就有多少多少用户量。结果不被TX,我都觉得可惜。

 

但是这些领域,其实并不是高附加值领域,但是暴露在公众视野. 平台化的开发,利润很高.

不过,赚钱的人都低调,搞SNS的,都吹到天上去.

呵呵所以现在选择开发技术,喜欢“utility”而非“framework”类型的。前者给你很多实用的螺丝刀起子等,可以用也可以不用;后者把你锁在笼子里,失去自由

一家之言,有点狂妄

楼主在文中反复说XX是垃圾,我觉得你写的代码未必能有别人的水平。。。

引用来自“gzwxn”的答案

一家之言,有点狂妄

楼主在文中反复说XX是垃圾,我觉得你写的代码未必能有别人的水平。。。

瞧你歪头歪脑那样. 

相由心生啊!

--- 共有 4 条评论 ---
皮总同意宏哥 6年前 回复
gzwxn看你自负那样子,真把自己当Linus、Stallman了,唉 6年前 回复
gzwxn呵呵,开始人身攻击了? 6年前 回复
laosong进来膜拜大神,不解释 6年前 回复

对于一直使用boost的人……我后背深深的中箭了……

确实如果能直接理解底层,那绕过库,直接控制底层实现当然效率是最好的……

但库,本意就在于抽象底层,以相对统一的接口实现功能服务……

对于win的开发者,以及熟读linux源码的,绝对有这功底,原语实现一系列服务功能,但我这个凡乎俗子还是面对自己的现实……先由抽象过的库入手吧,深入底层,需要耐心,时间,功力……

看了这篇文章,感觉楼主没有做过什么真正的项目,所有的东东都自己写,要么就是在写驱动(没有啥第三方库),要么就是这个项目太小了。

--引用

Delphi 能成为开发win之王,很大程度就是对原语能完整的呼叫,并且提供成套控件.

其实就拿楼主举的delphi来说,主要原因是第二个原因,提供成套控件,而且楼主有个地方没说到,就是易于使用的控件。对winapi能完整的调用,这不是主要优点。

然后楼主前面刚说到:开发首选对原语进行依赖. 避免对库进行依赖,除非库本身能够提高开发,测试效率. 对于java这种被阉割的语言

后面又说delphi多好,我不太懂了,用delphi开发难道不是依赖于vcl吗?这跟依赖原语有啥区别。

 

最后,别用一些看起来高深的词来忽悠人。别举一些前后矛盾的例子(有些估计自己也不懂的例子)。

 

顶部