Pharo by Example - 第二章 Pharo入门

标签: Pharo ; Smalltalk ;


在本章中,您将学习如何启动Pharo, 组成Pharo系统的各个文件以及它们所扮演的角色,了解与系统交互的不同方式,并了解一些基本的工具。您还将学习如何定义新方法、创建对象并向其发送消息。本章介绍(1)如何安装Pharo和(2)如何启动Pharo。

2.1 安装Pharo

Pharo不需要在您的系统中安装任何东西,因为它完全能够独立运行。正如稍后将要解释的,Pharo由一个虚拟机(VM)、一个映像、一个change文件和一个源文件组成。有许多不同的方法可以在您的系统上安装和设置这些工具。

Pharo Launcher

Pharo Launcher是一个跨平台的应用程序,可以方便地管理多个Pharo映像和VM。它可以从 http://pharo.org/download 免费下载, 单击您的操作系统的按钮下载适当的Pharo启动器;它包含运行Pharo所需的一切。

Zeroconf脚本

如果您更喜欢使用操作系统的命令行界面工作的话,https://get.pharo.org/ 提供了一组脚本来下载特定版本的Pharo。这对于自动安装Pharo非常方便。

要下载最新的Pharo 9.0完整系统,请使用下面的命令:

wget -O- get.pharo.org/90+vm | bash

接下来,您可以执行以下命令来启动映像:

./pharo-ui Pharo.image

目前,这些脚本只能在MacOS或Linux系统上运行。

2.2 文件组件

Pharo由四个主要组件文件组成。尽管在本书中您不需要直接与它们打交道,但了解它们各自所扮演的角色是很有用的。

  1. 对于不同的操作系统, 虚拟机(VM) 是唯一不同的组件。VM是执行引擎(类似于Java虚拟机)。当用户编译一段代码,将会对应生成一段Pharo字节码,虚拟机将字节码转换成机器码,再执行它。Pharo附带Cog VM,这是一款速度非常快的jit VM。

该VM可执行文件命名为:

  • 在Windows平台上为 Pharo.exe
  • 在Linux平台上为pharo
  • 在macOS平台上为Pharo(位于名为Pharo.app的软件包内)

下面列出的其他组件可以跨操作系统移植,并且可以在任意适当的虚拟机上复制和运行。

  1. 映像文件(.image) 提供了正在运行的Pharo系统的快照。它是一种跨平台格式:一个操作系统上的映像文件可以在其他操作系统上使用, 只要该平台上具有兼容的VM。映像文件中包含了正在运行的系统的所有对象及其在给定时间点的状态,包括所有的类和已编译的方法(因为它们也是对象)。image基本上是一个虚拟对象容器。

该映像文件以发行版命名(因此Pharo 9.0映像为Pharo9.0.image),并且与changes文件同步。

  1. 更改文件(.changes) 保存了对Pharo系统进行的所有改动的日志(比如您在Pharo中编程时所做的更改)。每一个发布都提供了一个以该版本命名的几乎为空的更改文件,例如Pharo9.0.changes。该文件支持每一个方法的历史记录,可用于显示差异或恢复更改。这意味着即使您在崩溃之前没有设法保存映像文件(也许您只是忘记了),您仍然可以从该文件中恢复您的改动。更改文件始终与映像文件结合在一起。它们成对工作。即使Pharo可以在缺失changes文件的情况下运行,但是,如果你没有用git保存它,你可能会丢失所有的工作成果。注意不要把事情搞砸了。

  2. 源文件(.sources) 包含Pharo不经常改动的部分的源代码。这个文件很重要,因为映像文件格式只存储对象,包括已编译的方法及其字节码,而不是它们的源代码。通常,每个主要版本的Pharo都会生成一次新的源码文件。对于Pharo 9.0,该文件被命名为PharoV90.sources

Image/Changes 对

Pharo发行版提供的.image.changes文件是适合您的需求的真实环境的起点。当您使用Pharo时,这些文件会被修改,因此您需要确保它们是可写的。阻止你的反病毒软件扫描这些文件也是一个好主意。.image.changes文件紧密相连,应该始终保持在一起,并具有匹配的基本文件名。切勿使用文本编辑器直接编辑它们,因为.image保存您的活动对象运行时内存映像,该内存映像与源代码的.changes文件相同。最好为下载下来的.image.changes文件保留备份副本,这样您就可以始终从全新的映像开始并重新加载代码。然而,备份代码最有效的方法是将Iceberg与git(一个版本控制系统)结合使用,它提供了一种简单且强大的方式来备份和跟踪您的更改。

一般设置

上面四个主要的组件文件可以放在同一个目录中,但是通常的做法是将虚拟机和源文件放在一个单独的目录中,所有人都可以在该目录中只读访问它们。

适合你的工作风格取决于你所使用的操作系统。如果你刚开始使用Pharo,最好使用Pharo Launcher,因为它会为你管理一切。

2.3 通过Pharo Launcher启动Pharo

Pharo Launcher 是一个帮助您下载和管理 Pharo 映像的工具。它对于获取新版本的 Pharo(以及包含重要错误修复的现有版本的更新)非常有用。它还允许您访问预先加载了特定库的映像,这使得使用这些工具变得非常容易,而不需要手动安装和配置它们。

Pharo Launcher 可以在 https://pharo.org/download 上找到,也可以在安装说明和下载链接中找到,具体取决于你的平台。

安装Pharo Launcher并打开它后(就像你对任何Pharo映像所做的那样),你应该会得到一个类似于图2-1的图形用户界面。在这里,我们点击左上角的New图标,从服务器下载一个新的Pharo映像。

