ããã°ã©ãã³ã°ã§äœ¿çšãããã¡ã¢ãªã¢ãã«ã®æ€èšã«é¢ããèšäºã®ç¿»èš³ã«æ³šç®ããŠãã ãããçŸåšã6ã€ã®äž»èŠãªã¡ã¢ãªã¢ãã«ãããã°ã©ãã³ã°ãæ¯é
ããŠããŸãïŒ
Intel 8086ã¡ã¢ãªã¢ãã«ãšæ··åããªãã§ãã ããïŒã ãããã®3ã€ã¯ã1950幎代ã®æŽå²çã«æãéèŠãª3ã€ã®ããã°ã©ãã³ã°èšèªã§ããCOBOLãLISPãããã³FORTRANã«ç±æ¥ããæ®ãã¯ãç£æ°ããŒããUnixã¹ã¿ã€ã«ã®éå±€ãã¡ã€ã«ã·ã¹ãã ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®3ã€ã®æŽå²çã«éèŠãªã¹ãã¬ãŒãžã·ã¹ãã ã«é¢é£ä»ããããŠããŸãã
ãããã®ã¢ãã«ã¯ãæ§æãåã·ã¹ãã ãããã¯ããã«æ·±ãã¬ãã«ã§ãããã°ã©ãã³ã°èšèªãã§ããããšãŸãã¯ã§ããªãããšã決å®ããŸãã ãããã®ã¢ãã«ã詳ããèŠãŠãèãããã代æ¿æ¡ãšããããèå³æ·±ãçç±ã説æããŸãããã
ã¯ããã«
çŸä»£ã®åããã°ã©ãã³ã°ç°å¢ã¯ãããçšåºŠã6ã€ã®ã¡ã¢ãªã¢ãã«ãã¹ãŠã䜿çšããŸããããããã·ã¹ãã ãéåžžã«è€éã§ç解ãã«ããçç±ã®1ã€ã§ãã
ããã§ããããã®åã¡ã¢ãªã¢ãã«ãåæããŸãã
- ãšã³ãã£ãã£ã®å±æ§ãè¡šããŸã
- ã·ãªã¢ã«åãšå¯Ÿè©±ãã
- ããã°ã©ã ã®ã¢ãžã¥ãŒã«æ§ãå®è£
ããã³ç¶æããç¹å®ã®åŽé¢ãžã®ã¢ã¯ã»ã¹ãå¶éããããŒã«ã«ãŸãã¯ãã©ã€ããŒãã«ããŸãã
ããããŒã°ïŒã¢ãããã¯å€æ°ã®ã¿ãæã€ããã°ã©ã
åçŽãªããã°ã©ãã³ã°èšèªããå§ããŸããããã¯ããŒãžã£ãŒããªããããŒã«å€ãšæé粟床ã®æ°ä»¥å€ã®ããŒã¿åãå«ãŸããŠããªããããããŒã¿ãæ§é åããå¯èœæ§ããããŸããã 以äžã«ãéåžžã®ã»ãã³ãã£ã¯ã¹ãšéåžžã®æäœã®åªå
床ã䜿çšãã
BNFã®èª¬æã瀺ããŸãã
program ::= def* def ::= "def" name "(" args ")" block args ::= "" | name "," args block ::= "{" statement* "}" statement ::= "return" exp ";" | name ":=" exp ";" | exp ";" | nest nest ::= "if" exp block | "if" exp block "else" block | "while" exp block exp ::= name | num | exp op exp | exp "(" exps ")" | "(" exp ")" | unop exp exps ::= "" | exp "," exps unop ::= "!" | "-" | "~" op ::= logical | comparison | "+" | "*" | "-" | "/" | "%" logical ::= "||" | "&&" | "&" | "|" | "^" | "<<" | ">>" comparison ::= "==" | "<" | ">" | "<=" | ">=" | "!="
ãã®èšèªã§æž©åºŠãè¯æ°ããææ°ã«å€æããäŸïŒ
def f2c(f) { return (f â 32) * 5 / 9; } def main() { say(f2c(-40)); say(f2c(32)); say(f2c(98.6)); say(f2c(212)); }
ããã°ã©ãã³ã°èšèªã§ã¯ååž°ãçŠæ¢ãããŠãããå€ã«ããåŒã³åºããè¡ã貪欲ãªïŒç±å¿ãªïŒèšç®æŠç¥ã䜿çšãããŠããããšã«åæããŸãããã ãŸãããã¹ãŠã®å€æ°ãæé»çã«ããŒã«ã«ã§ããããµãããã°ã©ã ãåŒã³åºããšãã«ãŒãã§åæåãããããšã«åæããŸãã ãããã£ãŠããµãã«ãŒãã³ã«ã¯å¯äœçšããããŸããã ãã®åœ¢åŒã§ã¯ãããã°ã©ãã³ã°èšèªã¯æéç¶æ
ãã·ã³ã®ããã°ã©ãã³ã°ã«ã®ã¿é©çšã§ããŸãã ã¬ãžã¹ã¿ãåããå®éã®ããã»ããµçšã«ãã®ãããªããã°ã©ã ãã³ã³ãã€ã«ãããšãããã°ã©ã ããã¹ãå
ã®åå€æ°ã«1ã€ã®ã¬ãžã¹ã¿ãå²ãåœãŠãããšãã§ããŸãã åã«ãŒãã³ã«ã¯ãæ»ãã¢ãã¬ã¹çšã®ã¬ãžã¹ã¿ãå²ãåœãŠãããšãã§ããŸãã ãŸããåœä»€ã«ãŠã³ã¿ã«ã¯å¥ã®ã¬ãžã¹ã¿ãå¿
èŠã§ãã ã®ã¬ãã€ãã®RAMãæèŒãããã·ã³ã§ãã®èšèªã®ããã°ã©ã ãå®è¡ããŠãå©ç¹ã¯ãããŸããã 圌女ã¯æåã«æã£ãŠãã以äžã®å€æ°ã䜿çšããããšã¯ã§ããŸããã§ããã
ããã«ããããã®ãããªèšèªã圹ã«ç«ããªããªããŸãã éãããã¹ããŒã¹ã§è¡ããå€ãã®äŸ¿å©ãªèšç®ããããŸãã ããããããã§ã¯ããã®ãããªèšç®ã§ãã£ãŠãããã®æœè±¡çãªãã¯ãŒãå®å
šã«äœ¿çšããããšã¯å®éã«ã¯èš±å¯ãããŸããã
è¿œå ã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããã«ã¯ãæå®ãããã¢ãã¬ã¹ã«å¯ŸããŠ1ãã€ããèªã¿æžãããpeekïŒïŒããã³pokeïŒïŒé¢æ°ã䜿çšã§ããŸãã ãããã£ãŠãã¡ã¢ãªãæ¬åœã«å¹ççã«äœ¿çšã§ããŸãã
def strcpy(d, s, n) { while n > 0 { poke(d + n, peek(s + n)); n := n â 1; } }
ãã ããå€ãã®ããã°ã©ãã³ã°èšèªã§ã¯ãpeekïŒïŒããã³pokeïŒïŒãæäŸãããŠããŸããã 代ããã«ããããã¯çŠæ¬²çãªåçš®ã®ãã€ãé
åã®äžã«ããçš®ã®æ§é ãæäŸããŸãã
ããšãã°ãã¹ããŒããã·ã³ããã¹ããããã¬ã³ãŒããé
åãããã³ãŠããªã³ãããã°ã©ãã³ã°ããå Žåã§ãããã§ã«å€§ããªã¡ãªããããããŸãã
ãã¹ããããã¬ã³ãŒããšCOBOLã¡ã¢ãªã¢ãã«ïŒæçèšç®æžãšããŠã®ã¡ã¢ãª
COBOLã§ã¯ãããŒã¿ãªããžã§ã¯ãã¯åå²äžå¯èœãªãã®ã§ãã
- æååãç¹å®ã®ãµã€ãºã®æ°åãªã©ã®åºæ¬çãªãªããžã§ã¯ãã
- ãŸãã¯æ¬¡ã®ãããªãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã
- ã¬ã³ãŒãïŒäžŠã¹ãŠä¿åãããããŸããŸãªã¿ã€ãã®ãªããžã§ã¯ãïŒ;
- ã¢ãœã·ãšãŒã·ã§ã³ïŒåãå Žæãå ããŠä¿åããã代æ¿ãªããžã§ã¯ãïŒ;
- ãŸãã¯é
åïŒåãã¿ã€ãã®ç¹å®ã®æ°ã®ãªããžã§ã¯ãã次ã
ã«äžŠã¹ãŠä¿åïŒã
ïŒããã§ã¯ããã®èšèªãæäŸãããã®ã®ç解ãç°¡çŽ åããããã«ãCOBOLã®çšèªãšåé¡æ³ãã倧å¹
ã«éžè±ããŠããŸãïŒã
ãã®ãããªã¡ã¢ãªã¢ãã«ã§ã¯ãè€æ°ã®é¡äŒŒãããšã³ãã£ãã£ãããå Žåãåãšã³ãã£ãã£ã¯æ
å ±ãæ ŒçŽããããã«èšèšãããåãã¿ã€ãã®ã¬ã³ãŒãïŒãµã€ãºãšãµããã£ãŒã«ãã®äž¡æ¹ïŒãæã¡ãŸãã ãããã£ãŠããã®ãšã³ãã£ãã£ã«é¢ãããã¹ãŠã®æ
å ±ã¯ã¡ã¢ãªå
ã«é çªã«é
眮ãããŸãã ãããã®é¢é£ããŒã¿ããã£ã¹ã¯ãããŒãããã³ãã«ãŒãããŸãã¯ãã®ä»ã®ã¹ãã¬ãŒãžã¡ãã£ã¢ã«éåžžã«ç°¡åã«ããŠã³ããŒãããŠä¿åã§ããŸãã ãããã®ã¬ã³ãŒãã®ããã€ããåæã«ã¡ã¢ãªå
ã«ããå Žåãããããé
åã«é
眮ã§ããŸãã
ãšã³ãã£ãã£ã®å±æ§ã¯2ãã€ãã§å®çŸ©ãããŸãã2ãã€ãã¯ããã®ãšã³ãã£ãã£ã®ããŒã¿ãæ ŒçŽããã¬ã³ãŒãã®ããŒã¹ã¢ãã¬ã¹ãåºæºãšããããã®å±æ§ã®éå§ãšçµäºã®ãªãã»ããã§ãã ããšãã°ãAccountãªããžã§ã¯ãã«ã¯10ââã35ãã€ãã®ææè
ãã£ãŒã«ããããããã®äžã«ã¯18ã26ãã€ãã®ã¢ã«ãŠã³ãææè
ã®Patronåãæ ŒçŽãããŸãã
ãã®ã¢ãããŒãã«ã¯ãèå³æ·±ãç¹ãããã€ããããŸãã
ãã€ã³ã¿ã¯ãŸã£ãããããŸããã ããã¯ãåçãªã¡ã¢ãªå²ãåœãŠãè¡ãæ¹æ³ããªããnullãã€ã³ã¿ãéåç
§ã§ããããã³ã°ãªã³ã°ãã€ã³ã¿ã䜿çšããŠã¡ã¢ãªé åãäžæžãããªãããšãæå³ããŸãïŒãã ãã2ã€ã®å€æ°ãREDEFINESãšããŠå®£èšãããŠããå Žåã¯ããã¡ããäºãã«äžæžãããŠåé¿ã§ããŸãïŒ
ã¿ã°ä»ãã®ãŠããªã³ ïŒãã¡ã¢ãªäžè¶³ããªãŒããŒã©ããããã€ã³ã¿ãŒã§ã®ã¡ã¢ãªã®æµªè²»ã¯ããã®åé¡ã«åœ¹ç«ã¡ãŸããã
äžæ¹ãããã¯ãŸããããã°ã©ã å
ã®ãã¹ãŠã®ããŒã¿æ§é ã«ã¯å³ããå¶éããããç°ãªãæéã«ç°ãªããã®ã«åãã¡ã¢ãªã䜿çšããå¯äžã®æ¹æ³ã¯ãããããåæã«äœ¿çšãããªã¹ã¯ãããããšãæå³ããŸãã
ãã¹ãããããšã³ããªã¯éåžžã«çµæžçã§ãã¡ã¢ãªãç¯çŽãããŸãã çŸåšäœæ¥ããŠãããšã³ãã£ãã£ã®ããŒã¿ã®ã¿ã«çæããå¿
èŠããããŸãã ããã¯ããããã€ãã®ã¡ã¢ãªãæèŒãããã·ã³ã§ã¡ã¬ãã€ãã®ããŒã¿ãæ£åžžã«åŠçã§ããããšãæå³ããŸããããã¯ãCOBOLããã°ã©ããŒã1950幎代ã«è¡ã£ãããšã§ããã
åããŒã¿ïŒãã£ãŒã«ãããµããã£ãŒã«ããªã©ïŒã«ã¯1ã€ã®äžæã®èŠªãããïŒæäžäœã¬ãã«ãé€ãïŒãããã«ãã¹ãŠã®åããŒã¿ãå«ãŸããŸãã
ãã®ã¡ã¢ãªã¢ãã«ã§ã¯ãããã°ã©ã ã®äžéšã«ç¬èªã®ã¡ã¢ãªïŒããšãã°ãã¹ã¿ãã¯ãã¬ãŒã ãéçãªãã©ã€ããŒãå€æ°ïŒãããå Žåããã®ç¬èªã®ã¡ã¢ãªã«ããŒã¿ãä¿åããããšã§ãäžéšã®ãšã³ãã£ãã£ããã©ã€ããŒãã«ããããšãã§ããŸãã ããã¯ãããŒã«ã«ã®äžæå€æ°ãäœæããå¿
èŠãããããããããã°ã©ã ã®æ®ãã®éšåã«åœ±é¿ããªãããšã確èªããå Žåã«äŸ¿å©ã§ãã ãã ãããã®ãããªã¡ã¢ãªã¢ãã«ã§ã¯ãããã°ã©ã ã®ã©ã®éšåã§ãå±æ§ããã©ã€ããŒãã«ããããšã¯ã§ããŸããã
ALGOLïŒããã³ALGOL-58ãšALGOL-60ïŒã¯ãé
åã«å ããŠãããŒã¿æ§é åã¡ã«ããºã ãã¡ã€ã³ãšããŠCOBOLããã¬ã³ãŒããåçšããŸããã ãããŠãã»ãšãã©ãã¹ãŠã®ä»ã®ããã°ã©ãã³ã°èšèªãäœããã®åœ¢ã§ãããç¶æ¿ããã®ã¯ãã¢ã«ãŽã«ããã§ããã
Cèšèªã«ã¯ãããŒã¿ãæ§é åããããã®ã»ãŒãã¹ãŠã®ããŒã«ã»ããïŒããªããã£ãåïŒcharãintãªã©ïŒãæ§é äœãå
±çšäœãé
åïŒããããŸãã ãã ããCã«ã¯ãåŒæ°ãåãå
¥ããã ãã§ãªããååž°çãªãã€ã³ã¿ãŒãšã«ãŒãã³ããããã¹ã¿ãã¯ãå²ãåœãŠããããªãã®ãå¿
èŠã§ãã COBOLã¢ãã«ã«å¯Ÿãããããã®æ¡åŒµæ©èœã¯ã©ã¡ããLISPããæäŸãããŸããã
ãªããžã§ã¯ãã°ã©ããšLISPã¡ã¢ãªã¢ãã«ïŒããŒã¯ä»ãæåã°ã©ããšããŠã®ã¡ã¢ãª
LISPïŒçŸåšã¯Lispã§ããã1959幎ã«ã¯LISPã§ããïŒã¯ãCOBOLãšã»ãšãã©å€ãããªãã§ãããã ãã€ã³ã¿ãããã ãã§ãªããLISPã«ã¯ä»ã«ã»ãšãã©äœããããŸããã LISPã§ããŒã¿ãæ§é åããããã®å¯äžã®ã¡ã«ããºã ã¯consãšåŒã°ãããã®ã§ã2ã€ã®ãã€ã³ã¿ãŒã§æ§æãããŸãã1ã€ã¯ãcarãããã1ã€ã¯ãcdrãã§ãã ä»»æã®å€æ°ã®å€ã¯ãã€ã³ã¿ãŒã§ãã çæãžã®ãã€ã³ã¿ãã·ã³ãã«ãžã®ãã€ã³ã¿ãæ°å€ãžã®ãã€ã³ã¿ããŸãã¯ãµãããã°ã©ã ãžã®ãã€ã³ã¿ã®å ŽåããããŸããããã€ã³ã¿ã§ãã
ããã«ãåŒæ°ä»ãã®ååž°ã«ãŒãã³ãããããããš
ããŒã«ããŒã«ååž°æé©åã®ãããã§ãå€æ°ã®å€ãå€æŽããããšãªãäœããããããã°ã©ã ãæžãããšãã§ããŸãã
ä»»æã®ãªããžã§ã¯ãã¯ãä»»æã®æ°ã®ãã€ã³ã¿ãŒã«ãã£ãŠåç
§ã§ãããã®ãã€ã³ã¿ãŒã䜿çšããŠãªããžã§ã¯ããå€æŽã§ããŸãã ãããã£ãŠããªããžã§ã¯ãã«ã¯äžæã®èŠªã¯ãããŸããã
ãã®ã¢ãã«ã¯ãèªç¶èšèªã®åŠçãããã°ã©ã ã®è§£éãšã³ã³ãã€ã«ã
培åºçãªæ€çŽ¢ãããã³
ã·ã³ããªãã¯èšç®ã®ããã®ããã°ã©ã ãããªãç°¡åã«äœæã§ãããšããæå³ã§ãéåžžã«æè»æ§ããã
ãŸã ã ãŸããããŒã¿æ§é ïŒ
èµ€é»æšãªã© ïŒãäžåºŠäœæããŠããããããŸããŸãªã¿ã€ãã®ãªããžã§ã¯ãã«ç°¡åã«é©çšããããšãã§ããŸãã 察ç
§çã«ãCãªã©ã®COBOL掟çèšèªã«ã¯ããã®çš®ã®äžè¬åã«å€§ããªå°é£ããããŸãããã®çµæãããã°ã©ããŒã¯ãæ°ããããŒã¿åã«åãããç¥ãããŠããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãå®è£
ããããã«ãèšå€§ãªéã®å埩ã³ãŒããäœåºŠãæžãå¿
èŠããããŸãã
ãã ããåæã«ããã®ã¢ãã«ã¯ã¡ã¢ãªã®å¶éã«ããŸã察å¿ã§ããããšã©ãŒãçºçãããããå¹æçãªå®è£
ã«ã¯å€ãã®å·¥å€«ãå¿
èŠã§ãã åãªããžã§ã¯ãã¯ãã€ã³ã¿ãŒã«ãã£ãŠã®ã¿èå¥ããããããåãªããžã§ã¯ãã¯ãšã€ãªã¢ã¹ãæã€ããšãã§ããŸãã åå€æ°ã¯NULLãã€ã³ã¿ãŒã«ããããšãã§ããŸãã ãã€ã³ã¿ãŒã¯äœã§ãæãããšãã§ãããããåãšã©ãŒïŒ1ã€ã®åã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãä»ã®åãæããšäºæ³ãããå€æ°ã«æ ŒçŽãããŠããå ŽåïŒã¯ããããšããã«ããããªããžã§ã¯ãã°ã©ãèšèªã¯åŸæ¥ããã§ãã¯ã䜿çšããŠãããã°æéãççž®ããŸãå®è¡æã«ã¿ã€ãããŸãã
ãã®ãªããžã§ã¯ãã°ã©ãã¡ã¢ãªã¢ãã«ã§ã¯ãåãã¿ã€ãã®ãªããžã§ã¯ããè€æ°ããå Žåãããããããã€ã³ã¿ãŒã«ãã£ãŠèå¥ããããªããžã§ã¯ãã®ç¹å®ã®å±æ§ãèŠã€ããã«ã¯ããã®ãã€ã³ã¿ãŒããéå§ããŠãªããžã§ã¯ãã®ã°ã©ããããã²ãŒãããå¿
èŠããããŸãã ããšãã°ãAccountãªããžã§ã¯ããããå Žåãé£æ³ãªã¹ãã®åœ¢åŒã§è¡šç€ºã§ããŸãã 次ã«ããã®ææè
ïŒä»ã®ã¢ã«ãŠã³ããªããžã§ã¯ããšçµã¿åãããŠäœ¿çšââã§ãããªããžã§ã¯ãïŒãèŠã€ããã«ã¯ãACCOUNT-HOLDERã«ãªãè»ã®çæãèŠã€ããŠãã®cdrãååŸãããŸã§ãªã¹ãã調ã¹ãŸãã 次ã«ãã¢ã«ãŠã³ãææè
ã®ããã«ããŒã ãèŠã€ããããã«ãããããã¢ã«ãŠã³ãææè
ã®å±æ§ã®ãã¯ãã«ãæ¢ããŠããå Žåã察å¿ããååãžã®ãã€ã³ã¿ãŒãååŸããŸããããã¯ãè¡ãååšããªãå€ãLispã®ããã«ãæååãŸãã¯èšå·ã®ããããã§ãã ããã«ããŒã ã®æŽæ°ã«ã¯ããã®ææè
ãªããžã§ã¯ããä»ã®ã¢ã«ãŠã³ããªããžã§ã¯ãã§äœ¿çšãããŠãããã©ãããããã³ãä»ã®ã¢ã«ãŠã³ããããã«ããŒã ãæŽæ°ãããŸãã
ãããã®èšèªã§ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãã»ãŒå¿
èŠã§ãã McCarthyãLispãäœæãã1959幎ãããLiebermanãšHewittãäžä»£ã䜿çšããŠã¬ããŒãžãåéãããšããã¢ã€ãã¢ãæãã€ãã1980幎ãŸã§ããã®ã¡ã¢ãªã¢ãã«ã䜿çšããããã°ã©ã ã¯äœæ¥ã®3åã®1ããååãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«è²»ãããŠããŸããã äžéšã®ã³ã³ãã¥ãŒã¿ãŒã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãå¥ã®ããã»ããµãŒã§å®è¡ã§ããããã«ãè€æ°ã®ããã»ããµãŒã§ç¹å¥ã«èšèšãããŠããŸãã
ãªããžã§ã¯ãã°ã©ãã£ã«ã«èšèªã¯ãæ¢åã®ãªããžã§ã¯ããå€æŽãããããæ°ãããªããžã§ã¯ããäœæããããšã奜ãããã ãã§ãªããéåžžå€ãã®ãã€ã³ã¿ãŒãæã£ãŠãããããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«é«ãèŠæ±ãè¡ããŸããã CãGolangãªã©ã®COBOL掟çèšèªã§ã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã§å®è¡ãããã¡ã¢ãªæäœãå°ãªããªããããã¬ããŒãžã³ã¬ã¯ã¿ãŒãåäœãããããªããŸãã ãããã®èšèªã¯ãå€æŽãããããŒãžã§ã³ã®ã¡ã¢ãªãåå²ãåœãŠããã®ã§ã¯ãªãããªããžã§ã¯ããå€æŽããåŸåããããŸãã ãããŠããã°ã©ããŒã¯ãååãšããŠãå¯èœãªå Žåã¯ãã¹ããããã¬ã³ãŒãã䜿çšãããã€ã³ã¿ãŒã«é¢é£ä»ããªãããã«ããŸãããã®ããããã€ã³ã¿ãŒã¯ãããªã¢ãŒãã£ãºã ã空ã®ãã€ã³ã¿ãŒã®èš±å®¹æ§ïŒããªã¢ãŒãã£ãºã ã®ç¹æ®ãªã±ãŒã¹ãšèŠãªãããšãã§ããïŒãæãŸããå Žåã«ã®ã¿èŠã€ãããŸãã
ãªããžã§ã¯ãã°ã©ãã®ã·ãªã¢ã«åã¯ã埪ç°åç
§ãå«ããããšãã§ããããããŸãã·ãªã¢ã«åããå¿
èŠã®ãªãéšåãžã®ãªã³ã¯ãå«ãŸããå¯èœæ§ããããããå°ãè€éã«ãªããŸããäž¡æ¹ã®ã±ãŒã¹ãç¹å®ã®ã±ãŒã¹ãšèŠãªãå¿
èŠããããŸãã ããšãã°ãäžéšã®ã·ã¹ãã ã§ã¯ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ãã®ã¯ã©ã¹ãžã®ãªã³ã¯ãå«ãŸããã¯ã©ã¹ã«ã¯ãã¹ãŠã®ã¡ãœããã®çŸåšã®ããŒãžã§ã³ã ãã§ãªãã芪ã¯ã©ã¹ãžã®ãªã³ã¯ãå«ãŸããŸãã ãããŠããããããªããžã§ã¯ãã®ãã¹ãŠã®ã·ãªã¢ã«åã§ã¯ã©ã¹ã®ãã€ãã³ãŒãå
šäœãã·ãªã¢ã«åããå¿
èŠã¯ãããŸããã ããã«ã以åã«ãªã³ã¯ãå
±æããŠãã2ã€ã®ãªããžã§ã¯ãïŒåãã¢ã«ãŠã³ãææè
ã®2ã€ã®ã¢ã«ãŠã³ãïŒãéã·ãªã¢ã«åããå Žåãããããããããå
±æãç¶ããå¿
èŠããããŸãã äžè¬ã«ãããã«é¢ããç¹å®ã®ããªã·ãŒã¯ãããŒã¿ãã·ãªã¢ã«åããç®çã«ãã£ãŠç°ãªãå ŽåããããŸãã
ãã¹ãããããšã³ããªãæã€ã¡ã¢ãªã¢ãã«ã®ããã«ããªããžã§ã¯ãã°ã©ãã¢ãã«ã䜿çšãããšãç¹å®ã®ãšã³ãã£ãã£ã®ãã¹ãŠã®å±æ§ãããã°ã©ã ã®ç¹å®ã®éšåã«ããŒã«ã«ã«ããããšãã§ããŸããããã°ã©ã ã®æ®ãã®éšåã®ããŒã¿æ§é ãžã®åç
§ãäžããããšã¯ã§ããŸããããç¹å®ã®å±æ§ããã©ã€ããŒãã«ããããšã¯ã§ããŸãããã¹ãŠã®ãšã³ãã£ãã£ã ãã ãããã¹ãããããšã³ããªãæã€ã¡ã¢ãªã¢ãã«ãšã¯ç°ãªãããªããžã§ã¯ãã°ã©ãã¢ãã«ã¯ãããŒãã®ã¡ã¢ãªãµã€ãºãžã®äŸåæ§ãæžãããŸããããã«ãããå€ãã®æ·±å»ãªåé¡ã«ããããããããªããžã§ã¯ãæåã®ç¶æ¿ãžã®æãéãããå±æ§ããã©ã€ããŒãã«ããããšãã§ããŸãã
ãã®ã¢ãã«ã¯ãçŸåšæãäžè¬çãªããã°ã©ãã³ã°èšèªã§äœ¿çšãããŠããŸãã çŸåšã®Lispã ãã§ãªããHaskellãMLãPythonãRubyãPHP5ãLuaãJavaScriptãErlangãSmalltalkããããŸãã ãããã¯ãã¹ãŠãã¡ã¢ãªå
ã«ååšãããªããžã§ã¯ãã®ã¿ã€ãã®ã»ãããåçŽãªãã¢ãè¶
ããŠæ¡åŒµããŸããã éåžžããã€ã³ã¿ã®é
åãšæååã®ããã·ã¥ããŒãã«ããŸãã¯ä»ã®ãã€ã³ã¿ãžã®ãã€ã³ã¿ãå«ãŸããŸãã ãããã®äžéšã«ã¯ãã¿ã°ä»ãå
±çšäœãšäžå€ãšã³ããªãå«ãŸããŸãã ç¹ã«ãããã·ã¥ããŒãã«ã¯ãã»ãšãã©ã®å Žåããããã®ãªããžã§ã¯ãã䜿çšããä»ã®ã³ãŒãã«åœ±é¿ãäžããã«ãæ¢åã®ãªããžã§ã¯ãã«æ°ããããããã£ãè¿œå ããäžçš®ã®æ¹æ³ãæäŸããŸãã

