我最近发现了这个:https : //github.com/xoreaxeaxeax/movfuscator
这似乎取决于mov图灵完备的事实。这是真的吗,为什么?
我正在浏览Data.Foldable的来源,我来到这里Endo #. f,点击此链接后,遇到了:
(#.) _f = coerce
Run Code Online (Sandbox Code Playgroud)
现在,首先,我不知道coerce前面提到的Coercible是什么,然而,它更令我感到困惑_f.我搜索过"变量之前的Haskell下划线"和类似内容,并且只发现了关于_模式匹配语法的讨论.
我可以做这样的事情吗?
$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) 根据Hackage,这些RealFloat类的功能是
......常数函数[s] ...
如果它们始终保持相同的值,无论参数如何,如本说明所示,为什么不简单地使用:
class (RealFrac a, Floating a) => RealFloat a where
floatRadix :: Integer
floatDigits :: Int
floatRange :: (Int, Int)
...
Run Code Online (Sandbox Code Playgroud) 我试过玩弄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)
作品.
我定义了一个通用的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) 根据 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在保留其行为的同时提供类型签名怎么办?我可以这样做吗?
I\xe2\x80\x99m 正在研究一个特征,其中包括一个测量类型属性的函数。返回类型Option<usize>允许值大于usize::MAX,但我包含了一个可重写的函数,该函数仅返回usize并发生恐慌,否则默认情况下通过安全函数实现。我现在想为 Rust 中已有的数字类型实现这个特性。usize我想以更快的实现覆盖其中包含的类型的恐慌函数。
如何根据给定的数字类型是否完全包含在 中 有条件地编译特征函数usize?I\xe2\x80\x99ve 查看了,target_pointer_width但这不是向前兼容的,因为 I\xe2\x80\x99d 必须列出我当前期望存在的所有指针宽度并手动具有该属性。有什么方法可以自动完成吗?理想情况下,\xe2\x80\x99d 是 a#[cfg(target_pointer_width >= "64")]或其他东西,但没有\xe2\x80\x99t。
根据CPPReference,#if后面跟着一个常量表达式。sizeof是常量表达式中的有效运算符。但是当我写这个并用 clang 或 gcc 编译它时,它失败了:
#if sizeof(char) == 1\n#endif\nRun Code Online (Sandbox Code Playgroud)\nclang\xe2\x80\x99s 输出:
\nsizeof in preprocessor directive.c:1:5: error: function-like macro \'sizeof\' is not defined\n#if sizeof(char) == 1\n ^\n1 error generated.\nRun Code Online (Sandbox Code Playgroud)\ngcc\xe2\x80\x99s 输出:
\nsizeof in preprocessor directive.c:1:11: error: missing binary operator before token "("\n 1 | #if sizeof(char) == 1\n | ^\nRun Code Online (Sandbox Code Playgroud)\n是 CPPReference 错误还是编译器错误?
\n我对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}\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n我对这个表达式的分析++arr[arr[i]]如下:
i值计算之前排序arr[i]arr[i]值计算之前排序arr[arr[i]]arr[arr[i]]值计算之前排序++arr[arr[i]]haskell ×5
types ×3
c ×2
assembly ×1
ghc ×1
mov ×1
polymorphism ×1
powershell ×1
rust ×1
x86 ×1