小编obe*_*alp的帖子

你对Haskell感到满意需要多长时间?

我是一个好的C/C++程序员.我发现Haskell非常有趣.但在我看来,虽然编写干净的Haskell代码相对容易,因为它模仿数学(我很熟悉)很好,但在Haskell中运行快速编写干净代码非常困难.

快速版本的Haskell快速版本非常长而且可怕,与天真但短暂(两行),干净和直观的实现没有相似之处.Haskell的长而可怕的版本实际上仍然比更短更简单的C计数器部分慢得多.

是因为当前的Haskell编译器太笨了还是凡人(当然不是SJP)编写快速的Haskell代码是不可能的?

performance haskell

30
推荐指数
4
解决办法
4092
查看次数

什么是支持"部分专业化"的其他语言?

部分模板专业化是C++中通用编程最重要的概念之一.例如:实现通用交换功能:

template <typename T>
void swap(T &x, T &y) {
  const T tmp = x;
  y = x;
  x = tmp;
}
Run Code Online (Sandbox Code Playgroud)

专门用于支持O(1)交换的向量:

template <typename T, class Alloc>
void swap(vector<T, Alloc> &x, vector<T, Alloc> &y) { x.swap(y); }
Run Code Online (Sandbox Code Playgroud)

因此,当您在泛型函数中调用swap(x,y)时,总能获得最佳性能;

非常感谢,如果您可以在替代语言中发布等效语言(或语言的部分专业化的规范示例,如果语言不支持交换概念).

编辑:所以看起来许多回答/评论的人真的不知道什么是部分专业化,而且通用交换示例似乎妨碍了某些人的理解.一个更一般的例子是:

template <typename T>
void foo(T x) { generic_foo(x); }
Run Code Online (Sandbox Code Playgroud)

部分专业化将是:

template <typename T>
void foo(vector<T> x) { partially_specialized_algo_for_vector(x); }
Run Code Online (Sandbox Code Playgroud)

完整的专业化将是:

void foo(vector<bool> bitmap) { special_algo_for_bitmap(bitmap); }
Run Code Online (Sandbox Code Playgroud)

为什么这很重要?因为你可以在泛型函数中调用foo(任何东西):

template <typename T>
void bar(T x) {
  // stuff...
  foo(x);
  // …
Run Code Online (Sandbox Code Playgroud)

language-agnostic generics programming-languages partial-specialization

11
推荐指数
2
解决办法
603
查看次数

你如何在Haskell中进行泛型编程?

来自C++,我发现通用编程是不可或缺的.我想知道人们如何在Haskell中接近它?

说如何在Haskell中编写通用交换函数?

在Haskell中是否存在部分特化的等价概念?

在C++中,我可以部分地使用特殊的泛型交换函数来处理泛型map/hash_map容器,该容器具有O(1)容器交换的特殊交换方法.你如何在Haskell中做到这一点,或者Haskell中泛型编程的典型例子是什么?

haskell generic-programming

9
推荐指数
4
解决办法
7969
查看次数