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

细数那些 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

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