Back列列出了驻留在本地计算机上(通常位于共享系统文件夹中)的映像。您可以直接启动任意本地映像(通过双击,或通过选择它并按下Launch按钮)。右键点击弹出的上下文菜单提供了几个有用的功能,如复制和重命名您的映像,以及在文件系统上定位它们。

除了处理您下载的映像之外,您还可以在Pharo Launcher中使用您自己的本地映像。要做到这一点,只需使用启动器导入您的.image及其关联的.changes文件。

2.4 通过命令行启动Pharo

如果您使用的是独立版本,根据操作系统的不同,有不同的操作:将.image文件拖到虚拟机的图标上,或双击.image文件,或在命令行中键入虚拟机的名称,后面跟上.image文件的路径。

  • macOS, 下载并解压后,双击Pharo9.0.app包。
  • Linux, 从解压缩后的Pharo文件夹中双击(或从命令行调用)可执行Bash脚本pharo
  • Windows, 进入解压缩后的Pharo文件夹,然后双击Pharo.exe

总的来说,pharo会尝试“做正确的事情”。如果您双击该VM,它会在默认位置查找映像文件。如果您双击一个.image文件,它会尝试找到最近的VM来启动它。

如果您的计算机上安装了多个VM,则操作系统可能无法猜测正确的VM。在这种情况下,通过将映像文件拖放到VM上或在命令行上指定映像(请参阅下一节),明确指定要启动的映像更为安全。

从命令行启动Pharo的一般模式是:

<Pharo executable> <path to Pharo image>

Linux命令行

假设您位于Zeroconf脚本下载所需文件的目录中:

./pharo Pharo.image

macOS命令行

同样,假设您使用Zeroconf下载了Pharo:

./pharo Pharo.image

Windows命令行

正如我们所提到的,Zeroconf不能在Windows系统上运行,因此您必须自己下载正确的VM和镜像文件。但运行它也应该同样简单:

Pharo.exe Pharo.image

2.5 保存、退出并重启Pharo会话

您可以通过关闭Pharo窗口随时退出Pharo,就像您对任何其他应用程序窗口所做的那样。此外,您还可以使用菜单栏或World菜单,然后选择Save and quitQuit

在任何一种情况下,Pharo都会显示一个提示,询问您是否保存映像。如果你确实保存了你的映像并重新打开它,你会看到一切都和你离开时一样:正在运行的程序,已经打开的窗口,窗口的位置。这是因为映像文件存储了所有对象(编辑的文本、添加的方法、窗口位置……因为它们都是对象),Pharo已经加载到你的内存中,所以在退出时不会丢失任何东西。

当您第一次启动Pharo时,Pharo虚拟机会加载您指定的映像文件。该文件包含大量对象的快照,包括大量预先存在的代码和编程工具(您可以猜到,所有这些也都是对象)。当您使用Pharo时,您将向这些对象发送消息,您将创建新对象(通过向对象发送消息!),其中一些对象将“死亡”,它们的内存将被回收(垃圾回收)。

当您退出Pharo时,通常会保存包含所有对象的快照。如果正常保存,您将用新的快照覆盖旧的映像文件。或者,您也可以用新名称保存映像。

保存映像时,.image文件将使用正在运行的Pharo系统的快照进行更新。还将更新.changes文件:它将记录自上次更新以来对映像所做的所有更改。正如我们在上面看到的,.changes文件对于从错误中恢复或重放丢失的更改非常有用。稍后会有更多关于这个的信息!

映像文件似乎应该是存储和管理软件项目的关键机制,但实际上并非如此。有更好的工具来管理代码和共享团队开发的软件。映像是有用的,但你应该对创建和丢弃映像习以为常。Iceberg等版本控制工具为我们提供了更好的代码管理和共享方式。此外,如果需要持久化对象,可以使用Fuel(快速对象二进制序列化程序)或Ston(文本对象序列化程序)等包,甚至可以使用数据库。

2.6 对于急性子

有时候,阅读关于一个像Pharo一样功能丰富的系统的长篇大论可能会很无聊。如果你已经在你的电脑上安装了一个可以正常工作的Pharo系统,并且你对所有东西的工作原理都略知一二,那么你可能想要通过使用ProfStef来学习基础知识,然后跳到下一章:定义一个简单计数器及其关联测试的教程。你也可以在 http://mooc.pharo.org 上观看相应的视频。

要启动ProfStef,请在Playground中输入以下表达式:

ProfStef go

然后通过Do it来执行它,如图2-3所示

如果你不了解所有这些操作的意义,请不要担心:很快就会理解的。继续读下去..

这个表达式将触发ProfStef教程(如图2-4所示),这是一个很好的起点,可以开始感受Pharo语法。

祝贺你!您刚刚发送了您的第一条消息!Pharo基于向对象发送消息的概念。Pharo的对象就像你的士兵,只等你给他们发送他们能理解的信息。稍后我们将确切了解对象是如何理解消息的。

2.7 本章小结

  • 可以使用Pharo Launcher在您的计算机上管理Pharo系统。或者,您可以使用Zeroconf脚本下载Pharo。
  • 一个正在运行的Pharo系统由一个虚拟机、一个源文件(.sources)、一个映像文件(.image)和一个更改文件(.changes)组成。只有最后两个会发生变化,因为它们记录了您正在运行的系统的最新快照。
  • 当您打开Pharo映像时,您会发现自己处于与上次保存该映像时完全相同的状态(即,具有完全相同的运行对象)。