小编mik*_*era的帖子

使用代理来完成STM事务中的副作用

我知道在STM事务中放置具有副作用的函数通常是不好的做法,因为它们可能被重试并多次调用.

然而,我发现你可以使用代理来确保只有在事务成功完成后才能执行副作用.

例如

(dosync
  // transactional stuff
  (send some-agent #(function-with-side-effects params))
  // more transactional stuff
  )
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?

有哪些优点/缺点/陷阱?

concurrency transactions clojure agent stm

8
推荐指数
2
解决办法
1229
查看次数

不可变持久3D网格的最佳数据结构

我正在尝试用函数编程风格编写游戏,这意味着用纯粹功能的,不可变的数据结构来表示游戏状态.

最重要的数据结构之一是表示世界的3D网格,其中对象可以存储在任何[x,y,z]网格位置.我想要这个数据结构的属性是:

  • 不可变
  • 快速持久更新 - 即通过小的变化创建整个网格的新版本是便宜的并且通过结构共享来实现.网格可能很大,因此写时复制不是一个可行的选择.
  • 对稀疏区域/相同值的有效处理 - 空/未填充区域应该不消耗资源(以允许大的开放空间).如果它在存储相同值的大"块"方面也很有效,则可以获得奖励积分
  • 无界 - 可以根据需要向任何方向生长
  • 快速读取/查找 - 即可以快速检索[x,y,z]处的对象
  • 快速卷查询,即快速搜索区域[x1,y1,z1] - > [x2,y2,z2],理想情况下利用稀疏性,以便快速跳过空白区域

有关最佳数据结构的建议吗?

PS我知道这可能不是最实用的写游戏方式,我只是把它作为一种学习经验并用FP来扩展我的能力......

language-agnostic functional-programming data-structures

8
推荐指数
1
解决办法
612
查看次数

增强Java 8库,同时保持向后兼容性

我正在用Java开发一个开源库,并希望确保它对Java 8用户来说很方便,并尽可能利用Java 8中的新概念(lambdas等)

同时我绝对需要保持向后兼容性(库必须仍然可以用于使用Java 6或7的人).

我可以采用Java 8有哪些有用的功能,这对于库用户来说是有益的,而不会破坏旧Java版本用户的库兼容性?

java backwards-compatibility java-8

8
推荐指数
1
解决办法
993
查看次数

在clojure中动态生成高性能函数

我正在尝试使用Clojure动态生成可应用于大量数据的函数 - 即要求是将函数编译为字节码以便快速执行,但是直到运行时才能知道它们的规范.

例如,假设我使用简单的DSL指定函数,例如:

(def my-spec [:add [:multiply 2 :param0] 3])
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数compile-spec,使得:

(compile-spec my-spec)
Run Code Online (Sandbox Code Playgroud)

将返回一个返回2x + 3的参数x的编译函数.

在Clojure中最好的方法是什么?

java compiler-construction code-generation clojure dynamic

7
推荐指数
2
解决办法
790
查看次数

SecurityManager用于云服务"沙盒"

所有,

我正在设计基于云的服务,它将提供执行客户提交的一些"插件"代码的选项.为了完成这项工作,插件不能威胁系统完整性或具有访问其他客户端数据的能力.

理想情况下,我希望客户端可以提交一个简单的jar文件(包含符合某些预定义接口的类),然后在沙箱中运行.

应允许客户端代码:

  • 在单个线程上占用所需的CPU时间
  • 使用标准java类(例如java.lang.Math,java.util.Random等)执行任何计算
  • 调用jar中捆绑的任何库(但必须遵守相同的限制)

但我特别需要禁止以下内容:

  • 产生新线程(以便可以公平地管理服务器资源!)
  • 对文件系统/ IO /网络的任何访问权限
  • 对本机代码的任何访问权限
  • 除了传递给客户端代码/由客户端代码创建的数据之外,对JVM中的数据的任何访问权限
  • 对除.jar沙箱中的类以外的类的反射的任何访问权限
  • 除了标准Java库之外,还能够在沙箱外部的对象上调用方法

是否可以使用自定义ClassLoader/SecurityManager设置来实现此目的?或者我是否需要开始寻找更复杂的解决方案(例如启动多个JVM?)

java architecture cloud security plugins

7
推荐指数
1
解决办法
453
查看次数

jdbc验证查询

是否有一个库可以确定jdbc驱动程序类使用的相应验证查询?

例如,如果jdbc驱动程序是com.mysql.jdbc.Driver或com.mysql.jdbc.jdbc2.optional.MysqlXADataSource,则库将知道验证查询是"SELECT 1"

c3po http://www.mchange.com/projects/c3p0/index.html#preferredTestQuery

dbcp http://commons.apache.org/dbcp/configuration.html"validationQuery "

java validation jdbc

7
推荐指数
1
解决办法
1万
查看次数

在Clojure REPL中动态加载依赖项

是否可以在运行的 Clojure REPL中下载并安装以前未指定的Maven依赖项?

我想到了一个相当常见的情况,你想要为某些测试或可视化工具暂时快速引入依赖关系,但不想关闭当前的REPL会话.

例如,如果您想在当前的REPL会话中使用Incanter绘制一些漂亮的数据图表,则可以使用以下内容:

(load-dependency "incanter" "incanter" "1.3.0-SNAPSHOT")

;; now do stuff with Incanter......
Run Code Online (Sandbox Code Playgroud)

据推测,您必须从适当的存储库中触发Maven或Leiningen中的依赖性解析/加载,但我不了解它们的内部结构,以了解这是否可能在运行时.....

clojure maven leiningen read-eval-print-loop

7
推荐指数
2
解决办法
2794
查看次数

在Clojure中的列表/序列中添加项目

必须有一个简单的方法来做到这一点,我显然想念它:|

如何在clojure中的列表\序列中添加项目(区别不明确)?

我尝试过以下方法:

Clojure> (add [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add in this context
Clojure> (+ [1 2 3])
java.lang.ClassCastException: Cannot cast clojure.lang.PersistentVector to java.lang.Number
Clojure> (apply merge-with + [1 2 3])
java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long
Clojure> (add-items [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add-items in this context
Run Code Online (Sandbox Code Playgroud)

clojure

7
推荐指数
1
解决办法
2580
查看次数

用于作用于数组的函数的API设计

我正在设计一个Java中的API,用于一组数字算法,这些算法作用于双精度数组(用于实时金融统计).出于性能原因,API必须使用原始数组,因此List<Double>不是一种选择.

典型的用例可能是一个算法对象,它接受两个输入数组,并返回一个输出数组,其中包含从两个输入计算的结果.

我想就如何在API中使用数组参数建立一致的约定,特别是:

  • 我是否应该包含具有所有功能的偏移,以便用户可以对更大阵列的部分进行操作,例如 someFunction(double[] input, int inputOffset, int length)
  • 如果函数需要输入和输出参数,输入或输出应该在参数列表中排在第一位吗?
  • 调用者应该分配一个输出数组并将其作为参数传递(可能会被重用),还是该函数每次调用时都应该创建并返回一个输出数组?

目标是实现API用户的效率,简单性以及API内部和已建立的约定之间的一致性.

显然有很多选择,那么最佳的整体API设计是什么?

java api-design

7
推荐指数
1
解决办法
180
查看次数

自动更新Maven依赖项

我在Eclipse中有大量的Maven项目,有很多依赖项.

随着新版本的发布,一些依赖项经常在存储库中更新.目前我必须手动查看这些内容,并手动编辑相应的pom.xmls以使用新版本.

是否有自动方法在Eclipse中执行以下操作:

  • 检查每个依赖项的较新版本是否可用?
  • 如果是这样,自动建议更改pom.xml(如"快速修复"功能)?

java dependency-management pom.xml maven

7
推荐指数
1
解决办法
4291
查看次数