想立竿见影提高 ruby 的执行效率很简单,把那堆 ir 保存下来,直接读字节码执行就行了。
我当年做的是棋类人机对弈,包括各种剪枝算法和估值算法。我觉得这个不错,既有理论又能实践。
没什么更具生产力可言,生产力低只是不熟悉这门语言而已。
大部分程序写起来确实价值不大,做下 UI,调用这个那个 API,写点自己绕自己的 OO 的烂代码。其实其他工作也未必更有价值。
我觉得这里过多的集中于 rails 的讨论,忽略了其他方面的东西。
Ken 认为,代码总会以某种方式“腐烂”掉,即使没有做任何修改。而对于腐烂的代码,方法就是将其扔掉,重新写。 用 Java 新写的,以后也会一样。
我也买了本,看起来挺浅显易懂的。
有直接去日本的职位么。。。
#37 楼 @yangxing_star 如果你想创造,尽力去做就行了。
梁漱溟先生谈过人生的意义,他认为人做为万物之灵,其意义在于不断创造。
#43 楼 @jimrokliu 正则文法即 3 型文法,可以和 NFA/DFA 互相等价转化,也即所谓状态机,状态机本身可以不用栈,可以是 2 维表,也可以是 switch/case 结构,甚至 if/else。自顶向下最简单的实现方式就是递归调用,或者可以预计算向前看 1 的表,也即 LL(1)。 构造正则解析器有很多方法,不用栈用图也行。
买一本也就一顿饭钱,难道一本书的价值还不如一顿饭?
前端解析说到底,就是基于两个闭包集合的预测分析,一个 first, 一个 follow,万变不离其宗。
手写的:
def expr aa
ret = true
if '(' == aa[$curr_iter]
$start_status = false
$curr_iter += 1
ret &&= expr aa
return false unless ret
if ')' == aa[$curr_iter]
$curr_iter += 1
ret &&= true
else
return false
end
elsif '{' == aa[$curr_iter]
$start_status = false
$curr_iter += 1
ret &&= expr aa
return false unless ret
if '}' == aa[$curr_iter]
$curr_iter += 1
ret &&= true
else
return false
end
else
return false if $start_status
end
ret
end
def balanced? aa
$curr_iter = 0
$start_status = true
total_len = aa.size
ret = true
while $curr_iter < total_len
ret = expr aa
return false unless ret
$start_status = true
end
true
end
tc = ["", "()", "{()}", "{}", "{{}}", "({})", "{()}",
"(", ")", "(()", "())", "{", "}", "{{}", "{}}", "{(})", "({})(){()}"]
tc.each do |item|
puts balanced? item.split(//)
end