小编jdo*_*oig的帖子

MailboxProcessor使用指南?

我刚刚在F#中发现了MailboxProcessor并且它被用作"状态机"......但我对它们的推荐用法找不到多少.

例如...假设我正在制作一个有100个屏幕上敌人的简单游戏,我应该使用MailboxProcessor来改变敌人的位置和健康状况; 给我200个活跃的MailboxProcessor?

引擎盖下是否有任何聪明的线程管理?我应该尝试限制我拥有的活动邮箱处理器的数量,还是可以不断地敲打它们?

提前致谢,

JD.

concurrency f#

17
推荐指数
4
解决办法
3394
查看次数

在clojure中构建bloom过滤器时要使用哪种散列技术?

我想在Clojure中构建一个bloom过滤器,但我对基于JVM的语言可用的所有散列库知之甚少.

在Clojure中,我应该使用什么来实现最快(而不是最精确)的bloom map实现?

java hash clojure bloom-filter

11
推荐指数
2
解决办法
3284
查看次数

不可变的游戏对象,基本的函数式编程问题

我正在尝试"学习更多"和"从函数式编程中吸取教训"以及不可变性对并发性有益的想法等.

作为一个思想练习,我想象一个简单的游戏,Mario-esq类型角色可以跑来跑去向他射击的敌人......

然后我试着想象这是使用不可变对象在功能上编写的.

这引发了一些困扰我的问题(成为一个势在必行的OO程序员).

1)如果我的小家伙在位置x10,y100向右移动1个单位,我只是使用他的旧值重新实例化他的x位置+1(例如x11,y100)?

2)(如果我的第一个假设是正确的)如果我的输入线程移动小家伙右1单位和我的敌人AI线程射击小家伙和敌人-ai线程解决输入线程然后我的家伙将失去健康,然后输入线程解决,获得它并向右移动......

这是否意味着我无法解雇 - 而且 - 即使在不变的情况下也会忘记我的线索?当我得到两个线程操作的结果时,我是否需要发送我的线程来执行他们的操作然后新的()同步的小家伙?还是有简单的"功能性"解决方案?

这与我日常所面临的线程问题略有不同.通常我必须决定我是否关心线程解决的顺序.在上述情况下,我在技术上并不关心他是否先受到伤害或移动.但我确实关心实例化期间的竞争条件会导致一个线程数据完全丢失.

3)(再次,如果我的第一个假设是正确的)不断实例化一个对象的新实例(例如马里奥家伙)有一个可怕的开销,使其成为一个非常严重/重要的设计决策?

编辑 对不起这个额外的编辑,我不是关于跟进问题的好习惯...

4)如果不变性是我应该努力的事情,甚至跳过实例化已经改变的对象的新版本的箍......如果我每次移动时实例化我的人(只有不同​​的位置)我不是如果他是可变的话我会遇到同样的问题吗?在某个时刻引用他的东西实际上是在看旧值吗?我越深入了解我的头脑越多,因为生成具有不同值的相同事物的新版本似乎是可变性的,通过黑客攻击.:¬?

我想我的问题是:这应该怎么做?如何改变他的立场有什么好处呢?

for(ever)//simplified game-loop update or "tick" method
{
   if(Keyboard.IsDown(Key.Right)
      guy = new Guy(guy){location = new Point(guy.Location.x +1, guy.Location.y)};
}
Run Code Online (Sandbox Code Playgroud)

令人困惑的是:上面的代码意味着那个人是可变的!(即使他的属性不是)

4.5)这完全是一成不变的人吗?

谢谢,

J.

functional-programming immutability

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

是否可以在ZooKeeper中的所有后代节点上查看事件?

使用ZooKeeper时是否可以监视后代znodes上的所有事件?

例如,如果我有:

     (/)
     /  \
   (/a)  (/b)
   /       \
(/c)       (/d)
Run Code Online (Sandbox Code Playgroud)

有没有办法观察根对/ a,/ b,/ c和/ d的更改?

apache-zookeeper

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

CouchDB或Mongo具有非常高的更新率和容量?

用于存储具有非常高的更新速率和数据量的用户数据的最佳no-sql替代方案是什么?

例如,对于高容量站点,每页请求倾倒数十到数百行用户状态/导航状态数据.

我目前正在关注Mongo或Couch,但我对其他选择持开放态度.

编辑(响应kprobst的请求):它将托管在Linux上,并且可以提供多个实例(硬件或虚拟机).

该系统将用于存储站点访问者状态,未经验证的用户存储1-2周,并且(可能)无限期地用于经过身份验证的用户.

我认为当前在业务中的思维方式是使用CouchDB,因为我们在其他地方使用它,但我也一直在阅读它是性能最差的不断更新,并且该系统有可能更新30 - 400行json为每个用户提供多个文档,当用户与站点交互时(预计使用率非常高).

除了这种状态"转储"之外,还将存储其他用户信息,并且能够查询这将是有用的.

couchdb mongodb nosql

6
推荐指数
1
解决办法
1404
查看次数

Redis可以做前缀匹配吗?

可以说我世界上有一套城市是这样的:

EUKLOND
EUKMANC
EUKEDIN
EITROME
EITMILA
EITNAPE
EFRPARI
EFRAVIG
EFRBRES
Run Code Online (Sandbox Code Playgroud)

如果第一个字母是大陆,则下两个是国家,后4个是缩写的城市名称.

我希望能够通过传入"E"来搜索这个集合,它将返回所有条目或EIT并检索意大利或EFRPARI的所有条目并获得巴黎条目.

这是我可以用Redis做的吗?

redis

6
推荐指数
1
解决办法
6295
查看次数

Clojure宏从函数构建更高阶函数

我正在尝试编写一个构建类似于compojure中使用的中间件的宏.

我希望能够打电话:

(def-middleware plus-two [x]
  (+ 2 x))
Run Code Online (Sandbox Code Playgroud)

结果如下:

(defn plus-two [f]
 (fn [x]
   (f (+ 2 x)))
Run Code Online (Sandbox Code Playgroud)

我已经远远没有阅读在线指南了,但它对我不起作用:

(defmacro def-middleware [fn-name args & body]
  '(defn ~fn-name [f]
     (fn ~args
       (f ~@body))))
Run Code Online (Sandbox Code Playgroud)

任何帮助或指向更好的宏写作指南的指针都会很棒,谢谢.

macros clojure

5
推荐指数
1
解决办法
1094
查看次数

歧视的工会和继承

我正在为我的F#项目创建一个场景图:

root
->player_bob
-->torch
->enemy_1
-->extravagant_hat
-->enemies_cat_jess 
--->fleas
--->fur_ball
->loot
Run Code Online (Sandbox Code Playgroud)

等等,等等.

每个项目都需要保存一组游戏对象来代表它的孩子.

例如,enemy1的列表包含猫和帽子,猫列表包含跳蚤和毛球

所以我计划让它们全部继承自一个包含描述对象子集合的集合的类.

现在回答我的问题: 我应该将子对象向下转换为GameObject,并将它们存储在"GameObject"基类的列表中,或者创建一个有区别的联合,例如

type SceneObject = 
        |Character of Character //e.g player, enemy, cat
        |Item of Item //e.g hat, torch, furball
Run Code Online (Sandbox Code Playgroud)

并将对象存储为"SceneObjects"列表,以避免任何问题/开销,以及向上转换它们等.同时允许我描述在碰撞检测中不渲染和/或不使用对象的特殊情况,例如:声音发射器,陷阱触发器等

歧视的联合+继承组合是我最初的想法; 尽管如此,由于我是FP的新手,我认为向专业人士询问最佳,实用,接近这一点的方式是明智的.

谢谢,

JD

inheritance f# discriminated-union

4
推荐指数
2
解决办法
1637
查看次数

琐碎的Haxe(HaxePunk)游戏在HTC Desire(Icecream Sandwich)上跑得太慢

我已经制作了一个简单的3帧动画角色走到了使用Haxe + Haxepunk点击屏幕的地方......好吧,我从在线教程中复制/粘贴代码只是为了测试Haxe.

这在flash,iOS模拟器和三星Galaxy 3上运行得很好......但是我的HTC希望它以低于每秒1帧的速度运行.虽然我知道渴望不是春鸡,但这是一个巨大的性能差距,比我在任何应用程序上看到的更多:Galaxy vs. Desire ......

这是一个Haxe问题还是我做错了什么(错误的NDK,错误的编译标志,操作系统太旧等)?

android haxe android-4.0-ice-cream-sandwich haxepunk

2
推荐指数
1
解决办法
1052
查看次数

使用cyclejs在文档加载上发出http请求

如何使用cyclejs对文档加载的Web服务发出http请求?这些示例涵盖了对用户输入的反应,不符合我的需求.

cyclejs

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