r1.29°ú ÇöÀç ¹öÀüÀÇ Â÷ÀÌÁ¡
@@ -1,108 +1,86 @@
== ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ==
''Literate programming'', ¿ì¸® ¸»·Î Çϸé '¹®ÇÐÀû' ȤÀº '¹®¼Àû' ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÒ ¼ö Àִµ¥, Á¦ °³ÀÎÀûÀÎ °ßÇطδÂ, Knuth°¡ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» À½¾ÇÀ» ÀÛ°îÇÏ´Â °ÍÀ̳ª ¹®ÇÐ ÀÛÇ°À» ¾²´Â °Í¿¡ ºñ±³ÇÏ´Â °ÍÀ» º¸¸é, ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÌ ´õ ¾î¿ï¸± °Í °°½À´Ï´Ù. ¿©±â¼´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÏ°Ú½À´Ï´Ù.
³ëº§»ó¿¡´Â ¼öÇаú Àü»êÇп¡ ´ëÇÑ »óÀÌ ¾ø½À´Ï´Ù. ¼öÇп¡´Â ¼öÇÐÀÇ ³ëº§»ó¿¡ ÇØ´çÇÏ´Â ÇÊÁî»ó(Fields Medal)ÀÌ ÀÖ°í, Àü»êÇп¡´Â Àü»êÇÐÀÇ ³ëº§»óÀ̶ó ºÒ¸®±â¿¡ ÃæºÐÇÑ Æ©¸µ»ó(Turing Award)ÀÌ ÀÖ½À´Ï´Ù. 1974³âÀÇ Æ©¸µ»ó ¼ö»óÀÚ´Â ¾Ë°í¸®ÁòÀÇ ºÐ¼®°ú ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ µðÀÚÀÎ ±×¸®°í, ''The art of computer programming'' À̶ó´Â Àú¼·Î ±× ºÐ¾ß¿¡ ¸¹Àº °øÇåÀ» ÇÑ Knuth ¿´½À´Ï´Ù. ±×¸®°í °ü·Ê·Î½á ±×ÇØ Æ©¸µ»óÀ» ¹ÞÀº »ç¶÷Àº ACM Turing Award Lecture¶ó´Â À̸§À¸·Î °ÀǸ¦ ÇÏ°Ô µÇ¾î Àִµ¥, 1974³â ±× °ÀÇÀÇ Á¦¸ñÀº ''Computer Programming as an Art'' ¿´½À´Ï´Ù. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ±â¼úÀÌ ¾Æ´Ñ À½¾Ç, ¹Ì¼ú, ¹®Çаú °°Àº Á¾·ùÀÇ ÇϳªÀÇ ¿¹¼ú È°µ¿À̶ó°í °Á¶ÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í °á·ÐºÎ¿¡´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸Ó ÀÚ½ÅÀÌ ¿¹¼ú°¡¶ó´Â ÀνÄÀ» °¡Áö°í ÇÁ·Î±×·¡¹Ö ÀÛ¾÷¿¡ ÀÓÇϸé, ÇÁ·Î±×·¡¹ÖÀÌ ´õ¿í Áñ°Ì°í, ±× °á°ú ¶ÇÇÑ ´õ¿í ÁÁÀ» °ÍÀ̶ó°í ¸»ÇÕ´Ï´Ù.
To summarize: We have seen that computer programming is an art, because it applies accumulated
knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture
at computer conferences speak about the state of the Art.
Computer Programming as an ArtÀÇ Àü¹®: attachment:
knuth-turingaward.pdf
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÀÌ·¸°Ô ½ÃÀÛÇß³ªº¾´Ï´Ù. ÇÁ·Î±×·¡¹ÖÀ» ¿¹¼ú·Î º¸´Â ´ë°¡·Î ºÎÅÍ ¸»ÀÔ´Ï´Ù. À§ÀÇ °ÀǸ¦ ½ÃÀÛÀ¸·Î ´«¿¡ º¸ÀÌ´Â º»°ÝÀûÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ½ÃÀÛ ¶ÇÇÑ KnuthÀÇ ³í¹® ''Literate Programming'' ¿¡¼ ½ÃÀÛÇÕ´Ï´Ù. ÀÌ ³í¹®¿¡¼ Knuth´Â ´õÀÌ»ó ÄÄÇ»Å͸¦ À§ÇØ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ½Ã´ë´Â Áö³µ´Ù°í ¸»ÇÕ´Ï´Ù. »ç¶÷À» À§ÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÏÀÚ°í ÇÕ´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °ÍÀÌ ÄÄÇ»ÅÍ¿¡ ÀÏÀ» ½ÃÅ°±â À§ÇÑ ¸í·ÉµéÀÇ ÁýÇÕÀÌÁö¸¸, ÀÌ°ÍÀ» ³Ê¹« ÄÄÇ»ÅÍ¿¡ ÃÊÁ¡À» ¸ÂÃßÁö ¸»°í, »ç¶÷µé¿¡°Ô ´«À» µ¹¸®ÀÚ´Â °ÍÀÌÁö¿ä. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ ¸£³×»ó½º ½Ã´ë°¡ ¿Â °ÍÀÌÁö¿ä. ^^ ÀÌ ³í¹®¿¡¼ ¿ª½Ã ÀÏ°üµÇ°Ô ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¹®ÇÐ ÀÛÇ°(works of literature) º¸ÀÚ°í ÇÏ°í ¿©±â¼ Literate Programming À̶õ ¸»À»
¸¸µé¾î ³Â½À´Ï´Ù. Knuth´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ¸»À峿¡ ±×Ä¡´Â °ÍÀ» ½È¾îÇؼ WEBÀ̶ó´Â ¾ð¾î¸¦ ¸¸µé¾î ³Â½À´Ï´Ù. ¿ì¸®ÀÇ »ç¶ûÀ» µ¶Â÷ÁöÇÏ´Â TeXÀÌ WEBÀ̶ó´Â ½Ã½ºÅÛ, ÀÏÁ¾ÀÇ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ¸¸µé¾î Á³½À´Ï´Ù.
I believe that the time is ripe for significantly better documentation of programs, and
that we can best achieve this by considering programs to be works of literature. Hence, my title: ''Literate Programming
lpcover.
''
jpg
Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do
À§ ÄÚµå´Â KnuthÀÇ Àú¼ ''Literate Programming'' ÀÇ Ç¥Áö¿¡ ³ª¿ÍÀÖ´Â ÄÚµåÀÔ´Ï´Ù.
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ È¿½Ã¶ó°í ÇÒ ¼ö ÀÖ´Â ³í¹®: attachment:knuthweb.pdf
=== KnuthÀÇ Literate programming¿¡ °üÇÑ °ÀÇ ºñµð¿À ===
Knuth´Â 1987³â 10~12¿ù¿¡ ½ºÅÄÆ÷µå´ëÇп¡¼ ''Mathematical Writing''À̶õ Á¦¸ñÀ¸·Î °ÀǸ¦ ÇÏ¿´½À´Ï´Ù. ±× Áß ÀϺΰ¡ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ³»¿ëÀÔ´Ï´Ù. ¿µ¾î°¡ ª¾Æ¼ ´Ù ¾Ë¾ÆµèÁö´Â ¸øÇϴµ¥, °ÀÇ°¡ Àç¹ÌÀÖ½À´Ï´Ù.
* Presenting algorithm
http://proedvid.stanford.edu/seminars/knuth/871019-cs209/871019-cs209-100.wmv
[[TableOfContents]]
* Literate Programming
== ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö À̶õ? ==
'''¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'''(
1
literate programming)
Àº ÇÁ·Î±×·¡¹Ö ¹æ¹ý·ÐÀÇ ÇÑ °¡Áö·Î, ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ÄÄÇ»ÅÍ·Î ÄÄÆÄÀÏ °¡´ÉÇÑ Äڵ带 ¸¸µå´Â °Íº¸´Ù »ç¶÷ÀÌ ÀÌÇØÇϱ⠽¬¿î Äڵ带 ¸¸µå´Â °Í¿¡ ÁßÁ¡À» µÎ´Â ¹æ¹ýÀÌ´Ù. Áï, »ç¶÷ÀÌ º¸°í ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ¹®¼¸¦ ¸¸µéµíÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °ÍÀÌ ¸ñÀûÀÌ´Ù. '¸¶Ä¡ ¹®ÇÐÀÛÇ°À» Àд °Íó·³ ÇÁ·Î±×·¡¹ÖÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï ¸¸µå´Â °Í'ÀÌ ¸ñÇ¥À̹ǷΠ'¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'À̶ó´Â À̸§À» Áö¾ú´Ù. (Ãâó: [http://
proedvid
ko.
stanford
wikipedia.
edu
org/
seminars
wiki/
knuth/871021
%EB%AC%B8%ED%95%99%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö-
cs209/871021-cs209-100.wmv
À§Å°¹é°ú])
* Literate Programming(2)
=== ±â¿ø ¹× ¼Ò°³ ===
http://proedvid
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ¿ì¸®¿¡°Ô TeXÀÇ ÀúÀÚ·Î ¾Ë·ÁÁø Knuth°¡ ¸¸µé¾î³½ ÇÁ·Î±×·¡¹ÖÀÇ »õ·Î¿î Æз¯´ÙÀÓÀÔ´Ï´Ù.
stanford
Knuth°¡ ÀÌ¿¡ ´ëÇÑ °³³äÀ» ±¸Ã¼ÈÇϱ⠽ÃÀÛÇÑ °ÍÀÌ 1980³â´ë ÃʹÝÀ̴ϱî 2006³â ÇöÀç·Î½á´Â '»õ·Î¿î'À̶õ ´Ü¾î°¡ Á» ¹«»öÇØ Áý´Ï´Ù.
edu/seminars/knuth/871023-cs209/871023-cs209-100
ÇÏÁö¸¸ ÇöÀç±îÁöµµ ±×¸® ³Î¸® ÀÌ¿ëµÇ°í ÀÖÁö´Â ¾ÊÀ¸µí ½Í½À´Ï´Ù.
wmv
=== CWEB ¼Ò°³ ===
$$\hbox{CWEB}=\hbox{C
Àü»êÇп¡´Â Àü»êÇÐÀÇ ³ëº§»óÀ̶ó ºÒ¸®´Â Æ©¸µ»ó([http://awards.acm.org/turing/ A. M. Turing Award]) ÀÌ ÀÖ½À´Ï´Ù. 1974³â Æ©¸µ»ó ¼ö»óÀÚ´Â ¾Ë°í¸®ÁòÀÇ ºÐ¼®°ú ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ µðÀÚÀÎ ±×¸®°í, ''The art of computer programming
language}+\hbox{\TeX}$$
'' À̶ó´Â Àú¼·Î ±× ºÐ¾ß¿¡ ¸¹Àº °øÇåÀ» ÇÑ Knuth ¿´½À´Ï´Ù.
from KTUGContrib:3195
°ü·Ê(
by ÀÛ
?)·Î½á ±× ÇØ Æ©¸µ»óÀ» ¹ÞÀº
³ª¹«
»ç¶÷Àº ACM Turing Award Lecture¶ó´Â À̸§À¸·Î °ÀǸ¦ ÇÏ°Ô µÇ¾î Àִµ¥, 1974³â ±× °ÀÇÀÇ Á¦¸ñÀº ''Computer Programming as an Art''(attachment:knuth-turingaward.pdf)
¿´½À´Ï´Ù. Knuth´Â ¿©±â¼ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ±â¼úÀÌ ¾Æ´Ñ À½¾Ç, ¹Ì¼ú, ¹®Çаú °°Àº Á¾·ùÀÇ ÇϳªÀÇ ¿¹¼ú È°µ¿À̶ó°í °Á¶ÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í °á·ÐºÎ¿¡´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸Ó ÀÚ½ÅÀÌ ¿¹¼ú°¡¶ó´Â ÀνÄÀ» °¡Áö°í ÇÁ·Î±×·¡¹Ö ÀÛ¾÷¿¡ ÀÓÇϸé, ÇÁ·Î±×·¡¹ÖÀÌ ´õ¿í Áñ°Ì°í, ±× °á°ú ¶ÇÇÑ ´õ¿í ÁÁÀ» °ÍÀ̶ó°í ¸»ÇÕ´Ï´Ù.
¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀ¸·Î °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â °ÍÀÌ ¾Æ¸¶ CWEBÀÏ °ÍÀÔ´Ï´Ù. ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀº ±âº»ÀûÀ¸·Î Á¶ÆǾð¾î¿Í ÄÄÇ»ÅÍÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ±¸¼ºµÇ´Âµ¥
To summarize: We have seen that computer programming is an art,
CWEBÀº °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â Á¶ÆǾð¾îÀÎ TeX°ú °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â C¾ð¾îÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÈ ½Ã½ºÅÛÀÔ´Ï´Ù
because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art.
µû¶ó¼ CWEBÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ½Ã½ºÅÛÀ̶ó°í Çؼ ÀÌ»óÇÒ °ÍÀÌ Çϳªµµ ¾ø°ÚÁö¿ä?
CWEB˼ TeX
¹®ÇÐÀû ÇÁ·Î±×
·¥À» ¸¸µå´Âµ¥ »ç¿ëµÈ WEB ½Ã½ºÅÛº¸´Ù ÇÑÃþ ³ª
·¡¹ÖÀº
ÀÌ·¸°Ô ½Ã
½ºÅÛÀÔ
ÀÛÇß³ªº¾´Ï´Ù.
WEBÀº TeX°ú Pacal
ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö
¾ð¾î
À» ¿¹¼ú·Î
ÀÌ·ç¾îÁ®ÀÖ
º¸´Â
µ¥, C¾ð¾î
´ë°¡
Pascalº¸
·Î ºÎÅÍ ¸»ÀÔ´Ï´Ù
. À§ÀÇ °ÀǸ¦ ½ÃÀÛÀ¸·Î ´«¿¡ º¸ÀÌ´Â
³ªÀº(?)
º»°ÝÀûÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö
¾ð¾îÀ̱⠶§
ÀÇ ½ÃÀÛ ¶ÇÇÑ KnuthÀÇ ³í¹®
À̶ø
Literate Programming (attachment:knuthweb.pdf) ¿¡¼ ½ÃÀÛÇÕ´Ï´Ù.
¾Æ·¡ ÷ºÎÆÄÀÏÀº CWEBÀÇ ¸Þ´º¾óÀÎ cwebman.texÀÇ ÃʹݺÎÀÇ ³»¿ëÀÎ
ÀÌ ³í¹®
ÇÐÀû
¿¡¼ Knuth´Â ´õÀÌ»ó ÄÄÇ»Å͸¦ À§ÇØ ÇÁ·Î±×·¡¹Ö
°ú CWEBÀÇ °³³äÀ»
¹ø¿ª
ÇÏ´Â ½Ã´ë´Â Áö³µ´Ù°í ¸»ÇÕ´Ï´Ù. »ç¶÷À» À§ÇÑ
°ÍÀÔ
ÇÁ·Î±×·¡¹ÖÀ» ÇÏÀÚ°í ÇÕ´Ï´Ù.
¸Þ´º¾ó
¹°·Ð ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °ÍÀÌ ÄÄÇ»ÅÍ¿¡ ÀÏÀ» ½ÃÅ°±â À§ÇÑ ¸í·ÉµéÀÇ
ÈĹݺÎ
ÁýÇÕÀÌÁö¸¸, ÀÌ°Í¿¡ ¿¬¿¬ÇÏ¿© ³Ê¹« ÄÄÇ»ÅÍ¿¡¸¸ ÃÊÁ¡À» ¸ÂÃßÁö ¸»°í, »ç¶÷µé¿¡°Ô ´«À» µ¹¸®ÀÚ´Â
°ÍÀÌÁö¿ä. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö
¿¡ °ü·ÃµÈ ºÎºÐ
ÀÇ ¸£³×»ó½º ½Ã´ë°¡ ¿Â °ÍÀÌ
¶ó »ý·«Çß½À´Ï´Ù
Áö¿ä.
attachment:korean_cwebman
ÀÌ ³í¹®¿¡¼ ¿ª½Ã ÀÏ°üµÇ°Ô ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¹®ÇÐ ÀÛÇ°(''works of literature'') À¸·Î °£ÁÖÇÏ°í, Àç¹ÌÀÖ´Â ¸»ÀÎ ''Literate Programming'' À̶õ ¸»À»¸¸µé¾î ³Â½À´Ï´Ù. Knuth´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ¸»À峿¡ ±×Ä¡´Â °ÍÀ» ½È¾îÇؼ WEBÀ̶ó´Â ½Ã½ºÅÛÀ» ¸¸µé¾î ³Â½À´Ï´Ù. TeXÀÌ WEB ½Ã½ºÅÛÀ¸·Î ¸¸µé¾îÁ³´Ù´Â °ÍÀº Àß ¾Ë·ÁÁø »ç½ÇÀÌÁö¿ä.
pdf
CWEB ½Ã½ºÅÛ ¸»°íµµ ¸¹Àº ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛµéÀÌ Á¸ÀçÇÕ´Ï´Ù
I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature.
http
Hence, my title:
//www
''Literate Programming.
literateprogramming.com À¥»çÀÌÆ®¸¦ ¹æ¹®ÇØ º¸½Ã¸é
''
Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do,
¸Å¿ì ´Ù¾çÇÑ ½Ã½ºÅÛµéÀ» Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ »çÀÌÆ®´Â KnuthÀÇ À¥ÆäÀÌÁö¿¡µµ ¼Ò°³µÈ ¸Å¿ì ÈǸ¢ÇÑ À¥»çÀÌÆ®ÀÔ´Ï´Ù
let us concentrate rather on explaining to human beings what we want a computer to do.
=== CWEB »ç¿ë¹ý ===
$$\hbox{cweb}=\hbox{ctangle}+\hbox{cweave}$$
1
* WEB À¸·Î ÀÛ¼ºµÈ TeX ¼Ò½º: [http://ftp.
È®ÀåÀÚ°¡
ktug.
wÀÎ ÅؽºÆ® ÆÄÀÏ, ¿¹¸¦µé¾î foo
or.
w À» emacs ¿¡µðÅÍ·Î ¸¸µì´Ï´Ù
kr/tex-archive/systems/knuth/tex/tex.
(¿¡µðÅÍ´Â ¹Ýµå½Ã emacs À̾î¾ß ÇÕ´Ï´Ù
web tex.
)
web]
foo.w´Â web ȤÀº cweb ÆÄÀÏÀε¥,
ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö
¼Ò½º¿Í ±×¿¡ ÇØ´ç
À» º»°ÝÀûÀ¸·Î ÀÍÈ÷°íÀÚ ÇÏ´Â
µµÅ¥¸ÕÆ®¸¦ µ¿
»ç¶÷µéÀº ¹Ýµå½Ã
¿¡ °¡Áö
ÀоîºÁ¾ß ÇÑ´Ù°í
ÀÖ´Â ÆÄÀÏÀÔ
ÇÕ´Ï´Ù.
cweb ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§´Â, ÀÌó·³ ÇÁ·Î±×·¡¹Ö°ú µµÅ¥¸ÕÆ®¸¦ µ¿½Ã
TeX¿¡
»ý°¢
Àͼ÷ÇØ
¾ß
Áö¸é Çѹø µµÀüÇØ º¸°íÀÚ ÇÕ´Ï´Ù.
2. ¾Æ·¡¿Í °°Àº ¸í·É¾î·Î cweb
* °ü½ÉÀÖ´Â ºÐÀ» À§ÇÏ¿©: pdf ÆÄÀÏ
foo.w·ÎºÎÅÍ ÇÁ·Î±×·¡¹Ö ¼Ò½º ÆÄÀÏ foo.c(ȤÀº foo.cpp)À» ¸¸µé¾î
³À
³»´Â °úÁ¤À» ´ÙÀ½°ú °°½À´Ï´Ù.
À§ÀÇ tex.webÀ» ´Ù¿î¹ÞÀ¸½Ã°í,
ctangle foo
{{{
3
% weave tex.
ctangle·Î ºÎÅÍ »ý¼ºµÈ foo
web <-- tex.
c¸¦ gcc°°Àº C ÄÄ
web ÆÄÀÏ
·¯¸¦ ÀÌ¿ëÇØ
¿¡¼
½ÇÇà ÆÄÀÏÀ» ¸¸µé¾î ³À´Ï´Ù
tex.
4. ´ÙÀ½ÀÇ ¸í·É¾î·Î´Â foo.w·Î ºÎÅÍ TeX
tex ÆÄÀÏ
ÀÎ foo.texÀ» ¾ò½À´Ï´Ù.
cweave foo
5
% tex tex.
cweave·Î ºÎÅÍ
tex <-- texÀÌ ¼¼¹øÀ̳ª
¿Â foo
¾²¿´³×¿ä.
% dvipdfmx tex
Àº PlainTeXÀ» ÀÌ¿ëÇÏ¿© foo.dvi
¸¦ ¸¸µì´Ï´Ù.
tex foo
}}}
6. ¿ø·¡
À§Ã³·³ ÇÏ¿© ¸¸µé¾î Áø Ã¥ÀÌ ¹Ù·Î KnuthÀÇ
cweb
Àú¼ ''Computers & Typesetting'' ½Ã
½ºÅÛÀº PlainTeX ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇÕ´Ï´Ù¸¸, LaTeXÀ» ÀÌ¿ëÇÑ cwebµµ ÀÖ½À
¸®ÁîÀÇ Volume BÀÎ ''TeX: The Program'' ÀÔ´Ï´Ù.
(LaTeX¿ë CWEB: attachment:cweb-user.pdf)
À§ °úÁ¤
* '''Âü°í''': À©µµ¿ìÁî¿¡¼ MiKTeXÀ»
±×¸²À¸·Î ³ªÅ¸³»
ÀÌ¿ëÇϽô ºÐÀº KTUGContrib:3247 (by µµÀºÀ̾ƺü) À» Âü°í Çϸé
´ÙÀ½°ú °°½À
µË´Ï´Ù.
attachment:cweave.jpg
===
CWEB ¿¹Á¦ ===
Àú´Â C
KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö
À» ÇؾßÇÒ ¶§¸é, ¾ð
°ÀÇ ===
Knuth´Â 1987³â 10~12¿ù¿¡ ½ºÅÄÆ÷µå´ëÇп¡¼ ''Mathematical Writing''À̶õ Á¦
³ª CWEB
¸ñÀ¸·Î
°ÀǸ¦ ÇÏ¿´½À´Ï´Ù. ±× Áß ÀϺΰ¡ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö
À»
¿¡ °üÇÑ ³»¿ëÀÔ´Ï´Ù. ¿µ¾î°¡ ª¾Æ¼ ´Ù ¾Ë¾ÆµèÁö´Â ¸øÇÏ
°í
´Âµ¥, ÇÑ°¡Áö ´ÙÇàÀÎ Á¡Àº °ÀÇ Á¦¸ñ°ú µ¿ÀÏÇÑ Mathematical Writing À̶õ Ã¥ÀÌ Àִµ¥,
CWEB ÇÁ·Î±×
·¡¹Ö
̴˼
Á¤¸» Àç¹ÌÀÖ
ÀÌ °ÀǸ¦ ¼ö°ÇÑ Çлýµé°ú Knuth°¡ ¸¸µç Ã¥À¸·Î "°ÀÇ ³ëÆ®"ÀûÀÎ ¼º°ÝÀÌ Â£½À´Ï´Ù.
Á¦ ¸»À» ¸ø ¹ÏÀ¸½Ã°Ú´Ù¸é, Knuth ¸»Àº ¹ÏÀ¸½Ã°ÚÁÒ? Knuth´Â Á¾Á¾
ÀÌ¿¡ ±×
ÀÇ Áý ¿¬±¸½Ç
Ã¥¿¡¼
³ª
ÇØ´ç °ÀÇ ºÎºÐÀ» ¿Ã
¶§
¸³´Ï´Ù. µ¿¿µ»ó ½Ãû¿¡ ¸¹Àº µµ¿òÀÌ
·¸°Ô ¸»ÇÑ
µÇ¸®¶ó º¾´Ï´Ù
³×¿ä.
"''CWEB programming is such fun!''"
*
Knuth°¡ ¼Õ¼ö ÀÛ¼ºÇÑ CWEB
[http://proedvid.stanford.edu/seminars/knuth/871019-cs209/871019-cs209-100.wmv Presenting algorithm] (°ÀÇ
´ëÇ¥ÀûÀÎ ¿¹Á¦
¿ä¾àº»: attachment:
wc
pa.pdf
)
*
CWEB ÇÁ·Î±×·¥ÀÇ ÁÖ¿Á°°Àº ¿¹Á¦µé (
[http://
www
proedvid.
literateprogramming
stanford.
com
edu/
fexamples
seminars/knuth/871021-cs209/871021-cs209-100.
html
wmv Literate Programming(1)
* Vector rotation CWEB ¿¹Á¦
] (°ÀÇ ¿ä¾àº»: attachment:
vrotate
lp1.
tar.gz
pdf)
*
Á¸º¥Æ²¸®ÀÇ ''
[http://proedvid.stanford.edu/seminars/knuth/871023-cs209/871023-cs209-100.wmv Literate Programming
Pearls'' Á¦1Ä÷³¿¡ ³ª¿À´Â ºñÆ®¸Ê Á¤·ÄÀ» cwebÀ¸·Î ÀÛ¼ºÇÑ ¿¹Á¦
(2)] (°ÀÇ ¿ä¾àº»: attachment:
bitmap
lp2.pdf
)
===
CWEB ¼³Ä¡½Ã
KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ
±Û °í·Á»çÇ×
¾ÖÁ¤ ===
'''ÁÖÀÇ'''
[http:
ÀÌ ÀýÀÇ ³»¿ëÀº Hangul
//www.tug.org/TUGboat/Contents/contents26-
ucs¸¦ ÀÌ¿ëÇÏ¿© ucsplain
3.
tex¸¦ »ç¿ëÇÏ
html TUGboat Volume 26 (2005), No.3]¿¡ [http://www.tug.org/TUGboat/Articles/tb26-3/tb84knut.pdf Interview with Donald E. Knuth]¶ó´Â
°æ¿ì
Á¦¸ñÀ¸·Î KnuthÀÇ ÀÎÅÍºä ±â»ç°¡ ½Ç·È½À´Ï´Ù. ÀÌ ±â»ç¿¡
¼ TeXÀ» ¸¸
µé±â À§ÇØ
´çÇÏ´Â °ÍÀÌ°í, HLaTeXÀ» ÀÌ¿ëÇÏ¿©, htex.tex
¼ ¾î¶² ÅøÀ» »ç¿ë
ÇϽÃ
Çß´Â
ºÐÀÌ
°¡¶ó
¸é, °ü°è¾ø´Â
³»¿ëÀÔ
Áú¹®¿¡´ëÇÑ ±×ÀÇ ´ë´ä¿¡¼ KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ »ç¶ûÀ» ¿³º¼ ¼ö ÀÖ´Â ºÎºÐÀÌ Àֱ⿡ ¿Å°Ü º¾´Ï´Ù.
UTF-8·ÎµÈ ÇѱÛÀ» Æ÷ÇÔÇÏ´Â cwebÀÇ ¼Ò½º ÆÄÀÏÀÎ
"''The tools I used were home grown and became known as Literate Programming.
w ÆÄÀϷκÎÅÍ
ctangle°ú cweave ¸í·É¾î¸¦ ÀÌ¿ëÇؼ C ÇÁ·Î±×·¥ ÆÄÀÏÀÎ
I am enormously biased about Literate Programming, which is surely the greatest thing since sliced bread.
c ÆÄÀÏ°ú
TeX ÆÄÀÏÀÎ .texÀ» ¸¸µé´Ùº¸¸é
I continue to use it to write programs almost every day,
ÀÔ·ÂÀÌ ³Ê¹« ±æ´Ù´Â °æ°í ¸Þ½ÃÁö°¡ ³ª¿É´Ï´Ù
and it helps me get efficient, robust, maintainable code much more successfully than any other way I know.
ÀÌ´Â À§¸í·É¾îµéÀÌ ÆÄÀÏÀ» ó¸®Çϱâ À§Çؼ ³»ºÎÀûÀ¸·Î ¹öÆÛ(char ¹è¿)¸¦
°¡Áö°í ÀÖ°í
Of course,
±× ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â buffer_end°¡ À۾Ƽ ³ª¿À´Â
°æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù
I realize that other people might find other approaches more to their liking; but wow, I love the tools I¡¯ve got now.
ÀÌ °æ¿ì´Â ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â º¯¼ö buffer_end¸¦
ÃæºÐÈ÷ Å©°ÔÇØÁÖ¸é ¹ß»ýÇÏÁö ¾Ê´Â °æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù.
¿µ¾îÀÇ °æ¿ì´Â ¾ËÆĺª Çѹ®ÀÚ°¡ 1¹ÙÀÌÆ®À̱⠶§¹®¿¡ ±×·¯ÇÑ °æ°í ¸Þ½ÃÁö°¡ ¾ø½À´Ï´Ù.
¹°·Ð ¿µ¾îÀÇ °æ¿ìµµ ÇÑ ÁÙÀ» ³Ê¹« ±æ°ÔÇÏ¸é ±×·± ¸Þ½ÃÁö°¡ ³ª¿À°ÚÁÒ.:
I couldn¡¯t have written difficult programs like the MMIX meta-
)
simulator at all if I hadn¡¯t had Literate Programming; the task would have been too difficult.''"
(Àú´Â utf-8
=== ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ü·Ã ±Û ===
* attachment:fine_art_programming.pdf : [http://www.freesoftwaremagazine.com/ Free Software Magazine] Issue 6¿¡ ½Ç¸° ±Û·Î½á, Free software¿Í ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ¹Ì·¡¿¡ ´ëÇÑ
Áö½ÄÀÌ ÀüÇô ¾ø½À
±ÛÀÔ´Ï´Ù.
)
utf-8
Àо ¸¸ÇÕ´Ï´Ù. (Âü°í·Î
µÈ °æ¿ì´Â ÇÑ ¹®
ÀúÀÚ
¸¦ 1¹ÙÀÌÆ®¿¡¼ ÃÖ´ë 4¹ÙÀÌÆ®±îÁö Ç¥ÇöÇÑ´Ù
Matt BartonÀº St. Cloud State University in MinnesotaÀÇ ¿µ¹®ÇÐ ±³¼ö¶ó°í
µé¾ú½À
ÇÕ´Ï´Ù.
)
µû¶ó¼ utf-8
=== ¹®ÇÐÀû ÇÁ·Î
ÀÛ¼ºµÈ ¼Ò½ºÀÇ °æ¿ì¸¦ À§Çؼ buffer_end¸¦ ÃÖ´ë 4¹è°¡ µÇ°ÔÇϸé
±×·¡¹Ö °ü·Ã »çÀÌÆ® ===
µË´Ï´Ù
* http://www-cs-faculty.stanford.edu/~uno/
* http://www-cs-faculty.stanford.edu/~uno/lp.html
* http://www.literateprogramming.com/
* http://www.literateprograms.org
* http://www-cs-faculty.stanford.edu/~uno/cweb.html
* http://kldp.net/docman/view.php/842/453/intro.
html
ctangle°ú cweaveÀÇ ÈÀÏ ÀÔÃâ·Â
== ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ ==
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÇÁ·Î±×·¥ ¼Ò½º¿Í ±×¿¡ ´ëÇÑ
¹®¼È ÀÛ¾÷À» µ¿½Ã¿¡ ÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼ ¹®ÇÐÀû ÇÁ·Î±×·¥ÀÇ ¼Ò½º´Â Å©°Ô ÇÁ·Î±×·¡¹Ö ºÎºÐ
ÀÌ
°ú ¹®¼È ºÎºÐÀ¸·Î ³ª
°øÅë
´µ¾îÁø´Ù. ÇÁ·Î±×·¡¹Ö ºÎºÐÀº
common.w(.c)
ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡
Àִµ¥
µû¶ó ´Ù¸£Áö¸¸,
buffer_end¿¡ ´ë
¹®¼È ºÎºÐÀº ±âº»ÀûÀ¸·Î LaTeX ȤÀº plain TeXÀ» ÀÌ¿ëÇÑ
³»
´Ù. µû¶ó¼ ¹®¼È ºÎºÐ¿¡ ¾î¶² TeXÀ» »ç¿ë
ÇÏ´À³Ä¿¡ µû¶ó ³ª´· ¼ö ÀÖ°Ú´Ù.
=== LaTeXÀ» ÀÌ
¹Ù
¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î
±×·¡¹Ö ===
WEB/CWEB Àº ±âº»ÀûÀ¸·Î TeX À» »ç¿ëÇϵµ·Ï ¼³°èµÇ¾î ÀÖÁö¸¸ ¿©·¯°¡Áö ¹æ¹ýÀ» ÀÌ
ÆÄÀÏ
¿ëÇؼ LaTeX ¿¡
¼ »ç¿ëÇÒ ¼ö ÀÖ
½À´Ï´Ù.
Å©°Ô ´ÙÀ½ÀÇ µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
* [noweb]À» ÀÌ¿ëÇÏ´Â ¹æ¹ý
* [CWEB]À» ÀÌ¿ëÇÏ´Â ¹æ¹ý
common.wÀÇ ÀϺÎ
{{{
@d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */
@d longest_name 1000
@d long_buf_size (buf_size+longest_name) /* for \.{CWEAVE} */
...
@<Definitions...@>=
char buffer
=== [
long_buf_size
noweb]
; /* where each line of input goes */
char *buffer_end
À» ÀÌ¿ëÇÏ´Â ¹æ¹ý ====
buffer+buf_size-2; /* end of |buffer| */
[noweb] Àº LaTeX À» ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï, ¶Ç ¿©·¯°¡Áö ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º¯°æÇÑ, WEB ÀÌ´Ù.
½ÇÁ¦·Î LaTeX À» »ç¿ëÇϱâ À§Çؼ´Â [noweb] À» »ç¿ëÇÏ´Â °ÍÀÌ Á¤´äÀ̶ó°í º¼ ¼ö ÀÖ´Ù.
.
}}}
µû¶ó
* ÀåÁ¡ : ½ºÅ¸ÀÏ ÆÄÀϸ¸À» Á¦°øÇÔÀ¸·Î¼
buf_size¸¦ ÃÖ´ë 4¹è Å©°Ô
±âÁ¸ÀÇ Å¬·¡½ºµé°ú È¥¿ëÇÏ
´ø
¿© »ç¿ëÇÏ´Â °ÍÀÌ °¡
, ¾Æ´Ï¸é, buffer_end
´ÉÇÏ´Ù. ¿©·¯°¡Áö ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦
Á¦°øÇÑ´Ù.
* ´ÜÁ¡ : nawk µî ´Ù¸¥ À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇÏ¿© ¼Ò½º¸¦ ÄÄÆÄÀÏ ÇÏ°Ô µÇ¹Ç·Î Á÷°üÀûÀÌÁö ¾ÊÀº ¼³Ä¡°úÁ¤
ÀÌ ÇÊ¿äÇÏ´Ù. ±âÁ¸ÀÇ
CWEB ¾ð¾î¿Í´Â Á¶±Ý ´Ù¸£´Ù.
==== CWEB À» ÀÌ¿ëÇÏ´Â
ºÎºÐ¿¡
¹æ¹ý ====
ȍ
CWEBÀº LaTeXÀ» ÀÌ¿ëÇÑ
buf_size ´ë½Å¿¡ long_buf_size¸¦ »ç
¹æ¹ýµµ ÀÖÁö¸¸, LaTeXÀ» ÀÌ¿ëÇÏ
·Á¸é
µË´Ï
, [noweb]À» ±ÇÀåÇÑ´Ù.
Àú´Â cwebÀ» ¼³Ä¡ÇÒ¶§, µÎ¹ø° ¹æ¹ýÀ» »ç¿ëÇؼ ¼³Ä¡Çؼ, utf-8
CWEBÀ¸·Î
ÀÛ¼ºµÈ
¹®¼
w ÆÄÀÏÀ» ±â¹ÝÀ¸·Î ÇÑ´Ù. cweb.cls ¶ó°í Çϴ Ŭ·¡½º ÆÄÀÏÀÌ ÀÖÀ¸¹Ç·Î À̸¦
ÀÌ¿ëÇÏ°Ô µÈ´Ù.
ÄÄ
* ÀåÁ¡ : ±âÁ¸ÀÇ w ÆÄÀÏ
ÇÒ¶§µµ ctangle
µéÀ» ¸î°¡Áö º¯°æÇÔÀ¸·Î¼ LaTeX »ó¿¡¼ »ç¿ëÀÌ
³ª cweave°¡
¹¬¹¬È÷ ±×Àú Á¦ ÇÒ ÀÏÀ» ÇÕ´Ï
´ÉÇÏ´Ù.
ÀÌ°ÍÀÌ utf-8
* ´ÜÁ¡ : Ŭ·¡½º ÆÄÀϸ¸À» Á¦°øÇÔÀ¸·Î
µÈ ¹®¼
ÀÇ ±Ùº»
°ÝÀûÀÎ
È®ÀåÀÌ °ÅÀÇ ºÒ°¡´É ÇÏ´Ù. ¿¹¸¦ µé¾î¼ ¸Þ¸ð¾Æ¿Í °°ÀÌ »ç¿ëÇϱâ À§ÇØ
°áÃ¥
¼´Â Ŭ·¡½º ÆÄÀÏÀÎ
Áö
cweb.cls ¸¦ .sty ÆÄÀÏ·Î º¯°æÇØ¾ß Çϴµ¥,
ÀӽùæÆíÀûÀÎ
ÀÌ ³ë·ÂÀº °ÅÀÇ ¹«ÀÇ¹Ì ÇÏ´Ù°í »ý°¢ÀÌ µÈ´Ù.
==== ±âŸ ÀÚ·á ====
LaTeX¿¡¼ CWEB ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¹æ¹ý
ÀÎÁö
ÀÌ ¼³¸íµÇ¾î ÀÖ´Ù.
* KTUGContrib:3252 (by [smcho])
* KTUGContrib:3236 (by [smcho])
=== PlainTeX''''''À» ÀÌ¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ===
* [CWEB]
* [CTWILL]: ÁַΠåÀ» ¸¸µå´Â
°æ¿ì¿¡ ÀÌ¿ëµÈ´Ù.
* [http://ankh-morpork.maths.qmul.ac.uk/~saha/comp/rambutan/ Rambutan]: ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î Java¸¦ »ç¿ëÇÑ´Ù´Â °Í¸¸ »©¸é [CWEB]°ú ¸ð
¸£°ÚÀ¸³ª, °æ°í ¸Þ½Ã
µç °ÍÀÌ µ¿ÀÏÇÏ´Ù.
* ''javaweave''([CWEB]ÀÇ cweave¿¡ ÇØ´ç) Ãâ·Â Æ÷¸äÀÌ [CWEB]°ú ¶È°°´Ù.
* ÇÏÁö
¸¦ º¼ ¼ö ¾ø¾î¼ ÁÁ±â
¸¸ Çѱ۰ú ºÏ¸¶Å©°¡ ¾ÈµÈ´Ù.
* Java ÇÁ·Î±×·¡¹ÖÀ» ÀÌ¿ëÇÏ¿© ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§´Â
ÇÕ´Ï
[noweb]À» ÃßõÇÑ´Ù.
À§ ÄÚµå´Â KnuthÀÇ Àú¼ Literate Programming ÀÇ Ç¥Áö¿¡ ³ª¿ÍÀÖ´Â ÄÚµåÀÔ´Ï´Ù.
¸ñÂ÷
- 1 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö À̶õ?
- 1.1 ±â¿ø ¹× ¼Ò°³
- 1.2 KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ÀÇ
- 1.3 KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¾ÖÁ¤
- 1.4 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ü·Ã ±Û
- 1.5 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ü·Ã »çÀÌÆ®
- 2 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ
- 2.1 LaTeXÀ» ÀÌ¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö
- 2.1.1 noweb À» ÀÌ¿ëÇÏ´Â ¹æ¹ý
- 2.1.2 CWEB À» ÀÌ¿ëÇÏ´Â ¹æ¹ý
- 2.1.3 ±âŸ ÀÚ·á
- 2.2 PlainTeXÀ» ÀÌ¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö
1 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö À̶õ? ¶
¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö(literate programming)Àº ÇÁ·Î±×·¡¹Ö ¹æ¹ý·ÐÀÇ ÇÑ °¡Áö·Î, ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ÄÄÇ»ÅÍ·Î ÄÄÆÄÀÏ °¡´ÉÇÑ Äڵ带 ¸¸µå´Â °Íº¸´Ù »ç¶÷ÀÌ ÀÌÇØÇϱ⠽¬¿î Äڵ带 ¸¸µå´Â °Í¿¡ ÁßÁ¡À» µÎ´Â ¹æ¹ýÀÌ´Ù. Áï, »ç¶÷ÀÌ º¸°í ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ¹®¼¸¦ ¸¸µéµíÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °ÍÀÌ ¸ñÀûÀÌ´Ù. '¸¶Ä¡ ¹®ÇÐÀÛÇ°À» Àд °Íó·³ ÇÁ·Î±×·¡¹ÖÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï ¸¸µå´Â °Í'ÀÌ ¸ñÇ¥À̹ǷΠ'¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'À̶ó´Â À̸§À» Áö¾ú´Ù. (Ãâó:
¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö-À§Å°¹é°ú)
1.1 ±â¿ø ¹× ¼Ò°³ ¶
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ¿ì¸®¿¡°Ô
TeXÀÇ ÀúÀÚ·Î ¾Ë·ÁÁø Knuth°¡ ¸¸µé¾î³½ ÇÁ·Î±×·¡¹ÖÀÇ »õ·Î¿î Æз¯´ÙÀÓÀÔ´Ï´Ù. Knuth°¡ ÀÌ¿¡ ´ëÇÑ °³³äÀ» ±¸Ã¼ÈÇϱ⠽ÃÀÛÇÑ °ÍÀÌ 1980³â´ë ÃʹÝÀ̴ϱî 2006³â ÇöÀç·Î½á´Â '»õ·Î¿î'À̶õ ´Ü¾î°¡ Á» ¹«»öÇØ Áý´Ï´Ù. ÇÏÁö¸¸ ÇöÀç±îÁöµµ ±×¸® ³Î¸® ÀÌ¿ëµÇ°í ÀÖÁö´Â ¾ÊÀ¸µí ½Í½À´Ï´Ù.
Àü»êÇп¡´Â Àü»êÇÐÀÇ ³ëº§»óÀ̶ó ºÒ¸®´Â Æ©¸µ»ó(
A. M. Turing Award) ÀÌ ÀÖ½À´Ï´Ù. 1974³â Æ©¸µ»ó ¼ö»óÀÚ´Â ¾Ë°í¸®ÁòÀÇ ºÐ¼®°ú ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ µðÀÚÀÎ ±×¸®°í,
The art of computer programming À̶ó´Â Àú¼·Î ±× ºÐ¾ß¿¡ ¸¹Àº °øÇåÀ» ÇÑ Knuth ¿´½À´Ï´Ù.
°ü·Ê(?)·Î½á ±× ÇØ Æ©¸µ»óÀ» ¹ÞÀº »ç¶÷Àº ACM Turing Award Lecture¶ó´Â À̸§À¸·Î °ÀǸ¦ ÇÏ°Ô µÇ¾î Àִµ¥, 1974³â ±× °ÀÇÀÇ Á¦¸ñÀº
Computer Programming as an Art(
»õ·Î¿î ÷ºÎ "knuth-turingaward.pdf)¿´½À´Ï´Ù"ÆÄÀÏ ¾÷·Îµå. Knuth´Â ¿©±â¼ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ±â¼úÀÌ ¾Æ´Ñ À½¾Ç, ¹Ì¼ú, ¹®Çаú °°Àº Á¾·ùÀÇ ÇϳªÀÇ ¿¹¼ú È°µ¿À̶ó°í °Á¶ÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í °á·ÐºÎ¿¡´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸Ó ÀÚ½ÅÀÌ ¿¹¼ú°¡¶ó´Â ÀνÄÀ» °¡Áö°í ÇÁ·Î±×·¡¹Ö ÀÛ¾÷¿¡ ÀÓÇϸé, ÇÁ·Î±×·¡¹ÖÀÌ ´õ¿í Áñ°Ì°í, ±× °á°ú ¶ÇÇÑ ´õ¿í ÁÁÀ» °ÍÀ̶ó°í ¸»ÇÕ´Ï´Ù.
To summarize: We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art.
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÀÌ·¸°Ô ½ÃÀÛÇß³ªº¾´Ï´Ù. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¿¹¼ú·Î º¸´Â ´ë°¡·Î ºÎÅÍ ¸»ÀÔ´Ï´Ù. À§ÀÇ °ÀǸ¦ ½ÃÀÛÀ¸·Î ´«¿¡ º¸ÀÌ´Â º»°ÝÀûÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ½ÃÀÛ ¶ÇÇÑ KnuthÀÇ ³í¹® Literate Programming (
knuthweb.pdf (257.24 KB) ) ¿¡¼ ½ÃÀÛÇÕ´Ï´Ù. ÀÌ ³í¹®¿¡¼ Knuth´Â ´õÀÌ»ó ÄÄÇ»Å͸¦ À§ÇØ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ½Ã´ë´Â Áö³µ´Ù°í ¸»ÇÕ´Ï´Ù. »ç¶÷À» À§ÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÏÀÚ°í ÇÕ´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °ÍÀÌ ÄÄÇ»ÅÍ¿¡ ÀÏÀ» ½ÃÅ°±â À§ÇÑ ¸í·ÉµéÀÇ ÁýÇÕÀÌÁö¸¸, ÀÌ°Í¿¡ ¿¬¿¬ÇÏ¿© ³Ê¹« ÄÄÇ»ÅÍ¿¡¸¸ ÃÊÁ¡À» ¸ÂÃßÁö ¸»°í, »ç¶÷µé¿¡°Ô ´«À» µ¹¸®ÀÚ´Â °ÍÀÌÁö¿ä. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ ¸£³×»ó½º ½Ã´ë°¡ ¿Â °ÍÀÌÁö¿ä.
ÀÌ ³í¹®¿¡¼ ¿ª½Ã ÀÏ°üµÇ°Ô ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¹®ÇÐ ÀÛÇ°(
works of literature) À¸·Î °£ÁÖÇÏ°í, Àç¹ÌÀÖ´Â ¸»ÀÎ
Literate Programming À̶õ ¸»À»¸¸µé¾î ³Â½À´Ï´Ù. Knuth´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ¸»À峿¡ ±×Ä¡´Â °ÍÀ» ½È¾îÇؼ WEBÀ̶ó´Â ½Ã½ºÅÛÀ» ¸¸µé¾î ³Â½À´Ï´Ù.
TeXÀÌ WEB ½Ã½ºÅÛÀ¸·Î ¸¸µé¾îÁ³´Ù´Â °ÍÀº Àß ¾Ë·ÁÁø »ç½ÇÀÌÁö¿ä.
I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: Literate Programming.
Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.
WEB À¸·Î ÀÛ¼ºµÈ TeX ¼Ò½º: tex.web
ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» º»°ÝÀûÀ¸·Î ÀÍÈ÷°íÀÚ ÇÏ´Â »ç¶÷µéÀº ¹Ýµå½Ã ÀоîºÁ¾ß ÇÑ´Ù°í ÇÕ´Ï´Ù.
TeX¿¡ Àͼ÷ÇØÁö¸é Çѹø µµÀüÇØ º¸°íÀÚ ÇÕ´Ï´Ù.
°ü½ÉÀÖ´Â ºÐÀ» À§ÇÏ¿©: pdf ÆÄÀÏÀ» ¸¸µé¾î³»´Â °úÁ¤À» ´ÙÀ½°ú °°½À´Ï´Ù. À§ÀÇ tex.webÀ» ´Ù¿î¹ÞÀ¸½Ã°í,
% weave tex.web <-- tex.web ÆÄÀÏ¿¡¼ tex.tex ÆÄÀÏÀ» ¾ò½À´Ï´Ù.
% tex tex.tex <-- texÀÌ ¼¼¹øÀ̳ª ¾²¿´³×¿ä.
% dvipdfmx tex.dvi
À§Ã³·³ ÇÏ¿© ¸¸µé¾î Áø Ã¥ÀÌ ¹Ù·Î KnuthÀÇ Àú¼
Computers & Typesetting ½Ã¸®ÁîÀÇ Volume BÀÎ
TeX: The Program ÀÔ´Ï´Ù.
Âü°í: À©µµ¿ìÁî¿¡¼ MiKTeXÀ» ÀÌ¿ëÇϽô ºÐÀº 3247 (by µµÀºÀ̾ƺü) À» Âü°í ÇÏ¸é µË´Ï´Ù.
1.2 KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ÀÇ ¶
Knuth´Â 1987³â 10~12¿ù¿¡ ½ºÅÄÆ÷µå´ëÇп¡¼
Mathematical WritingÀ̶õ Á¦¸ñÀ¸·Î °ÀǸ¦ ÇÏ¿´½À´Ï´Ù. ±× Áß ÀϺΰ¡ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ³»¿ëÀÔ´Ï´Ù. ¿µ¾î°¡ ª¾Æ¼ ´Ù ¾Ë¾ÆµèÁö´Â ¸øÇϴµ¥, ÇÑ°¡Áö ´ÙÇàÀÎ Á¡Àº °ÀÇ Á¦¸ñ°ú µ¿ÀÏÇÑ Mathematical Writing À̶õ Ã¥ÀÌ Àִµ¥, ±× Ã¥Àº ÀÌ °ÀǸ¦ ¼ö°ÇÑ Çлýµé°ú Knuth°¡ ¸¸µç Ã¥À¸·Î "°ÀÇ ³ëÆ®"ÀûÀÎ ¼º°ÝÀÌ Â£½À´Ï´Ù. ÀÌ¿¡ ±× Ã¥¿¡¼ ÇØ´ç °ÀÇ ºÎºÐÀ» ¿Ã¸³´Ï´Ù. µ¿¿µ»ó ½Ãû¿¡ ¸¹Àº µµ¿òÀÌ µÇ¸®¶ó º¾´Ï´Ù.
1.3 KnuthÀÇ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¾ÖÁ¤ ¶
"The tools I used were home grown and became known as Literate Programming. I am enormously biased about Literate Programming, which is surely the greatest thing since sliced bread. I continue to use it to write programs almost every day, and it helps me get efficient, robust, maintainable code much more successfully than any other way I know. Of course, I realize that other people might find other approaches more to their liking; but wow, I love the tools I¡¯ve got now. I couldn¡¯t have written difficult programs like the MMIX meta-simulator at all if I hadn¡¯t had Literate Programming; the task would have been too difficult."
1.4 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ü·Ã ±Û ¶
- fine_art_programming.pdf (54.54 KB) : Free Software Magazine Issue 6¿¡ ½Ç¸° ±Û·Î½á, Free software¿Í ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ¹Ì·¡¿¡ ´ëÇÑ ±ÛÀÔ´Ï´Ù. Àо ¸¸ÇÕ´Ï´Ù. (Âü°í·Î ÀúÀÚ Matt BartonÀº St. Cloud State University in MinnesotaÀÇ ¿µ¹®ÇÐ ±³¼ö¶ó°í ÇÕ´Ï´Ù.)
1.5 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö °ü·Ã »çÀÌÆ® ¶
2 ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ ¶
¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÇÁ·Î±×·¥ ¼Ò½º¿Í ±×¿¡ ´ëÇÑ ¹®¼È ÀÛ¾÷À» µ¿½Ã¿¡ ÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼ ¹®ÇÐÀû ÇÁ·Î±×·¥ÀÇ ¼Ò½º´Â Å©°Ô ÇÁ·Î±×·¡¹Ö ºÎºÐ°ú ¹®¼È ºÎºÐÀ¸·Î ³ª´µ¾îÁø´Ù. ÇÁ·Î±×·¡¹Ö ºÎºÐÀº ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ µû¶ó ´Ù¸£Áö¸¸, ¹®¼È ºÎºÐÀº ±âº»ÀûÀ¸·Î
LaTeX ȤÀº plain
TeXÀ» ÀÌ¿ëÇÑ´Ù. µû¶ó¼ ¹®¼È ºÎºÐ¿¡ ¾î¶²
TeXÀ» »ç¿ëÇÏ´À³Ä¿¡ µû¶ó ³ª´· ¼ö ÀÖ°Ú´Ù.
2.1 LaTeXÀ» ÀÌ¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ¶
WEB/CWEB Àº ±âº»ÀûÀ¸·Î
TeX À» »ç¿ëÇϵµ·Ï ¼³°èµÇ¾î ÀÖÁö¸¸ ¿©·¯°¡Áö ¹æ¹ýÀ» ÀÌ¿ëÇؼ
LaTeX ¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Å©°Ô ´ÙÀ½ÀÇ µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
noweb ˼
LaTeX À» ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï, ¶Ç ¿©·¯°¡Áö ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º¯°æÇÑ, WEB ÀÌ´Ù. ½ÇÁ¦·Î
LaTeX À» »ç¿ëÇϱâ À§Çؼ´Â
noweb À» »ç¿ëÇÏ´Â °ÍÀÌ Á¤´äÀ̶ó°í º¼ ¼ö ÀÖ´Ù.
- ÀåÁ¡ : ½ºÅ¸ÀÏ ÆÄÀϸ¸À» Á¦°øÇÔÀ¸·Î¼ ±âÁ¸ÀÇ Å¬·¡½ºµé°ú È¥¿ëÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¿©·¯°¡Áö ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ Á¦°øÇÑ´Ù.
- ´ÜÁ¡ : nawk µî ´Ù¸¥ À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇÏ¿© ¼Ò½º¸¦ ÄÄÆÄÀÏ ÇÏ°Ô µÇ¹Ç·Î Á÷°üÀûÀÌÁö ¾ÊÀº ¼³Ä¡°úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù. ±âÁ¸ÀÇ CWEB ¾ð¾î¿Í´Â Á¶±Ý ´Ù¸£´Ù.
2.1.2 CWEB À» ÀÌ¿ëÇÏ´Â ¹æ¹ý ¶
CWEBÀ¸·Î ÀÛ¼ºµÈ w ÆÄÀÏÀ» ±â¹ÝÀ¸·Î ÇÑ´Ù. cweb.cls ¶ó°í Çϴ Ŭ·¡½º ÆÄÀÏÀÌ ÀÖÀ¸¹Ç·Î À̸¦ ÀÌ¿ëÇÏ°Ô µÈ´Ù.
- ÀåÁ¡ : ±âÁ¸ÀÇ w ÆÄÀϵéÀ» ¸î°¡Áö º¯°æÇÔÀ¸·Î¼ LaTeX »ó¿¡¼ »ç¿ëÀÌ °¡´ÉÇÏ´Ù.
- ´ÜÁ¡ : Ŭ·¡½º ÆÄÀϸ¸À» Á¦°øÇÔÀ¸·Î¼ º»°ÝÀûÀÎ È®ÀåÀÌ °ÅÀÇ ºÒ°¡´É ÇÏ´Ù. ¿¹¸¦ µé¾î¼ ¸Þ¸ð¾Æ¿Í °°ÀÌ »ç¿ëÇϱâ À§Çؼ´Â Ŭ·¡½º ÆÄÀÏÀÎ cweb.cls ¸¦ .sty ÆÄÀÏ·Î º¯°æÇØ¾ß Çϴµ¥, ÀÌ ³ë·ÂÀº °ÅÀÇ ¹«ÀÇ¹Ì ÇÏ´Ù°í »ý°¢ÀÌ µÈ´Ù.
LaTeX¿¡¼ CWEB ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¹æ¹ýÀÌ ¼³¸íµÇ¾î ÀÖ´Ù.
2.2 PlainTeXÀ» ÀÌ¿ëÇÑ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ¶
- CWEB
- CTWILL: ÁַΠåÀ» ¸¸µå´Â °æ¿ì¿¡ ÀÌ¿ëµÈ´Ù.
- Rambutan: ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î Java¸¦ »ç¿ëÇÑ´Ù´Â °Í¸¸ »©¸é CWEB°ú ¸ðµç °ÍÀÌ µ¿ÀÏÇÏ´Ù.
- javaweave(CWEBÀÇ cweave¿¡ ÇØ´ç) Ãâ·Â Æ÷¸äÀÌ CWEB°ú ¶È°°´Ù.
- ÇÏÁö¸¸ Çѱ۰ú ºÏ¸¶Å©°¡ ¾ÈµÈ´Ù.
- Java ÇÁ·Î±×·¡¹ÖÀ» ÀÌ¿ëÇÏ¿© ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§´Â nowebÀ» ÃßõÇÑ´Ù.