äžè¬ã«ããããã®èšèªã§ã¯ãã°ã©ãã®ãšããžãæãæ¹åã«ã®ã¿è¿œè·¡ã§ãããšããžã®ã©ãã«ã¯ãœãŒã¹ããŒãå
ã§äžæã§ããå¿
èŠããããŸãïŒconsã«ã¯1å°ã®è»ã®ã¿ãããã2å°ã§ã¯ãªã10å°ïŒãç®çå°ã Ted Nelsonã®ZigZagããŒã¿æ§é ã¯ãéä¿¡å
ãšéä¿¡å
ã®äž¡æ¹ã§äžæã§ããå¿
èŠãããç¶æ³ã®ç 究ã§ãã UnQLã¯ãããæå³ãäžææ§ãå®å
šã«æé€ããç 究ã§ãã
JavaïŒããã³CïŒïŒã¯ããã®ã¡ã¢ãªã¢ãã«ã®ãããã«å€æŽãããããŒãžã§ã³ã䜿çšããŸããããšãã°ãJavaã«ã¯ããã€ã³ã¿ãŒã§ã¯ãªããããªããã£ãåããªã©ããããŸãã
䞊åé
åãšFORTRANã¡ã¢ãªã¢ãã«ïŒé
åã®ã°ã«ãŒããšããŠã®ã¡ã¢ãª
Fortranã¯ãã³ã³ãã¥ãŒã¿ãŒã®æãåæã®ã¢ããªã±ãŒã·ã§ã³ã®1ã€ã§ããç©ççŸè±¡ïŒãããããç§åŠèšç®ãïŒãæ°å€çã«ã¢ãã«åããããã«èšèšãããŸããã åœæãç§åŠã³ã³ãã¥ãŒã¿ãŒã¯ãCOBOLèšèªã®ãããžãã¹ã³ã³ãã¥ãŒã¿ãŒããšã¯å€ãã®æ©èœãç°ãªããŸããã10é²æ°ã§ã¯ãªã2é²æ°ã䜿çšããŠããŸããã ãã€ãããŒã¿åã¯ãããŸããã§ãã-åèªã ãã æµ®åå°æ°ç¹æŒç®ããµããŒãããŠããŸããã ãããŠã圌ãã¯ããéãèšç®ãšé
ãI / Oãæã£ãŠããŸãã

