帕拉索(编程语言)

伞兵
Logo for ParaSail Programming Language.jpg
用于帕拉索语言语言的徽标
范例编译同时至关重要的结构化的面向对象
S. Tucker Taft
开发人员Adacore
首先出现2009; 14年前
稳定版本
2021年6月9.3 / 6; 19个月前
打字学科强的静止的
平台x86
操作系统Linux苹果系统视窗
执照GPL V3
文件名扩展.psi,.psl
网站伞兵兰.org
主要的实施
PSLI,PSLC
被影响
模块艾达帕斯卡ML
受影响
尼姆[1]

并行规范和实施语言伞兵) 是一个面向对象并行编程语言。它的设计和正在进行的实施在博客中描述[2]并在其官方网站上。[3]

Parasail使用指针 - 免费编程模型,其中对象可以生长和收缩,并使用价值语义进行分配。它没有全球收集了垃圾堆。反而,基于区域的内存管理在整个过程中使用。只要声明递归组件,类型就可以是递归的可选的。没有全局变量,没有参数混溶,并且可以并行评估表达式的所有子表达。断言前提后条件班级不变等等,是标准语法的一部分,使用Hoare - 像符号。任何可能种族条件检测到编译时间.

Parasail的初始设计始于2009年9月,S。TuckerTaft。

两者口译员使用伞兵虚拟机, 和LLVM - 基于帕拉斯勒编译器可用。偷窃工作用于安排Parasail的轻巧线程。最新版本可以从Parasail网站下载。[3]

描述

句法帕拉索的类似模块,但是具有基于班级和界面的对象的编程模型,更类似于爪哇或者C#.

最近,帕拉斯勒的平行结构已适应其他语法,以产生爪哇-喜欢,Python - 像艾达-喜欢平行语言,分别被称为Javallel,Parython和Sparkel(以Ada子集的名字命名火花它基于的)。这些语言的编译器和口译商包含在Parasail实施中。[3]

例子

以下是你好世界计划在帕拉索勒:

功能你好世界varioio.println“你好世界”);结尾功能你好世界

以下是基本地图模块的接口:

界面Bmap<key_type订购<>;element_type可分配<>>OP“ []”()->Bmap//创建一个空的地图功能插入varBmap钥匙key_type价值element_type);功能寻找Bmap钥匙key_type->可选的element_type功能删除varBmap钥匙key_type);功能数数Bmap->Univ_integer结尾界面Bmap

这是使用二进制树的可能实现此地图模块的实现:

班级Bmap界面binary_node<>//简单的“混凝土”二进制节点模块var剩下可选的binary_nodevar正确的可选的binary_nodeconst钥匙key_typevar价值可选的element_type// null表示已删除结尾界面binary_nodevar可选的binary_nodevar数数:=0出口OP“ []”()->Bmap//创建一个空的地图返回=>无效的数数=>0);结尾OP“ []”功能插入varBmap钥匙key_type价值element_type//搜索键,如果发现概述,请插入新节点(如果不是)为了m=>Bmap.环形如果m一片空白然后//尚未在地图中;添加m:=钥匙=>钥匙价值=>价值剩下=>无效的正确的=>无效的);Bmap.数数+=1别的案子钥匙=?m.钥匙[#较少的]=>继续环形m.剩下[#Greater]=>继续环形m.正确的[#平等的]=>//密钥已经在地图中;//颠簸计数是否为null;如果m.价值一片空白然后Bmap.数数+=1结尾如果//在任何情况下覆盖值字段m.价值:=价值返回结尾案子结尾如果结尾环形结尾功能插入功能寻找Bmap钥匙key_type->可选的element_type//搜索键,返回关联的值(如果存在)或否则为null否则为了m=>Bmap.尽管m不是零环形案子钥匙=?m.钥匙[#较少的]=>继续环形m.剩下[#Greater]=>继续环形m.正确的[#平等的]=>// 找到了;返回值返回m.价值结尾案子结尾环形//在bmap中找不到返回无效的结尾功能寻找功能删除varBmap钥匙key_type//搜索键;删除关联的节点如果找到为了m=>Bmap.尽管m不是零环形案子钥匙=?m.钥匙[#较少的]=>继续环形m.剩下[#Greater]=>继续环形m.正确的[#平等的]=>// 找到了;如果最多一个子树是非无效的,请覆盖// 它;否则,将其值字段设置为null//(避免更复杂的重新平衡)。如果m.剩下一片空白然后//将右子树移动到Mm<==m.正确的Elsifm.正确的一片空白然后//将左子树移动到Mm<==m.剩下别的//不能立即收回节点;//将值字段设置为null。m.价值:=无效的结尾如果//减少计数Bmap.数数 -  =1结尾案子结尾环形//在地图中找不到结尾功能删除功能数数Bmap->Univ_integer//地图中项目数量的返回计数返回Bmap.数数结尾功能数数结尾班级Bmap

这是BMAP模块的简单测试程序:

进口PSL::::随机的进口Bmap功能test_bmapnumUniv_integer种子Univ_integer//测试基于二进制的地图var随机的:=开始种子);//启动随机数序列//声明从整数到字符串的地图varmBmap<key_type=>Univ_integerelement_type=>UNIV_STRING>;m:=[];//将地图初始化为空地图为了I1..num*2向前环形//将元素添加到地图const钥匙:=下一个modnum+1const瓦尔:=“瓦尔”|to_stringI);println“即将插入”|钥匙|“ =>”|瓦尔);插入m钥匙瓦尔);结尾环形println“ count =”|数数m);为了I1..num环形//在地图中搜索元素const钥匙:=下一个modnum+1println“寻找 ”|钥匙|“, 成立 ”|寻找m钥匙);结尾环形为了I1..num/3环形//从地图中删除一些元素const钥匙:=下一个modnum+1println“即将删除”|钥匙);删除m钥匙);结尾环形println“ count =”|数数m);为了I1..num向前环形//再次搜索地图中的元素println“寻找 ”|I|“, 成立 ”|寻找mI);结尾环形结尾功能test_bmap

参考

  1. ^Rumpf,Andreas(2017年10月19日)。“没有GC的NIM”.阿拉克的沉思。检索9月1日2020.
  2. ^Parasail博客
  3. ^一个bcParasail网站

一般参考


外部链接