编码语言定制

时间:2012-02-29 06:28:21

标签: python programming-languages language-design

自从我开始编码以来,我一直想知道这个问题:有没有办法根据自己的喜好自定义语言的深层部分。

例如,我的代码主要是在Python中使用|或:表示集合边界的字符。我经常使用集合并且不喜欢键入set(some_list)或明确set([a,b,b,c,d])。我通过设置s()一直在使用s = set,但如果我正在处理其他人必须阅读的代码,这将无效。

也许一个“翻译”文本编辑器附加组件可以保存2个代码副本,一个使用您自己的语法,另一个使用标准语法就足够了。有这样的事吗? (特别是对于python)

2 个答案:

答案 0 :(得分:6)

清晰度和可读性是生产代码中非常重要的特性。请记住,阅读现有代码通常比编写新代码花费更多的精力。维护是一个重要的考虑因素。

考虑到这一点,做s = set和使用s()而不是set()之类的东西不会增加功能性好处,并且对可读性有害,同时只能节省几次击键。我认为你在某种程度上认识到这一点,但你们中的一部分人不愿意接受以可读性为名的额外击键。

我建议您考虑像宏一样的东西,这样您在生成相同代码的同时只按一个键就会感觉更好。像Logitech G15 / G110 / G19键盘这样的东西甚至允许你独立于你正在使用的编辑器这样做,所以你不需要软件附件。一些老鼠会允许你做类似的事情(哦,我多么爱我Razer Naga)。当然,软件中的一个基本宏功能也可以使用,但是你可能按下了一个组合键,只需输入set(无论如何都可能更快。

答案 1 :(得分:1)

确实可以根据需要自定义您的语言。有些语言提供了强大的元编程功能(不幸的是,Python不是其中之一)。看看Lisp宏,或Nemerle,或Converge(后者是最接近Python的)。有些语言,比如Katahdin,甚至可以让你轻松修改语法。

但是这种力量不应该用于小语言修改 - 它会妨碍可读性,不会增加任何重大的好处。使用元编程实现嵌入式领域特定语言要好得多,最好使用独特的语法,因此当您使用核心语言结构时,以及当它是eDSL代码时,读者会很明显。

当然,如果您从头开始设计自己的语言或实现现有语言,您也可以使用元编程和语法修改技巧来实现核心语言功能,它比一个巨大的方法更灵活。 ,从一开始就臃肿的核心语言。