éåžžããã®ãããªã·ãã¥ã¬ãŒã·ã§ã³ã«ã¯ãã§ããã ãæ©ãåŠçããå¿
èŠã®ããæ°ã®å€§ããªé
åãæã€å€ãã®ç·åœ¢ä»£æ°ãå«ãŸããŠããŸããã ãããŠãFORTRANã¯ãããã®ããã ãã«æé©åãããŸãã-å€æ¬¡å
é
åã®å¹ççãªäœ¿çšã®ããã FORTRANã«ã¯ãååž°çãªã«ãŒãã³ããã€ã³ã¿ãŒãããã³ã¬ã³ãŒãããªãã£ãã ãã§ãªããæåã¯ãŸã£ããã«ãŒãã³ããããŸããã§ããïŒ
ã«ãŒãã³ããã®äžã«çŸãããšãããããã¯é
åã§ããåŸããã©ã¡ãŒã¿ãæã£ãŠããŸããã Algol 60ã§ã¯ãããã¯å®éã«ã¯å®çŸããŠããŸããã§ããã é
åã¯å¯äžã®éããªããã£ãåã§ãããããé
åã«äœ¿çšã§ããèŠçŽ ã¿ã€ãã¯ãæŽæ°ãæµ®åå°æ°ç¹æ°ãªã©ã®ããªããã£ãåã®ã¿ã§ããã

