我正在创建一个包含Clojure和Java代码的库,并希望能够在整个代码库中运行单个测试JUnit套件.似乎这应该是可能的,因为它们都在JVM上运行并且有良好的Clojure/Java互操作.
但是,目前Clojure代码似乎更倾向于使用"(run-all-tests)"和朋友通过clojure.test API完成的单元测试.
有没有一种很好的方法将这些Clojure测试包装在某种包装中,以便可以从JUnit自动调用它们?
(当我自动说,我的意思是没有求助于编写JUnit测试用例的手动解决方案来包装并单独调用每个Clojure测试用例:-))
我最近很高兴看到关于Go Concurrency模式的Google IO谈话
虽然Go的并发方法(灌浆,通道上的通信)明显不同于Clojure(不变性,管理参考,STM),但似乎Go方法在Clojure上下文中的某些情况下仍然有用.
因此,在Clojure或Java中可以直接使用Go的并发原语(可能是库),特别是:
channel类似的对象阻塞,直到两端都有读写器select样构造,可以等待在多个通道的结果PS非常满意Java解决方案,因为它很容易从Clojure中使用
更新自问题最初被问到以来,Clojure现在拥有core.async,它提供了所有这些功能和更多功能.
我正在Clojure中开发一个具有多个子结构的复杂数据结构.
我知道我会想要随着时间推移扩展这个结构,有时可能想要改变内部结构而不会破坏数据结构的不同用户(例如我可能想要将一个向量更改为一个hashmap,添加某种索引出于性能原因的结构,或者包含Java类型)
我目前的想法是:
我认为这会有效,但我担心它开始看起来像很多"胶水"代码.它也可能反映了我对面向对象方法的更多熟悉.
在Clojure中推荐的方法是什么?
我正在寻找一个轻量级的纯Java物理引擎来为机器人运动控制做一些模拟.
我的要求:
您是否可以推荐任何适合该法案的现有库,而不是重新发明轮子?
ps我已经使用Google搜索了 - 我只是希望得到已经使用或实施此类内容的人的诚实意见!
关于我使用Clojure和Java开发的应用程序,我有一个有趣的架构问题.该应用程序涉及许多需要协调的密集,并发数据处理任务.
以下是混合Clojure和Java的基本原理:
鉴于我正在使用这两种语言 - 我应该采用什么逻辑或原则来确定两者之间的分界线?特别是,我对如何设计一个能够利用两种语言相对优势的适当级别的API /接口感兴趣.
你在实践中失去了什么,当你选择一个静态类型语言,如Scala的(或F#,哈斯克尔,C#),而不是动态类型的人,比如Ruby,Python和Clojure中,Groovy中(其中有宏或运行时元编程能力)?请考虑最好的静态类型语言和最好的(在您看来)动态类型语言,而不是最差的语言.
答案摘要:
与像Scala IMHO这样的静态类型语言相比,像Ruby这样的动态语言的主要优点是:
我注意到在追求精益函数式编程的过程中,当使用嵌套的不可变数据结构时,参数列表开始变得过多.这是因为在更新对象状态时,您还需要更新数据结构中的所有父节点.请注意,这里我将"更新"表示"返回具有适当更改的新不可变对象".
例如,我发现自己编写的函数(Clojure示例)是:
(defn update-object-in-world [world country city building object property value]
(update-country-in-world world
(update-city-in-country country
(update-building-in-city building
(update-object-in-building object property value)))))
Run Code Online (Sandbox Code Playgroud)
所有这些更新一个简单的属性是非常难看的,但此外调用者必须组装所有参数!
在处理函数式语言中的不可变数据结构时,这必须是一个相当普遍的要求,所以有一个好的模式或技巧可以避免我应该使用它吗?
language-agnostic design-patterns functional-programming clojure immutability
我最近尝试使用,maven-release-plugin因为它显然是在Maven世界中构建和打包发布的推荐方法.
但是我想在Eclipse中使用它,因为我的开发工作流程的其余部分都是基于Eclipse的.我通常通过作为Eclipse Juno(4.2)的一部分提供的m2eclipse插件运行Maven命令
当我尝试在Eclipse中运行"release:prepare"时,我注意到了一些奇怪的事情:
pom.xml被手动更新的版本号覆盖.Eclipse警告您并很乐意重新加载更新版本 - 但这通常是安全的吗?[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project clisk: Failed to invoke Maven build. Error configuring command-line. Reason: Maven executable not found at: C:\Users\Mike\git\clisk\EMBEDDED\bin\mvn.bat -> [Help 1]- 大概是因为我使用的是m2eclipse而不是命令行提供的内置Maven.我想我也可以安装命令行maven ....但这是明智的还是只会导致更多问题?鉴于这些问题,有没有办法让maven-release-plugin在Eclipse中顺利运行,或者我应该放弃并继续手动执行发布?
我正在写一个库,其中:
设计小对象是否有一些经验法则/指南,以便在这种环境中有效利用CPU缓存线?
我对正确调整和构造对象特别感兴趣,因此例如最常访问的字段适合第一个缓存行等.
注意:我完全清楚这是依赖于实现的,我需要进行基准测试,以及过早优化的一般风险.无需浪费任何进一步的带宽指出这一点.:-)
我在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) ;
}
Run Code Online (Sandbox Code Playgroud)
我能否在Java 8中直接使用这种类型的对象作为可调用的lambda函数?
clojure ×7
java ×7
abstraction ×1
api ×1
architecture ×1
concurrency ×1
cpu-cache ×1
eclipse ×1
go ×1
goroutine ×1
immutability ×1
java-8 ×1
junit ×1
lambda ×1
m2eclipse ×1
maven ×1
open-source ×1
optimization ×1
performance ×1
physics ×1
release ×1
ruby ×1
scala ×1
simulation ×1
testing ×1
unit-testing ×1