åæ¨è«ã¨åæ¤æ»ãéçãªåã¤ãã¨åçãªåã¤ããå¼·ãåã¤ãã¨å¼±ãåã¤ã
ã¤ãã§ã«è¿½å ã
åæ¨è«ï¼å¤æ°ãå¼ã®åãããã°ã©ãã宣è¨ããªãã¦ããè¨èªå¦çç³»ãæèããæ¨è«ãã¦ãããæ©æ§ãMLã¨ãHaskellã¨ãã
åæ¤æ»ï¼å¤æ°ãå¼ã®åãåã£ã¦ãããã¨ãè¨èªå¦çç³»ãï¼æ®éã¯éçã«ï¼ãã§ãã¯ãã¦ãããæ©æ§ãCã¨ãJavaã¨ããMLãHaskellãã
éçãªåã¤ãï¼ããã°ã©ã ã®å®è¡åã«åãæ¤æ»ããæ©æ§ãMLã¨ãHaskellã¨ãCã¨ãJavaã¨ãã
åçãªåã¤ãï¼ããã°ã©ã ã®å®è¡ä¸ã«åãæ¤æ»ããæ©æ§ãLispã¨ãSchemeã¨ãPerlã¨ãã
å¼·ãåã¤ãï¼æ¤æ»ãéãã°ãå®å ¨ã(safety)ãä¿è¨¼ããããã¨ããï¼æ®éã¯éçãªï¼åã¤ããMLã¨ãHaskellã¨ãJavaã¨ããJavaã¯ãã°ããã£ããããã®ã§å°ãæªããã§ããã
å¼±ãåã¤ãï¼æ¤æ»ãéã£ã¦ããå®å ¨ã(safety)ã¯ä¿è¨¼ãããªããã¨ããåã¤ããCã¨ãPascalã¨ãã
å®å ¨ã(safety)ï¼ããã°ã©ã ãè¨èªä»æ§ã§å®ç¾©ããã¦ããªãç¶æ ï¼Cã®ãããã¡ãªã¼ãã¼ããã¼ã¨ãï¼ã«ãªããªããã¨ã
åï¼ããã°ã©ã ã®ä¸ã®å¤ã®ã種é¡ãã®ãã¨ãããæ£ç¢ºã«ããã¨ããã®å¤ã«å¯¾ãã¦ãã©ã®ãããªæä½ã許å¯ããã¦ããããããããããã®ããã¨ãã°MLãªãstringåã®å¤ã«å¯¾ãã¦æãç®ã¯ã§ããªãããStack.tããªã¹ãã¨ãã¦ç´æ¥æä½ãããã¨ã¯ã§ããªãï¼ãã¨ãå®éã®å®è£ ããªã¹ãã§ãï¼ã
ï¼åºç¾©ã®ï¼å¤ç¸æ§ï¼åä¸ã®ã³ã¼ãã§è¤æ°ã®åãæ±ãå¦çãå¯è½ãªãã¨ããã¹ã¦ã®åãåæ§ã«æ±ãããã©ã¡ã¿çå¤ç¸æ§(parametric polymorphism)ãããåã«å å«ãããå(subtype)ã®ã¿æ±ããé¨ååå¤ç¸æ§(subtyping polymorphism)ãä¸é¨ã®ç¹å®ã®åã®ã¿æ±ããå ´å½ããçå¤ç¸æ§(ad hoc polymorphism)ã«åé¡ã§ããããã©ã¡ã¿çå¤ç¸æ§ã®ä¾ã¨ãã¦ã¯ãMLã®å¤ç¸åãC++ã®templateãJavaãC#ã®genericsãªã©ããããé¨ååå¤ç¸æ§ã®ä¾ã¨ãã¦ã¯ããªãã¸ã§ã¯ãæåã®ç¶æ¿ãã¡ã¸ã£ã¼ãå ´å½ããçå¤ç¸æ§ã®ä¾ã¨ãã¦ã¯ãå¤æ°ã®è¨èªã®ååæ¼ç®ï¼æ´æ°ã¨æµ®åå°æ°ç¹æ°ã«ä½¿ç¨å¯è½ï¼ãããã
ï¼ç義ã®ï¼å¤ç¸æ§ï¼ãã©ã¡ã¿çå¤ç¸æ§ã®ãã¨ã
è¶ é 追è¨ï¼
é½ãªåã¤ã(explicit typing)ï¼Cã¨ãJavaï¼ã®å¤ãã®é¨åï¼ã¿ãããããã°ã©ããå¤æ°ãé¢æ°ã®åãæ¸ããããªåã¤ãã
é°ãªï¼æãªåã¤ã(implicit typing)ï¼MLã¨ãHaskellï¼ã®å¤ãã®é¨åï¼ã¿ãããããã°ã©ããå¤æ°ãé¢æ°ã®åãæ¸ããªãã¦ããåæ¤æ»å¨ãåæ¨è«ãã¦ããããããªåã¤ãã
ã¡ãªã¿ã«ãåã¤ãã(typing)ã¯åè©ã形容è©ã¯ãåã¤ãã(typed)ãã ãããéçåãæã¤è¨èªãã¯ãéçåã¤ãè¨èªããããªãã¦ãéçåã¤ãè¨èªãï¼ä¾ãã°ãåæ¤æ»ããã°ã©ã ãã¨è¨ã£ãããåæ¤æ»ãããããã°ã©ã ãã§ãã£ã¦ãåæ¤æ»ãããããã°ã©ã ãã«ã¯ãªããªãã®ã¨åæ§ï¼ã
追è¨ã®è¿½è¨ï¼ãç¡è¾²è¬æ ½å¹ãªã³ã´ãã¯ãç¡è¾²è¬æ ½å¹ããããªã³ã´ããããªãããã¨ã®éã指摘ãã¾ããã§ã«ç¢ºç«ããã¦ããç¨èªãã§ããã ã使ã£ã¦ãã ããâ¦ï¼çæ§
追è¨ï¼ï¼ãã¿ã°ä»ããã¼ã¿ãã¨ãã¿ã°ä»ããã¼ã¿ãã®ã»ããè¯ãä¾ã ã£ãããã