Frege-基于JVM的类Haskell纯函数式编程语言

Frege是一门受Haskell语言启示而设计的纯函数式编程语言。Frege程序会被编译为Java,并执行于JVM上。它与Haskell是如此的类似。以至于有人称它为JVM上的Haskell。取Frege这个名字是为了纪念德国数学家、逻辑学家、哲学家Gottlob Frege。

语言的主要特色

  • 纯函数式编程语言

    继承了函数式编程语言Haskell的精神。默认就具有不变性(immutability)。

  • 执行于JVM之上

    Frege程序编译为Java bytecode。执行于JVM(Java 7+)之上。Frege代码与Java代码能够互相调用。

  • 非强类型语言

    通过强大的类型猜測来推断类型。

语言设计者的背景

Frege是由Ingo Wechsung设计的。Ingo Wechsung大概有34年左右的计算机开发、设计、咨询工作经验。

眼下领导着Frege项目。

设计这门语言的初衷

之所以设计Frege语言。主要是想把Haskell搬到JVM上来,使得一些Java项目能够充分利用Haskell函数式编程的编码方式。希望把Frege语言设计得强大、简单、富于表现力。

应用领域

临时Frege还不成熟,没有商业的项目使用该语言。眼下主要运用在教育领域,教大家什么是Frege,以及怎样使用Frege。

典型场景的代码演示样例

Frege的Hello World演示样例代码例如以下:

module Hello where

greeting friend = "Hello, " ++ friend ++ "!"

main args = do
    println (greeting "World")

值得开发人员关注的相关讨论

下面讨论来源于Hacker News。

  1. Frege声称自己是纯粹的函数式编程。但是又同意Frege调用不纯粹的Java代码。这样不

    会破坏Frege的纯粹性吗?

    回答: 把可变的Java代码封装到Frege里面。该代码块会被安排在一个ST monad,这通常都是IO monad。这就意味着,Frege使用Java的Hashset将会迫使调用的代码进入IO monad。

    所以Frege的纯粹性依旧得以保存。

  2. Frege编译器是怎样编写的?全然从头编写的。还是说从Haskell借鉴了非常多?

    回答: Frege编译器是新写的,和Haskell编译器没有什么关系。

  3. Frege能够调用当前已有的第三方Java库吗?

    回答:当然能够。Frege与Java之间,能够互相调用,只是须要一些封装的工作。

时间: 2025-01-12 09:19:15

Frege-基于JVM的类Haskell纯函数式编程语言的相关文章

函数式编程语言LISP,python,haskell,clojure

说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿来工作的语言是python,我是从那里得知函数式编程的概念的 说起lisp据说python就是模仿的lisp,而得知这个语言是从黑客与画家这本书中得知的,据说是一个特别值得尝试的语言,由于作者说如果年龄超过25岁,最好不要尝试学习它,我明年就本命年了,看来应该试着尝试一下了 在之前面临招工作的时候曾

C++:抽象基类和纯虚函数的理解

转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义: 称带有纯虚函数的类为抽象类. ⑵抽象类的作用: 抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作.所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些

Micronaut 教程:如何使用基于 JVM 的框架构建微服务?

本文要点: Micronaut 是一种基于 jvm 的现代化全栈框架,用于构建模块化且易于测试的微服务应用程序.Micronaut 提供完全的编译时.反射无关的依赖注入和 AOP.该框架的开发团队和 Grails 框架的开发团队是同一个.Micronaut 框架集成了云技术,服务发现.分布式跟踪.断路器等微服务模式也内置到了框架中.在本教程中,你将使用不同的语言创建三个微服务:Java.Kotlin 和 Groovy.你还将了解使用 Micronaut HTTP 客户端消费其他微服务是多么容易,

基于内置类的原型扩展方法

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>基于内置类的原型扩展方法</title></head><body><script type="text/javascript"> var ary = [12, 23, 34, 12, 23, 34, 12, 23, 34, 12, 23, 34,

JVM查找类文件的顺序(转)

配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpath变量值是java类文件的目录 path变量是windows程序文件的目录 JVM查找类文件的顺序: 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件. 值的结尾处

基于Qt的类QQ气泡聊天的界面开发

最近在写IM 聊天界面,想设计出一个类似QQ气泡聊天的样式 使用了几种办法 1:使用Qt下面的QListview来实现QQ类似效果,差强人意 2:使用QWebview加载html css样式来完成,发现效果不错,但是毕竟webview占用巨大的内存 3:使用QTextBrower加载css,但是好像只支持css2.1版本,css3完全不支持,这样的话,花哨的样式应该是无法实现 基于以上三种思路 最后发现还是QML实现比较好,但是qml基于文本与动画图片混合显示没找到好的办法,有好的办法的希望可以

形状类的纯虚函数

/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作 者:马广明 * 完成日期:2014 年 5 月 27 日 * 版 本 号:v1.0 * 问题描述:形状类中的纯虚函数 */ #include <iostream> using namespace std; const double PI=3.14; class Shape { public: virtual double area() const=0; }; class

用纯函数式思维在Java8下写的一段奇葩程序

首先说一下什么是纯函数式.在我的理解,"纯函数式"用一句话就可以描述:Anything is value.--我的理解不一定准确,但我就是这么理解的. 就是所有的东西都是值--没有变量:包括函数在内都是值--是值,就可以传递(包括函数). 为什么说这段程序是奇葩呢? 其一.传统的Java是面向对象的,自从Java8中加入了lambda,Java就变成了"面向对象"和"函数式"两种方式的混合语言.这段程序全部使用lambda的语法来写,与平常写的J

基于SpringJDBC的类mybatis形式SQL语句管理的思考与实现

SpringJDBC为我们提供了一个非常方便的数据库访问接口,我们都知道使用JdbcTemplate对数据库进行操作时需要传入执行的SQL语句.在小型系统中,SQL语句可能并不会太多,这个时候我们无论采取什么方式进行管理都没有关系.但是当系统逐渐庞大后,我们就要考虑以一种恰当的方式对这些SQL进行管理了.我们将首先介绍比较常见的几种SQL管理方式,然后再讨论类mybatis形式的SQL管理方式. 在方法中直接构造并传入 这种方式是在需要执行数据库操作的方法内直接硬编码SQL语句.这样做的好处在于