所以我想问:高端函数到底用得广么?不说其它语言了。就说JavaScript吧。毕竟流行的语言里就JavaScript有方便的高端函数。另外怎么
教育我们部门的老大们嗫?现在是的问题是他们缺乏动力,所以办学习班或者写文章基本没有,因为别人根本不会参见或者读。
几点澄清:
1. 我的同事懂Closure、高端函数这些东西。他非常厉害,编程快,代码质量高,经验丰富,经常想出比我的方法更简单的方法。他批评的原因完全出
于务实的考虑。
2. 我们用的是类似Flex的东西。JavaScript是粘合剂。在JavaScript基础上还有Class,所以并不一定非用高端函数。不过用
OO模拟函数在这里还是复杂了点。看JParsec就知道了。
3. 我们用的JavaScript不支持标准里的Regex。JavaScript也没有好的基本解析函数,比如说解析整数
(parseInt(09)返回0, parseInt('9#¥#¥')返回9,嘿嘿。这也是我写parse combinator的动机之一。本来
还准备把库改成支持pakrat语法,用空间换时间的。看来没有必要了。
4. 我其实只需要验证decimal,所以写一个parse combinator也有点过了。不过我想的是马上要做日期和时间的全球化支持,正好用
得上。而且总有其它地方需要规定文本的pattern吧。属于长远投资的说。这点就见仁见义了。说我犯了编程第一大错:over
abstraction,也无不可。
昨天用JavaScript写的Parser Combinator库在code review时被批评了。原因是"太复杂"。和同事讨论了一下,用他
的话说,Closure/高端函数这种东西太复杂,没人懂,没人愿意学,也没人需要学。我写的Parser Combinator除了我以外,没人能够
维护。我争辩库里每个函数连注释都不超过20行。用了这套工具可以用申明式的风格写出非常简单的解析代码。比如匹配一个10进位数(+|-)?(.\d
+|(\d+(\.\d+)?)只需要段段4行。这比每个人需要解析时就写冗长嵌套的循环简单。但他说大家至少能够理解循环,可以调试循环。而没人能理
解parser combinator。
4. 我其实只需要验证decimal,所以写一个parse combinator也有点过了。不过我想的是马上要做日期和时间的全球化支持,正好用
得上。而且总有其它地方需要规定文本的pattern吧。属于长远投资的说。这点就见仁见义了。说我犯了编程第一大错:over
abstraction,也无不可。
从针对最常见场景设计的思想来说,的确,要parse一个decimal,使用regex类似的语法是overwhelming了。不符合"简单的事情应 该是简单的"思想:-) 如果我是用户,我会希望直接调用一个parse函数就搞定了:) 所以你不妨增加这样一个简单的函数,并在这个函数内部用combinator来实现:-)
我觉得用 regex 是合适的.
用简单的函数处理起来当然更简单, 但是这带来额外的学习和记忆的成本. 不如使用 well known 的东西.
就像一个50000行的 C++ 代码中, 如果有2000用 embedded python 去做, 会非常简单, 非常 native, 但是我可能不会选择这样做, 相比给项目来的额外的复杂度, 并不合算. 如果有 20000 行的话, 我应该会做了.
从针对最常见场景设计的思想来说,的确,要parse一个decimal,使用regex类似的语法是overwhelming了。不符合"简单的事情应该是简单的"思想:-) 如果我是用户,我会希望直接调用一个parse函数就搞定了:) 所以你不妨增加这样一个简单的函数,并在这个函数内部用combinator来实现:-)
我们系统中的JavaScript是不支持Regex的。这也是我写这个parser combinator库的动机之一。:=)
On Nov 11, 2007 3:25 AM, <red...@gmail.com> wrote:
我觉得用 regex 是合适的.
用简单的函数处理起来当然更简单, 但是这带来额外的学习和记忆的成本. 不如使用 well known 的东西.
就像一个50000行的 C++ 代码中, 如果有2000用 embedded python 去做, 会非常简单, 非常 native, 但是我可能不会选择这样做, 相比给项目来的额外的复杂度, 并不合算. 如果有 20000 行的话, 我应该会做了.
从针对最常见场景设计的思想来说,的确,要parse一个decimal,使用regex类似的语法是overwhelming了。不符合"简单的事情应 该是简单的"思想:-) 如果我是用户,我会希望直接调用一个parse函数就搞定了:) 所以你不妨增加这样一个简单的函数,并在这个函数内部用combinator来实现:-)
哈, 哈, 那如果你这个parser combinator 的学习难度不是特别高, 并且文档中列出了 80% 常用情形不用动脑直接可以参考, 我可就不会去写循环处理了 :)
Yong Yuan 写道:
我们系统中的JavaScript是不支持Regex的。这也是我写这个parser combinator库的动机之一。:=)
On Nov 11, 2007 3:25 AM, <red...@gmail.com> wrote:
我觉得用 regex 是合适的.
用简单的函数处理起来当然更简单, 但是这带来额外的学习和记忆的成本. 不如使用 well known 的东西.
就像一个50000行的 C++ 代码中, 如果有2000用 embedded python 去做, 会非常简单, 非常 native, 但是我可能不会选择这样做, 相比给项目来的额外的复杂度, 并不合算. 如果有 20000 行的话, 我应该会做了.
从针对最常见场景设计的思想来说,的确,要parse一个decimal,使用regex类似的语法是overwhelming了。不符合"简单的事情应该是简单的"思想:-) 如果我是用户,我会希望直接调用一个parse函数就搞定了:) 所以你不妨增加这样一个简单的函数,并在这个函数内部用combinator来实现:-)
在 2007-11-10六的 15:08 +0000,g9yuayon写道:
--
"Live Long and Prosper"
- oldrev
在 07-11-11,莫华枫<longsh...@gmail.com> 写道:
On Sun, 2007-11-11 at 21:34 +0800, 莫华枫 wrote:
> 我还遇到过一件更夸张的事:鉴于公司软件代码中大段大段的switch-case调用
> 分派,我建议同僚们使用数组或关联容器+OOP多态加以替代。有人就对我说:你
> 这样效率会怎么样?我告诉他,用数组,效率肯定不用说了,用hash的话是常数
> 复杂度。不然,即便用map的话也是对数复杂度的。他的反应是一脸不屑地摇
On Nov 13, 9:06 am, "莫华枫" <longshank...@gmail.com> wrote:
> ms自己叫它generic,C#标准也叫它generic。.net里也叫generic。而且,C++/CLI里有generic,也有template。所以,我们还是叫它generic吧。尽管它也不是合格的generic
>
> 在07-11-13,katkat lim <limkat...@gmail.com> 写道:
>
>
>
> > 书上还是叫它模板。
> > On 11/13/07, oldrev <old...@gmail.com> wrote:
>
> > > 人家叫 "Generics" 不是 "Template"
>
> > > On Tue, 2007-11-13 at 08:40 +0800, 莫华枫 wrote:
> > > > 这样的话,我还能叫它"模板"吗?:)
>
> > > > 在07-11-13,katkat lim <limkat...@gmail.com > 写道:
> > > > C#有模板啊,只是那种模板看着像语法糖,跟C++的模板不是一个级别
> > > > 的。
>
> > > > On 11/12/07, 莫华枫 <longshank...@gmail.com> wrote:
> > > > 唉,哪里还敢提模板哦。再说C#也没有模板。
>
> > > > 在07-11-12,oldrev <old...@gmail.com> 写道:
> > > > 用 int 模板参数来分派
>
> > > > On Sun, 2007-11-11 at 21:34 +0800, 莫华枫
> > > > wrote:
> > > > > 我还遇到过一件更夸张的事:鉴于公司软件代码中
> > > > 大段大段的switch-case调用
> > > > > 分派,我建议同僚们使用数组或关联容器+OOP多态
> > > > 加以替代。有人就对我说:你
> > > > > 这样效率会怎么样?我告诉他,用数组,效率肯定
> > > > 不用说了,用hash的话是常数
> > > > > 复杂度。不然,即便用map的话也是对数复杂度
> > > > 的。他的反应是一脸不屑地摇
> > > > > 头。我无语...
>
> > > > > 在07-11-11,Jian Wang
> > > > <oxygen.jian.w...@gmail.com> 写道:
> > > > > 对的。现在的boost::lambda太难
> > > > 用,调用一个成员函数,或者
> > > > > 访问一个成员变量就麻烦的要命。觉得还
> > > > 是BOOST FOREAC
> > > > > H好用。
>
> > > > > 在 07-11-11,莫华枫<
> > > > longshank...@gmail.com> 写道:
> > > > g9yuayon < yycs...@gmail.com>
> ...
>
> read more