小编Vik*_*ahl的帖子

Yesod持续的例子

我正在和Yesod一起徘徊,我遇到了麻烦,我需要一个很好的例子来说明如何提交表单并将其输入SQLite持久数据库.该耶索德书中谈到了很多关于如何设置一个表,但是很短就如何插入一行的例子,以及如何在数据库中保存的数据的列表.

sqlite haskell web-services yesod

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

Haskell中编译器的代码生成

我正在编写一个小型命令式语言的编译器.目标语言是Java字节码,编译器在Haskell中实现.

我已经写了一个语言的前端 - 即我有一个词法分析器,解析器和类型检查器.我无法弄清楚如何进行代码生成.

我保留了一个表示局部变量堆栈的数据结构.我可以使用局部变量的名称查询此结构并获取其在堆栈中的位置.当我遍历语法树时传递这个数据结构,并在我进入和退出新范围时弹出和推送变量.

我弄清楚的是如何发出字节码.在终端发出字符串并将它们连接在更高的级别似乎是一个糟糕的解决方案,无论是清晰度还是性能方面.

tl; dr如何在使用语法树时发出字节码?

compiler-construction haskell code-generation

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

使用ListLike的不明确的类型

我正在Haskell中编写一个函数,ListLike用任何Ord元素制作直方图:

import qualified Data.ListLike as LL
...
frequencies :: (Ord x, LL.ListLike xs x) => xs -> [(x, Int)]
frequencies xs = LL.map (\x->(LL.head x, LL.length x)) $ LL.group $ LL.sort xs
Run Code Online (Sandbox Code Playgroud)

在尝试编译上面的代码时,我收到有关模糊类型的错误消息:

 Ambiguous type variable `full0' in the constraint:
 (LL.ListLike full0 xs) arising from a use of `LL.group'
 Probable fix: add a type signature that fixes these type variable(s)
 In the expression: LL.group
 In the second argument of `($)', namely `LL.group $ LL.sort xs'
 In …
Run Code Online (Sandbox Code Playgroud)

haskell types type-inference strong-typing

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

使用Rust构建的DLL是否在运行时需要libgcc.dll?

如果我使用Rust语言构建DLL ,它是否需要libgcc*.dll在运行时出现?

一方面:

  • 我在互联网上的某个地方看到了一个帖子,声称是的;
  • rustc.exe已经libgcc_s_dw2-1.dll在其目录中,并且cargo.exehttp://crates.io网站下载时不会在没有dll的情况下运行;

另一方面:

  • 我看过有关在Rust中构建玩具操作系统内核的文章,因此他们肯定不需要存在libgcc动态库.

所以,我很困惑.什么是明确的答案?

windows rust libgcc

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

在Reactor中并行分发`groupBy`组

我正在学习Reactor,并且想知道如何实现某种行为。假设我有一堆传入消息。每个消息都与某个实体相关联,并包含一些数据。

interface Message {
    String getEntityId();
    Data getData();
}
Run Code Online (Sandbox Code Playgroud)

与不同实体有关的消息可以并行处理。但是,与任何单个实体有关的消息必须一次处理一次,即,对于实体的消息2的处理要"abc"等到针对实体的消息1的处理"abc"完成后才能开始。在处理消息的过程中,应缓存该整段消息。其他实体的消息可以不受阻碍地进行。可以认为它是每个实体上运行这样的代码的线程:

