小编Rya*_*yan的帖子

为什么Haskell的"无所事事"功能,id,消耗大量内存?

Haskell有一个标识函数,它返回输入不变.定义很简单:

id :: a -> a
id x = x
Run Code Online (Sandbox Code Playgroud)

所以为了好玩,这应该输出8:

f = id id id id id id id id id id id id id id id id id id id id id id id id id id id
main = print $ f 8
Run Code Online (Sandbox Code Playgroud)

几秒钟后(根据任务管理器大约2 GB的内存),编译失败了ghc: out of memory.同样,翻译说ghci: out of memory.

由于它id是一个非常简单的函数,我不希望它在运行时或编译时成为内存负担.什么是用于的内存?

haskell ghc

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

如何从Rust获取机器的IP地址列表?

具体来说,我感兴趣的是以编程方式获取IP地址列表,例如返回的IP地址ifconfig.

优选地,该解决方案是跨平台的.

network-programming rust

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

Lua的'if'语句的字节码可以向后跳吗?

我正在编写一些可以读取string.dump()函数产生的字节码的Lua代码.我假设(因为它允许一些优化和更少的编码)所有OP_JMP指令在用于if语句时增加指令指针.它们可以在技术上向后跳,因为它们使用sBx值(可以是负值).我只对标准Lua 5.1实现中的if语句的字节码感兴趣.

我使用chunkspy(很棒的工具btw)来查看几个样本的字节码.

这是一个基本的if语句:

a, b = 1, 2
if a == b then
  print '='
elseif a < b then
  print '<'
else
  print '>'
end
Run Code Online (Sandbox Code Playgroud)

它产生四次跳跃,其中没有一次是负的:

[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
Run Code Online (Sandbox Code Playgroud)

我尝试在Lua源代码中寻找答案,但它最终让人感到困惑(我确信这是超级优雅的代码,如果我花时间去掌握它).

有没有人知道"if"语句的情况,其中lua的OP_JMP指令对sBx有负值或者知道它们是否总是正值?

lua bytecode

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

编译器优化如何影响代码逻辑?

当使用完全禁用(g++ -O0)的优化编译同一段代码,然后再次完全启用优化(g++ -O3)时,源代码本身的逻辑如何改变?

例如,编译器可以

这两个优化使代码执行速度更快,而不会影响原始源代码的完整性.没有这些优化运行的任何代码都将在启用它们的情况下运行.

但是,编译器优化也会影响代码逻辑.以下是我所知道的两个例子:

我很惊讶,很幸运,了解这些因为他们可能在错误的情况下成为巨大的潜在陷阱.

所以我想知道,有没有其他情况下c ++编译器优化会影响代码逻辑?我特意在g ++编译器下查找有关c ++ 11(没有任何未定义的行为)的信息,但欢迎提供其他编译器的提示.

c++ g++ compiler-optimization c++11

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

在Haskell标记中生成唯一值

为了生成x86汇编代码,我定义了一个名为的自定义类型X86:

data X86 a = X86 { code :: String, counter :: Integer, value :: (X86 a -> a) }
Run Code Online (Sandbox Code Playgroud)

此类型用于如下所示的标记.这样可以轻松编写用于生成if语句,for循环等的模板...

generateCode :: X86 ()
generateCode = do
  label1 <- allocateUniqueLabel
  label2 <- allocateUniqueLabel
  jmp label1
  label label1
  jmp label2
  label label2
Run Code Online (Sandbox Code Playgroud)

说明定义如下:

jmp :: String -> X86 ()
jmp l = X86 { code = "jmp " ++ l ++ ";\n", counter = 0, value = const () }

label :: String -> X86 ()
label l …
Run Code Online (Sandbox Code Playgroud)

monads haskell state-monad do-notation

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

如何在c中的链接描述文件中访问变量?

在链接器脚本中,我定义了PROVIDE(__KERNEL_BEGIN__ = .);.

地址可以从以下地址访问:

extern uint32_t __KERNEL_BEGIN__[];
Run Code Online (Sandbox Code Playgroud)

但是,以下不起作用(给出错误的地址):

extern uint32_t * __KERNEL_BEGIN__;
Run Code Online (Sandbox Code Playgroud)

我看着集会.第一种方法__KERNEL_BEGIN__提供了确切的地址.第二个,__KERNEL_BEGIN__ = [address]在地址处查找值.

那么,一定是这样吗?我无法区分.

c gcc ld

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

为什么jQuery的$ .each将数字转换为对象?

jQuery的每个函数在数组元素的上下文中执行回调函数:

$.each([3], function () {
    console.log(this === 3);
    console.log(this.valueOf() === 3);
});
Run Code Online (Sandbox Code Playgroud)

我期待true true,但得到了false true.这表示数组的元素由每个函数加框.

我的问题有两个部分:

  • 拳击数量背后的动机是什么?
  • 可以按照我的预期编写新的每个函数吗?

javascript jquery

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

HTML5 Canvas:fontBoundingBoxAscent 与actualBoundingBoxAscent

TextMetrics API返回一些名称相似的字段:

  • fontBoundingBoxAscentactualBoundingBoxAscent
  • fontBoundingBoxDescentactualBoundingBoxDescent

MDN 文档不是很清楚,也没有提供视觉效果。它们之间有什么区别?

另外,作为后续,我如何根据这些值计算文本的高度?

html javascript canvas

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

Lua获得数字类型

在Lua中,对任何数字使用类型函数总是返回'number'.是否有一个函数可以告诉您Lua解释器是否使用32位浮点数,64位双精度数,整数或其他数字类型?

我试着写一个这样的函数:

function numbertype()
  local rational = 5 / 2

  if rational == 2 then
    -- equals 2
    return 'int'
  else
    -- about 2.5
    return 'double' -- but could it be a 32 bit float or something else?
  end
end

print(numbertype())
Run Code Online (Sandbox Code Playgroud)

它还无法检测到浮点数,双精度数和未知类型之间的差异.如何在Lua的解释器中查询Lua的数字类型是否等同于int,float或double?我希望它能用纯净的Lua工作.

lua

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