Tag: clojure

为什么这个Clojure程序这么慢? 如何让它快速运行?

这里清楚地解释了如何优化处理原始值的Clojure程序:使用类型注释和未经检查的数学,它将快速运行: (set! *unchecked-math* true) (defn add-up ^long [^long n] (loop [nni 0 sum 0] (if (< ni) sum (recur n (inc i) (+ i sum))))) 所以,出于好奇,我已经在lein repl尝试过了,令我惊讶的是,发现这段代码运行速度比预期的慢20倍(Oracle JDK 1.8.0_11 x64上的Clojure 1.6.0): user=> (time (add-up 1e8)) “Elapsed time: 2719.188432 msecs” 5000000050000000 Scala 2.10.4(相同的JVM)中的等效代码在~90ms内运行: def addup(n: Long) = { @annotation.tailrec def sum(s: Long, i: Long): Long = […]

使用Clojure库捆绑本机JNI共享库

我正在为clojure编写一个涉及本机代码的库。 当我将clojure库部署到公共存储库(如clojars)时,如何捆绑共享库(也称为本机依赖项)? 更多信息: 我的项目结构大致如下: src/ native/ – C code , C Object files and compiled shared libs java/ – Java stuff clojure/ – Clojure stuff 我目前正在使用leineingen。 我试过做: :jvm-opts [~(str “-Djava.library.path=src/native/:” (System/getenv “$LD_LIBRARY_PATH”))] 如果我在项目中,它可以工作。 但是,如果我将此项目作为依赖项包含在内,我将收到UnsatisfiedLink错误。

尝试从Clojure填充Java类时,“找不到匹配的ctor”

尝试从Clojure填充Java类时,我收到“找不到匹配的ctor”错误。 我想从Clojure填充这个类。 import java.util.Date; public class Account { Account() { acct_num = 0; trans_type = ‘U’; trans_amt = 0.00; cur_bal = 0.00; last_update = null; } public int acct_num = 0; public char trans_type; public double trans_amt = 0.00; public double cur_bal = 0.00; public Date last_update; } 我可以导入这个类: ba2-app=> (ns ba2-app (:import Account)) Account […]

Scala – Java =? (或Clojure – Java =?)

开发人员是否可以在不了解Java的情况下使用Scala? 开发人员是否可以在不了解Java的情况下使用Clojure? 注意:例如我是C#开发人员,我使用.NET而不知道任何VB(当然WF 4.0使用VB语句,所以我拒绝任何涉及WF 4.0的项目:))。 总结I:感谢大家的回答。 现在我可以告诉一个人可以在不知道Java(语言)的情况下使用这些语言。 现在我有另一个问题:如何从Java(JVM)生态系统开始? 什么是初学者,中级和高级知识库(包!)? 老实说Java生态系统对我来说总是有点混乱,因此为学习(曲线!)JVM提供一些“参考参考”和“defacto教程”会非常有帮助。 (好的!我会把它作为另一个问题发布!)

我是否可以在Java 8中将Clojure函数用作Lambdas?

我在Clojure中使用了许多库来生成符合“ clojure.lang.IFn ”接口的更高阶函数。 它有多个arity重载,即界面看起来像: public interface IFn extends Callable, Runnable{ public Object invoke() ; public Object invoke(Object arg1) ; public Object invoke(Object arg1, Object arg2) ; public Object invoke(Object arg1, Object arg2, Object arg3) ; …. etc. public Object applyTo(ISeq arglist) ; } 我能否在Java 8中直接使用这种类型的对象作为可调用的lambda函数?

为什么这个Java方法泄漏 – 为什么内联它修复了泄漏?

我编写了一个最小的有点惰性( int )序列类GarbageTest.java ,作为一个实验,看看我是否可以在Clojure中处理Java中非常长的懒惰序列。 给定一个返回懒惰,无限,自然数序列的naturals()方法; drop(n,sequence)方法,它删除drop(n,sequence)的前n元素并返回sequence的其余部分; 和一个简单返回的nth(n,sequence)方法: drop(n, lazySeq).head() ,我写了两个测试: static int N = (int)1e6; // succeeds @ N = (int)1e8 with java -Xmx10m @Test public void dropTest() { assertThat( drop(N, naturals()).head(), is(N+1)); } // fails with OutOfMemoryError @ N = (int)1e6 with java -Xmx10m @Test public void nthTest() { assertThat( nth(N, naturals()), is(N+1)); } […]

Java中的isReachable看起来并不像它应该的那样工作

我正在使用Clojure,但我可以阅读Java,因此这不是Clojure特定的问题。 这甚至似乎都不适用于Java。 我正在尝试使用isReachable实现一些’ping’function。 我正在使用的代码是这样的: (.isReachable (java.net.InetAddress/getByName “www.microsoft.com”) 5000) 我的一位好朋友翻译成Java: public class NetTest { public static void main (String[] args) throws Exception{ String host = “acidrayne.net”; InetAddress a = InetAddress.getByName(host); System.out.println(a.isReachable(10000)); } } 这两个都返回false。 我想我一定是做错了,但谷歌的研究告诉我的不同。 我很困惑!

惯用Clojure将资源从运行jar复制到外部

这似乎是一个经典的问题,但我找不到任何关于它的“clojure方式”。 所以,我在资源/(leiningen项目)里面有一个foo /目录。 当jar’d / uberjar’d时,这个foo /目录放在jar的根目录下。 由于jar中的文件在运行时可能不是物理上一致的,因此您无法使用基本复制function以递归方式将目录复制到外部世界。 存在几种Java世界的解决方案( 如何编写可以提取JAR文件并将其数据存储在指定目录(位置)的Java程序?以及如何从jar资源中提取目录(和子目录)? )但是我没有找到任何现有的Clojure解决方案。 作为初学者(包括Clojure和Java),我不确定如何将上述解决方案转换为Clojure。 逐字逐句地从Java翻译成Clojurish Java Interop似乎并不正确。 有没有“官方”,clojure-idiomatic方式来做到这一点? 请注意,我正在使用Raynes的fs实用程序库。 似乎没有直接执行此function的function,但也许我可以使用一些元素来简化流程? (除了明显的基本io糖)

如何在Clojure中捕获多个exception?

我的Clojure代码有一些java-interop,它有一个抛出多个exception的方法。 我希望与他们中的每个人打交道。 根据Clojure文档: (try expr* catch-clause* finally-clause?) catch-clause -> (catch classname name expr*) 它没有提到捕捉多个例外。 是否有可能在Clojure中这样做? 谢谢!

Clojure STM(dosync)x Java同步块

Clojure STM(dosync)方法和Java同步Block有什么区别? 我正在阅读“睡觉的理发师”问题下面的代码。 ( http://www.bestinclass.dk/index.clj/2009/09/scala-vs-clojure-round-2-concurrency.html ) (defn the-shop [a] (print “[k] entering shop” a) (dosync (if (< (count @queue) seats) (alter queue conj a) (print "[s] turning away customer" a)))) 为了避免竞争条件,使用dosync ,所以我问自己“Java同步块有什么区别(STM)”? 它会阻止这个关键代码吗? 提前致谢 ! 丹塔斯