小编use*_*783的帖子

担心WPF.我应该使用WPF或不同的库用于Windows GUI吗?

我已经在一个执行数值计算的库上工作了一段时间.它是用纯本机C++编写的,直到现在我一直在使用简单的控制台应用程序来测试它的功能.

现在是在库顶部构建GUI的时候了 - 更好地显示结果表并以图形形式呈现它们.

我一直计划使用WPF来实现UI,并花了一些时间研究它,但我现在有了第二个想法.我对WPF的担忧是:

  1. 为了用户界面,是否值得将我的程序与.NET框架耦合?.NET和WPF似乎以多种形式增加了开销,包括:
    • 程序复杂性
      • 使用.NET意味着使用第二种语言 - 因此编写了大量凌乱的互操作代码.
    • 运行时性能
      • 特别是,WPF应用程序启动似乎很慢.
    • 部署
      • .NET框架安装是否快速简便?是否需要重启机器?

  2. 渲染质量
    • 这在WPF 4中得到了改进,但在某些领域,标准元素的显示仍然很差.

  3. 关注性能和质量是否会在未来得到改善
    • 是否真的在微软内部不再强调WPF(支持Silverlight)?

令人担忧的是,人们离开WPF时遇到类似问题的消息更加复杂 - 最新和最引人注目的是Evernote.

你会建议我坚持原来的计划并使用WPF吗?

如果是这样,您如何看待上述问题?
如果没有,我可以使用哪些替代库来创建高质量的Windows GUI?


编辑:

感谢Reed Copsey解决我的个人观点.回复表明,我对WPF的大多数问题都可以解决.

似乎使用WPF将涉及比理想工作更多的工作 - 包括编写互操作代码和进行调整以确保良好的性能和高质量.人们普遍同意这样的说法:尽管如此,制作高质量UI的最佳方法是使用WPF - 而不是使用任何其他框架?

windows wpf user-interface

4
推荐指数
1
解决办法
446
查看次数

Lua 中的继承是基于原型的还是基于类的?

Lua 通常被描述为具有基于原型的继承(例如在这个答案中)。然而, Lua 编程“继承”部分谈到了“基类”和“超类”——来自基于类的继承的术语。

哪种基于原型或基于类的模型最能描述 Lua 中继承的工作方式?

inheritance lua prototype class

4
推荐指数
2
解决办法
2129
查看次数

插入地图时Go(深)复制键吗?

我有一个map复杂的键 - 例如,2D数组:

m := make(map[[2][3]int]int)
Run Code Online (Sandbox Code Playgroud)

当我在地图中插入新密钥时,Go是否会对密钥进行深层复制?

a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
m[a] = 1
Run Code Online (Sandbox Code Playgroud)

换句话说,如果我在将数组a用作地图键后更改数组,地图是否仍包含旧值a

dictionary key go

4
推荐指数
1
解决办法
178
查看次数

为什么Go有一个"清除(AND NOT)"运算符?

为什么Go有&^"bit clear(AND NOT)"运算符?

是否有过任何区别a &^ ba & ^b

operators go bitwise-operators

4
推荐指数
1
解决办法
595
查看次数

在(最近版本的)Ruby 中增加一个整数(使用 +=)线程安全吗?

我使用了以下 Python 代码来表明i在多个线程上递增整数不是线程安全的:

>>> i = 0
>>> def increment_i():
...     global i
...     for j in range(1000): i += 1
...
>>> threads = [threading.Thread(target=increment_i) for j in range(10)]
>>> for thread in threads: thread.start()
...
>>> for thread in threads: thread.join()
...
>>> i
4858  # Not 10000
Run Code Online (Sandbox Code Playgroud)

我试图将此代码转换为 Ruby,期望得到类似的结果:

> $i = 0
> def increment_i()
>     for j in 0...1000 do $i += 1 end
> end

> threads = (0...10).map { Thread.start { …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading thread-safety

4
推荐指数
1
解决办法
810
查看次数

将Python array('B')转换为array('H')-总是小尾数吗?

我有一个Python array('B')(包含从文件中读取的一些数据),我想将其转换为array('H')。我目前正在使用类似于以下代码:

a = array.array('B', f.read())
b = a[16:32]
c = array.array('H', b.tostring())
Run Code Online (Sandbox Code Playgroud)

不幸的是,第三行中的转换使用本机字节顺序,因此将在不同的机器上给出不同的结果。

有什么方法可以使转换始终为低位优先级,而不管本地字节顺序如何?

python arrays endianness

3
推荐指数
1
解决办法
970
查看次数

Go 运行时如何用 Go 编写?

我从 Go 1.4 中读到,Go 运行时是用 Go 本身(而不是 C)编写的。

这怎么可能?如果 Go 程序运行在运行时之上,而运行时是一个 Go 程序,那么运行时是否运行在其自身之上?

bootstrapping runtime go

3
推荐指数
1
解决办法
1005
查看次数

是否可以为此语法编写递归下降解析器?

这个问题,涉及二进制运算符(+ - */)的表达式的语法不允许使用外括号:

top_level   : expression PLUS term
            | expression MINUS term
            | term TIMES factor
            | term DIVIDE factor
            | NUMBER
expression  : expression PLUS term
            | expression MINUS term
            | term
term        : term TIMES factor
            | term DIVIDE factor
            | factor
factor      : NUMBER
            | LPAREN expression RPAREN
Run Code Online (Sandbox Code Playgroud)

这个语法是LALR(1).因此,我能够使用PLY(yacc的Python实现)为语法创建自下而上的解析器.

为了进行比较,我现在想尝试为同一种语言构建一个自上而下的递归下降解析器.我已经改变了语法,删除了左递归并应用了左因子:

top_level   : expression top_level1
            | term top_level2
            | NUMBER
top_level1  : PLUS term
            | MINUS term
top_level2  : TIMES factor
            | …
Run Code Online (Sandbox Code Playgroud)

grammar parsing context-free-grammar ll-grammar lr-grammar

3
推荐指数
1
解决办法
559
查看次数

lua and_index函数中的元表

__index = function(tbl, key)    
    local a = tbl[key]    
    if a <=0 then a = 0 end    
    if a > 5 then a = 0 end   
    return a
end
Run Code Online (Sandbox Code Playgroud)

书中说:尽管前面的代码看起来很单纯,并且试图将表中元素的值保持在一定范围内,但是该代码会引起问题和循环引用。函数的第一行a = tbl [key]实际上会触发另一个索引函数调用,然后又将调用另一个索引函数,依此类推。

但是a = tbl [key]如何在每次调用时调用另一个索引?

lua

2
推荐指数
1
解决办法
442
查看次数

使用 Python 的 struct.unpack 时是否可以跳过字节?

可以使用 Python 的struct.unpack位图文件头中提取有用的值,如下所示:

magic, file_size, _, _, data_offset = struct.unpack('<2sLHHL', file_header)
assert magic == 'BM'
Run Code Online (Sandbox Code Playgroud)

有什么方法可以避免在_此处分配给(或另一个一次性变量)的需要?是否可以更改格式字符串以struct.unpack跳过两个未使用的H字段?

python struct unpack

2
推荐指数
1
解决办法
816
查看次数