说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

细数那些 NeXT 留给 OS X 的遗产

HTML文档下载 WORD文档下载 PDF文档下载
上世纪90年代,Apple试图将其1984年为Macintosh老机器编写的Mac OS更加现代化。如果Apple试图独自完成该系统的研发将会是危险的,但结果是Apple回购了Steve Jobs的NeXT,并使用NeXTSTEP操作系统作为新一代Mac操作系统的原型。

Apple收购NeXT是在1996年12月20日,目的在于后者的面向对象开发技术以及操作系统开发经验。作为交易的一部分,Jobs重返Apple,最终让他再度成为Apple CEO并将其塑造为消费电子界的巨头。16年后,依然有很多由NeXT开发或者支持的技术残留在OS X和iOS里。下面我们就来聊聊这些为Apple带来核心竞争力的技术。

UNIX


我们咨询了几位熟悉NeXTSTEP和OS X的开发者,他们一致认为NeXTSTEP之所以能为OS X和iOS带来辉煌,是因为它扎根于UNIX操作系统。所有窗口、图标、滚动条以及按钮的巧妙设计都离不开在坚若磐石的UNIX操作系统。

1969年,Bell实验室的Ken Thompson试图为PDP-7小型机开发了一款操作系统,这就是UNIX的最初构想。它的开发贯穿了79年代早期,也导致了C语言的诞生,后者的创始人正是Ken Thompson的同事Dennis Ritchie。UNIX的核心任务是成为当时大型机上的操作系统,同时还需要为开发者提供方便的控制台编程工具。

无论是桌面端的Mac还是口袋中的iPhone,都是基于这同样的操作系统。Mac OS以及iOS基于UNIX的开发为其带来了很多好处,包括内存保护机制、多任务,以及基于守护进程的服务。

老一代程序员们可能记得Mac OS最初的样子,那时一个有问题的Photoshop插件就可能让整个系统崩溃,或者会在你翻看菜单时尖叫着死机了。随着内存保护机制的引入,大部分OS X中应用崩溃都不会引起整个机器的问题了。克敌机先的多任务机制则保证,即使某个进程过多地占用系统资源,操作系统依然可以处理其它任务。

这种多任务机制同样保证基于UNIX的操作系统中守护进程、小程序可以在后台持续运行。守护进程会等等让它活跃的命令,它们会处理大多数后台任务,比如在Mac上连接网络中的打印机,或者在iPhone上玩Words With Friends同时播放音乐。

此外,因为OS X完全兼容POSIX——所有UINX操作系统所遵循的一组标准,所以将自由、开源的软件、工具移植过来非常简单。比如非常流行的FFmpeg音/视频解码器最初就是为Linux而开发,按同样成为了OS X上某些视频应用的解码器,比如Handbrake。

Objective-C


Objective-C是NeXTSTEP操作系统软件开发所使用的编程语言,现在它依然是OS X和iOS上默认的编程语言。它是C语言的超集,也是一门面向对象语言,su你可以在一个程序中同时使用Objective-C的面向对象功能和函数式的C语言代码。

Steve Jobs是面向对象语言的狂热拥护者,所以他为NeXTSTEP提供的开发工具中也保留了这些痕迹。在一个高级、面向对象编程中使用中对象有很多好处和特性,开发者可以自由地混合、匹配这些对象,或者在多个对象间传递信息,最终完成特定的任务。有了面向对象,开发者不再需要了解底层对象的代码,只需要知道该对象接收、返回的信息。

