当前位置: 首页 > 科技观察

Pyret编程语言:探索脚本和函数式编程的融合

时间:2023-03-12 13:55:11 科技观察

Pyret是一种基于JavaScript的脚本语言,旨在成为编程教育的绝佳选择,同时探索脚本和函数式编程的融合。Pyret目前正在积极设计和开发中,开发者可以自由使用或修改它。Pyret语法简介Pyret具有受Python启发的函数、列表和运算符语法,其Iteration构造旨在调用其他语言中的迭代构造。funto-celsius(f):(f-32)*(5/9)endforeach(strfrom[list:"Ahoy","world!"]):print(str)endPyret支持简洁、富有表现力、递归的数据声明,支持可选类型标注,支持增量添加,满足各种教学风格和课程需求。dataBinTree:|leaf|node(value,left::BinTree,right::BinTree)endPyret的测试是编程过程的自然组成部分。函数可以以where:子句结束,它为函数提供单元测试,动态地检查这些断言(Assertions)。funsum(l):cases(List)l:|empty=>0|link(first,rest)=>first+sum(rest)endwhere:sum([list:])is0sum([list:1,2,3])is6end关于缩进的问题,Pyret团队认为缩进对代码的可读性至关重要,但他们不想通过程序的空格来决定其意义。相反,程序的含义应该决定其缩进结构。缩进只是另一个上下文相关的规则。明确的语法(Pyret使用显式结束分隔符的原因)意味着开发人员可以从电子邮件或Web复制和粘贴代码而不改变其含义。IDE将帮助开发人员重新缩进代码,而不必担心这样做会改变程序的含义。突出显示注释(Annotations)与大多数脚本编程语言不同,Pyret支持开箱即用地检查参数上的注释。Pythondefsquare(n:int)->int:returnn*nsquare("5")#Erroratmultiplication:#Can'tmultiplysequenceby#non-intoftype'str'Pyretfunsquare(n::Number)->Number:n*nendsquare("5")#Withtypecheckeroff:#TheNumberannotationwasnot#satisfiedbythevalue"5"#Withtypecheckeron:#NumberisincompatiblewithString支持长数值类型Java//thisisnottrue((1/3)*3)==1Pyret#thisistrue((1/3)*3)==1结构化数据Pyret提供了一种优雅的机制来编写数据定义,而无需开发人员具有类和语法开销的认知背景。PythonclassBinTree:passclassleaf(BinTree):def__init__(self):passclassnode(BinTree):def__init__(self,v,l,r):self.v=vself.l=lself.r=rPyretdataBinTree:|leaf|node(v,l),r)endPyret在结构化数据的使用上也非常灵活,在其下暴露了一个简单的对象模型,支持使用结构化代码和更多标称模型。OCamltypeanimal=|Elephantofstring*float|Tigerofstring*float|Horseofstring*int...letname_of_animala=matchawith|大象(名称,_)|老虎(名称,_)|马(名称,_)->名称...PyretdataAnimal:|大象(名字,体重)|老虎(名字,条纹)|马(名字,比赛获胜)...endfunanimal-name(a::Animal):a.nameendRacket(structelephant(nameweight))(structtiger(namestripes))(structhorse(nameraces-won))...(define(animal-namea)(cond[(elephant?a)(elephant-namea)][(tiger?a)(tiger-namea)][(horse?a)(horse-namea)]...))PyretdataAnimal:|elephant(name,weight)|tiger(name,stripes)|horse(name,races-won)...endfunanimal-name(a::Animal):a.nameend运行Pyret通过访问code.pyret.org直接在浏览器中运行Pyret是最简单的入门方法。查看导览以获取一小部分程序和语法示例。如果你想在命令行上使用Pyret进行编程,你需要从https://www.npmjs.com/package/pyret-npm安装pyret-npm。安装命令如下:npminstall-gpyret-npm根据Pyret官网介绍,目前该项目正在积极开发三个非常重要的特性:支持静态类型,提供带有标记联合(taggedunions)的传统类型系统和类型检查器使用表作为存储真实世界数据的关键类型基于“world”模型的交互式计算模型团队认为Pyret也足够成熟,因为它实现了自托管编译器。这意味着当开发人员在浏览器中运行Pyret时,它会加载实现Pyret-to-JavaScript编译器的JavaScript代码(即将开发人员输入的Pyret代码编译成JavaScript并在浏览器中运行)。该编译器是通过使用Pyret-to-JavaScript编译器编译Pyret-to-JavaScript编译器生成的。本文转自OSCHINA本文标题:Pyret编程语言:探索脚本语言与函数式编程的融合