2012-02-29 28 views
2

自从我开始编写代码以来,我一直都在想这个问题:有没有什么方法可以根据您的喜好定制一种语言的深层部分。编码语言定制

例如,我的代码主要是在Python想用|或者:表示组的边界的字符。我经常使用套装,并且恨打字set(some_list)或明确地set([a,b,b,c,d])。我一直在使用s(),通过设置s = set,但如果我正在编写其他人必须阅读的代码,则这不起作用。

也许一个“转换器”的文本编辑器插件这将节省你的代码,一个2份用自己的语法和一个与标准语法就足够了。有这样的事吗? (尤其是蟒蛇)

+1

顺便说,{A,B,B,C,d}是一组在python2.7和3.1+字面。 – strcat 2012-02-29 06:37:28

+2

做's = set'是个坏主意。它使得你的代码不易理解,没有任何好处。 – 2012-02-29 06:43:05

+0

是的,正如我上面提到的,我只在编码进行个人实验时才使用它(只有我会看到这个代码)。 – Arjun 2012-02-29 09:44:45

回答

6

清晰度和可读性是在生产代码中一个非常重要的特点。请记住,阅读现有代码的花费比编写新代码花费的更多。维护是一个严肃的考虑。考虑到这一点,像s = set和使用s()而不是set()这样的东西不会增加功能性好处,并且不利于可读性,同时仅提供几次击键的节省。我认为你在某种程度上认识到了这一点,但你们中的一部分人不愿意以可读性的名义接受额外的击键。

我劝你考虑像一个宏观的东西,而不是使你觉得只按一个键,同时还产生相同的代码更好。就像罗技G15/G110/G19键盘一样,您甚至可以独立于您使用的编辑器来执行此操作,因此您不需要软件附件。几只老鼠可以让你做类似的事情(哦,我怎么爱我的Razer Naga)。当然,在软件基本微距功能会工作为好,但你可能会按一个键组合来做到这一点,只是打字集(大概是快呢。

+0

当然,如果做得对,它可以增加很多语言。例如,Perl的Moose为Perl的对象添加了语法糖,使它们看起来很像传统的面向对象的语言。参见'http:// search.cpan.org /〜doy/Moose-2.0402/lib/Moose.pm'。 – shawnhcorey 2012-03-03 13:08:24

1

有可能确实可以自定义你的语言,你一些语言提供了强大的元编程功能(不幸的是,Python不是其中之一),请看一下Lisp宏,Nemerle或Converge(后者最接近Python),有些语言如Katahdin甚至允许你很容易修改语法

但是这种权力不应该用于小语言修改 - 它会阻碍可读性,并且不会增加任何显着的好处。使用元编程实现嵌入领域特定语言,优先使用独特的语法,所以读者在使用核心语言结构时以及在eDSL代码中显而易见。当然,如果你从头开始设计自己的语言或者实现现有的语言,你也可以使用元编程和语法变更技巧来实现核心语言功能,这是一个比拥有一个更灵活的方法从一开始就是巨大的,臃肿的核心语言。