问题标签 [frege]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - JVM上的Haskell?
我想知道是否有某种方法可以让 Haskell 在 JVM 上运行(编译或解释)?
Sourceforge 上存在 JHaskell,但这个似乎是空的和死的。
GHC 使用 LLVM 作为编译器后端。将 LLVM 编译为 Java 字节码是个好主意还是可能?或者也许使用不同的编译器后端?
java - java.lang.Class#getAnnotation() 在 Eclipse 插件中调用时返回 null
我正在编写一个 Eclipse 插件来支持Frege编程语言。我使用IMP元工具平台和 Eclipse Indigo (3.7)。运行时环境是 Java 1.7。
该插件使用与批处理编译器相同的代码进行标记解析、语法分析等。但是,我注意到从 eclipse 插件运行时的不同行为并将其追溯到以下方法,该方法读取先前编译的模块的类文件以获取以 java 注释形式存储在那里的元信息:
请注意,代码创建了自己的 an 实例,该实例URLClassLoader
作为参数传递。如果我没有正确设置类路径,getOperators 方法会正确抛出 ClassNotFoundException,因此我认为我可以确定它加载了类。一条跟踪消息告诉我,类加载器是使用以下路径构建的(默认情况下只是类路径):
因为不是由 frege 编译器创建的类文件通常不能有MD.FregePackage
注释,这通常表明用户试图导入一个普通的 java 类,实际上我在插件中收到以下消息:
然而,从命令行我可以很好地编译它。我在此处包含此内容以证明确实可以从同一位置加载相关注释:
恢复事实:
- 当通过命令行界面调用编译器时,应该加载注释的代码可以正常工作。
- 应该加载注释的代码不知道它是从插件还是命令行调用的。事实上,该插件直到上周才出现,而命令行界面过去几个月都可以正常工作。
- 注释当然有,
RetentionPolicy.RUNTIME
否则命令行编译也不会识别它们。但事实证明确实如此。
所以我能得出的唯一结论是Class.getAnnotation()
不知何故无法正常工作。这是非常不幸的,因为这有效地破坏了模块系统所需的基本功能。
如果这很重要:插件使用的 Frege 编译器代码本身是用 Frege 编写的,frege.prelude.Base
上面提到的类是每个模块都需要的基本库,因此它必须已经在激活插件时加载,当然当然有不同的类加载器。
有没有人有类似的经历?是否有可能解决这个问题以及如何解决?欢迎提出如何规避这种情况的任何建议。
haskell - Frege 等效于 Haskell 的 getLine 并读取
是否有任何 Frege 等效于 HaskellgetLine
并read
在标准库中解析来自控制台的输入?
目前我正在这样做:
更新:
Frege 已经进化,所以现在我们拥有getLine
标准库本身。至于read
,我们在 String 上有转换方法。现在原来的问题很简单,
有关更多详细信息,请参阅下面的 Ingo 答案。
clojure - Frege 是否执行尾调用优化?
尾调用是否在 Frege 中进行了优化。我知道 Java 和编译成 JVM 字节码的语言(如 Clojure 和 Scala)都没有 TCO。弗雷格呢?
class - 弗雷格课程如何运作?
似乎弗雷格关于类型类的想法与 Haskell 有很大不同。尤其是:
语法似乎有所不同,没有明显的原因。
函数类型不能有类实例。(似乎是一个相当奇怪的规则......)
语言规范说明了在子类实例声明中实现超类。(但如果你有钻石继承……这不会是一个错误,但不能保证以某种方式工作?)
Frege 对实例的外观不那么挑剔。(类型别名是允许的,类型变量不需要是不同的,等等)
方法可以声明为
native
,尽管它的含义并不完全清楚。看来您可以编写
type.method
访问方法。同样,没有说明这意味着什么或为什么有用。子类声明可以为超类方法提供默认实现。(?)
简而言之,如果知道这些东西的人可以写一个关于这些东西如何工作的解释,那将会很有用。它在语言规范中列出,但描述有点简洁。
(关于语法:我觉得 Haskell 的实例语法比较合乎逻辑。“如果 X 是 Y 和 Z 的实例,那么它也是 Q 的实例,方式如下……” Haskell 的类语法一直显得有点奇怪对我来说。如果 X 实现Eq
了,这并不意味着它实现了Ord
,这意味着它可以实现Ord
,如果它愿意的话。我不确定一个更好的符号会是什么......)
根据英戈的回答:
- 我假设为超类方法提供默认实现仅在您“一次性”声明您的实例时才有效?
例如,假设Foo
是 的超类Bar
。假设每个类都有三个方法(foo1
、foo2
、foo3
、bar1
、bar2
、bar3
),并Bar
为foo1
. 这应该意味着
应该管用。但这会起作用吗:
- 所以如果我
native
在类声明中声明一个方法,那只是设置该方法的默认实现?
所以如果我做类似的事情
那么这只是意味着如果我为某个 Java 本机类编写一个空实例声明,然后foo
映射到object.foo()
Java 中?
特别是,如果一个类方法被声明为native
,如果我选择,我仍然可以为它提供一些其他实现吗?
- 每个类型 [constructor] 都是一个命名空间。我知道这对臭名昭著的命名字段问题有什么帮助。我不确定你为什么要在这个命名空间的范围内声明其他东西......
haskell - 在 Frege 中表达渴望但在 Haskell 中很懒惰?
在 Haskell 中,以下代码打印“[1,2,3,4,5”:
但是在 Frege 中,它会抛出OutOfMemoryError
以下代码:
这里唯一的区别是unpacked
转换 fromString
和[Char]
FWIW 所需的函数,该unpacked
函数是急切的。为什么整个表达式不能像 Haskell 中那样懒惰?是否有可能在 Frege 中实现类似于 Haskell 的东西?
frege - 如何在 frege 中导入不同的模块
有人可以帮助我在haskell for Data中使用相当于导入命令的frege。我希望访问 Data.Typeable 或 Data.Time.Calendar ......以及此类模块/内置程序。
我们是否有办法知道 frege 中的可用模块......一般来说,如果我执行“import.frege._ ”,是否有任何自动填充类型的功能或某种类型的列表表明可用的各种选项。
非常感谢您的时间和帮助
haskell - Count inversions: StackOverflowError in Frege, works fine in Haskell
I am trying to count inversions for a list of numbers. The following Frege program works for small set of numbers but throws StackOverflowError for 100000 numbers.
The same code in Haskell works fine:
What could be the cause for stack overflow? Is it some function not being tail-recursive?
java - 从 Frege 调用本机 Java 构造函数
你知道我在哪里可以找到有关 Frege 的 Java 绑定的文档吗?来自 Haskell,我发现 Frege 最有趣的方面。不幸的是,我发现的文档并没有详细说明。
这是我的测试示例。基本上,我想翻译以下 Java 代码:
这是我当前的弗雷格代码:
为了完整起见,错误消息是: