小编Hep*_*tic的帖子

让std :: map allocator工作

我有一个非常基本的分配器:

template<typename T>
struct Allocator : public std::allocator<T> {
    inline typename std::allocator<T>::pointer allocate(typename std::allocator<T>::size_type n, typename std::allocator<void>::const_pointer = 0) {
    std::cout << "Allocating: " << n << " itens." << std::endl;
    return reinterpret_cast<typename std::allocator<T>::pointer>(::operator new(n * sizeof (T))); 
    }

    inline void deallocate(typename std::allocator<T>::pointer p, typename std::allocator<T>::size_type n) {
    std::cout << "Dealloc: " <<  n << " itens." << std::endl;
        ::operator delete(p); 
    }

    template<typename U>
    struct rebind {
        typedef Allocator<U> other;
    };
};
Run Code Online (Sandbox Code Playgroud)

当我使用它时,它工作正常:"std :: vector>",但是,当我尝试将它与std :: map一起使用时:

int main(int, char**) …
Run Code Online (Sandbox Code Playgroud)

c++ stl allocator

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

基于原点约束函数(路径依赖类型?类型生成?)

抱歉可怕的头衔,不确定更好的一个.这是我的问题的一个简单的简化(对不起,如果它看起来如此微不足道,这是毫无意义的):

class RList[T](data: List[T]) {
   def map[V](f: T=>V): RList[V] = ...
}
Run Code Online (Sandbox Code Playgroud)

一个的想法RList(限制列表)是你不能调整其大小,或改变它的元素的顺序.但是您可以使用为您提供包含更改数据的新RList的函数.

现在需要有一个创建RList的函数.它可能有一个签名,如:

def toRList[T](values: List[T]): RList[T] = ...
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但现在是棘手的部分.我需要一个这样工作的函数:

def zip[T, V](left: RList[T], right: RList[V]): RList[(T,V)]
Run Code Online (Sandbox Code Playgroud)

但是有了额外的约束leftright具有相同的起源.因此,它们保证大小相同.

例如应编译的代码:

val x = toRList(List(1, 2, 3))
val y = x.map(_ * 2)
val z = y.map(_.toString)
zip(y,z)
Run Code Online (Sandbox Code Playgroud)

例如,无法编译的代码

val y = toRList(List(2, 4, 6))
val z = toRList(List("one", "two"))
zip(y,z)
Run Code Online (Sandbox Code Playgroud)

*注意:在我原来的问题中,zip的约束必须是来自同一个"来源".仅仅保证它们的长度相同还不够(更不用说,在编译时不知道列表的大小)*

我还需要能够zip多次使用,所以这样的东西应该编译

zip(a,zip(b,c))
Run Code Online (Sandbox Code Playgroud)

