非常喜欢sublime text这个软件,这个软件小巧快速,用来的很顺手,在机器配置不是那么好的情况下,也能完美的运行。我试过在在winxp的古董电脑上运行,照样能顺畅的运行,这个很了不起,说明作者对软件的性能花了很大的心思,不像现在其他的程序员,写的软件完全不考虑硬件的情况,不会去为客户节省硬件资源。作为一个老程序员,这个是很难接受的。
所以我比较好奇,sublime是用什么语言编写的。
下面是我找到到网上资料。
作者原话
https://news.ycombinator.com/item?id=2822114
英文原文:
jskinner on July 29, 2011 | parent | context | favorite | on: Sublime Text 2 Build 2091
I keep meaning to write a blog post with some details on this, but as with many things, I usually end up coding instead.
Sublime Text 2 is almost entirely C++ (with a smattering of Objective C for Cocoa and Python for plugins). Coding is generally fairly straight forward: code on one platform (mostly Linux at the moment, but I switch around frequently), and then make sure it still compiles elsewhere.
Sublime Text 2 itself uses a custom UI toolkit. There are a lot of apps where this may not make sense, but it's not such an unreasonable choice for Sublime Text, where I always knew that a lot of the UI controls were going to have to be custom no matter the toolkit (e.g., the text control and tab controls). The UI toolkit sits on top of a cross platform abstraction layer, which is more a union of platform functionality rather than lowest common denominator.
中文翻译:
jskinner 于 2011 年 7 月 29 日 | 家长| 上下文| 收藏| 上:Sublime Text 2 Build 2091
我一直想写一篇关于这方面的详细信息的博客文章,但与许多事情一样,我通常最终会改为编码。
Sublime Text 2 几乎完全是 C++(有少量用于 Cocoa 的 Objective C 和用于插件的 Python)。编码通常相当简单:在一个平台上编写代码(目前主要是 Linux,但我经常切换),然后确保它仍然可以在其他地方编译。
Sublime Text 2 本身使用自定义 UI 工具包。有很多应用程序可能没有意义,但对于 Sublime Text 来说,这并不是一个不合理的选择,我一直知道无论工具包如何,很多 UI 控件都必须是自定义的(例如,文本控件和选项卡控件)。UI 工具包位于跨平台抽象层之上,它更像是平台功能的结合,而不是最低公分母。
Sublime text,几乎所有(估计有99%)的代码,都是C++写的;
极少数的部分,用到了Object-C;
关于插件部分,用到了Python;
Object-C 通常写作 Objective-C 或者 Obj-C 或 OC,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充 C 语言的面向对象编程语言。
Object-C 是一种面向对象的语言。而 C 语言是面向过程的语言。
Object-C 是 MAC OSX 和 iOS 开发的基础语言。
优点及缺点
Object-C 是非常“实际”的语言。它使用一个用C写成,很小的运行库,OC写成的程序通常不会比其原始码大很多。
Objective-C 的最初版本并不支持垃圾回收。
Objective-C 不包括命名空间机制(namespace mechanism)。
虽然 Objective-C 是C的母集,但它也不视C的基本型别为第一级的对象。
和C++不同,Objective-C 不支持运算子重载(它不支持 ad-hoc 多型)。
Object-C 仅支持单一父类继承,不支持多重继承。
Python(英语发音:/ˈpaɪθən/美国发音:/ˈpaɪθɑːn/)是一种面向对象的解释型计算机程序设计语言。也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
Python优点
1.简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
2.易学:Python极其容易上手,因为Python有极其简单的说明文档[5] 。
3.速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。
4.免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
5.高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
6.可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
7.解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
8.面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
9.可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
10.可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
11.丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
12.规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。
Python缺点
1.单行语句和命令行输出问题:很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。
2.独特的语法:这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,而这是用肉眼无法分别的。
3.运行速度慢:这里是指与C和C++相比。