我试图了解如何开发独立的Javascript代码.我想编写带有测试和模块的Javscript代码,从命令行运行.所以,我已经安装node.js
,并npm
与库一起requirejs
,underscore
和mocha
.
我的目录结构如下所示:
> tree .
.
??? node_modules
??? src
? ??? utils.js
??? test
??? utils.js
Run Code Online (Sandbox Code Playgroud)
src/utils.js
我正在编写的小模块在哪里,使用以下代码:
> cat src/utils.js
define(['underscore'], function () {
"use strict";
if ('function' !== typeof Object.beget) {
Object.beget = function (o) {
var f = function () {
};
f.prototype = o;
return new f();
};
}
});
Run Code Online (Sandbox Code Playgroud)
并且test/utils.js
是测试:
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils'], function(utils) { …
Run Code Online (Sandbox Code Playgroud) [我不确定这是否适合堆栈溢出,但此处还有许多其他Coq问题,所以也许有人可以提供帮助.]
我正在从http://www.cis.upenn.edu/~bcpierce/sf/Basics.html#lab28处理以下内容(正好在Case的介绍下面).请注意,我是一个完全的初学者,我在家工作 - 我不是学生.
Theorem andb_true_elim1 : forall b c : bool,
andb b c = true -> b = true.
Proof.
intros b c H.
destruct b.
Case "b = true".
reflexivity.
Case "b = false".
rewrite <- H. reflexivity.
Qed.
Run Code Online (Sandbox Code Playgroud)
我正在看重写的内容:
Case := "b = false" : String.string
c : bool
H : andb false c = true
============================
false = true
Run Code Online (Sandbox Code Playgroud)
然后rewrite <- H.
应用:
Case := "b = false" : String.string
c : …
Run Code Online (Sandbox Code Playgroud) clojure.core的来源似乎假设已存在fn*
.这定义在哪里?bootstrap还需要什么(在现有的Java类型上)?它们是如何组合在一起的?
也许这已经被问到了?我很难获得良好的搜索结果fn*
.
更新:在标题中将"bootstrap本身"更改为"bootstrap",因为我不想暗示Clojure是自托管的.
我根本没有在Clojure中使用多线程,所以不确定从哪里开始.
我doseq
的身体可以并行运行.我想要的是总是有3个线程运行(留下1个核心空闲),并行地评估主体直到范围耗尽.没有共享状态,没有什么复杂的 - 相当于Python的多处理就可以了.
所以类似于:
(dopar 3 [i (range 100)]
; repeated 100 times in 3 parallel threads...
...)
Run Code Online (Sandbox Code Playgroud)
我应该从哪里开始寻找?有这个命令吗?标准包装?一个很好的参考?
到目前为止,我已经找到了pmap
,并且可以使用它(我如何一次限制为3?看起来它一次使用32个 - 不,源说2 +处理器数量),但似乎这是一个基本原语应该已经存在于某处.
澄清:我真的想控制线程的数量.我有长时间运行的进程并使用相当数量的内存,所以创建一个大数字并希望事情正常运行OK不是一个好方法(例如使用重要的块可用内存).
更新:开始写一个执行此操作的宏,我需要一个信号量(或一个互斥量,或者我可以等待的原子).Clojure中是否存在信号量?或者我应该使用ThreadPoolExecutor?从Java中提取这么多内容似乎很奇怪 - 我认为Clojure中的并行编程应该很容易......也许我正在考虑这完全错误的方式?嗯.代理?
我有一些Clojure代码,它模拟然后处理数值数据.数据基本上是双值的向量; 处理主要涉及以各种方式对它们的值进行求和.我将在下面包含一些代码,但我的问题是(我认为)更一般 - 我只是不知道如何解释hprof结果.
无论如何,我的测试代码是:
(defn spin [n]
(let [c 6000
signals (spin-signals c)]
(doseq [_ (range n)] (time (spin-voxels c signals)))))
(defn -main []
(spin 4))
Run Code Online (Sandbox Code Playgroud)
哪里spin-voxels
应该比更贵spin-signals
(特别是重复多次).我可以提供较低级别的例程,但我认为这个问题更多的是关于我不理解跟踪的基础知识(下面).
当我用lein编译它然后做一些简单的分析:
> java -cp classes:lib/clojure-1.3.0-beta1.jar -agentlib:hprof=cpu=samples,depth=10,file=hprof.vec com.isti.compset.stack
"Elapsed time: 14118.772924 msecs"
"Elapsed time: 10082.015672 msecs"
"Elapsed time: 9212.522973 msecs"
"Elapsed time: 12968.23877 msecs"
Dumping CPU usage by sampling running threads ... done.
Run Code Online (Sandbox Code Playgroud)
和配置文件跟踪看起来像:
CPU SAMPLES BEGIN (total = 4300) Sun Aug 28 15:51:40 2011
rank self accum count …
Run Code Online (Sandbox Code Playgroud) 我曾在几个项目中使用OpenCL,但始终将内核编写为一个(有时候相当大)的函数.现在我正在开发一个更复杂的项目,并希望在几个内核之间共享功能.
但是我可以找到的示例都将内核显示为单个文件(甚至很少调用辅助函数).似乎应该可以使用多个文件 - clCreateProgramWithSource()
接受多个字符串(并假设它们结合起来) - 尽管pyopencl Program()
只需要一个源.
所以我希望听到任何有这方面经验的人:
谢谢.
我从Underscore.js找到了一些代码
_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results[results.length] = iterator.call(context, value, index, list);
});
if (obj.length === +obj.length) results.length = obj.length;
return results;
};
Run Code Online (Sandbox Code Playgroud)
我想知道是什么if (obj.length === +obj.length)
?
我认为(见下文)我想将Clojure项目构建为具有有序依赖性的多个模块 - 就像Maven让我可以使用多模块项目一样.
但是我无法看到如何用Leiningen做到这一点 - 我只能看到FAQ中checkouts
描述的修复程序看起来并不那么强大.
莱恩会这样做吗?我应该使用Gradle吗?或者不需要这种东西?
更多上下文:我想知道如何构建支持插件的模块化应用程序(我想这意味着将jar放在类路径上).我想知道我可以在多大程度上构建核心+插件(我认为我应该能够使用Clojure的动态代码加载而不必使用Java/OSGi).因此,我认为单个项目的驱动动力来自于想要将所有内容(核心+默认插件)打包成一个易于最终用户使用的单个blob,但也可以将其划分(并且可以将其构建为在片段中测试,测试每个模块的逻辑独立性).关于这一点的更一般的建议是受欢
更新
下面没有提到的一个可能的解决方案是使用Maven插件 - 我假设它支持Maven所做的一切,但编译Clojure,因此将使用嵌套模块等.
与barrier()
(我认为我理解)不同,mem_fence()
不会影响工作组中的所有项目.OpenCL规范说(第6.11.10节),用于mem_fence()
:
订单执行内核的工作项的加载和存储.
(因此它适用于单个工作项).
但是,与此同时,在第3.3.1节中,它说:
在工作项内存中具有加载/存储一致性.
所以在工作项中内存是一致的.
那么什么样的东西mem_fence()
有用呢?它不适用于项目,但在项目中不需要......
请注意,我没有使用原子操作(第9.5节等).mem_fence()
与这些想法一起使用的想法是什么?如果是这样,我很乐意看到一个例子.
谢谢.
更新:我可以看到使用时,它是如何有效使用 barrier()
(隐式,由于阻挡调用mem_fence()
) -但肯定必须有更多,因为它单独存在?
是否有类似记录的struct-map?如果没有,我应该使用结构(文档不鼓励使用结构)?
也许我完全做错了什么?我有一个相当复杂的功能,目前需要一个选项图.我试图澄清哪些选项值是可接受/使用的(通过用记录替换它).现在我想将它连接到在地图中包含此信息的代码(并且其中包含记录中数据的超集).