从游戏语言到重写解释器
Pike的来路与多人文字冒险游戏有关。瑞典查尔姆斯理工大学的拉尔斯·彭舍为游戏设计了LPC语言,希望它易用而节省内存。弗雷德里克·许比内特接触游戏后开始改进这种语言,形成自己的LPC4方言;它仍服务于游戏,也逐渐被用于其他程序。
LPC4沿用的代码许可证不允许商业获利,限制了它进入新的应用场合。1994年,许比内特开始重写一个相近的解释器,称为µLPC,并得到支持自由软件的Signum Support公司资助。因此,1994年标志的是后来Pike这条实现路线的开端,不是Pike名称已正式使用的年份。
网络服务器带来的开发场所
µLPC达到可用程度后,InformationsVävarna公司将其用于网络服务器。该公司的Spinner服务器此前以LPC4编写。1996年,许比内特加入公司,继续开发µLPC;为了名称易于发音和商业使用,语言改名为Pike。实际应用由此为解释器开发提供了持续的工作环境。
官方历史列出的合作者包括佩尔·赫德博尔、亨里克·格鲁布斯特伦、马丁·谢恩霍尔姆等人。他们除修改语言实现,也增加模块。后来该公司经历更名,发展为Roxen;2002年,林雪平大学的编程环境实验室接过维护责任。这些变化属于后续维护史,与1994年个人启动重写须分别交代。
熟悉的语法与托管的数据
Pike采用与C、C++相近的括号、语句和函数写法,但程序由Pike运行系统编译为字节码并解释执行。开发者可以较快修改和运行源文件,不必为每次小改动手工完成传统C程序的整套编译链接流程。自动内存管理则减轻了应用程序逐项释放对象的工作。
官方手册区分整数、浮点数、字符串,以及数组、映射、对象、函数等数据。数组能够保存多项值,映射把键关联到值;这些结构适合组织文本和网络应用中的资料。赋值时仍须理解共享关系:数组、映射等引用类型的赋值通常产生另一份引用,不会自动复制全部内容。需要独立副本时,程序必须明确提出。
一段程序如何开始
官方入门教程以短程序示范执行入口:int main() { write("Hello world!\n"); return 0; }。保存成hello.pike后,用pike hello.pike调用解释器。main是开始执行的方法,write把字符串送到标准输出,字符串中的反斜杠加n表示换行;return 0把成功状态交回调用程序的环境。
字符串本身还带有高级运算。按手册规则,"red,blue" / ","把文本拆成两个元素的数组;把这个数组与";"相乘,则组合成"red;blue"。这里的除法和乘法符号作用于字符串和数组,承担拆分及连接工作。这样的写法让数据处理直接出现在表达式中,也要求读程序的人结合操作数类型理解符号。这是依据官方文档解释语义的例子,并非首次发行版的功能清单。
发行档案中的演进
官方档案把1994至1996年的µLPC前身材料与Pike正式发行包分开保存,后者可追溯至0.1。档案的意义不只在版本编号:源码、说明和已知问题让使用者能够判断某一实现实际具备什么,避免用后来成熟的手册替最初程序作担保。
例如0.6.72的发行说明明确称其为测试版,记录两遍编译器、父类成员访问,以及进程和线程接口的变化,也列出不同系统上的问题。两遍编译使函数可以引用源码中较后声明的函数和变量,减少预先声明的需要。这些都是后来的具体改进。Pike的早期发展因而可以沿着许可证约束、服务器实践和公开发行三条相互连接的线索理解,而无需把多年完成的功能压缩成一个“诞生时刻”。