FORTRANç°å¢ã§éçºããã䞊åé
åã®ã¡ã¢ãªã¢ãã«ã§ã¯ãåãã¿ã€ãã®ãªããžã§ã¯ããè€æ°ããå Žåããããã¯ãããããè€æ°ã®é
åã§æå¹ãªæ°å€ãªãã»ããã«ãã£ãŠèå¥ãããŸãã ãŸããç¹å®ã®ãªããžã§ã¯ãã®ãã©ã€ããŒãå±æ§ã®æ€çŽ¢ã«ã¯ããã®ãªããžã§ã¯ãã®ã€ã³ããã¯ã¹ã䜿çšããŠãã®å±æ§ã®é
åã«ã€ã³ããã¯ã¹ãä»ããããšãå«ãŸããŸãã 1950幎代ããå°ãé¢ããŠãããŒã¿ãæ§é åããããã«äžŠåé
åã«ä»çããŠé
åã圢æã§ããããªããã£ãã¿ã€ãã®ã·ã³ãã«ã䜿çšã§ããããã«ããå Žåã次ã®ããã«åã®äŸããå£åº§å矩人ã®2çªç®ã®ååã決å®ã§ããŸãã
- IM = IMDNAMïŒICCHLDïŒIACCTNïŒïŒ
IA = ISTRïŒIMïŒ
IE = ISTRïŒIM + 1ïŒ
é
åã®ã€ã³ããã¯ã¹ä»ãã®ããã4ã€ã®æäœã®åŸãã¢ã«ãŠã³ãææè
ã®2çªç®ã®ååã¯CCHARSé
åã®æå[IAãIEïŒã«ãªããŸãã - IM = IMDNAMïŒIACCTNïŒãã¢ã«ãŠã³ãææè
ã®å±æ§ã«åå¥ã®æåã»ããããªãå Žåã¯ã以åã®ããŒãžã§ã³ã®ããã«é²ã¿ãŸãã
- IMDNAMã®ä»£ããã«ãåã¢ã«ãŠã³ãææè
ã®2çªç®ã®ååã«1ã€ã®12æåã®åãæã€ãN * 12ã®æåã®é
åã§ããCMDNAMã䜿çšããŸãã
ãã®ã¡ã¢ãªã¢ãã«ã§ã¯ããµãã«ãŒãã³ã¯ãåŒæ°ãšããŠæž¡ãããé
åå
ã®ä»»æã®ã€ã³ããã¯ã¹ã«ã¢ã¯ã»ã¹ããããä»ã®æ¹æ³ã§ã¢ã¯ã»ã¹ããããã©ã³ãã ãªé åºã§äœåºŠã§ãèªã¿æžããããã§ããŸãã
ããã¯ãŸãã«ãã©ã®èšèªã§ãFORTRANã§èšè¿°ã§ããããšãããã¬ãŒãºã®æå³ã§ããã»ãšãã©ãã¹ãŠã®ããã°ã©ãã³ã°èšèªã«ã¯ããªããã£ãåã®é
åããããŸãã ã¢ã»ã³ãã©ãŒãForthã§ããé
åãäœæããã®ã¯ç°¡åã§ãã AwkãPerl4ãããã³Tclã¯ããªããžã§ã¯ãã°ã©ãèšèªã§ã¯ãªãããããã¡ãŒã¹ãã¯ã©ã¹ãªããžã§ã¯ãã§ã¯ãªãèŸæžãæäŸããŸãããé
åã®ä»£ããã«æ£åžžã«æ©èœããŠãªããžã§ã¯ãã®å±æ§ãæ ŒçŽããæŽæ°ã§ã¯ãªãæååã§ãªããžã§ã¯ããèå¥ã§ããŸãã
èå³æ·±ãããšã«ããã·ã³ã¬ãã«ã§ã¯ãåçŽãªå Žåã䞊åé
åã¯ããã¹ããããã¢ãã«ã®ããã«ããã€ã³ã¿ãŒãä»ããŠåç
§ãããæ§é èŠçŽ ãšã»ãŒåãã³ãŒããçæããŸãã ããšãã°ãããã§
b->foo
ãããã§bã¯32ãããã¡ã³ããŒfooãæã€æ§é äœãžã®ãã€ã³ã¿ã§ãã
40050c: 8b 47 08 mov 0x8(%rdi),%eax</code> <code>foos[b]</code>, b â foos, 32- : <source>400513: 8b 04 bd e0 d8 60 00 mov 0x60d8e0(,%rdi,4),%eax
ã©ã¡ãã®å Žåããå¿
èŠãªå±æ§ãè¡šãå³æå®æ°ãã¬ãžã¹ã¿å
ã®å€æ°ã«è¿œå ããŸããããã¯ãæ€èšããŠãããªããžã§ã¯ãã瀺ããŸãã 2çªç®ã®å Žåã®éãã¯ãã€ã³ããã¯ã¹ã«èŠçŽ ã®ãµã€ãºãæããŠãçŽæ¥å®æ°ããããã«å€§ãããªãããšã§ãã
( , , , , ).
. . , , , .
, cache-friendly, , , , ( â , ). , , , : sum covariance, .
: , .
, . , , , . , (type error) â , â . (, ). , , , , ( ), , (nested-record model).
, , , , .
FORTRAN â , . Octave, Matlab, APL, J, K, PV-WAVE IDL, Lush, S, S-Plus R . Numpy, Pandas OpenGL â «» , Perl4, awk, Tcl, , - . , . Pandas, K - (parallel-dictionary variant) , .
: CPU , GPU SIMT-, CPU SIMD- ALU . , «, » (data-oriented design) ( ) « » (entity systems). , «» .
: Lua, Erlang Forth?
: (record), . , , :
- Lua (finite maps) (, «»),
- Erlang , ( , (Hewitt) (Agha)),
- Forth .
Lua Erlang - . Forth . , , - -- , . -- Linda, .
.
Unix â ( ). , â (, , ), , , ( ). ( , ). , .
, . MapReduce , lex, , .
Python, (forward iterators) C++ STL, (forward ranges) D, Golang â , .
, ? (, ) . . empty, get, ``put, , , Python - :
def merge(in1, in2, out) { have1 := 0; have2 := 0; while !empty(in1) || !empty(in2) { if 0 == have1 && !empty(in1) { val1 := get(in1); have1 := 1; } if 0 == have2 && !empty(in2) { val2 := get(in2); have2 := 1; } if 0 == have1 { put(out, val2); have2 := 0; } else { if 0 == have2 || val1 < val2 { put(out, val1); have1 := 0; } else { put(out, val2); have2 := 0; } } } }
, , . , . , . in1, out .. - , . ( Unix- Unix-: ). , , .
(multithreaded) (control flow system), (threads), , (empty streams block), . ; , . , , .
- (Ï-calculus) â , . , (concurrent) - (channel-oriented) λ-. :
Q . ãã®å ŽåïŒ
- P|Q , P Q, ;
- a(x).P , , , , ;
- Äãxã.P , , , - , .
- (Îœa)P , â ;
- ïŒ , ;
- P + Q , P Q;
- 0 , .
-:
!incr(a, x).Äãx+1ã | (Îœa)( iÌ
nÌ
cÌ
rÌ
ãa, 17ã | a(y) )
«» , incr , , +1 . , «». 17 incr, , , y.
-, , , , . , (labeled graphs)! , .
« », NSA, Apache NiFi, Unix---.
Multics: (string-labeled tree) blob-
Unix ( Windows, MacOS, Multics) â , , shell-. - , â , «» - , « », ( ). , « », â .
() , ! , , , , . , () «» «». Unix , , , , .
â . , , , , , . , , .
.
, . - MUMPS, ( «» 4096 , «», « »). IBM IMS, , , «». . (Mark Lentczner) , - , Wheat. - PHP. Wheat «» «» ( , ). « » , . . Wheat , , - .
SQL: â
, .
« » «» «». cos â : Ξ cos(Ξ) . Cos-1 â : cosâ»Â¹(0.5) , , - . cos , : (0, 1), (Ï/2, 0), (Ï, -1), (3Ï/2, 0) . â : (1, 0), (0, Ï/2), (-1, Ï), (0, 3Ï/2) .
, , , , : n- n. , : (0, 1, 0), (Ï/2, 0, 1), (Ï, -1, 0) ..
cos, .
, , , permissions.sqlite Firefox:
sqlite> .mode column sqlite> .width 3 20 10 5 5 15 1 1 sqlite> select * from moz_hosts limit 5; id host type permi expir expireTime ai
, , id ; host(1) addons.mozilla.org, host(2) getpersonas.com, type(5) sts/use. -.
. , host(9), hostâ»Â¹('news.ycombinator.com'), :
sqlite> select id from moz_hosts where host = 'news.ycombinator.com'; id
, :
sqlite> .width 0 sqlite> select min(expireTime) from moz_hosts where host = 'news.ycombinator.com'; min(expireTime)
, SQL, («» «»), , , id . - . :
select accountholder.middlename from accountholder, account where accountholder.id = account.accountholderid and account.id = 3201
, , , - .
SQL â , .
.
Lisp, FORTRAN C, SQL , . , . SQL-, , , , (, - PL/SQL).
. , , .
SQL - : , ( , , ); ( , , COBOL). .
SQL, , :
for (int i = 0; i < moz_hosts_len; i++) { if (0 == strcmp(moz_hosts_host[i], "news.ycombinator.com")) { results[results_len++] = moz_hosts_id[i]; } }
, SQL : / (unmanageable) . SQL:
select accountholder.middlename from accountholder, account where accountholder.id = account.accountholderid
- :
int *fksort = iota(account_len); sort_by_int_column(account_accountholderid, fksort, account_len); int *pksort = iota(accountholder_len); sort_by_int_column(accountholder_id, pksort, accountholder_len); int i = 0, j = 0, k = 0; while (i < account_len && j < accountholder_len) { int fk = account_accountholderid[fksort[i]]; int pk = accountholder_id[pksort[j]]; if (fk == pk) { result_id[k] = fk; result_middle_name[k] = accountholder_middlename[pksort[j]]; k++; i++;
iota :
int *iota(int size) { int *results = calloc(size, sizeof(*results)); if (!results) abort(); for (int i = 0; i < size; i++) results[i] = i; return results; }
sort_by_int_column :
void sort_by_int_column(int *values, int *indices, int indices_len) { qsort_r(indices, indices_len, sizeof(*indices), indirect_int_comparator, values); } int indirect_int_comparator(const void *a, const void *b, void *arg) { int *values = arg; return values[*(int*)a] â values[*(int*)b]; }
SQL- , , , . , .
, SQL â , , , . , , â , , , , . , , .
Prolog miniKANREN, . miniKANREN , , .
(constraint programming), («», ), . , , , SAT SMT.