在Real World Haskell的第19章中,很多例子现在因为改变而失败了Control.Exception
.
这让我觉得也许本书中的一些内容实际上已经过时,不再值得学习,毕竟它已经有6年了.我唯一的另一个参考是" 了解你是一个很好的Haskell",虽然它是一本很棒的书,但与RWH相比它更为基础.
任何读过这本书的人都可以就哪些部分不再相关提出一些建议吗?特别是本书后半部分的章节,例如软件事务内存,并发编程,套接字编程等.
编辑:这是关于2008年12月出版的书的版本,这是迄今为止唯一的已知版本(2017年11月)
例如,以下代码段使用gcc-4.9和clang-602进行编译
class Base
{
public:
static void foo() {}
void badfoo(int i) {}
};
template <typename T>
class Derived : public Base
{
public:
void bar() { Base::foo(); }
void badbar() { Base::badfoo(); } // compiles ok
//static void badbar() { Base::badfoo(); } // compile error
//void worsebar() { Base::nonexist(); } // compile error
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但注释掉的行不会编译.
我的问题是:
为什么badbar()
编译但worsebar()
不编译?
如果我badbar()
改为静态,它也不会编译,无论是否base::badfoo
是静态的.
标准是否说明了在这种情况下应该检查什么?gcc4.4实际上甚至拒绝编译badbar()
.
更新:
问题1已被许多答案解释,但似乎编译器有时会更加努力地检查过载,它发生在gcc 4.4.3和4.8.2,而不是4.7.2和4.9.1.
问题2:正如Marco …
我有一个当地时间"2013-08-27 10:01:22"
,如何将其转换为纪元时间?
基本上我需要相反的as.POSIXct
,我搜索谷歌,令人惊讶的是没有找到任何.
我对如何设置namecheap和heroku非常困惑,因此他们一起工作以通过https提供自定义域.
我正在使用heroku ssl beta,在配置结束时,heroku已经更新了它的域映射,如下所示:
myapp.com myapp.com.herokudns.com
www.myapp.com wwww.myapp.com.herokudns.com
Run Code Online (Sandbox Code Playgroud)
ssl证书已成功添加到heroku,我知道因为我可以使用https://myapp.herokuapp.com
绿色挂锁访问.
下一步应该是修改namecheap DNS,我遵循了本教程
我添加的条目是:
CNAME Record www myapp.herokuapp.com
URL Redirect @ https://www.myapp.com
Run Code Online (Sandbox Code Playgroud)
那应该是它,但它不能像我预期的那样工作.
如果我输入myapp.com
,它会转到https://www.myapp.com
(所以重定向工作),但没有挂锁.
如果我https://www.myapp.com
直接去,也一样.
我确定这不是因为这个改变还没有生效,因为我已经搞乱了其他领域,它已经在5分钟左右后生效了.
有人可以告诉我这是什么问题吗?
我注意到Control.Exception中也有一个IOException类型,有一个单独的System.IO.Error模块和IOError类型是什么意思?是因为历史原因吗?我应该避免使用它而更喜欢Control.Exception.IOException吗?
C++默认初始化不会将变量与自动存储器清零,为什么对静态存储变量进行特殊处理?
它是由C和C++定义的东西必须兼容吗?如果是这样的话,为什么C决定进行零初始化?
如果文件范围静态变量与初始化程序一起提供,它们将首先进行零初始化,然后再次进行常量/动态初始化.这不是多余的吗?例如,以下代码来自cppreference:http://en.cppreference.com/w/cpp/language/zero_initialization
#include <string>
double f[3]; // zero-initialized to three 0.0's
int* p; // zero-initialized to null pointer value
std::string s; // zero-initialized to indeterminate value
// then default-initialized to ""
int main(int argc, char* argv[])
{
static int n = argc; // zero-initialized to 0
// then copy-initialized to argc
delete p; // safe to delete a null pointer
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么n不能直接初始化为argc?
编辑:这个问题的一部分已经回答了这里的问题:静态变量初始化? 但我不认为这是重复的,因为另一个问题的答案没有回答我的第二个问题,即.为什么2阶段初始化.此外,另一篇文章的标题并没有真正说明究竟是什么问题.
对于OAuth客户端,github的速率限制为5000 /小时,但我无法从gitlab中找到相同的信息(除了创建新用户和重置密码的时间为6分钟),是否意味着没有限制?
mktime的手册页没有提到mktime的线程安全性,但它确实提到了这看起来像线程不安全:
调用mktime()还会将外部变量tzname设置为有关当前时区的信息.
我知道在Linux上mktime调用tzset来设置tzname,这是一个char*[]:
extern char*tzname [2];
和tzset将读取环境变量TZ和文件/ etc/localtime.因此,除非mktime使用互斥锁来保护所有这些操作,否则我无法看到它是如何保证线程安全的.
我正在使用gulp-babel将我的es6代码翻译成es5
gulp.task('build_all_debug', ['config', 'compile'], function() {
var stream = gulp.src(['public/js/config.js', 'public/js/*.js', 'public/compiled/*.js'])
.pipe(babel({
presets: ['es2015']
}))
.pipe(concat('app.js'))
.pipe(gulp.dest('public/dist'));
return stream;
});
Run Code Online (Sandbox Code Playgroud)
虽然它大部分工作正常,但它实际上并没有翻译Map和Set.我的结果js代码仍然包含它们,当我用karma/mocha/phantomJs运行单元测试时,我得到以下错误:
PhantomJS 2.1.1 (Mac OS X 0.0.0) notes.controller "before each" hook: workFn for "loads notes from the service" FAILED
Can't find variable: Map
activate@public/dist/app.js:2402:39
Run Code Online (Sandbox Code Playgroud)
有没有办法强迫babel将Map和Set转换为es5中的对象和数组?
我的Linux(redhat6)服务器必须使用http代理连接到外部世界.虽然它适用于像wget这样的其他东西,但它不适用于阴谋集团.
cabal update -v3
Run Code Online (Sandbox Code Playgroud)
显示如下错误:
407 - 需要代理身份验证cabal:无法下载 http://hackage.haskell.org/packages/archive/00-index.tar.gz:ErrorMisc "不成功的HTTP代码:407"
我试图将http_proxy环境变量更改为类似http:// user:passwd at proxy:port的格式,但它也不起作用.
但我不允许使用像polipo这样的代理服务器,有没有其他方法可以让代理服务器背后工作?