public void run() {
    for (;;) {
        // Blocks until there's a message available
        Message msg = messageQueue.nextMessageFor(this.entityId);

        // Blocks until processing is finished
        processMessage(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何使用React做到这一点而又不会受到阻碍?总消息速率可能很高,但是每个实体的消息速率会非常低。实体集可能非常大,因此不一定事先知道。

我猜可能看起来像这样,但我不知道。

{
    incomingMessages()
            .groupBy(Message::getEntityId)
            .flatMap(entityStream -> entityStream
                    /* ... */
                    .map(msg -> /* process the message */)))
                    /* ... */
}

public static Stream<Message> incomingMessages() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

java event-driven reactor project-reactor

5
推荐指数
2
解决办法
1761
查看次数

在 Kubernetes 中为入口/出口使用静态 IP

我有一个试图在 Kubernetes 集群中运行的程序。该程序是一个使用基于 UDP 的非标准协议的服务器。该协议主要由短的请求/回复对组成,类似于 DNS。与 DNS 的一个主要区别是“服务器”和“客户端”都可以发送请求,即。通信可以由任何一方发起。

客户端是使用服务器 IP 地址配置的嵌入式设备。客户端将他们的请求发送到这个 IP。他们还检查传入消息是否来自该 IP,丢弃来自其他 IP 的消息。

我的问题是如何使用 Kubernetes 来设置服务器,以便

  1. 服务器接受特定 IP 上的传入 UDP 消息。
  2. 服务器可以看到真实的客户端源 IP。
  3. 服务器发送的任何回复(或其他消息)都具有与其源相同的 IP(以便客户端接受它们)。

我尝试过但不起作用的一件事是设置一个Servicewithtype: LoadBalancerexternalTrafficPolicy: Local(后者为要求 2 保留源 IP)。此设置满足上面的要求 1 和 2,但由于出站消息不通过负载均衡器,因此它们的源 IP 是包含服务器的 pod 正在运行的任何节点的源 IP。

我在 Google Cloud Platform (GKE) 上运行 Kubernetes。

udp nat google-cloud-platform kubernetes google-kubernetes-engine

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

为通用集合编写contains()

我正在用java编写一个skiplist类作为练习.我写了一个名为SkipListInternal<E>包含实际跳过列表的类.我还创建了一个包装器类SkipListSet<E>,它实现了SortedSet<E>接口并包含一个实例SkipListInternal<E>.

除其他外,SkipListInternal<E>包含一个E find(E e)返回元素的方法,e如果它存在,则返回null,否则返回null.

在编写boolean contains(Object o)(继承自Collection<E>via SortedSet<E>)方法时,我注意到它的参数是一个Object而不是E.我打算做这样的事情,但由于类型擦除而不可能:

public class SkipListSet<E> implements SortedSet<E>{
   private SkipListInternal<E> skiplist;

   ...

   public boolean contains(Object o){
       if (!(o instanceof E)) return false;
       return skiplist.find((E) o) != null;
   }

   ...

}
Run Code Online (Sandbox Code Playgroud)

既然不能这样做,我该怎么做呢?

java generics collections

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

(require)函数的clojure类路径问题?

CLASSPATH将"/ Users/smcho/Desktop/clojure"作为其路径之一,并且此目录具有文件hello.clj.

运行clojure并运行(require'hello)会显示此错误消息.

java.io.FileNotFoundException: Could not locate hello__init.class or hello.clj on classpath:  (NO_SOURCE_FILE:0)

当我将目录更改为"/Users/.../clojure",并运行相同的(require'hello)时,没有问题.的.在CLASSPATH上.

运行

java -cp /Users/smcho/bin/jar/clojure.jar:/Users/smcho/Desktop/clojure clojure.lang.Repl

也有效.

为什么clojure无法在CLASSPATH上找到源代码?

java clojure classpath

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

设置第一个“1”之前的所有位

假设一个 32 位无符号整数(答案当然可以推广到任何大小更好)。

该整数可以假定为 2 的幂,因此仅设置一位。我想设置整数中的所有位,除了那些低于设置位的位。因此(为简洁起见,使用 8 位整数)00001000将变为11111000.

这当然可以通过找到一个设置位然后迭代较高位并设置它们来完成。假设highest_set返回最高设置位的位置:

uint32_t f(uint32_t x)
{
  int n = highest_set(x);
  for (int i = 31; i != n; --i) {
      x |= 1 << i;
  }
  return x;
}
Run Code Online (Sandbox Code Playgroud)

然而, 的运行时间f确实取决于 的值x,并且我觉得有一种更聪明的方法可以做到这一点。

binary integer bit-manipulation

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

Python中布尔表达式的意外结果

可能重复:
为什么表达式0 <0 == 0在Python中返回False?

Python 2 REPL的以下输出让我困惑:

>>> 15>10==True
False
>>> 15>1==True
True
>>> 15>2==True
False
>>> 15>False
True
Run Code Online (Sandbox Code Playgroud)

如果15>10==True被评估为(15>10)==True表达式将简化为print True==True,显然评估为True.如果15>10==True被评估为15>(10==True)简化的表达式15>False也评估为True.这两种解释都与表达式(False)的实际值相矛盾.

我可以理解15>1==True评价,True因为1==True是真的,但没有任何解释15>10==True对我有意义.

简介:在Python 2中,为什么15>10==True评估False

python python-2.x operator-precedence

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

fprintf没有写入文件

我试图使用以下C代码打印出我传入的数组.它应该以十六进制格式输出每行一个文本,我打开文件没有问题.当我第一次写它时,我没有问题它工作我打开输出文件,我的阵列就在那里.我更改了fileOutName参数,现在我无法打印出任何我尝试更改它的东西以及其他一些东西,似乎没什么用.此外,当我调试它似乎pOutfile是一个糟糕的指针,但就像我说它仍然创建文件,它只是不会写入任何东西.任何帮助,将不胜感激.谢谢

printoutput(int output[], char * fileOutName){
    int i = 0;
    FILE * pOutfile;
    pOutfile = fopen( fileOutName, "w" );
    while(output[i] != 0){
        fprintf( pOutfile, "0x%0.4X\n", output[i] );
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

c printf

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

在async_read_some上提升asio"网络连接被本地系统中止"

我在使用boost asio创建一个非常简单的基于TCP的服务器 - 客户端连接时遇到了问题.当我从服务器上的客户端获得连接并进入处理async_read_some的方法时,我检查错误,并且总是收到错误1236,这会显示消息"网络连接已被本地系统中止".

我刚刚开始使用boost,所以我不太熟悉库的工作原理以及我可能做错了什么.我在下面提供了我的代码的简化版本:

/*Client connection code*/
ClientConnection::ClientConnection(boost::asio::io_service& io_service) : m_Socket(io_service)
{

}

ClientConnection::ClientConnectionPointer ClientConnection::Create(boost::asio::io_service& io_service)
{
    return ClientConnection::ClientConnectionPointer(new ClientConnection(io_service));
}

void ClientConnection::handle_write(const boost::system::error_code& error, size_t bytes_transferred)
{
    //once we've written our packet, just wait for more
    m_Socket.async_read_some(boost::asio::buffer(m_IncomingBytesBuffer, MAX_BYTES_LENGTH),
        boost::bind(&ClientConnection::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}

void ClientConnection::handle_read(const boost::system::error_code& error, size_t bytes_transferred)
{
    if(!error)
    {
        //deal with the data that comes in here

    }
    else
    {
        std::cout << "Error reading port data" << std::endl;
        std::cout <<  error.message() << std::endl;
    }

} …
Run Code Online (Sandbox Code Playgroud)

c++ boost network-programming boost-asio

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