然而Objective-C的反对者批评它太过冗长的、类似Smalltalk(Apple一直致力于提升该语言,为其增加新功能,比如点语法、块以及自动引用计数)的语法。通过使用Clang和LLVM取代传统C语言编译器gcc,Apple显著提升了编译效果。下面是一段简单的Objective-C代码:

  1. // "Hello World" program example 
  2. // adapted from http://cupsofcocoa.com/ 
  3. // by Rob @tolar Haining 
  4.   
  5. #import <Foundation/Foundation.h> 
  6.   
  7. int main(int argc, char *argv[]){ 
  8.    @autoreleasepool { 
  9.       NSDate *now = [NSDate date]; 
  10.       NSLog (@"Hello, World! The current date is: %@", now); 
  11.    } 
  12.    return 0; 

在1995年的一次采访中Jobs(当时还在NeXT)提到,面向对象开发将会彻底改变20、30年前沿用至今的软件开发模式。我们采访的开发者对这句谶言都表示认同。

“Objective-C直接影响了Java和C#,乃至所有开发者的编程方式,即使他们并没有在NeXT系统平台上编程”,Wil Shioley如是说,“我们见证了万维网在NeXTSTEP上的发明,这不是巧合,只因为它是最理想的编程机器。”

Shipley同时提到,某些我们现在仍在OS X平台上使用的应用,都是受了NeXT平台原生软件的启发,包括Numbers(对应Parasheet)、Keynote(对应Concurrence)、Pages以及OmniGraffle(对应 Diagram!)。

AppKit框架


为了适应Objective-C语言,NeXT开发了一系列预构建的对象,开发者可以直接拿来使用。其中很多对象都被集成在了AppKit框架中,后来被Apple中改为CoCoa(OS X上)和Cocoa Touch(iOS上)。这些框架帮助消除了开发中不必要的代码重复编写,让开发者更关注应用的核心功能和实用性。

Cocoa以及Cocoa Touch框架为大多数现代软件提供了基本的构建模块和功能,其中很多都继承自NeXTSTEP,比如NSArray这个依然以NS为前缀的类。

“我一直相信,只需要给程序员一点鼓励,就能收获意想不到的回报,”Shipley 解释道,“如果当时(2008年)没有SDK,iPhone能发展到今天这个地步吗?只能算个iPod罢了——也许能卖的很好,但不可能给我们的生活带来如此巨大的变革。”

开发者Mike Lee介绍了OS X和iOS UNIX底层、Objective-C以及Cocoa框架之间的关系:

计算机是UNIX,C是它的语言,Objective-C是面向人类的语言[变形体],Smalltalk由C实现。AppKit及Cocoa家族帮助我们用和人类交流的方式和机器沟通。我们(开发者)则是普通人和机器间的外交官。

Interface Builder


Interface Builder是从NeXTSTEP开就存活到现在的一个重要的开发者工具。通过它,开发者可以直接向视图中拖入控件、创建应用的用户界面。需要按钮来触发某个功能?只需要拖一个就行了。需要一个下拉列表提供多个单选项?点击或者拖动就能实现。

Interface Builder随Project Builder一起发布,这两个应用为开发者,甚至为初学者提供了所有GUI应用开发需要的一切。

更棒的在于它的价格,开发者Gus Mueller告诉Ars:“这个昂贵的IDE可以免费地供任何人使用!”

很多年来,Interface Builder都是一个独立的应用,无论对于NeXTSTEP还是OS X,Apple最终将其与改进版的Project Builder集成在了一起,也就是现在的Xcode。除了分析和调试工具,Apple还赠送了Mac、iPhone、iPad开发所需要的一切。

图像显示与PostScript


并不是说,被OS X和iOS继承的NeXT技术都是专为开发者设计的,Display PostScript就是一个明显面向用户——虽然如今变化颇大——的技术。

在90年代,拥有图形用户界面的计算机,包括Mac Os,都使用像素网格来绘制屏幕内容,每一个窗口、按钮、文本……等等,在一个一对一的映射图中,每次仅绘制一个像素。

然而NeXTSTEP使用了Display PostScript——Adobe为激光打印机设计的页面描述语言变种——来代替。这意味着不论你使用的是何种显卡或者显示器,文字和矢量元素能尽可能地清晰,实际绘制的字体及其它(矢量)元素最终在显示器前都是独立于显卡的。

OS X使用了与iOS不同的技术,叫做Quartz,但仍然基于相似的理念。Quartz使用PDF页面描述语言代替PostScript。为了生成清晰的窗口和文本,OS X操作系统提供给用户原生的PDF文件查看、编辑功能。

bundle


另外,OS X和iOS都使用了一个叫bundle的概念,也是来自NeXTSTEP。bundle类似于一个文件夹,存放着某个特殊应用或文件类型所需要的文件,从系统底层来看这不过是一个存放文件(或者文件夹)的文件夹,但在用户眼里它是一个带图标的文件。

最常见的就是应用和iWork文件了。应用bundle包括可执行代码文件,以及图形资源、图标、配置文件等等。Keynote演示文档一般会包括一个二进制的布局文件,除此之外还有嵌入式图形(embedded graphic)、字体,以及在Keynote中重新打开或者修改所需要的模板元素。(你可以使用 control+点击 来浏览bundle内部。)

列式浏览


从NeXTSTEP到OS X,依然保留了一个非常重要的图形界面元素,那就是列表式文件浏览器,可以说是一个非常经典的设计。如下图:

服务


最后一个NeXT开发并面向用户的功能就是服务,常常被人所忽略。应用和系统组件会告诉OS X他们能执行某些行为或者处理某些数据元素,比如文本、图片等等。你在选择了这些数据后,点击App>Service就可以看到能对这些数据进行哪些操作。

例如,你在TextEdit里选择了某些文本,可能会看到这些服务:

  • looking up the text in Dictionary;
  • tweeting the text with Twitter;
  • creating a new e-mail with the selected text in the body;
  • using OS X's text-to-speech capabilities to convert the text into a spoken word track in iTunes。

有的服务能通过上下文菜单执行,而有的服务甚至可以通过快捷键或者多点触摸执行。比如:Cmd+Shift+3截屏,或者使用三个手指点击单词来使用字典。

回头看,向前走


其中很多技术都是在上世纪80年代末期或者90年代初开发的(UNIX也不过是1969年开发的!)。即使在Apple收购NeXT 16年后的今天,这些技术仍然伴随这OS X,甚至依然是OS X乃至Apple的核心竞争力。

原文链接:ars technica

VB如何在函数中传递数量不定的参数? VB使用 kb_event 函数模拟键盘操作 VB使用API获取颜色 VB使用标签控件调出浏览器 VB使用调用外部程序函数实现API函数高级功能 未公开API函数揭秘——通用对话框-VB资料 显示文件属性对话框-VB资料 VB用 API 打开打印对话框 VB用API函数改进ListView控件的显示效果 VB用API函数控制光驱的开关 VB用注册表保存数据(VB函数篇) 有关Tray系统盒的VB API函数 在VB中调用API函数动态改变及恢复屏幕设置 在VB中控制Ctrl+Del+Alt键 在VB中使用API函数 (之二) 在VB中使用API函数 (之三) 在VB中使用API函数 (之四) 在VB中使用API函数 (之五) 在VB中使用API函数 (之一) 在VB中用API实现多媒体 VB怎样用VB在应用程序中调用API VB怎样在DELPHI中使用API函数 指定文件夹-VB资料 VB5中注册控件三法 Bug:维护 Internet Transfer Control 之 Username 及 Pass VB对低层硬件访问控制 HitTest的妙用 -VB资料 ListBox项的控制-VB资料 VB 6.0中类聚集关系的实现 VB6编程中如何获取硬盘分区信息 VB的坐标系统综述 怎样重新组合字符串 第二次提问 着急呀 如何读取空字段不出错 愚蠢的问题——请各位大哥指导 数据库版本冲突问题,各位不防进来看看啊! 查找一个区间的记录 有没有在vc6.0下用vc.net控件的方法呀? 怎么做细线呀? 请问各位高手,怎么叛断面面关闭!!! 很多的程序员平朋友们对档案和户口问题都不是很清楚吗,我就我所知的来说说,希望对大家有用 【delphi三(两)层结构如何调用oracle中的存储过程(参数含游标)】 有DX能翻译下面的代码吗? access中sql语句 insert into table1(id) values(1);insert into table1(id) values(1);通不过?? 文件拷贝 请问华康字体库,哪儿有下载? 关于sametime无法登录的问题! 精彩不容错过 怎么样上传文件 请问,如果利用pc机,实现和璇铃声于彩色图片的下载,应该怎么做? **sql语句的问题** 求救!!!!!熟悉数据库加密的高手请进!!! DELPHI为什么会自动退出? 帮帮忙,新手求问 用java怎样判断一个Email地址是真实存在的?(救命呀!~~~>_<~~~) C++BUILDER调用VC++DLL内函数问题? dephi+oracle 从TMemo存读varchar2类型数据(一篇文章) 数据超过256个字节 其中有换行符 在solaris中如何用命令行改变IP地址,并且永久生效。 mysql中的备注字段应该是什么英文,我英文不好。我只知道int, char. 怎么样知道在另外一台机器上运行的程序是否死掉了,另外一台机器是否死机? 请问怎样修改、删除、追加XML中子项的值? showdialog 打开的 form 怎么返回值? 我是学计算机的,都大四了,外语四级还没有过.不知道对以后找工作有多大影响? 在lotus中一般打印用什么方法??给分!!!急!!! 建议post时增加贴图功能. 除了吹牛,还会干什么? 执行UPDATE语句时候,执行条件变化时候速度有很大不同 给大家一个免费的电子邮箱 如何将一个xml中的Element或Node添加到另一个xml中?100相送!!! 高手进来。我不知道为什么经常出在数据库不能更新的问题。?? 精彩不容错过 Runtime类使用时遇到一个问题,请高手指点,先谢了! 需要UNIX网络编程(第2版 第一卷)的电子版本的书籍! 怎样让builder.parse()忽略DTD找不到的错误继续分析? 各位大侠,请帮忙,jsp页面出现空白,怎样解决? 在JBuilder中有多个Frame如何指定其中(任意一个为首先启动的Frame) 如果有入口函数main,系统就认为是PUBLIC 类?? pb+db2,导出excel表时要对表的某个字段转换时到80条左右就为空白(共2000条) 怎样把数据库中的各个表到成文件形式呢? 请如何用命令解开由jar生成的压缩文件? 水晶报表打印问题(在线等)! 我想让JFileChooser的savedialogue在按了approve后仍能保持一会,怎么办? 王之不王,是折枝之类也.――《孟子·梁惠王上》 这句话是什么意义? 恐怖主义是怎样产生的 恐怖主义是怎么产生的?中国有没有恐怖主义?用简单的话回答 为何会产生恐怖主义 这个17题怎么做 第17题怎么做呢 雨后彩虹是由于光的什么产生?2009年中山小学科技知识竞赛初赛赛试卷 赵襄主学御 指出下列句式 宇宙为什么要创造出星球 创造出生命?有什么意义 而且还 循环的那么好 为什么要有生命?在一个宇宙中为什么要有生命,难道说有生命比无生命更“好”吗? 17题咋做? 韩国要美回复是否窃听韩总统报告显示中国顶尖富豪财富激增 168告别“南斯拉夫”埃前少校疑刺杀内政部长印东北部连环爆炸5人亡安倍再提推进探讨行使集体自卫权《世界新闻报》窃听案今天开审16名沙特女性因驾车挨罚安倍:为世界贡献途径之一是在亚洲抗衡核潜艇官兵多在出海前写好遗书 返航后李娜“最佳赛季”绽放第二春 再夺大满印刷厂江苏省老年公寓你会经常上网淘吃的吗南京机械厂谷里交警集中“体检”校车“猪牛市”离奇逆转十年首遇南京京科南京国晋塑胶制品季节更替,家电应及时保养机械厂小偷摔伤仍抱电脑将错就错心不设防非你莫属叛逆一朵鲜花抢先采痴将军绛梅鸳鸯泪非君不嫁七月七日晴等待花季华严寺旅游野鸭湖湿地公园旅游扎基寺旅游博鳌论坛高尔夫球会旅游印象海南岛旅游国立台湾文学馆旅游剑潭公园旅游通庆里旅游天华景戏院旅游江边旅游沈阳新乐遗址博物馆旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