小编sch*_*ine的帖子

为什么移动图灵是完整的?

我最近发现了这个:https : //github.com/xoreaxeaxeax/movfuscator
这似乎取决于mov图灵完备的事实。这是真的吗,为什么?

x86 assembly computer-science turing-complete mov

14
推荐指数
2
解决办法
5262
查看次数

在Haskell中,变量之前的下划线是什么意思?

我正在浏览Data.Foldable的来源,我来到这里Endo #. f,点击此链接后,遇到了:

(#.) _f = coerce
Run Code Online (Sandbox Code Playgroud)

现在,首先,我不知道coerce前面提到的Coercible是什么,然而,它更令我感到困惑_f.我搜索过"变量之前的Haskell下划线"和类似内容,并且只发现了关于_模式匹配语法的讨论.

haskell

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

我可以使用 splatting 将参数传递给非 powershell 可执行文件吗?

我可以做这样的事情吗?

$splatting_table = @{
   "-parameter" = "value"
   "-parameter2" = "value2"
}
.\external-command.exe @splatting_table
Run Code Online (Sandbox Code Playgroud)

作为等价于

.\external-command.exe -parameter value -parameter2 value2
Run Code Online (Sandbox Code Playgroud)

powershell

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

为什么floatRange,floatRadix和floatDigits起作用?

根据Hackage,这些RealFloat类的功能是

......常数函数[s] ...

如果它们始终保持相同的值,无论参数如何,如本说明所示,为什么不简单地使用:

class (RealFrac a, Floating a) => RealFloat a where
    floatRadix :: Integer
    floatDigits :: Int
    floatRange :: (Int, Int)
    ...
Run Code Online (Sandbox Code Playgroud)

floating-point haskell

7
推荐指数
3
解决办法
142
查看次数

为什么GHCi不允许此版本的连接的类型参数?

我试过玩弄TypeApplications,并使用以下内容:

 join = (>>= id)
 :t join
join :: Monad m => m (m a) -> m a
 :t join @[]
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

<interactive>:1:1: error:
    * Cannot apply expression of type `m0 (m0 b0) -> m0 b0'
      to a visible type argument `[]'
    * In the expression: join @[]
Run Code Online (Sandbox Code Playgroud)

在我看来,这应该起作用

 :t fmap @[]
fmap @[] :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

作品.

haskell types

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

为什么 GHC 拒绝允许这种存在类型函数?

我定义了一个通用的heterogenous,我称之为(我不知道这是否正确),输入:

data Heterotype f = forall a. f a => Heterotype a
Run Code Online (Sandbox Code Playgroud)

然后我决定创建一个函数,允许您从多态值创建异型:

hset :: (forall a. f a => a) -> Heterotype f
hset x = Heterotype x
Run Code Online (Sandbox Code Playgroud)

但是,GHC 抱怨以下内容:

????????.hs:15:10: error:
    * Could not deduce: f a0 arising from a use of `Heterotype'
    * In the expression: Heterotype x
      In an equation for `hset': hset x = Heterotype x
    * Relevant bindings include
        x :: forall a. f a => a
          (bound at ????????.hs:15:6)
        hset :: …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell types

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

有没有办法在仍然编写类型签名的同时指定隐式参数的递归行为?

根据 GHC 用户指南,如果函数具有类型签名,则显式绑定的隐式参数仅传播到递归调用中,否则,将使用来自原始调用的隐式参数。

fu True = ?gn
fu False = let ?gn = not ?gn in fu True
br :: (?sp :: Bool) => Bool -> Bool
br True = ?sp
br False = let ?sp = not ?sp in br True
Run Code Online (Sandbox Code Playgroud)
ghci> let ?gn = True in fu False
True
ghci> let ?sp = True in br False
False
Run Code Online (Sandbox Code Playgroud)

但是,如果我想fu在保留其行为的同时提供类型签名怎么办?我可以这样做吗?

haskell types ghc

5
推荐指数
0
解决办法
85
查看次数

你能根据目标指针宽度是否至少为某个值来有条件地在 Rust 中编译某些内容吗?

I\xe2\x80\x99m 正在研究一个特征,其中包括一个测量类型属性的函数。返回类型Option<usize>允许值大于usize::MAX,但我包含了一个可重写的函数,该函数仅返回usize并发生恐慌,否则默认情况下通过安全函数实现。我现在想为 Rust 中已有的数字类型实现这个特性。usize我想以更快的实现覆盖其中包含的类型的恐慌函数。

\n

如何根据给定的数字类型是否完全包含在 中 有条件地编译特征函数usize?I\xe2\x80\x99ve 查看了,target_pointer_width但这不是向前兼容的,因为 I\xe2\x80\x99d 必须列出我当前期望存在的所有指针宽度并手动具有该属性。有什么方法可以自动完成吗?理想情况下,\xe2\x80\x99d 是 a#[cfg(target_pointer_width >= "64")]或其他东西,但没有\xe2\x80\x99t。

\n

rust

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

在“#if”条件中是否允许使用“sizeof”?

根据CPPReference#if后面跟着一个常量表达式。sizeof是常量表达式中的有效运算符。但是当我写这个并用 clang 或 gcc 编译它时,它失败了:

\n
#if sizeof(char) == 1\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n

clang\xe2\x80\x99s 输出:

\n
sizeof in preprocessor directive.c:1:5: error: function-like macro \'sizeof\' is not defined\n#if sizeof(char) == 1\n    ^\n1 error generated.\n
Run Code Online (Sandbox Code Playgroud)\n

gcc\xe2\x80\x99s 输出:

\n
sizeof in preprocessor directive.c:1:11: error: missing binary operator before token "("\n    1 | #if sizeof(char) == 1\n      |           ^\n
Run Code Online (Sandbox Code Playgroud)\n

是 CPPReference 错误还是编译器错误?

\n

c c-preprocessor

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

我在这里正确解释了 C 的操作顺序吗?

我对CPPReference说 postincrement\xe2\x80\x99s 值评估在其副作用之前排序这一事实感到困惑,但 preincrement 没有这样的保证。

\n

我现在想出了一个例子,这很重要,但我不确定我的分析是否正确。

\n

据我了解,这两个程序的不同之处在于第一个包含 UB,而第二个则不包含:

\n
#include <stddef.h>\n#include <stdio.h>\n\nint main(void) {\n    int arr[] = {0, 1, 2};\n    int i = 1;\n    int x = ++arr[arr[i]];\n}\n
Run Code Online (Sandbox Code Playgroud)\n
#include <stddef.h>\n#include <stdio.h>\n\nint main(void) {\n    int arr[] = {0, 1, 2};\n    int i = 1;\n    int x = arr[arr[i]]++;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我对这个表达式的分析++arr[arr[i]]如下:

\n
    \n
  1. 有以下先序关系:\n
      \n
    • 的值计算在 的i值计算之前排序arr[i]
    • \n
    • 的值计算在 的arr[i]值计算之前排序arr[arr[i]]
    • \n
    • 的值计算在 的arr[arr[i]]值计算之前排序++arr[arr[i]]
    • \n
    \n …

c sequence-points language-lawyer order-of-execution

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