Wpis z mikrobloga

@ufik78: makra pozwalają Ci na dopasowanie składni języka do potrzeb programisty oraz de facto na programowanie twojego języka programowania.

przykładowo wielki feature Javy 7 to jest "try with resources", czyli coś, co zamyka Ci automatycznie wszystkie pliki zadeklarowane w nawiasach okrągłych w try (...) {...} catch {...} żebyś nie musiał ręcznie tego robić i łapać odpowiednich wyjątków.

huh, Common Lisp chociażby miał to samo dwadzieścia lat wcześniej. ( ͡° ͜
@ufik78: nie chwaląc się, https://github.com/phoe-krk/pseudonyms to przykład innego typu makra, mianowicie makra czytnika (reader macro); jeżeli masz długaśną nazwę paczki, jak choćby com.informatimago.common-lisp.lisp-reader, to możesz zaprogramować czytnik, czyli program czytający Twoje wypociny w postaci kodu źródłowego i przetwarzający je w postać zrozumiałą dla komputera, w taki sposób, żeby automatycznie rozumiał ciąg w postaci chociażby $rd:read i tłumaczył go wewnętrznie na com.informatimago.common-lisp.lisp-reader:read.

Zysk jest oczywisty, bo krótszy kod źródłowy i
@ufik78: Bo mają magiczne właściwości! https://github.com/y2q-actionman/with-c-syntax choćby. ;D Poza tym, możesz autentycznie programować za ich pomocą język i upraszczać sobie życie, czego dowodem jest choćby współczesne makro ITERATE do Lispa, w którym można autentycznie pisać całe programy iterujące Ci po czymś.

Słowo "prekompilacja" trochę oddaje sens tego, ale bardziej preprocessing. W trakcie kompilacji każde wykryte makro zostaje najpierw rozwinięte do swojej postaci właściwej, a jeśli jego postać właściwa zawiera kolejne makra,