2012-02-29 66 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代碼中顯而易見。當然,如果你從頭開始設計自己的語言或者實現現有的語言,你也可以使用元編程和語法變更技巧來實現核心語言功能,這是一個比擁有一個更靈活的方法從一開始就是巨大的,臃腫的核心語言。