小编Jan*_*ček的帖子

在Node.js中读取PNG图像

在Node.js中有一种简单的方法来读取PNG文件并获取图像的像素吗?像节点图像,但另一种方式:)

我浏览了https://github.com/joyent/node/wiki/modules#wiki-graphics中列出的库,但它们或者是命令行工具的简单包装器,提供裁剪和调整大小或复杂的绘图工具node-canvas.

png node.js

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

Haskell`ncurses`库

我想在我的Haskell程序中使用基于文本的UI.我找到了ncurses库的一些绑定(另请参阅hscurses或ncurses,使用哪一个?).在hscursesnanocurses包都是围绕C库只是简单的包装,而vty不是非常有据可查,并有点难看(例如混合snake_case和驼峰).

ncursesHackage上的库看起来更漂亮,并且提供了非常适合Haskell的API.问题是它似乎没有实现一些关键功能,如调整大小或刷新窗口.

所以我的问题是:

  • 有没有其他Haskell文本UI库,无论是基于ncurses还是没有,我错过了?
  • 如果没有人,是否可以扩展ncursesHaskell库至少支持窗口刷新和调整大小?(这可能应该与项目所有者协商,但我需要快速解决方案)

编辑:

我终于在nscurses没有窗户(和面板)的情况下使用,以避免让他们感到烦恼.输出到窗口的右下角我遇到了问题(Python的ncurses绑定报告了一个非常类似的问题).我没有写那里解决它:).

haskell ncurses

15
推荐指数
2
解决办法
3545
查看次数

解释和编译的Haskell之间的ncurses的区别?

函数timeoutgetchHaskell中使用的ncurses库有一个奇怪的问题.当我从GHCi或runhaskell使用它们时,它们按预期工作 - getch等待给定的毫秒数timeout然后返回,即使没有给出输入.但是当我使用GHC 编译同一个文件时,getch立即返回.

我为Haskell尝试了两个ncurses绑定; hscurses:

import UI.HSCurses.Curses

main = do
  initCurses
  timeout 1000
  c <- getch
  endWin
  print c
Run Code Online (Sandbox Code Playgroud)

并且ncurses:

import UI.NCurses

main = do
  e <- runCurses $ do
    win <- defaultWindow
    getEvent win $ Just 1000
  print e
Run Code Online (Sandbox Code Playgroud)

两者都表现出与之前描述的相同的奇怪方式.

我也试过C中的等价程序:

#include <ncurses.h>

int main()
{
  initscr();
  wtimeout(stdscr,1000);
  int c = getch();
  endwin();
  printf("%d\n", c);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个按预期工作.

所以我的问题是:当使用解释后的终端和编译的Haskell时,有什么能够产生差异?runhaskell和ghci修改了一些微妙的终端设置吗?或者编译后的代码是否以不同的方式加载库?

添加:

我试图使用FFI从编译的Haskell调用C程序,它立即返回(这是不正确的).我认为这意味着问题不在库中,而是在GHC运行时的某个地方.

haskell ncurses ghc ghci runhaskell

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

解决边缘案例Haskell模块的导入和导出

我正在编写一个小的Haskell编译器,我想尽可能多地实现Haskell 2010.我的编译器可以解析模块,但是将模块完成到程序似乎是一项非常重要的任务.我编写了一些棘手但可能有效的Haskell模块示例:

module F(G.x) where
  import F as G
  x = 2
Run Code Online (Sandbox Code Playgroud)

这里模块F导出G.x,但是G.x相同F.x,因此模块F导出x当且仅当它导出时x.

module A(a) where
  import B(a)
  a = 2

module B(a) where
  import A(a)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,要解决模块的出口A,编译器检查a进口来自B相同的声明a = 2,但B出口a,当且仅当,A出口a.

module A(f) where
  import B(f)

module B(f) where
  import A(f)
Run Code Online (Sandbox Code Playgroud)

在解析模块期间A,编译器可能假设fB存在导入,意味着A导出f,因此 …

compiler-construction haskell compilation

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

显式实例化的类模板中的自动构造函数

template<bool VAR> struct Obj在头文件(obj.h)中声明了一个模板,带有显式自动移动构造函数(= default).

// obj.h
#pragma once
#include <vector>

template<bool VAR>
struct Obj {
  std::vector<int> member;
  Obj(int m): member(m) { }
  Obj(Obj&&) = default;
  int member_fun() const;
};

extern template struct Obj<false>;
extern template struct Obj<true>;
Run Code Online (Sandbox Code Playgroud)

模板的成员函数在另一个文件(obj.cpp)中定义,并显式模板化实例化:

// obj.cpp
#include "obj.h"

template<bool VAR>
int Obj<VAR>::member_fun() const {
  return 42;
}

template struct Obj<false>;
template struct Obj<true>;
Run Code Online (Sandbox Code Playgroud)

然后从主文件(main.cpp)中使用此模板:

// main.cpp
#include <utility>
#include "obj.h"

int main() {
  Obj<true> o1(20); …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

Rust优化循环?

我正在做一些非常简单的基准来比较C和Rust的性能.我使用了一个函数添加整数1 + 2 + ... + n(我可以通过手工计算验证的东西),其中n = 10^10.

Rust中的代码如下所示:

fn main() {
  let limit: u64 = 10000000000;
  let mut buf: u64 = 0;
  for u64::range(1, limit) |i| {
    buf = buf + i;
  }
  io::println(buf.to_str());
}
Run Code Online (Sandbox Code Playgroud)

C代码如下:

#include <stdio.h>
int main()
{
  unsigned long long buf = 0;
  for(unsigned long long i = 0; i < 10000000000; ++i) {
    buf = buf + i;
  }
  printf("%llu\n", buf);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译并运行它们:

$ rustc sum.rs -o …
Run Code Online (Sandbox Code Playgroud)

optimization gcc rust

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