明确的语法(Pyret 使用显式end分隔符的原因)意味着开发者可以从电子邮件或 Web 复制和粘贴代码,而不会改变其含义。IDE 会帮助开发者重新缩进代码,无需担心这样做会改变程序的含义。
亮点
注解 (Annotations)
与大多数脚本编程语言不一样,Pyret 支持开箱即用地检查参数上的注解。
Python
def square(n : int) -> int:
return n * n
square("5")
# Error at multiplication:
# Can't multiply sequence by
# non-int of type 'str'
Pyret
fun square(n :: Number) -> Number:
n * n
end
square("5")
# With type checker off:
# The Number annotation was not
# satisfied by the value "5"
# With type checker on:
# Number is incompatible with String
支持长度较长的数字类型
Java
// this is not true
((1 / 3) * 3) == 1
Pyret
# this is true
((1 / 3) * 3) == 1
结构化数据
Pyret 为编写数据定义提供了优雅的机制,而无需开发者具备对类的认知背景,以及语法开销。
Python
class BinTree:
pass
class leaf(BinTree):
def __init__(self):
pass
class node(BinTree):
def __init__(self, v, l, r):
self.v = v
self.l = l
self.r = r
type animal =
| Elephant of string * float
| Tiger of string * float
| Horse of string * int
...
let name_of_animal a =
match a with
| Elephant(name, _)
| Tiger(name, _)
| Horse(name, _) -> name
...
Pyret
data Animal:
| elephant(name, weight)
| tiger(name, stripes)
| horse(name, races-won)
...
end
fun animal-name(a :: Animal):
a.name
end
Racket
(struct elephant (name weight))
(struct tiger (name stripes))
(struct horse (name races-won))
...
(define (animal-name a)
(cond
[(elephant? a) (elephant-name a)]
[(tiger? a) (tiger-name a)]
[(horse? a) (horse-name a)]
...))
Pyret
data Animal:
| elephant(name, weight)
| tiger(name, stripes)
| horse(name, races-won)
...
end
fun animal-name(a :: Animal):
a.name
end
Pyret 编程语言:探索脚本语言和函数式编程的融合
Pyret 是一门基于 JavaScript 的脚本语言,旨在成为编程教育的绝佳选择,同时探索脚本语言和函数式编程的融合。目前 Pyret 正处于积极设计和开发阶段,开发者可以自由使用或对其进行修改。
Pyret 语法介绍
Pyret 具有受 Python 启发的函数、列表和运算符语法,其迭代结构 (Iteration constructs) 的设计为了调用其他语言中的迭代结构。
Pyret 支持简洁、富有表现力、递归的数据声明,支持可选的类型注释,支持增量添加,以满足各种教学风格和课程需求。
Pyret 的测试是编程过程的自然组成部分。函数可以在
where:
子句中结束,该子句为函数提供了单元测试,并且这些断言 (Assertions) 会被动态检查。对于缩进的问题,Pyret 团队认为缩进对于代码的可读性至关重要,但他们不希望通过程序的空格来确定其含义。相反,程序的含义应该决定它的缩进结构。缩进只是另一个上下文敏感的规则。
明确的语法(Pyret 使用显式
end
分隔符的原因)意味着开发者可以从电子邮件或 Web 复制和粘贴代码,而不会改变其含义。IDE 会帮助开发者重新缩进代码,无需担心这样做会改变程序的含义。亮点
注解 (Annotations)
与大多数脚本编程语言不一样,Pyret 支持开箱即用地检查参数上的注解。
Python
Pyret
支持长度较长的数字类型
Java
Pyret
结构化数据
Pyret 为编写数据定义提供了优雅的机制,而无需开发者具备对类的认知背景,以及语法开销。
Python
Pyret
Pyret 在使用结构化数据方面也非常灵活,并在其底层公开了一个简单的对象模式,支持结构化代码与更多 nominal 模式搭配使用。
OCaml
Pyret
Racket
Pyret
运行 Pyret
通过访问 code.pyret.org 直接在浏览器中运行 Pyret,这是最简单的入门方法。查看导览以了解小部分程序和语法示例。
如果希望在命令行中在使用 Pyret 进行编程,需要从 https://www.npmjs.com/package/pyret-npm 安装
pyret-npm
,安装命令如下:根据 Pyret 的官网介绍,目前该项目正在积极开发三个非常重要的功能:
其团队认为 Pyret 也已经足够成熟,因为它实现了自托管编译器。这意味着,当开发者在浏览器中运行 Pyret 时,它会加载实现了 Pyret-to-JavaScript 编译器的 JavaScript 代码(即开发者输入的 Pyret 代码会编译成 JavaScript 并在浏览器中运行)。这个编译器是由 Pyret-to-JavaScript 编译器通过编译 Pyret-to-JavaScript 编译器产生的。