(假设a …

scala path-dependent-type

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

在reactjs中管理整个身体

我有一个react组件管理整个应用程序.看起来像:

var Page = React.createClass({
    displayName: 'Page',

    render: function() {
        return (
            React.DOM.div(null
                /*, stuff here ..*/
            )
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

和HTML看起来像

<body id="content"></body>
Run Code Online (Sandbox Code Playgroud)

我把它渲染成:

React.renderComponent(Page(null), document.getElementById('content'));
Run Code Online (Sandbox Code Playgroud)

但相反,我想做出反应来管理整个body标记,因此没有冗余的嵌套div.我怎么能渲染这样的东西?

javascript reactjs

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

使用_(下划线)时"扩展函数缺少参数类型"?

我不断遇到scala的一个问题是lambda'表达式.例如

JarBuilder.findContainingJar(clazz).foreach {userJars = userJars + _ }
Run Code Online (Sandbox Code Playgroud)

给我一个错误,如:

missing parameter type for expanded function ((x$1) => userJars.$plus(x$1))
Run Code Online (Sandbox Code Playgroud)

然而,如果我自己做扩展:

JarBuilder.findContainingJar(clazz).foreach {x => userJars = userJars + x }
Run Code Online (Sandbox Code Playgroud)

它工作正常.

这是Scala的错误吗?或者我在做一些可怕的错误?

syntax scala compiler-errors function

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

akka演员的增量处理

我有演员需要做很长时间运行和计算上昂贵的工作,但计算本身可以逐步完成.因此,虽然完整的计算本身需要数小时才能完成,但中间结果实际上非常有用,我希望能够响应它们的任何请求.这是我想要做的伪代码:

var intermediateResult = ...
loop {
     while (mailbox.isEmpty && computationNotFinished)
       intermediateResult = computationStep(intermediateResult)


     receive {
         case GetCurrentResult => sender ! intermediateResult
         ...other messages...
     }
 }
Run Code Online (Sandbox Code Playgroud)

scala actor akka

6
推荐指数
2
解决办法
1835
查看次数

mprotect整个程序,运行危险代码

我有一个小程序,可以映射具有潜在危险的可执行代码(使用PROT_EXEC),prctl(PR_SET_SECCOMP, 1)然后调用并执行此mmap编码。这一切都很好,并允许我通过将mmap'd区域同步到磁盘来“保存”评估状态,然后稍后将其重新加载(很可能在另一台计算机上进行负载平衡)。但是,这种技术并不总是有效的-因为此代码可能已对不在mmap'd区域中的程序进行了更改,因此这些信息将丢失。

因此,我想做的是在调用代码之前使所有内容(除了此mmap'd区域之外)绝对都是只读的。这样,我保证可执行代码除了可以随意进行序列化/反序列化的mmap'd区域之外,不会更改任何状态。

顺便说一句,这是x86_64上的Linux

谢谢

c linux posix sandbox mprotect

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

用隐式证据约束一个类

说我有这个:

  trait Animal {
    type Species
  }
Run Code Online (Sandbox Code Playgroud)

我可以很容易地编写一个只需要同一物种的两只动物的功能

def breed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species) = ???
Run Code Online (Sandbox Code Playgroud)

但我想创建一个具有相同类型约束的类:

class Bed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species)
Run Code Online (Sandbox Code Playgroud)

但它不会编译.我尝试了一些尝试使用具有稳定标识符和约束的特征的组合,但不管怎么样,但无论我做什么 - 我似乎总是遇到问题

  trait Bed {
    type T
    def a: Animal { type Species = T }
    def b: Animal { type Species = T }
  }

  object Bed {

    def apply(a1: Animal, b1: Animal)(implicit ev: a1.Species =:= b1.Species) = new Bed {
      type T = b1.Species
      def a = a1 …
Run Code Online (Sandbox Code Playgroud)

scala path-dependent-type

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

scalaz效果的简单控制流程

拿这个简单的代码:

var line = "";

do {
  println("Please enter a non-empty line: ")
  line = readLine()
} while (line.isEmpty())

println("You entered a non-empty line: " + line)
Run Code Online (Sandbox Code Playgroud)

它绝对不是特别优雅,特别是在不幸的范围内line- 但是,我认为阅读起来非常简单.

现在尝试将其直接转换为scalaz效果,我想出了:

def nonEmptyLine: IO[String] = for {
   _ <- putStrLn("Please enter a non-empty line:")
   line <- readLn
   r <- if (line.isEmpty()) nonEmptyLine else IO(line)
}  yield r


(for {
  line <- nonEmptyLine
  _ <- putStrLn("You entered a non-empty line: " + line)
} yield ()).unsafePerformIO
Run Code Online (Sandbox Code Playgroud)

这让我觉得我错过了什么,因为这根本不是一种改进?我缺少一些更高阶的控制流程吗?

scala scalaz scalaz7

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

从只读的couchdb复制

我有一个服务器,有一个couchdb数据库,其中包含我的应用程序所需的信息.它包含几兆字节的东西,一些日常变化的文档(添加最新消息,删除旧文档,更新一些).

应用程序尽可能与服务器数据库同步(使此信息可脱机使用).

但是,此信息对我的应用程序的每个用户都是全局的 - 因此必须限制为严格只读访问.但是,我读到couchdb需要对源进行访问才能有效复制(为了检查点).

性能影响是什么?这有什么办法吗?

replication couchdb

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

带有可变参数函数的Clojure尾调用递归

我基本上想要这个:

(defn mymax
        ([a b] (if (> a b) a b))
        ([a b & rest] (apply recur (conj rest (mymax a b)))))
Run Code Online (Sandbox Code Playgroud)

这样:(mymax 1 2 3 4)tail调用(mymax 2 3 4)尾调用(mymax 3 4)

我看到"应用"停止重复进入尾部位置的问题,这意味着它不起作用.但我不知道如何使用apply for variable争论功能

[注意,我知道你可以用reduce来解决这个特殊问题.只是想知道你是否可以使用变量参数进行尾调用递归]

clojure

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