我已经在一个执行数值计算的库上工作了一段时间.它是用纯本机C++编写的,直到现在我一直在使用简单的控制台应用程序来测试它的功能.
现在是在库顶部构建GUI的时候了 - 更好地显示结果表并以图形形式呈现它们.
我一直计划使用WPF来实现UI,并花了一些时间研究它,但我现在有了第二个想法.我对WPF的担忧是:
令人担忧的是,人们离开WPF时遇到类似问题的消息更加复杂 - 最新和最引人注目的是Evernote.
你会建议我坚持原来的计划并使用WPF吗?
如果是这样,您如何看待上述问题?
如果没有,我可以使用哪些替代库来创建高质量的Windows GUI?
编辑:
感谢Reed Copsey解决我的个人观点.回复表明,我对WPF的大多数问题都可以解决.
似乎使用WPF将涉及比理想工作更多的工作 - 包括编写互操作代码和进行调整以确保良好的性能和高质量.人们普遍同意这样的说法:尽管如此,制作高质量UI的最佳方法是使用WPF - 而不是使用任何其他框架?
我有一个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?
为什么Go有&^"bit clear(AND NOT)"运算符?
是否有过任何区别a &^ b和a & ^b?
我使用了以下 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) 我有一个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)
不幸的是,第三行中的转换使用本机字节顺序,因此将在不同的机器上给出不同的结果。
有什么方法可以使转换始终为低位优先级,而不管本地字节顺序如何?
我从 Go 1.4 中读到,Go 运行时是用 Go 本身(而不是 C)编写的。
这怎么可能?如果 Go 程序运行在运行时之上,而运行时是一个 Go 程序,那么运行时是否运行在其自身之上?
从这个问题,涉及二进制运算符(+ - */)的表达式的语法不允许使用外括号:
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) __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]如何在每次调用时调用另一个索引?
可以使用 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字段?
go ×3
lua ×2
python ×2
arrays ×1
class ×1
dictionary ×1
endianness ×1
grammar ×1
inheritance ×1
key ×1
ll-grammar ×1
lr-grammar ×1
operators ×1
parsing ×1
prototype ×1
ruby ×1
runtime ×1
struct ×1
unpack ×1
windows ×1
wpf ×1