mozart-oz
mozart-oz语言是Universität des Saarlandes、Swedish Institute of Computer Science、Université catholique de Louvain等联合开发的新一代
计算机语言 ,语言本身有haskell,lisp,prolog,c,perl,java等的影子,有你想要的几乎全部特性,例如:
约束编程特性:
处理复杂约束中语言提供了 搜索引擎 ,我们只用定义约束关
系即可,除非非常复杂的问题,一般不需要程序员定义搜索
函数。下面是求解传说中 爱因斯坦 5国5色5物问题中的搜索树:
搜索树
约束问题写起来很简单:
decalre X Y in
X :: 1#11
Y :: 12#30
X+Y =: 25
X*Y =: 150
{Show [X Y] }
就能求解:
X 属于 [1 11]
Y 属于 [12 30] 求X Y使得满足
X+Y=25
X*Y=150
条件的X和Y。
DataFlow特性:
变量可以后绑定值,先使用,比如:
declare X in
thread {Show X} end
X=100
程序执行倒第2行时X没有绑定到值,线程会自动阻塞,直到
被绑定值,原始线程接下来给X赋值,第一个线程将会自动
执行。
分布式特性:
一个对象可以被多个主机引用,但如果有任何一个主机修改
了其值则全部的主机上该对象的值都将被自动同步(同步完
成前对该对象的操作自动阻塞)。其他语言的分布式编程中
都是提供同步机制由程序员控制,这给程序设计带来了很多
麻烦,而在mozart中所有的语言元素包括提供的数据结构都
是直接支持分布式的,分布式完全有oz的虚拟机完成处理,
我们编写 分布式 程序和编写本地并发程序没有什么区别。
线程和并发特性:
创建线程非常方便:thread 表达式 end即可,
线程创建的速度大约为java的20倍。
程序中很多表达式,如条件选择本身是 多线程 实现的,比如100多个条件,有任何一个满足则整体满足,此时系统会自动对每个条件创建线程来检查,有任何满足的则全部线程退出,整体得到满足。
在mozart-oz中,求解约束问题过程中创建过上百万个线程是时常遇到的。
其他许多 编程语言 的线程特性是提供库或类支持的,相比而言语言直接的支持使得我们处理多线程会更加便利。
面向对象特性:
有全部的oo特性,尤其是支持多继承,
如 狮身人面像 继承自 狮子 人 石头
而多继承在很多语言里是不允许的。
函数编程特性:支持函数作为另一个函数参数传递,支持函数返回另一个函数,支持高阶函数,支持递归及尾递归……
如:
{Browse {Map [1 2 3 4] fun {$ I} I*10 end }}
将显示结果 [10 20 30 40]
此外,mozart-oz还支持许多特性如惰性求值、模块化设计、和其他语言方便
的集成等就不是一篇文章能讲完的了。
就由于有如此多的特性,因此mozart-oz叫多泛式语言。
这个语言,已经有近20年的历史,已经非常成熟了,自带的文档比较齐全, MIT 的《Press Concepts Techniques and.Models of Computer Programming》就是以这门语言来讲解程序设计技术和模式的。
约束编程特性:
处理复杂约束中语言提供了 搜索引擎 ,我们只用定义约束关
系即可,除非非常复杂的问题,一般不需要程序员定义搜索
函数。下面是求解传说中 爱因斯坦 5国5色5物问题中的搜索树:
搜索树
约束问题写起来很简单:
decalre X Y in
X :: 1#11
Y :: 12#30
X+Y =: 25
X*Y =: 150
{Show [X Y] }
就能求解:
X 属于 [1 11]
Y 属于 [12 30] 求X Y使得满足
X+Y=25
X*Y=150
条件的X和Y。
DataFlow特性:
变量可以后绑定值,先使用,比如:
declare X in
thread {Show X} end
X=100
程序执行倒第2行时X没有绑定到值,线程会自动阻塞,直到
被绑定值,原始线程接下来给X赋值,第一个线程将会自动
执行。
分布式特性:
一个对象可以被多个主机引用,但如果有任何一个主机修改
了其值则全部的主机上该对象的值都将被自动同步(同步完
成前对该对象的操作自动阻塞)。其他语言的分布式编程中
都是提供同步机制由程序员控制,这给程序设计带来了很多
麻烦,而在mozart中所有的语言元素包括提供的数据结构都
是直接支持分布式的,分布式完全有oz的虚拟机完成处理,
我们编写 分布式 程序和编写本地并发程序没有什么区别。
线程和并发特性:
创建线程非常方便:thread 表达式 end即可,
线程创建的速度大约为java的20倍。
程序中很多表达式,如条件选择本身是 多线程 实现的,比如100多个条件,有任何一个满足则整体满足,此时系统会自动对每个条件创建线程来检查,有任何满足的则全部线程退出,整体得到满足。
在mozart-oz中,求解约束问题过程中创建过上百万个线程是时常遇到的。
其他许多 编程语言 的线程特性是提供库或类支持的,相比而言语言直接的支持使得我们处理多线程会更加便利。
面向对象特性:
有全部的oo特性,尤其是支持多继承,
如 狮身人面像 继承自 狮子 人 石头
而多继承在很多语言里是不允许的。
函数编程特性:支持函数作为另一个函数参数传递,支持函数返回另一个函数,支持高阶函数,支持递归及尾递归……
如:
{Browse {Map [1 2 3 4] fun {$ I} I*10 end }}
将显示结果 [10 20 30 40]
此外,mozart-oz还支持许多特性如惰性求值、模块化设计、和其他语言方便
的集成等就不是一篇文章能讲完的了。
就由于有如此多的特性,因此mozart-oz叫多泛式语言。
这个语言,已经有近20年的历史,已经非常成熟了,自带的文档比较齐全, MIT 的《Press Concepts Techniques and.Models of Computer Programming》就是以这门语言来讲解程序设计技术和模式的。