我知道Haskell一点点,我想知道是否有可能在Haskell中编写类似于矩阵矩阵产品的东西,它具有以下所有特性:
IO或Statemonad(我不关心函数体中发生了什么.也就是说,我不关心函数体是否使用monad,只要整个函数是纯的).我可能想在纯函数中使用这个矩阵矩阵乘积.float[]非float[][])和大小为1000x1000的矩阵,以及一个单核CPU.(如果你每个周期得到0.5-2个浮点运算,你可能会在球场.)(我不希望这听起来像是一个挑战,但请注意Java可以轻松满足以上所有要求.)
我已经知道了
致意见:
我有三个原因:首先,"没有malloc或指针"的要求尚未定义(我要求你编写任何不使用指针的Haskell代码);
我看到很多Haskell程序没有使用Ptr.也许它指的是在机器指令级别使用指针的事实?那不是我要表达的意思.我指的是Haskell源代码的抽象级别.
第二,对CS研究的攻击是不合适的(而且我无法想象比使用别人已经为你编写的代码更简单的事情); 第三,Hackage上有很多矩阵包(要求这个问题的准备工作应该包括审查和拒绝每个).
你的#2和#3似乎是相同的("使用现有的库").我对矩阵产品感兴趣,只是测试Haskell可以自己做什么,以及它是否允许你"简单易懂".我可以很容易地想出一个没有任何现成库的数值问题,但是我必须解释这个问题,而每个人都已经知道矩阵产品是什么.
Java如何可能满足1.?任何Java方法本质上都是
:: IORef Arg -> ... -> IORef This -> IO Ret
这是我问题的根源,实际上是(+1).虽然Java并没有声称追踪纯度,但Haskell确实如此.在Java中,注释中指出了函数是否纯粹.我可以声称矩阵产品是纯的,即使我在函数体中做了突变.问题在于Haskell的方法(在类型系统中编码的纯度)是否与效率,内存安全性和简单性兼容.
malloc不保证返回0的内存.传统观点不仅如此,而且内存malloc返回的内容实际上是非确定性的,例如openssl将它们用于额外的随机性.
但是,据我所知,malloc建立在brk/sbrk之上,它可以"返回"0'ed内存.我可以看到为什么malloc返回的内容可能不是0,例如来自以前的免费内存,但为什么它们在"普通"单线程软件中是非确定性的呢?
编辑几个人回答解释为什么内存可以是非0,我已在上面的问题中解释过.我问的是为什么使用malloc返回的内容的程序可能是非确定性的,也就是为什么它每次运行时都会有不同的行为(假设相同的二进制文件和库).非0表示非确定性行为.换句话说:为什么每次运行二进制文件时它都有不同的内容.
对于那些希望他的C++代码可以在不同的C++编译器中移植的人来说,是时候开始使用C++ 11,还是在所有主要编译器支持新标准之前还需要一段时间(VC, GCC,CLang,英特尔)?
换句话说,主要编译器中C++ 11支持的状态是什么?
我构建了llvm/compiler-rt/clang的3.1版本,我试图看看-fcatch-undefined-behavior是否真的做了什么.到目前为止,没有运气.我编译并运行
#include <stdio.h>
#include <stdlib.h>
int main() {
int* x = malloc(sizeof(int) * 10);
printf("%d\n", x[20]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
同
$ /usr/local/bin/clang -fcatch-undefined-behavior undef_test.c && ./a.out
0
Run Code Online (Sandbox Code Playgroud)
我错过了一些非常简单的事吗?
我理想的工作流程包括以下步骤
我无法使用git commit -a --amend -m "new commit message",因为这也会提交新的更改.我不确定我是否想要分期或分支.我希望我可以编辑提交消息而不提交任何新的更改.可能吗?
#define荷兰国际集团_GLIBCXX_DEBUG力GCC搭上一大类在C++运行错误,如外的边界STL访问,无效迭代器等的
不幸的是,当错误发生时,打印的消息不是很有帮助.我知道如何打印回溯跟踪的功能,以及__FILE__和__LINE__与宏自己.
是否有一种简单的方法可以说服GCC这样做,或者指定一个函数/宏,以便在_GLIBCXX_DEBUG发生实际发生的错误时调用它?