Pharo得益于优雅的设计,可以相对简单地实现许多高级编程技术。以下是其中一些:
在Pharo中,可以消除程序和IDE之间的边界。这意味着您可以在调试期间直接使用代码来直观地表示数据结构,并且可以轻松地修改内置工具以满足您的需要,等等。
在断点上,使用调试器中的自定义电路区域可视化表示形式,对原始调试器内的一段代码运行另一个调试器,编辑调试器内的电路并继续单步执行。
法罗把一切都暴露给程序员。可以相对于对象封装规则检查和改变系统中的每个对象。
在某个窗口实例上打开检查器,查找所有引用它的对象并调查它们。
在法罗,一切都是对象。这种在系统和语言设计上的纯净和统一,使法罗的学习变得干净和舒适。
True是名为True的类的实例,该类具有处理闭包的控制结构的方法(如ifTrue。
Pharo使用文件来序列化源代码,但是默认情况下,它不使用文件来编辑它们。它提供了浏览和修改类、方法、类注释和其他程序实体的工具,而不是文本编辑器。因此,Pharo对它们之间的关系有了更好的理解,并允许更轻松地导航和重构。
Pharo中具有非本地返回的闭包允许优雅地实现控制结构,而不需要在语言本身中定义它们。Pharo是一种简单的元语言,其中程序员拥有编写自定义的可读域特定语言所需的所有功能。
展示了消息重复的实现和用法。包含具有非本地返回的闭包的方法(映射)。
在Pharo中,您可以轻松地将一个对象替换为另一个对象。正在运行的程序中对旧对象的所有引用都将替换为对新对象的引用。
检查桌面上的所有图形元素,找到徽标,从用户选择的显示区域创建新图片,并将徽标对象的标识更改为此新图片*。
Pharo提供了高级异常系统,该系统可以从引发的异常中恢复,并提供替代结果,这样您的程序就可以从故障中恢复。
您可以通过多种方式(文本形式、图形表示)可视化您的对象,并使用它来检查正在运行的程序的状态。调试器可以使用这些可视化效果来帮助您理解。
法罗可以在运行过程中进化。它就像一个有机体。您可以执行诸如添加或删除已有实例的类的实例变量之类的操作。所有这些活生生的实例都将得到适当的修改。
查看某个类的随机实例,并向该类添加新变量
您可以更改现有类的定义,包括更改其超类。对于某些选定的对象,您只需分配一个不同的类并执行类似的操作即可。这些功能对于系统在不需要重新启动的情况下发展的能力至关重要。
计算Point类的所有活实例,用其原始变量的一半创建一个新类,并在图形系统运行时将其用作Point的新超类。
Pharo使用速度非常快的虚拟机,具有许多独特功能,可在Windows、MacOS和Linux(包括ARM处理器)上运行。
垃圾回收器源代码的一部分,用于处理具有稳定内存位置的固定对象。
为了更自然地理解和调试虚拟机,它主要是用Pharo编写的。
在编写虚拟机代码期间,您可以使用Pharo IDE的所有优点。然后将源文件翻译成C。
您可以轻松地检查、修改或序列化调用堆栈。这使得调试工具的构建变得容易得多。
调用堆栈操作允许非常轻松地实现延续,而不需要直接支持虚拟机。这些扩展对于Web开发任务和回溯实现非常方便。
使用Pharo反射,您可以轻松地枚举特定类的所有现有实例并调查对它们的引用。它有助于检测内存泄漏。这是一项基本的法罗反射率功能。
查找包含减号“Pharo Has”的所有现有字符串,并根据其大小将其可视化为树形映射。
方法是对象,对象可以充当方法。在这种情况下,调用方法意味着对象接收到一条特殊消息。它可以例如在覆盖测试期间使用。您用这样的代理对象替换所有类方法,当被调用时,这些对象用原始方法替换它们自己,并将此信息写入日志。
Pharo类使用单一继承,但它们可以使用有状态特征与其他类共享行为。
树表使用有状态特性,该特性通过具有上下文菜单的能力来扩展其行为。
Pharo包括自己的进程管理,即使在不支持并发编程的平台上也可以使用。
方法的抽象语法树可以通过元链接进行扩展,这些元链接允许在特定AST节点之前、之后或代替特定AST节点执行附加操作。这允许断点、覆盖率测试、记住旧值的变量等功能的干净一流实现。
在AST节点上安装断点。具有断点的方法的示例字节码。
实例变量也由对象描述。例如,这使得实现更智能的实例变量变得容易,比如保持两个对象之间双向托管引用的变量。然后,简单的赋值也会自动更新参照的另一侧。
通用语言元模型的一部分,用于定义包与其所有者之间的多对一关系。当您指定具有简单赋值的类包时,该类将自动添加到包的子实体集合中。
对象有类,类也有类,也就是元类。这些元类也有一个类,并且Pharo允许使用自定义类。它允许将语言特性(如特征)实现为独立库,而无需在虚拟机中提供任何直接支持。
Pharo在用JavaScript编写的虚拟机中的Web浏览器中运行。用户界面是完全相同的。
编译器是用Pharo编写的,您可以像修改系统中的任何其他内容一样修改它。您可以对某些类使用完全不同的编译器。
为了提高工作效率,铁匠会为他们的任务创建定制工具。法罗有着同样的理念。它允许您创建自然专用的工具,以便更好地了解您的问题,从而支持您进行更快的开发。
编写一个简单的小工具,显示Pharo类集合内的实际代码和自动格式化代码之间的差异。
系统中的所有对象都可以同时存储在一个名为image的独立于平台的文件中。因此,例如,您可以在调试期间保存程序的完整状态,并将其还原以尝试找到不同的执行路径或替代解决方案。
安装断点,运行应用程序,并在调试器出现时保存系统状态。在调试器中执行一些步骤,然后关闭Pharo。恢复保存的状态并重复该步骤。
Pharo拥有超出标准文件级别的高级集成Git支持。您可以按特定方法的粒度合并分支、浏览它们的历史记录、直接从IDE创建拉请求,等等。
所有对象,包括类或运行上下文,都可以序列化为一个文件。例如,您可以将调试器的状态与当前堆栈的内容一起存储,并将其附加到问题报告。
Pharo可以使用分数、刻度小数、大整数等来处理数字,而不会损失算术精度。
Pharo包含一个FFI接口,它使得创建到C库的绑定变得非常简单。
能够轻松创建代理对象-处理所有消息和/或将所有消息重新发送到另一个对象的对象,对于面向对象的语言来说是必不可少的。
在Pharo中,程序员几乎有绝对的自由来定制系统和使用许多潜在的危险功能。另一方面,大多数程序员都会慎重地使用它们,因为默认情况下,Pharo提供了一个强大的标准库和工具,这些库和工具决定了如何以正确的方式使用系统。它不是让语言变得严格,而是引导程序员做正确的事情。
Pharo是以非病毒式开源麻省理工学院许可证分发的。主Pharo存储库托管在GitHub上。