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之间,能够互相调用,只是须要一些封装的工作。

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

  1. Functional language(函数式编程语言)初步了解

    对于函数式语言并不太了解,查询了百度.博客.知乎等做了以下总结. What 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分 ...

  2. 函数式编程语言(functional language)

    内容根据百度词条整理! 转载请声明来源:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8 ...

  3. 函数式编程语言(Functional Program Language)

    (一) 什么是函数编程语言 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 是一种编程典范, ...

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

    说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿 ...

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

    转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ...

  6. Haskell学习-函数式编程初探

    原文地址:Haskell学习-函数式编程初探   为什么要学习函数式编程?为什么要学习Haskell?   .net到前端,C#和JavaScript对我来说如果谈不上精通,最起码也算是到了非常熟悉的 ...

  7. 基于JVM(内存)和Tomcat性能调优

    一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsa ...

  8. java环境中基于jvm的两大语言:scala,groovy

    一.java环境中基于jvm的两大语言:scala,groovy 可以在java项目里混编这两种语言: scala:静态语言,多范式语言,糅合了面向对象.面向过程:可以与java和net互操作:融汇了 ...

  9. 基于JVM规范的并发编程解决方案

    在并发的世界里,选择合适的状态处理方法将对并发性和正确性起到决定性的影响.这方面可选的方法有:共享可变性.隔离可变性以及完全不可变性. 对于并发问题来说最好的解决方法是从根本上消灭它而不是花很多时间解 ...

随机推荐

  1. python标准库:Configparser模块

    配置文件test.conf [section1] name = tank age = 28 [section2] ip = 192.168.1.1 port = 8080 示例 # -* - codi ...

  2. (0)git安装

    windows安装 https://blog.csdn.net/sishen47k/article/details/80211002

  3. GROOVY入门

    refer to 精通Groovy(IBM)https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html re ...

  4. chrome禁用JS

    有一些网站不允许文本选择,对于我这种伸手党实在是很不友好.当然像这类的功能,应该是用JS来控制. chrome的话,JS禁用可以在地址栏旁边的一个下拉列表那里选.

  5. SQLite的Pragma语句

    SQLite的Pragma语句   Pragma语句是SQLite提供的特有语句.该语句可以查询SQLite的非表数据,还可以修改SQLite的库.在iOS开发中,利用Pragma语句,可以实现很多非 ...

  6. 苹果开发者:Siri未开放API 有些让人失望

    北京时间6月12日消息,据国外媒体报道,苹果公司在WWDC大会上展示了新版iOS和OS X系统,但由于未开放Siri API,一些苹果开发者还是有些失望. Siri API可以让开发者在自己的应用中整 ...

  7. Elite Container DELPHI下的一个轻量级IoC对象容器

    一.简介: Elite Container是DELPHI下的一个轻量级IoC对象容器(IoC:Inverse of Control,反转控制).它是参考了Java中的Spring框架(主要是配置文件的 ...

  8. 算法之美--1.蒙特卡洛方法计算pi

    基本思想: 利用圆与其外接正方形面积之比为pi/4的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值.样本点越多,计算出的数据将会越接近真识的pi(前 ...

  9. Codis的安装

    其他环境准备: 安装JDK,安装Zookeeper 1.创建codis账户 useradd codis passwd codis 2.解压codis3.1.3-go1.7.4-linux.tar.gz ...

  10. Codeforces445A_DZY Loves Chessboard(预处理)

    DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input standard ...