小编sho*_*sti的帖子

功能GUI编程是否可行?

我最近发现了FP bug(试图学习Haskell),到目前为止我已经看到了(一流的功能,懒惰的评估和所有其他好东西).我还不是专家,但是我已经开始发现在功能上比在基本算法上强制推理更容易(而且我很难回到我必须去的地方).

然而,当前FP看起来平坦的一个领域是GUI编程.Haskell方法似乎只是包装命令式GUI工具包(例如GTK +或wxWidgets)并使用"do"块来模拟命令式样式.我没有使用过F#,但我的理解是它使用OOP和.NET类做了类似的事情.显然,有一个很好的理由 - 当前的GUI编程完全是关于IO和副作用的,所以对于大多数当前的框架来说,纯函数式编程是不可能的.

我的问题是,是否可以使用GUI编程的功能方法?我无法想象在实践中这会是什么样子.有没有人知道任何尝试此类事物的框架(实验或其他)(或者甚至是为功能语言设计的任何框架)?或者只是使用混合方法的解决方案,其中OOP用于GUI部件,FP用于逻辑?(我只是想出于好奇心 - 我很想认为FP是"未来",但GUI编程似乎是一个非常大的漏洞.)

user-interface f# haskell functional-programming

398
推荐指数
10
解决办法
7万
查看次数

如何在Haskell(GHC)中实现列表?

我只是好奇Haskell中列表的一些确切的实现细节(GHC特定的答案很好) - 他们是天真的链接列表,还是他们有任何特殊的优化?进一步来说:

  1. length(!!)(例如)必须遍历列表?
  2. 如果是这样,他们的值是否以任何方式缓存(即,如果我调用length两次,它是否必须迭代两次)?
  3. 访问列表后面是否涉及遍历整个列表?
  4. 是否记住了无限列表和列表推导?(即,for fib = 1:1:zipWith (+) fib (tail fib),是否会递归计算每个值,还是依赖于先前的计算值?)

任何其他有趣的实施细节将不胜感激.提前致谢!

haskell linked-list ghc

41
推荐指数
3
解决办法
8169
查看次数

为什么Haskell标准库不能更多地使用多态?

我正在学习Haskell,类型类似乎是一种强大的类型安全多态函数.但是很多Haskell Prelude函数都没有使用它们.进一步来说:

  • 大多数列表功能不与其他数据结构的工作(例如,foldr并且length只对列表实现,不能在阵列中使用).

  • Data.ByteString除非您使用,否则类似的模块不可用,import qualified因为它们包含与Prelude函数具有相同名称的函数.

如果标准库使用类型类的泛型函数,似乎这两个问题都会消失(请告诉我,如果我完全不在此基础上).

我有两个问题:

  1. Prelude是否有这样的技术或设计理由,还是出于历史原因?

  2. 环顾四周,看起来有几个库(比如 Data.Foldable,如果我没有弄错的话,Scrap Your Boilerplate)用标准替代品替换标准的Prelude函数.有没有计划将这些想法融入Haskell的未来版本?

polymorphism haskell generic-programming

28
推荐指数
4
解决办法
1966
查看次数

什么情况下原子属性有用?

Objective-C属性默认为atomic,它确保访问器是原子的,但不能确保整体线程安全性(根据这个问题).我的问题是,在大多数并发场景中,原子属性是不是多余的?例如:

场景1:可变属性

@interface ScaryMutableObject : NSObject {}

@property (atomic, readwrite) NSMutableArray *stuff;

@end

void doStuffWith(ScaryMutableObject *obj) {
    [_someLock lock];
    [obj.stuff addObject:something]; //the atomic getter is completely redundant and could hurt performance
    [_someLock unlock];
}

//or, alternatively
void doStuffWith(ScaryMutableObject *obj) {
    NSMutableArray *cachedStuff = obj.stuff; //the atomic getter isn't redundant
    [_someLock lock];
    [cachedStuff addObject:something]; //but is this any more performant than using a nonatomic accessor within the lock?
    [_someLock unlock];   
}
Run Code Online (Sandbox Code Playgroud)

场景2:不可变属性

我在想,在处理不可变对象时,原子属性可能对避免锁有用,但由于不可变对象可以指向Objective-C中的可变对象,所以这并没有多大帮助:

@interface SlightlySaferObject : NSObject …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa multithreading properties objective-c

6
推荐指数
1
解决办法
2052
查看次数