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. split一些分开一些特殊字符

    查看 api ,你就会发现 String.split(String regex); 也就是说里面的参数是正则表达式.如果是一些普通的字符,它就会当做普通字符给拆分字符串.可是 ?是特殊字符,想让按照 ...

  2. LeetCode OJ-- Pow(x, n) **@

    https://oj.leetcode.com/problems/powx-n/ 二分法 class Solution { public: double pow(double x, int n) { ...

  3. 【原创】Word2010 清除样式

    使用场景         有时候我们在网页上面粘贴一些精华文章或者从去整理别人已经完成的word的时候,会发现它自带的格式,可能并不是我们所理想的格式,所以此时就不得不去重新编辑其格式,但是word里 ...

  4. 16Aspx.com-PHP企业整站源码 景观石材大理石类织梦模板 含手机移动端 完整源码 APP+PC

    =============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...

  5. 用Wireshark分析Socket连接建立的过程

    0. 安装Wireshark,但是默认情况下,Wireshark无法捕获127.0.0.1的报文 解决方案:安装npcap,替换默认的winpacp,重新启动Wireshark,就可以看到一个名字中含 ...

  6. Codeforces 785D Anton and School - 2(推公式+乘法原理+组合数学)

    题目链接 Anton and School - 2 对于序列中的任意一个单括号对(), 左括号左边(不含本身)有a个左括号,右括号右边(不含本身有)b个右括号. 那么答案就为 但是这样枚举左右的()的 ...

  7. java8 之CompletableFuture -- 如何构建异步应用

    什么是Future 接口 很多场景下,我们想去获取线程运行的结果,而通常使用execute方法去提交任务是无法获得结果的,这时候我们常常会改用submit方法去提交,以便获得线程运行的结果. 而sub ...

  8. Kali Linux 2017中Scapy运行bug解决

    Kali Linux 2017中Scapy运行bug解决   Scapy是一款强大的网络数据包构建工具.在Kali Linux 2017中,当在scapy的命令行中,运行res.graph()生成图形 ...

  9. php的session与免登陆问题

    Session 与 Session的GC 由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session 信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 sessi ...

  10. Putty完全使用方法

    http://www.putty.ws/Putty-wanquanshiyong putty中文站