KTUGFaq

KTUG FAQ

LiterateProgramming (rev. 1.15)

·Î±×ÀÎ:
ºñ¹Ð¹øÈ£:
°¡ÀÔ
You have a deep appreciation of the arts and music.
FrontPage › LiterateProgramming

¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö

Literate programming, ¿ì¸® ¸»·Î ÇÏ¸é ¹®ÇÐÀû ȤÀ¸ ¹®¼­Àû ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÒ ¼ö Àִµ¥, Á¦ °³ÀÎÀûÀÎ °ßÇطδÂ, Knuth°¡ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» À½¾ÇÀ» ÀÛ°îÇÏ´Â °ÍÀ̳ª ¹®ÇÐ ÀÛÇ°À» ¾²´Â °Í¿¡ ºñ±³ÇÏ´Â °ÍÀ» º¸¸é, '¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö'ÀÌ ´õ ¾î¿ï¸± °Í °°½À´Ï´Ù. ¾ÕÀ¸·Î´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÏ°Ú½À´Ï´Ù.

³ëº§»ó¿¡´Â ¼öÇаú Àü»êÇп¡ ´ëÇÑ »óÀÌ ¾ø½À´Ï´Ù. ¼öÇп¡´Â ¼öÇÐÀÇ ³ëº§»ó¿¡ ÇØ´çÇÏ´Â ÇÊÁî»ó(Fields Medal)ÀÌ ÀÖ°í, Àü»êÇп¡´Â Àü»êÇÐÀÇ ³ëº§»óÀ̶ó ºÒ¸®±â¿¡ ÃæºÐÇÑ Æ©¸µ»ó(Turing Award)ÀÌ ÀÖ½À´Ï´Ù. 1974³âÀÇ Æ©¸µ»ó ¼ö»óÀÚ´Â ¾Ë°í¸®ÁòÀÇ ºÐ¼®°ú ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ µðÀÚÀÎ ±×¸®°í, The art of computer programming À̶ó´Â Àú¼­·Î ±× ºÐ¾ß¿¡ ¸¹Àº °øÇåÀ» ÇÑ Knuth ¿´½À´Ï´Ù. ±×¸®°í °ü·Ê·Î½á ±×ÇØ Æ©¸µ»óÀ» ¹ÞÀº »ç¶÷Àº ACM Turing Award Lecture¶ó´Â À̸§À¸·Î °­ÀǸ¦ ÇÏ°Ô µÇ¾î Àִµ¥, 1974³â ±× °­ÀÇÀÇ Á¦¸ñÀº Computer Programming as an Art ¿´½À´Ï´Ù. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ±â¼úÀÌ ¾Æ´Ñ À½¾Ç, ¹Ì¼ú, ¹®Çаú °°Àº Á¾·ùÀÇ ÇϳªÀÇ ¿¹¼ú È°µ¿À̶ó°í °­Á¶ÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í °á·ÐºÎ¿¡´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸Ó ÀÚ½ÅÀÌ ¿¹¼ú°¡¶ó´Â ÀνÄÀ» °¡Áö°í ÇÁ·Î±×·¡¹Ö ÀÛ¾÷¿¡ ÀÓÇϸé, ÇÁ·Î±×·¡¹ÖÀÌ ´õ¿í Áñ°Ì°í, ±× °á°ú ¶ÇÇÑ ´õ¿í ÁÁÀ» °ÍÀ̶ó°í ¸»ÇÕ´Ï´Ù.

Computer Programming as an ArtÀÇ Àü¹®: @knuth-turingaward.pdf (737.8 KB)

¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÀÌ·¸°Ô ½ÃÀÛÇß³ªº¾´Ï´Ù. ÇÁ·Î±×·¡¹ÖÀ» ¿¹¼ú·Î º¸´Â ´ë°¡·Î ºÎÅÍ ¸»ÀÔ´Ï´Ù. À§ÀÇ °­ÀǸ¦ ½ÃÀÛÀ¸·Î ´«¿¡ º¸ÀÌ´Â º»°ÝÀûÀÎ ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ ½ÃÀÛ ¶ÇÇÑ KnuthÀÇ ³í¹® Literate Programming ¿¡¼­ ½ÃÀÛÇÕ´Ï´Ù. ÀÌ ³í¹®¿¡¼­ Knuth´Â ´õÀÌ»ó ÄÄÇ»Å͸¦ À§ÇØ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ½Ã´ë´Â Áö³µ´Ù°í ¸»ÇÕ´Ï´Ù. »ç¶÷À» À§ÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÏÀÚ°í ÇÕ´Ï´Ù. ¹°·Ð ÇÁ·Î±×·¡¹ÖÀ̶ó´Â °ÍÀÌ ÄÄÇ»ÅÍ¿¡ ÀÏÀ» ½ÃÅ°±â À§ÇÑ ¸í·ÉµéÀÇ ÁýÇÕÀÌÁö¸¸, ÀÌ°ÍÀ» ³Ê¹« ÄÄÇ»ÅÍ¿¡ ÃÊÁ¡À» ¸ÂÃßÁö ¸»°í, »ç¶÷µé¿¡°Ô ´«À» µ¹¸®ÀÚ´Â °ÍÀÌÁö¿ä. ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ ¸£³×»ó½º ½Ã´ë°¡ ¿Â °ÍÀÌÁö¿ä. ^^ ÀÌ ³í¹®¿¡¼­ ¿ª½Ã ÀÏ°üµÇ°Ô ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀ» ¹®ÇÐ ÀÛÇ°(works of literature) º¸ÀÚ°í ÇÏ°í ¿©±â¼­ Literate Programming À̶õ ¸»À» ¸¸µé¾î ³Â½À´Ï´Ù. Knuth´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀ» ´Ü¼øÇÑ ¸»Àå³­¿¡ ±×Ä¡´Â °ÍÀ» ½È¾îÇؼ­ WEBÀ̶ó´Â ¾ð¾î¸¦ ¸¸µé¾î ³Â½À´Ï´Ù. ¿ì¸®ÀÇ »ç¶ûÀ» µ¶Â÷ÁöÇÏ´Â TeXÀÌ WEBÀ̶ó´Â ½Ã½ºÅÛ, ÀÏÁ¾ÀÇ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ¸¸µé¾î Á³½À´Ï´Ù.

¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀÇ È¿½Ã¶ó°í ÇÒ ¼ö ÀÖ´Â ³í¹®: @knuthweb.pdf (257.24 KB)

CWEB


from KTUGContrib:3195 (by ÀÛÀº³ª¹«)

CWEB À̶ó´Â ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀ» ¼Ò°³ÇÏ°íÀÚ ÇÕ´Ï´Ù. ¹®ÇÐÀû ÇÁ·Î±×·¡¹ÖÀº ÀÌ °÷ À§Å°¿¡ TeXÀ» ¼Ò°³ÇÏ´Â °÷¿¡ ¹®¼­È­ ÇÁ·Î±×·¡¹Ö À̶õ À̸§À¸·Î ÀÌ¹Ì ¼Ò°³°¡ µÈ °ÍÀ̱⵵ ÇÕ´Ï´Ù.

TeX ÇÁ·Î±×·¥ ÀÚüµµ ¹®ÇÐÀû ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ Áß ÇϳªÀÎ WEBÀ¸·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. CWEBÀº ±âÁ¸ÀÇ WEBÀ» º¸´Ù °­È­½ÃŲ °ÍÀ¸·Î °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÎ C ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í TeXÀÇ Á¶ÇÕÀ¸·Î µÈ ½Ã½ºÅÛÀÔ´Ï´Ù.

CWEB ½Ã½ºÅÛÀÇ ¼³Ä¡¹× °ü·Ã ¹®¼­µéÀº http://www.literateprogramming.com ¿¡¼­ ½±°Ô ã¾Æ º¸½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌ À¥»çÀÌÆ®¿¡´Â C ÇÁ·Î±×·¡¹Ö ¾ð¾î »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ÇÒ ¼ö ÀÖ´Â ¹®ÇÐÀû ÇÁ·Î±×·¥µµ ¸¹ÀÌ ¼Ò°³ µÇ¾î ÀÖ½À´Ï´Ù.

@korean_cwebman.pdf (139.65 KB)

CWEB ¿¹Á¦

Àú´Â ÃÖ±Ù ¸î³â°£ CWEBÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ÇØ¿À°í ÀÖ°í, ¾ÕÀ¸·Îµµ °è¼ÓÇÒ °ÍÀε¥, CWEB ÇÁ·Î±×·¡¹ÖÀº Á¤¸» Àç¹ÌÀÖ½À´Ï´Ù. Á¦ ¸»À» ¸ø ¹ÏÀ¸½Ã°Ú´Ù¸é, Knuth ¸»Àº ¹ÏÀ¸½Ã°ÚÁÒ? Knuth´Â Á¾Á¾ ±×ÀÇ Áý ¿¬±¸½Ç¿¡¼­ ³ª¿Ã ¶§ ÀÌ·¸°Ô ¸»ÇѴٳ׿ä. "CWEB programming is such fun!"
  • Knuth°¡ ¼Õ¼ö ÀÛ¼ºÇÑ CWEBÀÇ ´ëÇ¥ÀûÀÎ ¿¹Á¦: @wc.pdf (61.31 KB)
  • CWEB ÇÁ·Î±×·¥ÀÇ ÁÖ¿Á°°Àº ¿¹Á¦µé (http://www.literateprogramming.com/fexamples.html)
  • ucsplain.texÀ» ÀÌ¿ëÇÑ ÇÑ±Û CWEB ¿¹Á¦: @vrotate.tar.gz (298.65 KB) (¸Å¿ì ¾û¼ºÇÕ´Ï´Ù. ±×Àú Çѱ۷ΠÀÛ¼ºÇß´Ù¶ó´Â Á¤µµ·Î¸¸ ºÁÁÖ¼¼¿ä.)

CWEB ¼³Ä¡½Ã ÇÑ±Û °í·Á»çÇ×

UTF-8·ÎµÈ ÇѱÛÀ» Æ÷ÇÔÇÏ´Â cwebÀÇ ¼Ò½º ÆÄÀÏÀÎ .w ÆÄÀϷκÎÅÍ ctangle°ú cweave ¸í·É¾î¸¦ ÀÌ¿ëÇؼ­ C ÇÁ·Î±×·¥ ÆÄÀÏÀÎ .c ÆÄÀÏ°ú TeX ÆÄÀÏÀÎ .texÀ» ¸¸µé´Ùº¸¸é, ÀÔ·ÂÀÌ ³Ê¹« ±æ´Ù´Â °æ°í ¸Þ½ÃÁö°¡ ³ª¿É´Ï´Ù. ÀÌ´Â À§¸í·É¾îµéÀÌ ÆÄÀÏÀ» ó¸®Çϱâ À§Çؼ­ ³»ºÎÀûÀ¸·Î ¹öÆÛ(char ¹è¿­)¸¦ °¡Áö°í ÀÖ°í, ±× ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â buffer_end°¡ À۾Ƽ­ ³ª¿À´Â °æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù. ÀÌ °æ¿ì´Â ¹öÆÛÀÇ ³¡À» ³ªÅ¸³»´Â º¯¼ö buffer_end¸¦ ÃæºÐÈ÷ Å©°ÔÇØÁÖ¸é ¹ß»ýÇÏÁö ¾Ê´Â °æ°í ¸Þ½ÃÁöÀÔ´Ï´Ù. ¿µ¾îÀÇ °æ¿ì´Â ¾ËÆĺª Çѹ®ÀÚ°¡ 1¹ÙÀÌÆ®À̱⠶§¹®¿¡ ±×·¯ÇÑ °æ°í ¸Þ½ÃÁö°¡ ¾ø½À´Ï´Ù. ¹°·Ð ¿µ¾îÀÇ °æ¿ìµµ ÇÑ ÁÙÀ» ³Ê¹« ±æ°ÔÇÏ¸é ±×·± ¸Þ½ÃÁö°¡ ³ª¿À°ÚÁÒ.:-)

(Àú´Â utf-8¿¡ ´ëÇÑ Áö½ÄÀÌ ÀüÇô ¾ø½À´Ï´Ù.) utf-8·Î µÈ °æ¿ì´Â ÇÑ ¹®ÀÚ¸¦ 1¹ÙÀÌÆ®¿¡¼­ ÃÖ´ë 4¹ÙÀÌÆ®±îÁö Ç¥ÇöÇÑ´Ù°í µé¾ú½À´Ï´Ù. µû¶ó¼­ utf-8·Î ÀÛ¼ºµÈ ¼Ò½ºÀÇ °æ¿ì¸¦ À§Çؼ­ buffer_end¸¦ ÃÖ´ë 4¹è°¡ µÇ°ÔÇÏ¸é µË´Ï´Ù.

ctangle°ú cweaveÀÇ È­ÀÏ ÀÔÃâ·Â¿¡ ´ëÇÑ ºÎºÐÀ̳ª °øÅë ºÎºÐÀº common.w(.c)¿¡ Àִµ¥, buffer_end¿¡ ´ëÇÑ ³»¿ëÀÌ ¹Ù·Î ÀÌ ÆÄÀÏ¿¡ ÀÖ½À´Ï´Ù.

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]; /* where each line of input goes */
char *buffer_end=buffer+buf_size-2; /* end of |buffer| */
...
µû¶ó¼­ buf_size¸¦ ÃÖ´ë 4¹è Å©°ÔÇÏ´ø°¡, ¾Æ´Ï¸é, buffer_end¸¦ Á¤ÀÇÇÏ´Â ºÎºÐ¿¡ »ç¿ëÇÑ buf_size ´ë½Å¿¡ long_buf_size¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.

Àú´Â cwebÀ» ¼³Ä¡ÇÒ¶§, µÎ¹ø° ¹æ¹ýÀ» »ç¿ëÇؼ­ ¼³Ä¡Çؼ­, utf-8·Î µÈ ¹®¼­¸¦ ÄÄÆÄÀÏÇÒ¶§µµ ctangleÀ̳ª cweave°¡ ¹¬¹¬È÷ ±×Àú Á¦ ÇÒ ÀÏÀ» ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ utf-8·Î µÈ ¹®¼­ÀÇ ±Ùº»ÀûÀÎ ÇØ°áÃ¥ÀÎÁö, ÀӽùæÆíÀûÀÎ ¹æ¹ýÀÎÁö´Â ¸ð¸£°ÚÀ¸³ª, °æ°í ¸Þ½ÃÁö¸¦ º¼ ¼ö ¾ø¾î¼­ ÁÁ±â´Â ÇÕ´Ï´Ù.