Download as pdf or txt
Download as pdf or txt
You are on page 1of 100

‫‪1‬‬

‫ﻣﺘﺮﺟﻢ ﻣﻦ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺇﻟﻰ ﺍﻟﻌﺮﺑﻴﺔ ‪www.onlinedoctranslator.com -‬‬

‫ﻣﻘﺪﻣﺎﺕ‬

‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬


‫‪1.2‬ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.4‬ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬
‫‪1.6‬ﻣﻘﺎﻳﻀﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬
‫‪1.8‬ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫‪1‬‬
‫ﺏ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪2‬‬

‫ﻗﺒﻞﺃﻥ ﻧﺒﺪﺃ ﻓﻲ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻧﺄﺧﺬ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ ﺑﻌﺾ‬
‫ﺍﻟﻤﻘﺪﻣﺎﺕ‪.‬ﺃﻭﻻ ً‪ ،‬ﻧﺸﺮﺡ ﺑﻌﺾ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺘﻲ ﺗﺠﻌﻞ ﻃﻼﺏ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﻣﻄﻮﺭﻱ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻤﺤﺘﺮﻓﻴﻦ ﻳﺪﺭﺳﻮﻥ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﻌﺎﻣﺔ ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺗﻘﻴﻴﻤﻬﺎ‪ .‬ﺗﻌﺘﺒﺮ ﻫﺬﻩ‬
‫ﺍﻟﻤﻨﺎﻗﺸﺔﺫﺍﺕ ﻗﻴﻤﺔ ﺧﺎﺻﺔ ﻷﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﻌﺘﻘﺪﻭﻥ ﺃﻥ ﺍﻟﻤﻌﺮﻓﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺑﻠﻐﺔ ﺃﻭ ﻟﻐﺘﻴﻦ ﻣﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻛﺎﻓﻴﺔ ﻟﻌﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪،‬‬
‫ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻜﺘﺎﺏ ﻳﻘﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻭﻣﻴﺰﺍﺗﻬﺎ ‪ ،‬ﻓﺈﻧﻨﺎ ﻧﻘﺪﻡ ﻗﺎﺉﻤﺔ ﺑﺎﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ‬
‫ﺑﻤﺜﺎﺑﺔﺃﺳﺎﺱ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻷﺣﻜﺎﻡ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﻨﺎﻗﺶ ﺍﻟﺘﺄﺛﻴﺮﻳﻦ ﺍﻟﺮﺉﻴﺴﻴﻴﻦ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪:‬‬
‫ﻫﻨﺪﺳﺔﺍﻵﻟﺔ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﻘﺪﻡ ﻓﺉﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬
‫ﺍﻟﺘﺎﻟﻲ‪،‬‬

‫ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻳﺪﻭﺭ ﺃﻳﻀﺎً ﺣﻮﻝ ﺗﻄﺒﻴﻖ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻓﺈﻥ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻳﺘﻀﻤﻦ ﻧﻈﺮﺓ‬
‫ﻋﺎﻣﺔﻋﻠﻰ ﺍﻟﻤﻨﺎﻫﺞ ﺍﻟﻌﺎﻣﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﺃﺧﻴﺮﺍً ‪ ،‬ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﺑﻌﺾ ﺍﻷﻣﺜﻠﺔ ﻟﺒﻴﺉﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻭﻧﻨﺎﻗﺶ ﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ ﺇﻧﺘﺎﺝ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬

‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬


‫ﻣﻦﺍﻟﻄﺒﻴﻌﻲ ﺃﻥ ﻳﺘﺴﺎءﻝ ﺍﻟﻄﻼﺏ ﻋﻦ ﻛﻴﻔﻴﺔ ﺍﺳﺘﻔﺎﺩﺗﻬﻢ ﻣﻦ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺑﻌﺪ‬
‫ﻛﻞﺷﻲء ‪ ،‬ﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻮﺿﻮﻋﺎﺕ ﺍﻷﺧﺮﻯ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺴﺘﺤﻖ ﺍﻟﺪﺭﺍﺳﺔ ﺍﻟﺠﺎﺩﺓ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺎ ﻧﻌﺘﻘﺪ ﺃﻧﻪ ﻗﺎﺉﻤﺔ ﻣﻘﻨﻌﺔ ﺑﺎﻟﻤﺰﺍﻳﺎ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﺪﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪:‬‬

‫• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻷﻓﻜﺎﺭ‪.‬ﻣﻦ ﺍﻟﻤﻌﺘﻘﺪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺍﻟﻌﻤﻖ ﺍﻟﺬﻱ ﻳﻤﻜﻦ‬
‫ﻟﻠﻨﺎﺱﺍﻟﺘﻔﻜﻴﺮ ﻓﻴﻪ ﻳﺘﺄﺛﺮ ﺑﺎﻟﻘﻮﺓ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻨﻘﻠﻮﻥ ﺑﻬﺎ ﺃﻓﻜﺎﺭﻫﻢ‪ .‬ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ‬
‫ﻟﺪﻳﻬﻢﻓﻬﻢ ﺿﻌﻴﻒ ﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ ﻣﻘﻴﺪﻭﻥ ﻓﻲ ﺗﻌﻘﻴﺪ ﺃﻓﻜﺎﺭﻫﻢ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻓﻲ ﻋﻤﻖ‬
‫ﺍﻟﺘﺠﺮﻳﺪ‪.‬ﺑﻌﺒﺎﺭﺓ ﺃﺧﺮﻯ ‪ ،‬ﻳﺼﻌﺐ ﻋﻠﻰ ﺍﻟﻨﺎﺱ ﺗﺼﻮﺭ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻨﻬﻢ ﻭﺻﻔﻬﺎ ﺷﻔﻬﻴﺎ ً‬
‫ﺃﻭﻛﺘﺎﺑﻴﺎ‪ً.‬‬

‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ‪،‬ﻓﻲ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﻣﻘﻴﺪﻭﻥ ﺑﺎﻟﻤﺜﻞ‪ .‬ﺗﻀﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻄﻮﺭﻭﻥ‬
‫ﺑﻬﺎﺍﻟﺒﺮﺍﻣﺞ ﻗﻴﻮﺩﺍً ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺘﺠﺮﺩ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ؛ﻭﺑﺎﻟﺘﺎﻟﻲ ‪ ،‬ﻓﺈﻥ ﺃﺷﻜﺎﻝ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻣﺤﺪﻭﺩﺓ ﺑﺎﻟﻤﺜﻞ‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﻳﺆﺩﻱ ﺍﻟﻮﻋﻲ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﻴﺰﺍﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ‬
‫ﻓﻲﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺯﻳﺎﺩﺓ ﻧﻄﺎﻕ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‬
‫ﻣﻦﺧﻼﻝ ﺗﻌﻠﻢ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪.‬‬

‫ﻗﺪﻳﻘُﺎﻝ ﺇﻥ ﺗﻌﻠﻢ ﻗﺪﺭﺍﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻻ ﻳﺴﺎﻋﺪ ﺍﻟﻤﺒﺮﻣﺞ ﺍﻟﺬﻱ ﻳﺠُﺒﺮ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻟﻐﺔﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﻘﺪﺭﺍﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻻ ﺗﺼﻤﺪ ‪ ،‬ﻷﻧﻪ ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ‬
‫ﺍﻷﺣﻴﺎﻥ ‪،‬ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻨﻴﺎﺕ ﺍﻟﻠﻐﺔ ﺑﻠﻐﺎﺕ ﺃﺧﺮﻯ ﻻ ﺗﺪﻋﻢ ﺗﻠﻚ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻗﺪ ﻳﺼﻤﻢ ﻣﺒﺮﻣﺞ ﺳﻲ ﺗﻌﻠﻢ ﺑﻨﻴﺔ ﻭﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻄﻴﺔﻓﻲ ﺑﻴﺮﻝ )‪ Wall‬ﻭﺁﺧﺮﻭﻥ ‪ (2000 ،‬ﻫﻴﺎﻛﻞ ﺗﺤﺎﻛﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﻓﻲ ﺗﻠﻚ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻓﻲ ﺃﺧﺮﻯ‬
‫‪3‬‬ ‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺍﻟﻜﻠﻤﺎﺕ ‪،‬ﻓﺈﻥ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺗﺒﻨﻲ ﺗﻘﺪﻳﺮﺍً ﻟﺨﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ﺍﻟﻘﻴﻤﺔ ﻭﺗﺒﻨﻴﻬﺎ‬
‫ﻭﺗﺸﺠﻊﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ‪ ،‬ﺣﺘﻰ ﻋﻨﺪﻣﺎ ﻻ ﺗﺪﻋﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻮﻧﻬﺎ ﻫﺬﻩ‬
‫ﺍﻟﻤﻴﺰﺍﺕﻭﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ‪.‬‬

‫• ﺧﻠﻔﻴﺔﻣﺤﺴﻨﺔ ﻻﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻨﺎﺳﺒﺔ‪.‬ﻛﺎﻥ ﻟﺪﻯ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻤﺤﺘﺮﻓﻴﻦ‬


‫ﺍﻟﻘﻠﻴﻞﻣﻦ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺮﺳﻤﻲ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﻘﺪ ﻃﻮﺭﻭﺍ ﻣﻬﺎﺭﺍﺗﻬﻢ ﻓﻲ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺃﻭ ﻣﻦ ﺧﻼﻝ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺪﺭﻳﺐ ﺍﻟﺪﺍﺧﻠﻴﺔ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻘﺼﺮ ﺑﺮﺍﻣﺞ‬
‫ﺍﻟﺘﺪﺭﻳﺐﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻢ ﻋﻠﻰ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﺃﻭ ﻟﻐﺘﻴﻦ ﺫﺍﺕ ﺻﻠﺔ ﻣﺒﺎﺷﺮﺓ ﺑﺎﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺤﺎﻟﻴﺔ‬
‫ﻟﻠﻤﻨﻈﻤﺔ‪.‬ﺗﻠﻘﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻵﺧﺮﻳﻦ ﺗﺪﺭﻳﺒﻬﻢ ﺍﻟﺮﺳﻤﻲ ﻣﻨﺬ ﺳﻨﻮﺍﺕ‪ .‬ﻟﻢ ﺗﻌﺪ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻟﺘﻲ ﺗﻌﻠﻤﻮﻫﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻣﺴﺘﺨﺪﻣﺔ ‪ ،‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺘﻮﻓﺮﺓ ﺍﻵﻥ‬
‫ﻓﻲﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻢ ﺗﻜﻦ ﻣﻌﺮﻭﻓﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﺃﻥ‬
‫ﺍﻟﻌﺪﻳﺪﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻋﻨﺪ ﻣﻨﺤﻬﻢ ﺍﺧﺘﻴﺎﺭﺍً ﻟﻠﻐﺎﺕ ﻟﻤﺸﺮﻭﻉ ﺟﺪﻳﺪ ‪ ،‬ﻳﺴﺘﺨﺪﻣﻮﻥ ﺍﻟﻠﻐﺔ‬
‫ﺍﻷﻛﺜﺮﺇﻟﻤﺎﻣﺎً ﺑﻬﺎ ‪ ،‬ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﻏﻴﺮ ﻣﻨﺎﺳﺒﺔ ﻟﻠﻤﺸﺮﻭﻉ ﺍﻟﻤﻄﺮﻭﺡ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻫﺆﻻء‬
‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﻤﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻭﺗﺮﻛﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ ‪،‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ ﺑﻠﻐﺔ ﺃﺧﺮﻯ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﻔُﻀﻞ‬
‫ﺍﺳﺘﺨﺪﺍﻡﻣﻴﺰﺓ ﺗﻢ ﺩﻣﺞ ﺗﺼﻤﻴﻤﻬﺎ ﻓﻲ ﻟﻐﺔ ﺑﺪﻻ ًﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺤﺎﻛﺎﺓ ﻟﺘﻠﻚ ﺍﻟﻤﻴﺰﺓ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻜﻮﻥ ﺃﻗﻞ ﺃﻧﺎﻗﺔ ﻭﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﻭﺃﻗﻞ ﺃﻣﺎﻧﺎً‪.‬‬

‫• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻌﻠﻢ ﻟﻐﺎﺕ ﺟﺪﻳﺪﺓ‪.‬ﻻ ﺗﺰﺍﻝ ﺑﺮﻣﺠﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺨﺼﺼﺎً ﺻﻐﻴﺮﺍً ﻧﺴﺒﻴﺎً ‪ ،‬ﻭﻻ‬
‫ﺗﺰﺍﻝﻣﻨﻬﺠﻴﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺣﺎﻟﺔ ﺗﻄﻮﺭ ﻣﺴﺘﻤﺮ‪.‬‬
‫ﻫﺬﺍﻳﺠﻌﻞ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻬﻨﺔ ﻣﺜﻴﺮﺓ ‪ ،‬ﻭﻟﻜﻨﻪ ﻳﻌﻨﻲ ﺃﻳﻀﺎً ﺃﻥ ﺍﻟﺘﻌﻠﻢ ﺍﻟﻤﺴﺘﻤﺮ ﺿﺮﻭﺭﻱ‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﻜﻮﻥ ﻋﻤﻠﻴﺔ ﺗﻌﻠﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺟﺪﻳﺪﺓ ﻃﻮﻳﻠﺔ ﻭﺻﻌﺒﺔ ‪ ،‬ﺧﺎﺻﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺸﺨﺺ‬
‫ﻳﺸﻌﺮﺑﺎﻟﺮﺍﺣﺔ ﻣﻊ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﺃﻭ ﻟﻐﺘﻴﻦ ﻓﻘﻂ ﻭﻟﻢ ﻳﻔﺤﺺ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﻜﻞ ﻋﺎﻡ‬
‫ﻣﻄﻠﻘﺎً‪.‬ﺑﻤﺠﺮﺩ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻬﻢ ﺷﺎﻣﻞ ﻟﻠﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ‪ ،‬ﻳﺼﺒﺢ ﻣﻦ ﺍﻷﺳﻬﻞ‬
‫ﺑﻜﺜﻴﺮﺭﺅﻳﺔ ﻛﻴﻔﻴﺔ ﺩﻣﺞ ﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻠﻤﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﺬﻳﻦ ﻳﻔﻬﻤﻮﻥ ﻣﻔﺎﻫﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺳﻴﻜﻮﻥ ﻟﺪﻳﻬﻢ ﻭﻗﺖ‬
‫ﺃﺳﻬﻞﻓﻲ ﺗﻌﻠﻢ ‪،.Java )Arnold et al‬‬

‫ﺗﺤﺪﺙﻧﻔﺲ ﺍﻟﻈﺎﻫﺮﺓ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻛﻠﻤﺎ ﻋﺮﻓﺖ ﻗﻮﺍﻋﺪ ﻟﻐﺘﻚ ﺍﻷﻡ ﺑﺸﻜﻞ‬
‫ﺃﻓﻀﻞ ‪،‬ﻛﺎﻥ ﻣﻦ ﺍﻷﺳﻬﻞ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ ﻟﻪ ﻓﺎﺉﺪﺓ‬
‫ﻓﻲﺗﻌﻠﻴﻤﻚ ﺍﻟﻤﺰﻳﺪ ﻋﻦ ﻟﻐﺘﻚ ﺍﻷﻭﻟﻰ‪.‬‬

‫ﻳﺼﺪﺭﻣﺠﺘﻤﻊ ﺑﺮﻣﺠﺔ ‪ TIOBE‬ﻓﻬﺮﺳﺎً )‪http: // www‬‬


‫(‪. tiobe.com/tiobe_index/index.htm‬ﻫﺬﺍ ﻣﺆﺷﺮ ﻋﻠﻰ ﺍﻟﺸﻌﺒﻴﺔ ﺍﻟﻨﺴﺒﻴﺔ ﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻭﻓﻘﺎً ﻟﻠﻔﻬﺮﺱ ‪ ،‬ﻛﺎﻧﺖ ‪ Java‬ﻭ ‪ C‬ﻭ ‪ ++ C‬ﻫﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺜﻼﺙ‬
‫ﺍﻷﻛﺜﺮﺷﻴﻮﻋﺎً ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺃﻏﺴﻄﺲ ‪1.2011‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺸﺮﺍﺕ ﻣﻦ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻷﺧﺮﻯ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ‬

‫‪.1‬ﻻﺣﻆ ﺃﻥ ﻫﺬﺍ ﺍﻟﻔﻬﺮﺱ ﻫﻮ ﻣﻘﻴﺎﺱ ﻭﺍﺣﺪ ﻓﻘﻂ ﻟﺸﻌﺒﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻭﺩﻗﺘﻪ ﻏﻴﺮ ﻣﻘﺒﻮﻟﺔ ﻋﺎﻟﻤﻴﺎً‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪4‬‬

‫ﺍﻟﻮﻗﺖ‪.‬ﺗﻈﻬﺮ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﻬﺮﺱ ﺃﻳﻀﺎً ﺃﻥ ﺗﻮﺯﻳﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻳﺘﻐﻴﺮ ﺩﺍﺉﻤﺎً‪ .‬ﻳﺸﻴﺮ‬
‫ﻋﺪﺩﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻭﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻟﻺﺣﺼﺎءﺍﺕ ﺇﻟﻰ ﺃﻥ ﻛﻞ ﻣﻄﻮﺭ ﺑﺮﺍﻣﺞ ﻳﺠﺐ‬
‫ﺃﻥﻳﻜﻮﻥ ﻣﺴﺘﻌﺪﺍً ﻟﺘﻌﻠﻢ ﻟﻐﺎﺕ ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫ﺃﺧﻴﺮﺍً ‪،‬ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺃﻥ ﻳﻌﺮﻑ ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ﺍﻟﻤﻤﺎﺭﺳﻮﻥ ﺍﻟﻤﻔﺮﺩﺍﺕ ﻭﺍﻟﻤﻔﺎﻫﻴﻢ‬


‫ﺍﻷﺳﺎﺳﻴﺔﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺣﺘﻰ ﻳﺘﻤﻜﻨﻮﺍ ﻣﻦ ﻗﺮﺍءﺓ ﻭﻓﻬﻢ ﺃﻭﺻﺎﻑ ﻭﺗﻘﻴﻴﻤﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪،‬‬
‫ﻭﻛﺬﻟﻚﺍﻷﺩﺏ ﺍﻟﺘﺮﻭﻳﺠﻲ ﻟﻠﻐﺎﺕ ﻭﺍﻟﻤﺠﻤﻌﻴﻦ‪ .‬ﻫﺬﻩ ﻫﻲ ﻣﺼﺎﺩﺭ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﻼﺯﻣﺔ ﻻﺧﺘﻴﺎﺭ‬
‫ﺍﻟﻠﻐﺔﻭﺗﻌﻠﻤﻬﺎ‪.‬‬

‫• ﻓﻬﻢﺃﻓﻀﻞ ﻷﻫﻤﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ‪.‬ﻓﻲ ﺗﻌﻠﻢ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ‬
‫ﻭﺍﻟﻀﺮﻭﺭﻱﺃﻥ ﻧﺘﻄﺮﻕ ﺇﻟﻰ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺗﻠﻚ ﺍﻟﻤﻔﺎﻫﻴﻢ‪ .‬ﻓﻲ ﺑﻌﺾ‬
‫ﺍﻟﺤﺎﻻﺕ ‪،‬ﻳﺆﺩﻱ ﻓﻬﻢ ﻣﺸﻜﻼﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺇﻟﻰ ﻓﻬﻢ ﺳﺒﺐ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﻫﻲ‬
‫ﻋﻠﻴﻬﺎ‪.‬ﺑﺪﻭﺭﻫﺎ ‪ ،‬ﺗﺆﺩﻱ ﻫﺬﻩ ﺍﻟﻤﻌﺮﻓﺔ ﺇﻟﻰ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺫﻛﺎء ً‪،‬‬
‫ﺣﻴﺚﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻻﺳﺘﺨﺪﺍﻣﻬﺎ‪ .‬ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﺼﺒﺢ ﻣﺒﺮﻣﺠﻴﻦ ﺃﻓﻀﻞ ﻣﻦ ﺧﻼﻝ ﻓﻬﻢ‬
‫ﺍﻟﺨﻴﺎﺭﺍﺕﺑﻴﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻭﻋﻮﺍﻗﺐ ﺗﻠﻚ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ‪.‬‬

‫ﻳﻤﻜﻦﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﺧﻄﺎء ﺍﻟﺒﺮﺍﻣﺞ ﻭﺇﺻﻼﺣﻬﺎ ﻓﻘﻂ ﺑﻮﺍﺳﻄﺔ ﻣﺒﺮﻣﺞ‬
‫ﻳﻌﺮﻑﺑﻌﺾ ﺗﻔﺎﺻﻴﻞ ﺍﻟﺘﻨﻔﻴﺬ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‪ .‬ﻓﺎﺉﺪﺓ ﺃﺧﺮﻯ ﻟﻔﻬﻢ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻲ ﺃﻧﻪ‬
‫ﻳﺴﻤﺢﻟﻨﺎ ﺑﺘﺼﻮﺭ ﻛﻴﻒ ﻳﻨﻔﺬ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﺗﻮﻓﺮ‬
‫ﺑﻌﺾﺍﻟﻤﻌﺮﻓﺔ ﺑﻘﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺗﻠﻤﻴﺤﺎﺕ ﺣﻮﻝ ﺍﻟﻜﻔﺎءﺓ ﺍﻟﻨﺴﺒﻴﺔ ﻟﻠﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﻳﻠﺔ ﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦﺍﺧﺘﻴﺎﺭﻫﺎ ﻟﻠﺒﺮﻧﺎﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻻ ﻳﺪﺭﻙ ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ﺍﻟﺬﻳﻦ ﻳﻌﺮﻓﻮﻥ‬
‫ﺍﻟﻘﻠﻴﻞﻋﻦ ﺗﻌﻘﻴﺪ ﺗﻨﻔﻴﺬ ﻣﻜﺎﻟﻤﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺃﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﺮﻋﻴﺎً ﺻﻐﻴﺮﺍً ﻳﺪُﻋﻰ ﻛﺜﻴﺮﺍً‬
‫ﻳﻤﻜﻦﺃﻥ ﻳﻜﻮﻥ ﺍﺧﺘﻴﺎﺭ ﺗﺼﻤﻴﻢ ﻏﻴﺮ ﻓﻌﺎﻝ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻻ ﻳﺘﻄﺮﻕ ﺇﻻ ﺇﻟﻰ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻓﺈﻥ ﺍﻟﻔﻘﺮﺗﻴﻦ‬
‫ﺍﻟﺴﺎﺑﻘﺘﻴﻦﺗﺨﺪﻣﺎﻥ ﺃﻳﻀﺎً ﺍﻷﺳﺎﺱ ﺍﻟﻤﻨﻄﻘﻲ ﻟﺪﺭﺍﺳﺔ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ‪.‬‬

‫• ﺍﺳﺘﺨﺪﺍﻡﺃﻓﻀﻞ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺮﻭﻓﺔ ﺑﺎﻟﻔﻌﻞ‪.‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻌﺎﺻﺮﺓ ﻛﺒﻴﺮﺓ‬


‫ﻭﻣﻌﻘﺪﺓ‪.‬ﻭﻓﻘﺎً ﻟﺬﻟﻚ ‪ ،‬ﻣﻦ ﻏﻴﺮ ﺍﻟﻤﺄﻟﻮﻑ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻤﺒﺮﻣﺞ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺠﻤﻴﻊ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﺘﻲﻳﺴﺘﺨﺪﻣﻬﺎ ﻭﻳﺴﺘﺨﺪﻣﻬﺎ‪ .‬ﻣﻦ ﺧﻼﻝ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﻟﻠﻤﺒﺮﻣﺠﻴﻦﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻷﺟﺰﺍء ﻏﻴﺮ ﺍﻟﻤﻌﺮﻭﻓﺔ ﻭﻏﻴﺮ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﺳﺎﺑﻘﺎً ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﻳﺴﺘﺨﺪﻣﻮﻧﻬﺎﺑﺎﻟﻔﻌﻞ ﻭﺍﻟﺒﺪء ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ‪.‬‬

‫• ﺍﻟﺘﻘﺪﻡﺍﻟﺸﺎﻣﻞ ﻟﻠﺤﻮﺳﺒﺔ‪.‬ﺃﺧﻴﺮﺍً ‪ ،‬ﻫﻨﺎﻙ ﺭﺅﻳﺔ ﻋﺎﻟﻤﻴﺔ ﻟﻠﺤﻮﺳﺒﺔ ﻳﻤﻜﻦ ﺃﻥ ﺗﺒﺮﺭ ﺩﺭﺍﺳﺔ‬


‫ﻣﻔﺎﻫﻴﻢﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﻋﺎﺩﺓ ًﺗﺤﺪﻳﺪ ﺳﺒﺐ ﺍﻧﺘﺸﺎﺭ ﻟﻐﺔ‬
‫ﺑﺮﻣﺠﺔﻣﻌﻴﻨﺔ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻜﺜﻴﺮﻭﻥ ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﻭﻗﺖ ﻻﺣﻖ ‪ ،‬ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً‬
‫ﻟﻴﺴﺖﺩﺍﺉﻤﺎً ﺃﻓﻀﻞ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺘﺎﺣﺔ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻗﺪ ﻧﺴﺘﻨﺘﺞ ﺃﻥ ﺍﻟﻠﻐﺔ ﺃﺻﺒﺤﺖ‬
‫ﻣﺴﺘﺨﺪﻣﺔﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺟﺰﺉﻴﺎً ‪ ،‬ﻷﻥ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻓﻲ ﻣﻮﺍﻗﻊ ﻻﺧﺘﻴﺎﺭ‬
‫ﺍﻟﻠﻐﺎﺕﻟﻢ ﻳﻜﻮﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﻛﺎﻓﻴﺔ ﺑﻤﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻨﺎﺱ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻷﻓﻀﻞ ﻟﻮ ﺃﻥ ‪) ALGOL 60‬‬
‫ﺑﺎﻛﻮﺱﻭﺁﺧﺮﻭﻥ ‪ (1963 ،‬ﻗﺪ ﺃﺯﺍﺡ ﻓﻮﺭﺗﺮﺍﻥ )ﻣﻴﺘﻜﺎﻟﻒ ﻭﺁﺧﺮﻭﻥ ‪ (2004 ،‬ﻓﻲ‬
‫‪5‬‬ ‫‪1.2‬ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﻓﻲﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﻛﺎﻥ ﻟﺪﻳﻬﺎ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ‪ ،‬ﻣﻦ‬
‫ﺑﻴﻦﺃﺳﺒﺎﺏ ﺃﺧﺮﻯ‪ .‬ﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﻣﺪﻳﺮﻱ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖ ‪،‬ﻭﻛﺜﻴﺮ ﻣﻨﻬﻢ ﻟﻢ ﻳﻔﻬﻢ ﺑﻮﺿﻮﺡ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﻔﺎﻫﻴﻤﻲ ﻟـ ‪ .ALGOL 60‬ﻟﻘﺪ ﻭﺟﺪﻭﺍ‬
‫ﻭﺻﻔﻪﺻﻌﺐ ﺍﻟﻘﺮﺍءﺓ )ﻭﻫﻮ ﻣﺎ ﻛﺎﻥ ﻋﻠﻴﻪ( ﻭﺣﺘﻰ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﻳﻔﻬﻢ‪ .‬ﻟﻢ ﻳﻘﺪﺭﻭﺍ‬
‫ﻓﻮﺍﺉﺪﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ ‪ ،‬ﻭﺍﻟﺘﻜﺮﺍﺭ ‪ ،‬ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﻨﻈﻤﺔ ﺟﻴﺪﺍً ‪ ،‬ﻟﺬﻟﻚ ﻓﺸﻠﻮﺍ ﻓﻲ ﺭﺅﻳﺔ‬
‫ﻓﻮﺍﺉﺪ‪ ALGOL 60‬ﻋﻠﻰ ‪.Fortran‬‬

‫ﺑﺎﻟﻄﺒﻊ ‪،‬ﺳﺎﻫﻤﺖ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻷﺧﺮﻯ ﻓﻲ ﻋﺪﻡ ﻗﺒﻮﻝ ‪ ، ALGOL 60‬ﻛﻤﺎ‬


‫ﺳﻨﺮﻯﻓﻲ ﺍﻟﻔﺼﻞ ‪ .2‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺣﻘﻴﻘﺔ ﺃﻥ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻛﺎﻧﻮﺍ ﻋﻤﻮﻣﺎً ﻏﻴﺮ‬
‫ﻣﺪﺭﻛﻴﻦﻟﻔﻮﺍﺉﺪ ﺍﻟﻠﻐﺔ ﻟﻌﺒﺖ ﺩﻭﺭﺍً ﻣﻬﻤﺎً‪.‬‬

‫ﺑﺸﻜﻞﻋﺎﻡ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺨﺘﺎﺭﻭﻥ ﺍﻟﻠﻐﺎﺕ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺟﻴﺪﺓ ‪ ،‬ﻓﺮﺑﻤﺎ ﺗﻀﻐﻂ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻷﻓﻀﻞ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻓﻘﺮ‪.‬‬

‫‪1.2‬ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺗﻢﺗﻄﺒﻴﻖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﻋﺪﺩ ﻻ ﻳﺤﺼﻰ ﻣﻦ ﺍﻟﻤﺠﺎﻻﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ‪ ،‬ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ‬
‫ﻣﺤﻄﺎﺕﺍﻟﻄﺎﻗﺔ ﺍﻟﻨﻮﻭﻳﺔ ﺇﻟﻰ ﺗﻮﻓﻴﺮ ﺃﻟﻌﺎﺏ ﺍﻟﻔﻴﺪﻳﻮ ﻓﻲ ﺍﻟﻬﻮﺍﺗﻒ ﺍﻟﻤﺤﻤﻮﻟﺔ‪ .‬ﺑﺴﺒﺐ ﻫﺬﺍ ﺍﻟﺘﻨﻮﻉ‬
‫ﺍﻟﻜﺒﻴﺮﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ ﺫﺍﺕ ﺃﻫﺪﺍﻑ ﻣﺨﺘﻠﻔﺔ ﺟﺪﺍً‪ .‬ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻘﺴﻢ ‪،‬ﻧﻨﺎﻗﺶ ﺑﺈﻳﺠﺎﺯ ﺑﻌﺾ ﻣﺠﺎﻻﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻬﺎ‪.‬‬

‫‪1.2.1‬ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‬
‫ﺗﻢﺍﺧﺘﺮﺍﻉ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺮﻗﻤﻴﺔ ﺍﻷﻭﻟﻰ ‪ ،‬ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻭﺍﺳﺘﺨﺪﻣﺖ ﻓﻲ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﻋﺎﺩﺓ ‪ ،‬ﺍﺳﺘﺨﺪﻣﺖ‬
‫ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻌﻠﻤﻴﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻫﻴﺎﻛﻞ ﺑﻴﺎﻧﺎﺕ ﺑﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ‪ ،‬ﻭﻟﻜﻨﻬﺎ ﺗﻄﻠﺒﺖ ﺃﻋﺪﺍﺩﺍً‬
‫ﻛﺒﻴﺮﺓﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻛﺎﻧﺖ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻫﻲ‬
‫ﺍﻟﻤﺼﻔﻮﻓﺎﺕﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ؛ ﻛﺎﻧﺖ ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻫﻲ ﻋﺪ ﺍﻟﺤﻠﻘﺎﺕ‬
‫ﻭﺍﻻﺧﺘﻴﺎﺭﺍﺕ‪.‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻤﺒﻜﺮﺓ ﺍﻟﺘﻲ ﺗﻢ ﺍﺧﺘﺮﺍﻋﻬﺎ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻟﻌﻠﻤﻴﺔﻟﺘﻮﻓﻴﺮ ﺗﻠﻚ ﺍﻻﺣﺘﻴﺎﺟﺎﺕ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻤﻨﺎﻓﺴﺔ ﻫﻲ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ‪ ،‬ﻟﺬﺍ ﻛﺎﻧﺖ ﺍﻟﻜﻔﺎءﺓ ﻫﻲ‬
‫ﺍﻟﺸﻐﻞﺍﻟﺸﺎﻏﻞ‪ .‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ‪60‬‬
‫‪ ALGOL‬ﻭﻣﻌﻈﻢ ﺃﺣﻔﺎﺩﻩ ﺃﻳﻀﺎً ﻟﻼﺳﺘﺨﺪﺍﻡ ﻓﻲ ﻫﺬﻩ ﺍﻟﻤﻨﻄﻘﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻣﺼﻤﻤﺔ‬
‫ﻟﻼﺳﺘﺨﺪﺍﻡﻓﻲ ﺍﻟﻤﺠﺎﻻﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ ﺃﻳﻀﺎً‪.‬‬

‫‪1.2.2‬ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ‬
‫ﺑﺪﺃﺍﺳﺘﺨﺪﺍﻡ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻓﻲ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﺗﻢ‬
‫ﺗﻄﻮﻳﺮﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺧﺎﺻﺔ ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﻟﻐﺎﺕ ﺧﺎﺻﺔ‪ .‬ﺃﻭﻝ ﻟﻐﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﻧﺎﺟﺤﺔﻟﻸﻋﻤﺎﻝ ﻛﺎﻧﺖ (‪، COBOL )ISO / IEC ، 2002‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪6‬‬

‫ﻇﻬﺮﺕﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻴﺔ ﻣﻨﻬﺎ ﻓﻲ ﻋﺎﻡ ‪ .1960‬ﻭﻻ ﺗﺰﺍﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﻬﺬﻩ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪.‬‬
‫ﺗﺘﻤﻴﺰﻟﻐﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺑﻤﺮﺍﻓﻖ ﻹﻧﺘﺎﺝ ﺗﻘﺎﺭﻳﺮ ﻣﻔﺼﻠﺔ ‪ ،‬ﻭﻃﺮﻕ ﺩﻗﻴﻘﺔ ﻟﻮﺻﻒ ﻭﺗﺨﺰﻳﻦ ﺍﻷﺭﻗﺎﻡ‬
‫ﺍﻟﻌﺸﺮﻳﺔﻭﺑﻴﺎﻧﺎﺕ ﺍﻷﺣﺮﻑ ‪ ،‬ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻟﻌﺸﺮﻳﺔ‪.‬‬

‫ﻛﺎﻧﺖﻫﻨﺎﻙ ﺗﻄﻮﺭﺍﺕ ﻗﻠﻴﻠﺔ ﻓﻲ ﻟﻐﺎﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺧﺎﺭﺝ ﻧﻄﺎﻕ ﺗﻄﻮﻳﺮ ﻭﺗﻄﻮﺭ‬
‫‪ .COBOL‬ﻟﺬﻟﻚ ‪ ،‬ﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻣﻨﺎﻗﺸﺎﺕ ﻣﺤﺪﻭﺩﺓ ﻓﻘﻂ ﺣﻮﻝ ﺍﻟﻬﻴﺎﻛﻞ ﻓﻲ ‪.COBOL‬‬

‫‪1.2.3‬ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ‬
‫ﺍﻟﺬﻛﺎءﺍﻻﺻﻄﻨﺎﻋﻲ )‪ (AI‬ﻫﻮ ﻣﺠﺎﻝ ﻭﺍﺳﻊ ﻣﻦ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻳﺘﻤﻴﺰ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﺴﺎﺑﺎﺕ‬
‫ﺍﻟﺮﻣﺰﻳﺔﺑﺪﻻ ًﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﺮﻗﻤﻴﺔ‪ .‬ﻳﻌﻨﻲ ﺍﻟﺤﺴﺎﺏ ﺍﻟﺮﻣﺰﻱ ﺃﻧﻪ ﻳﺘﻢ ﺍﻟﺘﻼﻋﺐ ﺑﺎﻟﺮﻣﻮﺯ ‪ ،‬ﺍﻟﺘﻲ‬
‫ﺗﺘﻜﻮﻥﻣﻦ ﺃﺳﻤﺎء ﺑﺪﻻ ًﻣﻦ ﺃﺭﻗﺎﻡ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻳﺘﻢ ﺇﺟﺮﺍء ﺍﻟﺤﺴﺎﺏ ﺍﻟﺮﻣﺰﻱ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﻣﻼءﻣﺔ ﻣﻊ‬
‫ﻗﻮﺍﺉﻢﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻳﺘﻄﻠﺐ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺃﺣﻴﺎﻧﺎً ﻣﺮﻭﻧﺔ‬
‫ﺃﻛﺒﺮﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﺧﺮﻯ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﺑﻌﺾ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲ ‪،‬ﺗﻜﻮﻥ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺇﻧﺸﺎء ﻣﻘﺎﻃﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻭﺗﻨﻔﻴﺬﻫﺎ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ ﺃﻣﺮﺍً‬
‫ﻣﻼﺉﻤﺎً‪.‬‬

‫ﻛﺎﻧﺖﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ‪) LISP‬ﻣﻜﺎﺭﺛﻲ ﻭﺁﺧﺮﻭﻥ ‪ ، (1965 ،‬ﻭﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻓﻲ ﻋﺎﻡ‬
‫‪.1959‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﻣﻌﻈﻢ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻗﺒﻞ ﻋﺎﻡ ‪ 1990‬ﺑﻠﻐﺔ‬
‫‪ LISP‬ﺃﻭ ﺃﺣﺪ ﺃﻗﺮﺑﺎﺉﻬﺎ‪ .‬ﻭﻟﻜﻦ ﺧﻼﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻇﻬﺮ ﻧﻬﺞ ﺑﺪﻳﻞ ﻟﺒﻌﺾ ﻫﺬﻩ‬
‫ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪ -‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ (‪.Prolog )Clocksin and Mellish ، 2003‬‬
‫ﻓﻲﺍﻵﻭﻧﺔ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺑﻌﺾ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺑﻠﻐﺎﺕ ﺃﻧﻈﻤﺔ ﻣﺜﻞ (‬
‫‪ ، C. Scheme )Dybvig، 2003‬ﻭﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻟﻬﺠﺔ ‪ LISP‬ﻭ ‪ Prolog‬ﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ ‪ 15‬ﻭ ‪16‬‬
‫ﻋﻠﻰﺍﻟﺘﻮﺍﻟﻲ‪.‬‬

‫‪1.2.4‬ﺑﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ‬
‫ﻳﻌُﺮﻑﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺃﺩﻭﺍﺕ ﺩﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻨﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﺸﻜﻞ ﺟﻤﺎﻋﻲ ﺑﺎﺳﻤﻪﺑﺮﺍﻣﺞ‬
‫ﺍﻷﻧﻈﻤﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ ﺗﻘﺮﻳﺒﺎً ﻭﻟﺬﺍ ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻓﻌﺎﻟﺔ‪ .‬ﻋﻼﻭﺓ‬
‫ﻋﻠﻰﺫﻟﻚ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﻴﺰﺍﺕ ﻣﻨﺨﻔﻀﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺗﺴﻤﺢ ﻟﻜﺘﺎﺑﺔ ﻭﺍﺟﻬﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻟﻸﺟﻬﺰﺓﺍﻟﺨﺎﺭﺟﻴﺔ‪.‬‬
‫ﻓﻲﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻭﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻃﻮﺭﺕ ﺑﻌﺾ ﺍﻟﺸﺮﻛﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ‬
‫ﻷﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﻣﺜﻞ ‪ IBM‬ﻭ ‪ Digital‬ﻭ ‪) Burroughs‬ﺍﻵﻥ ‪ (UNISYS‬ﻟﻐﺎﺕ ﺧﺎﺻﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻣﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻵﻟﺔ ﻟﺒﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ﻋﻠﻰ ﺃﺟﻬﺰﺗﻬﻢ‪ .‬ﺑﺎﻟﻨﺴﺒﺔ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺮﻛﺰﻳﺔ‬
‫ﻣﻦ‪ ، IBM‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﻫﻲ ‪ ، PL / S‬ﻭﻫﻲ ﻟﻬﺠﺔ ‪ PL / I‬؛ ﺑﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ‪ ، Digital‬ﻛﺎﻧﺖ ‪BLISS‬‬
‫‪،‬ﻟﻐﺔ ﺑﻤﺴﺘﻮﻯ ﺃﻋﻠﻰ ﺑﻘﻠﻴﻞ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ؛ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺒﻮﺭﻭﺯ ‪ ،‬ﻓﻘﺪ ﺗﻢ ﺗﻤﺪﻳﺪﻩ ‪ .ALGOL‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﺗﺘﻢ ﺍﻵﻥ ﻛﺘﺎﺑﺔ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﺑﻠﻐﺎﺕ ﺑﺮﻣﺠﺔ ﺃﻛﺜﺮ ﻋﻤﻮﻣﻴﺔ ‪ ،‬ﻣﺜﻞ ‪ C‬ﻭ ‪.++ C‬‬

‫ﺗﻤﺖﻛﺘﺎﺑﺔ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ UNIX‬ﺑﺎﻟﻜﺎﻣﻞ ﺗﻘﺮﻳﺒﺎً ﺑﻠﻐﺔ (‪ ، C )ISO ، 1999‬ﻣﻤﺎ ﺟﻌﻞ ﻣﻦ‬
‫ﺍﻟﺴﻬﻞﻧﺴﺒﻴﺎً ﻧﻘﻠﻪ ﺃﻭ ﻧﻘﻠﻪ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﻣﺨﺘﻠﻔﺔ‪ .‬ﺑﻌﺾ ﺧﺼﺎﺉﺺ ﻟﻐﺔ ‪ C‬ﺗﺠﻌﻠﻬﺎ ﺧﻴﺎﺭﺍً ﺟﻴﺪﺍً‬
‫ﻟﺒﺮﻣﺠﺔﺍﻷﻧﻈﻤﺔ‪ .‬ﺇﻧﻪ ﻣﻨﺨﻔﺾ ﺍﻟﻤﺴﺘﻮﻯ ﻭﻓﻌﺎﻝ ﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ﻭﻻ ﻳﺜﻘﻞ ﻛﺎﻫﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺎﻟﻜﺜﻴﺮ‬
‫‪7‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﻗﻴﻮﺩﺍﻟﺴﻼﻣﺔ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﺒﺮﻣﺠﻮ ﺍﻷﻧﻈﻤﺔ ﻣﺒﺮﻣﺠﻴﻦ ﻣﻤﺘﺎﺯﻳﻦ ﻭﻳﻌﺘﻘﺪﻭﻥ ﺃﻧﻬﻢ ﻻ ﻳﺤﺘﺎﺟﻮﻥ‬
‫ﺇﻟﻰﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﺠﺪ ﺑﻌﺾ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻏﻴﺮ ﺍﻟﻨﻈﺎﻣﻴﻴﻦ ﺃﻥ ﻟﻐﺔ ‪ C‬ﺧﻄﻴﺮﺓ ﺟﺪﺍً‬
‫ﻻﺳﺘﺨﺪﺍﻣﻬﺎﻓﻲ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﻤﻬﻤﺔ‪.‬‬

‫‪1.2.5‬ﺑﺮﺍﻣﺞ ﺍﻟﻮﻳﺐ‬
‫ﻳﺘﻢﺩﻋﻢ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻣﻦ ﺧﻼﻝ ﻣﺠﻤﻮﻋﺔ ﺍﻧﺘﻘﺎﺉﻴﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﺑﺪءﺍً ﻣﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺘﺮﻣﻴﺰ ‪،‬ﻣﺜﻞ ‪ ، HTML‬ﻭﻫﻲ ﻟﻴﺴﺖ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ‪ ،‬ﺇﻟﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ ‪،‬‬
‫ﻣﺜﻞ‪ .Java‬ﺑﺴﺒﺐ ﺍﻟﺤﺎﺟﺔ ﺍﻟﻤﻨﺘﺸﺮﺓ ﻟﻤﺤﺘﻮﻯ ﻭﻳﺐ ﺩﻳﻨﺎﻣﻴﻜﻲ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺑﻌﺾ‬
‫ﺍﻟﻘﺪﺭﺓﺍﻟﺤﺴﺎﺑﻴﺔ ﻓﻲ ﺗﻘﻨﻴﺔ ﻋﺮﺽ ﺍﻟﻤﺤﺘﻮﻯ‪ .‬ﻳﻤﻜﻦ ﺗﻮﻓﻴﺮ ﻫﺬﻩ ﺍﻟﻮﻇﻴﻔﺔ ﻣﻦ ﺧﻼﻝ ﺗﻀﻤﻴﻦ ﻛﻮﺩ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻓﻲ ﻣﺴﺘﻨﺪ ‪ .HTML‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻫﺬﺍ ﺍﻟﺮﻣﺰ ﻓﻲ ﺷﻜﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ‪ ،‬ﻣﺜﻞ‬
‫‪ JavaScript‬ﺃﻭ ‪ .PHP‬ﻫﻨﺎﻙ ﺃﻳﻀﺎً ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺸﺒﻴﻬﺔ ﺑﺎﻟﻌﻼﻣﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺗﻤﺪﻳﺪﻫﺎ ﻟﺘﺸﻤﻞ‬
‫ﺍﻟﺘﺮﻛﻴﺒﺎﺕﺍﻟﺘﻲ ﺗﺘﺤﻜﻢ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﺴﺘﻨﺪﺍﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 1.5‬ﻭﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪.2‬‬

‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻓﺈﻥ ﺍﻟﻐﺮﺽ ﻣﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻫﻮ ﺍﻟﻔﺤﺺ ﺍﻟﺪﻗﻴﻖ ﻟﻠﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﻟﻠﺘﺮﻛﻴﺒﺎﺕﻭﺍﻟﻘﺪﺭﺍﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺳﻨﻘﻮﻡ ﺃﻳﻀﺎً ﺑﺘﻘﻴﻴﻢ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ ‪ ،‬ﻣﻊ ﺍﻟﺘﺮﻛﻴﺰ‬
‫ﻋﻠﻰﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﺼﻴﺎﻧﺔ‪ .‬ﻟﻠﻘﻴﺎﻡ ﺑﺬﻟﻚ ‪ ،‬ﻧﺤﺘﺎﺝ ﺇﻟﻰ‬
‫ﻣﺠﻤﻮﻋﺔﻣﻦ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﻘﻴﻴﻢ‪ .‬ﻗﺎﺉﻤﺔ ﺍﻟﻤﻌﺎﻳﻴﺮ ﻫﺬﻩ ﻣﺜﻴﺮﺓ ﻟﻠﺠﺪﻝ ﺑﺎﻟﻀﺮﻭﺭﺓ ‪ ،‬ﻷﻧﻪ ﻣﻦ ﺍﻟﺼﻌﺐ‬
‫ﺇﻗﻨﺎﻉﺍﺛﻨﻴﻦ ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻋﻠﻰ ﻗﻴﻤﺔ ﺑﻌﺾ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﻤﻌﻴﻨﺔ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻶﺧﺮﻳﻦ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻫﺬﻩ ﺍﻻﺧﺘﻼﻓﺎﺕ ‪ ،‬ﻳﺘﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻥ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺘﻲ ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺘﻬﺎﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻬﻤﺔ‪.‬‬

‫ﺑﻌﺾﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﻦ ﺍﻷﺭﺑﻌﺔ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻳﻴﺮ‬
‫ﻣﻮﺿﺤﺔﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪ ، 1.1‬ﻭﺍﻟﻤﻌﺎﻳﻴﺮ ﻧﻔﺴﻬﺎ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ‪2.‬ﻻﺣﻆ ﺃﻧﻪ ﺗﻢ‬
‫ﺗﻀﻤﻴﻦﺃﻫﻢ ﺍﻟﺨﺼﺎﺉﺺ ﻓﻘﻂ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﻣﻤﺎ ﻳﻌﻜﺲ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ‬
‫ﺍﻟﺘﺎﻟﻴﺔ‪.‬ﺭﺑﻤﺎ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺪﻋﻲ ﺃﻧﻪ ﺇﺫﺍ ﺍﻋﺘﺒﺮ ﺍﻟﻤﺮء ﺧﺼﺎﺉﺺ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ‪ ،‬ﻓﻴﻤﻜﻦ ﺃﻥ‬
‫ﺗﺸﺘﻤﻞﺟﻤﻴﻊ ﻣﻮﺍﺿﻊ ﺍﻟﺠﺪﻭﻝ ﺗﻘﺮﻳﺒﺎً ﻋﻠﻰ "ﺗﻌﺪﺍﺩ ﻧﻘﻄﻲ"‪.‬‬

‫ﻻﺣﻆﺃﻥ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﺨﺼﺎﺉﺺ ﻭﺍﺳﻌﺔ ﻭﻏﺎﻣﻀﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻣﺜﻞ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﻓﻲ‬
‫ﺣﻴﻦﺃﻥ ﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺤﺪﺩﺓ ‪ ،‬ﻣﺜﻞ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ‬
‫ﺫﻟﻚ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻗﺪ ﺗﺒﺪﻭ ﻭﻛﺄﻧﻬﺎ ﺗﻮﺣﻲ ﺑﺄﻥ ﺍﻟﻤﻌﺎﻳﻴﺮ ﻟﻬﺎ ﺃﻫﻤﻴﺔ ﻣﺘﺴﺎﻭﻳﺔ ‪،‬‬
‫ﻓﺈﻥﻫﺬﺍ ﺍﻟﻤﻌﻨﻰ ﻏﻴﺮ ﻣﻘﺼﻮﺩ ‪ ،‬ﻭﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻷﻣﺮ ﻟﻴﺲ ﻛﺬﻟﻚ‪.‬‬

‫‪.2‬ﺍﻟﻤﻌﻴﺎﺭ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺮﺍﺑﻊ ﻫﻮ ﺍﻟﺘﻜﻠﻔﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﻷﻧﻬﺎ ﻣﺮﺗﺒﻄﺔ ﺑﺸﻜﻞ ﻃﻔﻴﻒ ﻓﻘﻂ‬
‫ﺑﺎﻟﻤﻌﺎﻳﻴﺮﺍﻷﺧﺮﻯ ﻭﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻴﻬﺎ‪.‬‬
‫ﻣﻘﺪﻣﺎﺕ‬ ‫ﺍﻟﻔﺼﻞ‪1‬‬ ‫‪8‬‬

‫ﻣﻌﺎﻳﻴﺮﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻴﻬﺎ‬ ‫ﺍﻟﺠﺪﻭﻝ‪1.1‬‬

‫ﻣﻌﺎﻳﻴﺮ‬

‫ﻣﺼﺪﺍﻗﻴﺔ‬ ‫ﺍﻟﻜﺘﺎﺑﺔ‬ ‫ﻣﻘﺮﻭﺉﻴﺔ‬ ‫ﺻﻔﺔﻣﻤﻴﺰﺓ‬


‫•‬ ‫•‬ ‫•‬ ‫ﺑﺴﺎﻃﺔ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺍﻟﺘﻌﺎﻣﺪ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺃﻧﻮﺍﻉﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺍﻟﺘﺼﻤﻴﻢﺍﻟﻨﺤﻮﻱ‬
‫•‬ ‫•‬ ‫ﺩﻋﻢﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﺘﺠﺮﻳﺪﻱ‬
‫•‬ ‫•‬
‫•‬ ‫ﻓﺤﺺﺍﻟﻨﻮﻉ‬
‫•‬ ‫ﻣﻌﺎﻟﺠﺔﺍﻻﺳﺘﺜﻨﺎء‬
‫•‬ ‫ﺍﻟﺘﻌﺮﺝﺍﻟﻤﻘﻴﺪ‬

‫‪1.3.1‬ﺳﻬﻮﻟﺔ ﺍﻟﻘﺮﺍءﺓ‬
‫ﺃﺣﺪﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻮ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻓﻬﻤﻬﺎ‪ .‬ﻗﺒﻞ ﻋﺎﻡ ‪، 1970‬‬
‫ﻛﺎﻥﻳﺘﻢ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺣﻴﺚ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪.‬‬
‫ﻛﺎﻧﺖﺍﻟﺴﻤﺔ ﺍﻹﻳﺠﺎﺑﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺍﻟﻜﻔﺎءﺓ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﻦ‬
‫ﻭﺟﻬﺔﻧﻈﺮ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺃﻛﺜﺮ ﻣﻦ ﻭﺟﻬﺔ ﻧﻈﺮ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻭﻟﻜﻦ ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺗﻢ‬
‫ﺗﻄﻮﻳﺮﻣﻔﻬﻮﻡ ﺩﻭﺭﺓ ﺣﻴﺎﺓ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ )‪ .(Booch ، 1987‬ﺗﻢ ﻧﻘﻞ ﺍﻟﺘﺮﻣﻴﺰ ﺇﻟﻰ ﺩﻭﺭ ﺃﺻﻐﺮ ﺑﻜﺜﻴﺮ ‪،‬‬
‫ﻭﺗﻢﺍﻻﻋﺘﺮﺍﻑ ﺑﺎﻟﺼﻴﺎﻧﺔ ﻛﺠﺰء ﺭﺉﻴﺴﻲ ﻣﻦ ﺍﻟﺪﻭﺭﺓ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻣﻦ ﺣﻴﺚ ﺍﻟﺘﻜﻠﻔﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ‬
‫ﺳﻬﻮﻟﺔﺍﻟﺼﻴﺎﻧﺔ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺧﻼﻝ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻓﻘﺪ ﺃﺻﺒﺤﺖ‬
‫ﻗﺎﺑﻠﻴﺔﺍﻟﻘﺮﺍءﺓ ﻣﻘﻴﺎﺳﺎً ﻣﻬﻤﺎً ﻟﺠﻮﺩﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﻣﻨﻌﻄﻔﺎً ﻣﻬﻤﺎً ﻓﻲ ﺗﻄﻮﺭ‬
‫ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﺎﻥ ﻫﻨﺎﻙ ﺗﻘﺎﻃﻊ ﻣﻤﻴﺰ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺗﻮﺟﻴﻪ ﺍﻵﻟﺔ ﺇﻟﻰ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺍﻟﺘﻮﺟﻪ‬
‫ﺍﻟﺒﺸﺮﻱ‪.‬‬

‫ﻳﺠﺐﺍﻟﻨﻈﺮ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻓﻲ ﺳﻴﺎﻕ ﻣﺠﺎﻝ ﺍﻟﻤﺸﻜﻠﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﺬﻱ ﻳﺼﻒ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ ﻣﻜﺘﻮﺑﺎً ﺑﻠﻐﺔ ﻏﻴﺮ ﻣﺼﻤﻤﺔ ﻟﻬﺬﺍ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻓﻘﺪ ﻳﻜﻮﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﻏﻴﺮ ﻃﺒﻴﻌﻲ ﻭﻣﻌﻘﺪﺍً ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﻗﺮﺍءﺗﻪ ﺻﻌﺒﺔ ﺑﺸﻜﻞ ﻏﻴﺮ ﻋﺎﺩﻱ‪.‬‬

‫ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺴﺎﻫﻢ ﻓﻲ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪1.3.1.1‬ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﺸﺎﻣﻠﺔ‬
‫ﺗﺆﺛﺮﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﻜﻠﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﺪﺓ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﻘﺮﺍءﺓ‪ .‬ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ‬
‫ﻣﻦﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻣﻦ ﻟﻐﺔ ﺫﺍﺕ ﻋﺪﺩ ﺃﻗﻞ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻌﻠﻢ‬
‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥﺍﻟﺬﻳﻦ ﻳﺠﺐ ﻋﻠﻴﻬﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻣﺠﻤﻮﻋﺔ ﻓﺮﻋﻴﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﻳﺘﺠﺎﻫﻠﻮﻥ‬
‫ﻣﻴﺰﺍﺗﻬﺎﺍﻷﺧﺮﻯ‪ .‬ﻳﺴﺘﺨﺪﻡ ﻧﻤﻂ ﺍﻟﺘﻌﻠﻢ ﻫﺬﺍ ﺃﺣﻴﺎﻧﺎً ﻹﻋﻔﺎء ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ‪،‬‬
‫‪9‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﻟﻜﻦﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻏﻴﺮ ﺻﺤﻴﺤﺔ‪ .‬ﺗﺤﺪﺙ ﻣﺸﻜﻼﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻨﺪﻣﺎ ﻳﺘﻌﻠﻢ ﻣﺆﻟﻒ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻣﺠﻤﻮﻋﺔﻓﺮﻋﻴﺔ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﻲ ﻳﻌﺮﻓﻬﺎ ﺍﻟﻘﺎﺭﺉ‪.‬‬

‫ﺍﻟﺴﻤﺔﺍﻟﺜﺎﻧﻴﺔ ﺍﻟﻤﻌﻘﺪﺓ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲﺗﻌﺪﺩ ﺍﻟﻤﻴﺰﺍﺕ‪ -‬ﺃﻱ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻚ ﺃﻛﺜﺮ ﻣﻦ‬
‫ﻃﺮﻳﻘﺔﻹﻧﺠﺎﺯ ﻋﻤﻠﻴﺔ ﻣﻌﻴﻨﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ‪ ، Java‬ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺯﻳﺎﺩﺓ ﻣﺘﻐﻴﺮ‬
‫ﻋﺪﺩﺻﺤﻴﺢ ﺑﺴﻴﻂ ﺑﺄﺭﺑﻊ ﻃﺮﻕ ﻣﺨﺘﻠﻔﺔ‪:‬‬

‫ﺍﻟﻌﺪ= ﺍﻟﻌﺪ ‪ 1 +‬ﻋﺪﺩ ‪1 = +‬‬

‫ﺍﻟﻌﺪ‪++‬‬
‫‪ + +‬ﺍﻟﻌﺪ‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺒﺎﺭﺗﻴﻦ ﺍﻷﺧﻴﺮﻳﻦ ﻟﻬﻤﺎ ﻣﻌﺎﻧﻲ ﻣﺨﺘﻠﻔﺔ ﻗﻠﻴﻼ ًﻋﻦ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ ﻭﻋﻦ‬
‫ﺍﻵﺧﺮﻳﻦﻓﻲ ﺑﻌﺾ ﺍﻟﺴﻴﺎﻗﺎﺕ ‪ ،‬ﺇﻻ ﺃﻥ ﻛﻞ ﻣﻨﻬﻤﺎ ﻟﻬﺎ ﻧﻔﺲ ﺍﻟﻤﻌﻨﻰ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺘﻌﺒﻴﺮﺍﺕ‬
‫ﻗﺎﺉﻤﺔﺑﺬﺍﺗﻬﺎ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.7‬‬

‫ﺍﻟﻤﺸﻜﻠﺔﺍﻟﺜﺎﻟﺜﺔ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻫﻲﺍﻟﻤﺸﻐﻞ ﺍﻟﺰﺍﺉﺪ‪ ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ﻟﺮﻣﺰ ﻋﺎﻣﻞ ﻭﺍﺣﺪ ﺃﻛﺜﺮ ﻣﻦ‬
‫ﻣﻌﻨﻰ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﻔﻴﺪﺍً ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻗﺎﺑﻠﻴﺔ‬
‫ﺍﻟﻘﺮﺍءﺓﺇﺫﺍ ﺳﻤُﺢ ﻟﻠﻤﺴﺘﺨﺪﻣﻴﻦ ﺑﺈﻧﺸﺎء ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻭﻋﺪﻡ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﺑﺸﻜﻞ‬
‫ﻣﻌﻘﻮﻝ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻘﺒﻮﻝ ﺍﺳﺘﺨﺪﺍﻡ ‪ + overload‬ﻻﺳﺘﺨﺪﺍﻣﻪ‬
‫ﻓﻲﻛﻞ ﻣﻦ ﺟﻤﻊ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻫﺬﺍ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ‬
‫ﻳﺒﺴﻂﺍﻟﻠﻐﺔ ﻋﻦ ﻃﺮﻳﻖ ﺗﻘﻠﻴﻞ ﻋﺪﺩ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺍﻓﺘﺮﺽ ﺃﻥ ﺍﻟﻤﺒﺮﻣﺞ ﻣﻌﺮﻑ ‪+‬‬
‫ﻣﺴﺘﺨﺪﻡﺑﻴﻦ ﻣﻌﺎﻣﻼﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﺣﺎﺩﻳﺔ ﺍﻟﺒﻌﺪ ﻟﻴﻌﻨﻲ ﻣﺠﻤﻮﻉ ﻛﻞ ﻋﻨﺎﺻﺮ ﻛﻼ ﺍﻟﻤﺼﻔﻮﻓﺘﻴﻦ‪.‬‬
‫ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺘﺎﺩ ﻹﺿﺎﻓﺔ ﺍﻟﻤﺘﺠﻪ ﻳﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﻫﺬﺍ ‪ ،‬ﻓﺈﻧﻪ ﺳﻴﺠﻌﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻛﺜﺮ‬
‫ﺇﺭﺑﺎﻛﺎًﻟﻜﻞ ﻣﻦ ﺍﻟﻤﺆﻟﻒ ﻭﻗﺮﺍء ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﺍﻷﻛﺜﺮ ﺗﻄﺮﻓﺎً ﻋﻠﻰ ﺍﺭﺗﺒﺎﻙ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﻮ ﻗﻴﺎﻡ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﺑﺘﻌﺮﻳﻒ ‪ +‬ﺑﻴﻦ ﻣﻌﺎﻣﻠﻴﻦ ﻣﺘﺠﻬﻴﻦ ﻟﻴﻌﻨﻲ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻰ ﻟﻜﻞ ﻣﻨﻬﻤﺎ‪.‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺤﻤﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻠﻤﺸﻐﻞ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.7‬‬

‫ﺍﻟﺒﺴﺎﻃﺔﻓﻲ ﺍﻟﻠﻐﺎﺕ ﻳﻤﻜﻦ ﺑﺎﻟﻄﺒﻊ ﺗﺠﺎﻭﺯﻫﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﺒﺮ ﺷﻜﻞ ﻭﻣﻌﻨﻰ‬
‫ﻣﻌﻈﻢﻋﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻧﻤﺎﺫﺝ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ‪ ،‬ﻛﻤﺎ ﺗﺮﻯ ﻋﻨﺪﻣﺎ ﺗﻔﻜﺮ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﻲ‬
‫ﺗﻈﻬﺮﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺒﺴﺎﻃﺔ ﺗﺠﻌﻞ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ‬
‫ﻟﻠﻘﺮﺍءﺓ‪.‬ﻷﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ‪ ،‬ﻓﺈﻥ ﻫﻴﻜﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻗﻞ ﻭﺿﻮﺣﺎً ؛ ﻷﻥ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕﺑﺴﻴﻄﺔ ‪ ،‬ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻋﺪﺩ ﺃﻛﺒﺮ ﻣﻨﻬﺎ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻤﺎﺛﻠﺔ ﺑﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬
‫ﺗﻨﻄﺒﻖﻫﺬﻩ ﺍﻟﺤﺠﺞ ﻧﻔﺴﻬﺎ ﻋﻠﻰ ﺍﻟﺤﺎﻟﺔ ﺍﻷﻗﻞ ﺗﻄﺮﻓﺎً ﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻣﻊ ﻋﺪﻡ ﻛﻔﺎﻳﺔ‬
‫ﻋﻨﺎﺻﺮﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫‪1.3.1.2‬ﺍﻟﺘﻌﺎﻣﺪ‬
‫ﺍﻟﺘﻌﺎﻣﺪﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺩﻣﺞ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ‬
‫ﻓﻲﻋﺪﺩ ﺻﻐﻴﺮ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﻄﺮﻕ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ‬
‫ﺫﻟﻚ ‪،‬ﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻤﻜﻨﺔ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ﻗﺎﻧﻮﻧﻴﺔ ﻭﺫﺍﺕ ﻣﻐﺰﻯ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺿﻊ ﻓﻲ‬
‫ﺍﻋﺘﺒﺎﺭﻙ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪10‬‬

‫ﺃﻧﻮﺍﻉﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻠﻐﺔ ﺑﻬﺎ ﺃﺭﺑﻌﺔ ﺃﻧﻮﺍﻉ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ )ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ،‬ﻋﺪﺩ‬
‫ﻋﺸﺮﻱ ‪،‬ﻣﺰﺩﻭﺝ ‪ ،‬ﻭﺣﺮﻑ( ﻭﻋﺎﻣﻼﻥ ﻣﻦ ﺍﻟﻨﻮﻉ )ﻣﺼﻔﻮﻓﺔ ﻭﻣﺆﺷﺮ(‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺗﻄﺒﻴﻖ‬
‫ﻣﺸﻐﻠﻲﺍﻟﻨﻮﻋﻴﻦ ﻋﻠﻰ ﺃﻧﻔﺴﻬﻢ ﻭﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﻭﻟﻴﺔ ﺍﻷﺭﺑﻌﺔ ‪ ،‬ﻓﻴﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ‬
‫ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬
‫ﻣﻌﻨﻰﻣﻴﺰﺓ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺳﻴﺎﻕ ﻇﻬﻮﺭﻫﺎ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪) .‬ﺍﻟﻜﻠﻤﺔﻣﺘﻌﺎﻣﺪﻳﺄﺗﻲ‬
‫ﻣﻦﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﺮﻳﺎﺿﻲ ﻟﻠﻨﺎﻗﻼﺕ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ‪ (.‬ﺍﻟﺘﻌﺎﻣﺪ‬
‫ﻳﺄﺗﻲﻣﻦ ﺗﻨﺎﻇﺮ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻦ ﺍﻷﻭﻟﻴﺎﺕ‪ .‬ﻳﺆﺩﻱ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﺳﺘﺜﻨﺎءﺍﺕ ﻟﻘﻮﺍﻋﺪ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ‬
‫ﺍﻟﻤﻤﻜﻦﺗﺤﺪﻳﺪ ﻣﺆﺷﺮ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻱ ﻧﻮﻉ ﻣﺤﺪﺩ ﻣﺤﺪﺩ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺇﺫﺍ ﻟﻢ ﻳﺴُﻤﺢ‬
‫ﻟﻠﻤﺆﺷﺮﺍﺕﺑﺎﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ‪ ،‬ﻓﻼ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ‬
‫ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﺘﻲ ﻳﺤﺘﻤﻞ ﺃﻥ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ‪.‬‬

‫ﻳﻤﻜﻨﻨﺎﺗﻮﺿﻴﺢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻣﻦ ﺧﻼﻝ ﻣﻘﺎﺭﻧﺔ ﺟﺎﻧﺐ ﻭﺍﺣﺪ ﻣﻦ‬
‫ﻟﻐﺎﺕﺍﻟﺘﺠﻤﻴﻊ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ‪ IBM‬ﺍﻟﻤﺮﻛﺰﻳﺔ ﻭﺳﻠﺴﻠﺔ ‪ VAX‬ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ‪.‬‬
‫ﻧﺤﻦﻧﻌﺘﺒﺮ ﻣﻮﻗﻔﺎً ﻭﺍﺣﺪﺍً ﺑﺴﻴﻄﺎً‪ :‬ﺇﺿﺎﻓﺔ ﻗﻴﻤﺘﻴﻦ ﺻﺤﻴﺤﺘﻴﻦ ‪ 32‬ﺑﺖ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﺃﻭ‬
‫ﺍﻟﺴﺠﻼﺕﻭﺍﺳﺘﺒﺪﺍﻝ ﺇﺣﺪﻯ ﺍﻟﻘﻴﻤﺘﻴﻦ ﺑﺎﻟﻤﺠﻤﻮﻉ‪ .‬ﺗﺤﺘﻮﻱ ﺣﻮﺍﺳﻴﺐ ‪ IBM‬ﺍﻟﻤﺮﻛﺰﻳﺔ ﻋﻠﻰ‬
‫ﺗﻌﻠﻴﻤﺘﻴﻦﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ ‪ ،‬ﻭﺍﻟﺘﻲ ﻟﻬﺎ ﺍﻷﺷﻜﺎﻝ‬

‫‪A Reg1 ، memory_cell‬‬


‫‪AR Reg1 ، Reg2‬‬

‫ﺃﻳﻦﺭﻳﺞ ‪1‬ﻭ‪Reg2‬ﺗﻤﺜﻞ ﺍﻟﺴﺠﻼﺕ‪ .‬ﺩﻻﻻﺕ ﻫﺬﻩ ﻫﻲ‬

‫ﺭﻳﺞ‪←1‬ﻣﺤﺘﻮﻳﺎﺕ )‪ + (Reg1‬ﻣﺤﺘﻮﻳﺎﺕ )‪←Reg1 (memory_cell‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ‬


‫)‪ + (Reg1‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ )‪(Reg2‬‬

‫ﺗﻌﻠﻴﻤﺎﺕﺇﺿﺎﻓﺔ ‪ VAX‬ﻟﻘﻴﻢ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ‪ 32‬ﺑﺖ ﻫﻲ‬

‫ﻣﻌﺎﻣﻞ‪ ، ADDL_1‬ﺍﻟﻤﻌﺎﻣﻞ_‪2‬‬

‫ﺍﻟﺬﻱﻫﻮ ﺩﻻﻻﺕ‬

‫ﻣﻌﺎﻣﻞ_‪←2‬ﻣﺤﺘﻮﻳﺎﺕ )‪ + (operand_1‬ﻣﺤﺘﻮﻳﺎﺕ )‪(operand_2‬‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺃﻱ ﻣﻦ ﺍﻟﻤﻌﺎﻣﻞ ﺳﺠﻼ ًﺃﻭ ﺧﻠﻴﺔ ﺫﺍﻛﺮﺓ‪.‬‬


‫ﺗﺼﻤﻴﻢﺗﻌﻠﻴﻤﺎﺕ ‪ VAX‬ﻣﺘﻌﺎﻣﺪ ﻣﻦ ﺣﻴﺚ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺘﺨﺪﻡ ﺇﻣﺎ‬
‫ﺍﻟﺴﺠﻼﺕﺃﻭ ﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ﻛﻤﻌﺎﻣﻼِﺕ‪ .‬ﻫﻨﺎﻙ ﻃﺮﻳﻘﺘﺎﻥ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻤﻌﺎﻣﻼﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺩﻣﺠﻬﺎ‬
‫ﺑﻜﻞﺍﻟﻄﺮﻕ ﺍﻟﻤﻤﻜﻨﺔ‪ .‬ﺗﺼﻤﻴﻢ ‪ IBM‬ﻟﻴﺲ ﻣﺘﻌﺎﻣﺪ‪ .‬ﺍﺛﻨﺘﺎﻥ ﻓﻘﻂ ﻣﻦ ﺃﺻﻞ ﺃﺭﺑﻊ ﻣﺠﻤﻮﻋﺎﺕ‬
‫ﻣﻌﺎﻣﻼﺕﻗﺎﻧﻮﻧﻴﺔ ‪ ،‬ﻭﺍﻻﺛﻨﺎﻥ ﻳﺘﻄﻠﺒﺎﻥ ﺗﻌﻠﻴﻤﺎﺕ ﻣﺨﺘﻠﻔﺔ ‪،‬ﺃﻭ‪AR.‬ﺗﺼﻤﻴﻢ ‪ IBM‬ﺃﻛﺜﺮ ﺗﻘﻴﻴﺪﺍً‬
‫ﻭﺑﺎﻟﺘﺎﻟﻲﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻜﺘﺎﺑﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻻ ﻳﻤﻜﻨﻚ ﺇﺿﺎﻓﺔ ﻗﻴﻤﺘﻴﻦ ﻭﺗﺨﺰﻳﻦ ﺍﻟﻤﺠﻤﻮﻉ‬
‫ﻓﻲﻣﻮﻗﻊ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﺼﻌﺐ ﺗﻌﻠﻢ ﺗﺼﻤﻴﻢ ‪ IBM‬ﺑﺴﺒﺐ ﺍﻟﻘﻴﻮﺩ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻹﺿﺎﻓﻴﺔ‪.‬‬
‫‪11‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﺗﺮﺗﺒﻂﺍﻟﺘﻌﺎﻣﺪﻳﺔ ﺍﺭﺗﺒﺎﻃﺎً ﻭﺛﻴﻘﺎً ﺑﺎﻟﺒﺴﺎﻃﺔ‪ :‬ﻛﻠﻤﺎ ﻛﺎﻥ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺃﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً ‪ ،‬ﻗﻞ ﻋﺪﺩ‬
‫ﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ ﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻌﻨﻲ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻷﻗﻞ ﺩﺭﺟﺔ ﺃﻋﻠﻰ ﻣﻦ ﺍﻻﻧﺘﻈﺎﻡ ﻓﻲ‬
‫ﺍﻟﺘﺼﻤﻴﻢ ‪،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﻠﻐﺔ ﺃﺳﻬﻞ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻔﻬﻢ‪ .‬ﻳﻤﻜﻦ ﻷﻱ ﺷﺨﺺ ﺗﻌﻠﻢ ﺟﺰءﺍً‬
‫ﻛﺒﻴﺮﺍًﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻥ ﻳﺸﻬﺪ ﻋﻠﻰ ﺻﻌﻮﺑﺔ ﺗﻌﻠﻢ ﺍﺳﺘﺜﻨﺎءﺍﺗﻬﺎ ﺍﻟﻌﺪﻳﺪﺓ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ )ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪،‬ﺃﻧﺎﻗﺒﻞﻩﻣﺎﻋﺪﺍ ﺑﻌﺪﺝ(‪.‬‬

‫ﻛﺄﻣﺜﻠﺔﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ‬
‫ﻭﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ‪ .C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪ C‬ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻤﻨﻈﻤﺔﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ )ﻫﻴﻜﻞﻳﻤﻜﻦ ﺇﺭﺟﺎﻉ ﺍﻟﺴﺠﻼﺕ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﻭﻟﻜﻦ ﻻ‬
‫ﻳﻤﻜﻦﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻀﻮ ﺍﻟﺒﻨﻴﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎء ‪s( ،‬ﻓﺎﺭﻍﺃﻭ ﻫﻴﻜﻞ ﻣﻦ‬
‫ﻧﻔﺲﺍﻟﻨﻮﻉ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎءﻓﺎﺭﻍﺃﻭ ﻭﻇﻴﻔﺔ‪ .‬ﻳﺘﻢ‬
‫ﺗﻤﺮﻳﺮﺍﻟﻤﻌﻠﻤﺎﺕ ﺑﺎﻟﻘﻴﻤﺔ ‪ ،‬ﻣﺎ ﻟﻢ ﺗﻜﻦ ﻣﺼﻔﻮﻓﺎﺕ ‪ ،‬ﻭﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻳﺘﻢ ﺗﻤﺮﻳﺮﻫﺎ ﻓﻌﻠﻴﺎً ﻋﻦ‬
‫ﻃﺮﻳﻖﺍﻟﻤﺮﺟﻊ )ﻷﻥ ﻇﻬﻮﺭ ﺍﺳﻢ ﻣﺼﻔﻮﻓﺔ ﺑﺪﻭﻥ ﺣﺮﻑ ﻣﻨﺨﻔﺾ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ C‬ﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ‬
‫ﺃﻧﻪﻋﻨﻮﺍﻥ ﺍﻟﻌﻨﺼﺮ ﺍﻷﻭﻝ ﻟﻠﻤﺼﻔﻮﻓﺔ( ‪.‬‬

‫ﻛﻤﺜﺎﻝﻋﻠﻰ ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﺍﻟﺴﻴﺎﻕ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺗﻌﺒﻴﺮ ‪.C‬‬

‫ﺃ‪ +‬ﺏ‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻌﻨﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺒﻴﺮ ﺃﻥ ﻗﻴﻢﺃﻭﺏﻳﺘﻢ ﺟﻠﺒﻬﺎ ﻭﺇﺿﺎﻓﺘﻬﺎ ﻣﻌﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ‪ ،‬ﺇﺫﺍﺃﻳﺤﺪﺙ ﺃﻥ ﻳﻜﻮﻥ‬
‫ﻣﺆﺷﺮﺍً ‪،‬ﻓﻬﻮ ﻳﺆﺛﺮ ﻋﻠﻰ ﻗﻴﻤﺔﺏ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍﺃﻳﺸﻴﺮ ﺇﻟﻰ ﻗﻴﻤﺔ ﻋﺎﺉﻤﺔ ﺗﺸﻐﻞ ﺃﺭﺑﻌﺔ‬
‫ﺑﺎﻳﺖ ‪،‬ﺛﻢ ﻗﻴﻤﺔﺏ‬
‫ﻳﺠﺐﺗﺤﺠﻴﻤﻬﺎ ‪ -‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻣﻀﺮﻭﺑﺔ ﻓﻲ ‪ - 4‬ﻗﺒﻞ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰﺃ‪.‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ﻧﻮﻉﺃﻳﺆﺛﺮ ﻋﻠﻰ‬
‫ﻋﻼﺝﻗﻴﻤﺔﺏ‪.‬ﺳﻴﺎﻕﺏﻳﺆﺛﺮ ﻋﻠﻰ ﻣﻌﻨﺎﻫﺎ‪.‬‬

‫ﻳﻤﻜﻦﺃﻥ ﻳﺴﺒﺐ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﺃﻳﻀﺎً ﻣﺸﺎﻛﻞ‪ .‬ﺭﺑﻤﺎ ﺗﻜﻮﻥ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً‬
‫ﻫﻲ (‪ .ALGOL 68 )van Wijngaarden et al. ، 1969‬ﻛﻞ ﺑﻨﺎء ﻟﻐﺔ ﻓﻲ ‪ ALGOL 68‬ﻟﻪ‬
‫ﻧﻮﻉ ‪،‬ﻭﻻ ﺗﻮﺟﺪ ﻗﻴﻮﺩ ﻋﻠﻰ ﻫﺬﻩ ﺍﻷﻧﻮﺍﻉ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﺗﻨﺘﺞ ﻣﻌﻈﻢ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻗﻴﻤﺎً‪ .‬ﺗﺴﻤﺢ‬
‫ﻫﺬﻩﺍﻟﺤﺮﻳﺔ ﺍﻟﺘﻮﺍﻓﻘﻴﺔ ﺑﺒﻨﺎءﺍﺕ ﻣﻌﻘﺪﺓ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻈﻬﺮ ﺍﻟﺸﺮﻃﻲ‬
‫ﻋﻠﻰﺃﻧﻪ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺍﻹﻋﻼﻧﺎﺕ ﻭﻋﺒﺎﺭﺍﺕ ﻣﺘﻨﻮﻋﺔ ﺃﺧﺮﻯ ‪،‬‬
‫ﻃﺎﻟﻤﺎﺃﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻋﻨﻮﺍﻥ‪ .‬ﻫﺬﺍ ﺍﻟﺸﻜﻞ ﺍﻟﻤﺘﻄﺮﻑ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻌﻘﻴﺪ ﻏﻴﺮ ﺿﺮﻭﺭﻱ‪.‬‬
‫ﻋﻼﻭﺓﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻠﻐﺎﺕ ﺗﺘﻄﻠﺐ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ‪ ،‬ﻓﺈﻥ ﺩﺭﺟﺔ ﻋﺎﻟﻴﺔ ﻣﻦ‬
‫ﺍﻟﺘﻌﺎﻣﺪﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻧﻔﺠﺎﺭ ﻓﻲ ﺍﻟﺘﻮﻟﻴﻔﺎﺕ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺴﻴﻄﺔ ‪ ،‬ﻓﺈﻥ‬
‫ﺃﻋﺪﺍﺩﻫﻢﺍﻟﻬﺎﺉﻠﺔ ﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ‪.‬‬

‫ﻭﺑﺎﻟﺘﺎﻟﻲ ‪،‬ﻓﺈﻥ ﺍﻟﺒﺴﺎﻃﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﻫﻲ ﻋﻠﻰ ﺍﻷﻗﻞ ﺟﺰﺉﻴﺎً ﻧﺘﻴﺠﺔ ﻣﺰﻳﺞ ﻣﻦ ﻋﺪﺩ ﺻﻐﻴﺮ‬
‫ﻧﺴﺒﻴﺎًﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺤﺪﻭﺩ ﻟﻤﻔﻬﻮﻡ ﺍﻟﺘﻌﺎﻣﺪ‪.‬‬

‫ﻳﻌﺘﻘﺪﺍﻟﺒﻌﺾ ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺗﻘﺪﻡ ﻣﺰﻳﺠﺎً ﺟﻴﺪﺍً ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺎﻣﺪ‪ .‬ﺍﻟﻠﻐﺔ‬


‫ﺍﻟﻮﻇﻴﻔﻴﺔ ‪،‬ﻣﺜﻞ ‪ ، LISP‬ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﻓﻴﻬﺎ ﺇﺟﺮﺍء ﺍﻟﺤﺴﺎﺑﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻣﻦ ﺧﻼﻝ‬
‫ﺗﻄﺒﻴﻖﻭﻇﺎﺉﻒ ﻋﻠﻰ ﻣﻌﻠﻤﺎﺕ ﻣﻌﻴﻨﺔ‪ .‬ﻓﻲ ﺍﻟﻤﻘﺎﺑﻞ ‪ ،‬ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻣﺜﻞ ‪ C‬ﻭ ‪ ++ C‬ﻭ‬
‫‪ ، Java‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬
‫ﺗﻘﺪﻡﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﻜﻠﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﺠﺰ ﻛﻞ ﺷﻲء ﺑﺒﻨﻴﺔ‬
‫ﻭﺍﺣﺪﺓ ‪،‬ﺍﺳﺘﺪﻋﺎء ﺍﻟﻮﻇﻴﻔﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪12‬‬

‫ﻣﺠﺘﻤﻌﺔﺑﺒﺴﺎﻃﺔ ﻣﻊ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺧﺮﻯ‪ .‬ﻫﺬﻩ ﺍﻷﻧﺎﻗﺔ ﺍﻟﺒﺴﻴﻄﺔ ﻫﻲ ﺳﺒﺐ ﺍﻧﺠﺬﺍﺏ‬


‫ﺑﻌﺾﺍﻟﺒﺎﺣﺜﻴﻦ ﺍﻟﻠﻐﻮﻳﻴﻦ ﺇﻟﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻛﺒﺪﻳﻞ ﺃﺳﺎﺳﻲ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﻘﺪﺓ ﻏﻴﺮ ﺍﻟﻮﻇﻴﻔﻴﺔ‬
‫ﻣﺜﻞ‪ .++ C‬ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ‪ ،‬ﻣﺜﻞ ﺍﻟﻜﻔﺎءﺓ ‪ ،‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺣﺎﻟﺖ ﺩﻭﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ‬
‫ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ‪.‬‬

‫‪1.3.1.3‬ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻳﻌﺪﻭﺟﻮﺩ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﻜﺎﻓﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﻭﺳﻴﻠﺔ‬
‫ﻣﺴﺎﻋﺪﺓﻣﻬﻤﺔ ﺃﺧﺮﻯ ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻓﺘﺮﺽ ﺃﻥ ﻧﻮﻋﺎً ﺭﻗﻤﻴﺎً ﻳﺴُﺘﺨﺪﻡ‬
‫ﻟﻌﻼﻣﺔﻣﺆﺷﺮ ﻷﻧﻪ ﻻ ﻳﻮﺟﺪ ﻧﻮﻉ ﻣﻨﻄﻘﻲ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻓﻲ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ‪ ،‬ﻗﺪ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ ﻣﻬﻤﺔ‬
‫ﻣﺜﻞﻣﺎ ﻳﻠﻲ‪:‬‬

‫‪timeOut =1‬‬

‫ﻣﻌﻨﻰﻫﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻏﻴﺮ ﻭﺍﺿﺢ ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻤﻨﻄﻘﻴﺔ ‪ ،‬ﺳﻴﻜﻮﻥ ﻟﺪﻳﻨﺎ ﻣﺎ‬
‫ﻳﻠﻲ‪:‬‬

‫= ‪timeOut‬ﺣﻘﻴﻘﻲ‬

‫ﻣﻌﻨﻰﻫﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻭﺍﺿﺢ ﺗﻤﺎﻣﺎ‪.‬‬

‫‪1.3.1.4‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻨﺤﻮﻱ‬
‫ﺇﻥﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺷﻜﻞ ﻋﻨﺎﺻﺮ ﺍﻟﻠﻐﺔ ﻟﻪ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻓﻴﻤﺎ ﻳﻠﻲ ﺑﻌﺾ‬
‫ﺍﻷﻣﺜﻠﺔﻋﻠﻰ ﺧﻴﺎﺭﺍﺕ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ‪:‬‬

‫• ﻛﻠﻤﺎﺕﺧﺎﺻﺔ‪.‬ﻳﺘﺄﺛﺮ ﻣﻈﻬﺮ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﺑﺎﻟﺘﺎﻟﻲ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﺪﺓ ﺑﺄﺷﻜﺎﻝ ﺍﻟﻜﻠﻤﺎﺕ‬
‫ﺍﻟﺨﺎﺻﺔﻟﻠﻐﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬ﺑﻴﻨﻤﺎﻭ‬
‫ﻓﺼﻞ‪ ،‬ﻭﻝ(‪ .‬ﻣﻦ ﺍﻟﻤﻬﻢ ﺑﺸﻜﻞ ﺧﺎﺹ ﻃﺮﻳﻘﺔ ﺗﻜﻮﻳﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ ‪ ،‬ﺃﻭ ﻣﺠﻤﻮﻋﺎﺕ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕ ‪،‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻲ ﺑﻨﻴﺎﺕ ﺍﻟﺘﺤﻜﻢ‪ .‬ﺍﺳﺘﺨﺪﻣﺖ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺃﺯﻭﺍﺟﺎً ﻣﺘﻄﺎﺑﻘﺔ‬
‫ﻣﻦﺍﻟﻜﻠﻤﺎﺕ ﺃﻭ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺨﺎﺻﺔ ﻟﺘﻜﻮﻳﻦ ﻣﺠﻤﻮﻋﺎﺕ‪ .‬ﺗﺴﺘﺨﺪﻡ ‪ C‬ﻭﺃﺣﻔﺎﺩﻫﺎ ﺍﻷﻗﻮﺍﺱ‬
‫ﻟﺘﺤﺪﻳﺪﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ‪ .‬ﺗﻌﺎﻧﻲ ﻛﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﻷﻥ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻳﺘﻢ ﺇﻧﻬﺎﺅﻫﺎ‬
‫ﺩﺍﺉﻤﺎًﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﻣﻦ ﺍﻟﺼﻌﺐ ﺗﺤﺪﻳﺪ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺇﻧﻬﺎﺅﻫﺎ ﻋﻨﺪﻣﺎ‬
‫ﻧﻬﺎﻳﺔﺃﻭ ﻳﻈﻬﺮ ﻗﻮﺱ ﺃﻳﻤﻦ‪ .‬ﻳﻮﺿﺢ ﻛﻞ ﻣﻦ ‪ Fortran 95‬ﻭ ‪ Ada‬ﻫﺬﺍ ﺍﻷﻣﺮ ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺻﻴﻐﺔﺇﻏﻼﻕ ﻣﻤﻴﺰﺓ ﻟﻜﻞ ﻧﻮﻉ ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺴﺘﺨﺪﻡ ‪Ada‬‬
‫ﺇﻧﻬﺎءﺇﺫﺍﻹﻧﻬﺎء ﺑﻨﺎء ﺍﻟﺘﺤﺪﻳﺪ ﻭﺣﻠﻘﺔ ﺍﻟﻨﻬﺎﻳﺔ‬

‫ﻹﻧﻬﺎءﺑﻨﺎء ﺣﻠﻘﺔ‪ .‬ﻫﺬﺍ ﻣﺜﺎﻝ ﻋﻠﻰ ﺍﻟﺘﻌﺎﺭﺽ ﺑﻴﻦ ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﺬﻱ ﻳﻨﺘﺞ ﻋﻨﻪ ﻋﺪﺩ ﺃﻗﻞ ﻣﻦ‬
‫ﺍﻟﻜﻠﻤﺎﺕﺍﻟﻤﺤﺠﻮﺯﺓ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ‪ ، ++ C‬ﻭﺍﻟﻘﺮﺍءﺓ ﺍﻷﻛﺒﺮ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﺘﺞ ﻋﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﻤﺤﺠﻮﺯﺓ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ‪.Ada‬‬
‫ﻫﻨﺎﻙﻣﺴﺄﻟﺔ ﻣﻬﻤﺔ ﺃﺧﺮﻯ ﻭﻫﻲ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﻟﻠﻐﺔ‬
‫ﻛﺄﺳﻤﺎءﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﺍﻷﻣﺮ ﻛﺬﻟﻚ ‪ ،‬ﻓﻘﺪ ﺗﻜﻮﻥ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻨﺎﺗﺠﺔ ﻣﺮﺑﻜﺔ ﻟﻠﻐﺎﻳﺔ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ‪ ، Fortran 95‬ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻣﺜﻞﻳﻔﻌﻞ‬
‫ﻭﻧﻬﺎﻳﺔ‪،‬ﻫﻲ ﺃﺳﻤﺎء ﻣﺘﻐﻴﺮﺍﺕ ﻗﺎﻧﻮﻧﻴﺔ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﻇﻬﻮﺭ ﻫﺬﻩ ﺍﻟﻜﻠﻤﺎﺕ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻣﺎ ﻗﺪ ﻳﺸﻴﺮ‬
‫ﺃﻭﻻ ﻳﺸﻴﺮ ﺇﻟﻰ ﺷﻲء ﺧﺎﺹ‪.‬‬
‫‪13‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫• ﺍﻟﺸﻜﻞﻭﺍﻟﻤﻌﻨﻰ‪.‬ﺗﺼﻤﻴﻢ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺑﺤﻴﺚ ﻳﺸﻴﺮ ﻇﻬﻮﺭﻫﺎ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ﺇﻟﻰ ﺍﻟﻐﺮﺽ‬
‫ﻣﻨﻬﺎ ‪،‬ﻭﻫﻮ ﻣﺴﺎﻋﺪﺓ ﻭﺍﺿﺤﺔ ﻟﺴﻬﻮﻟﺔ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﻳﺠﺐ ﺃﻥ ﺗﺘﺒﻊ ﺍﻟﺪﻻﻻﺕ ﺃﻭ ﺍﻟﻤﻌﻨﻰ ﻣﺒﺎﺷﺮﺓ‬
‫ﻣﻦﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺍﻟﺸﻜﻞ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﺘﻢ ﺍﻧﺘﻬﺎﻙ ﻫﺬﺍ ﺍﻟﻤﺒﺪﺃ ﻣﻦ ﺧﻼﻝ‬
‫ﺗﺮﻛﻴﺒﺘﻴﻦﻟﻐﻮﻳﺘﻴﻦ ﻣﺘﻄﺎﺑﻘﺘﻴﻦ ﺃﻭ ﻣﺘﺸﺎﺑﻬﻴﻦ ﻓﻲ ﺍﻟﻤﻈﻬﺮ ﻭﻟﻜﻦ ﻟﻬﻤﺎ ﻣﻌﺎﻧﻲ ﻣﺨﺘﻠﻔﺔ ‪،‬‬
‫ﺍﻋﺘﻤﺎﺩﺍًﻋﻠﻰ ﺍﻟﺴﻴﺎﻕ ﺭﺑﻤﺎ‪ .‬ﻓﻲ‬
‫ﺝـ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ـ ﻣﻌﻨﻰ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓﺛﺎﺑﺘﺔﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺎﻕ ﻣﻈﻬﺮﻩ‪ .‬ﺇﺫﺍ ﺗﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻪﻓﻲ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺩﺍﺧﻞ ﺩﺍﻟﺔ ‪ ،‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﻤﺘﻐﻴﺮ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻩ ﻓﻲ ﻭﻗﺖ‬
‫ﺍﻟﺘﺮﺟﻤﺔ‪.‬ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺧﺎﺭﺝ ﺟﻤﻴﻊ ﺍﻟﻮﻇﺎﺉﻒ ‪ ،‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ‬
‫ﺍﻟﻤﺘﻐﻴﺮﻣﺮﺉﻲ ﻓﻘﻂ ﻓﻲ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﻳﻈﻬﺮ ﻓﻴﻪ ﺗﻌﺮﻳﻔﻪ ؛ ﺃﻱ ﺃﻧﻪ ﻻ ﻳﺘﻢ ﺗﺼﺪﻳﺮﻩ ﻣﻦ ﻫﺬﺍ‬
‫ﺍﻟﻤﻠﻒ‪.‬‬
‫ﺇﺣﺪﻯﺍﻟﺸﻜﺎﻭﻯ ﺍﻷﺳﺎﺳﻴﺔ ﺣﻮﻝ ﺃﻭﺍﻣﺮ ‪ shell‬ﺍﻟﺨﺎﺻﺔ ﺑـ (‪UNIX )Raymond، 2004‬‬
‫ﻫﻲﺃﻥ ﻣﻈﻬﺮﻫﺎ ﻻ ﻳﺸﻴﺮ ﺩﺍﺉﻤﺎً ﺇﻟﻰ ﻭﻇﻴﻔﺘﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻌﻨﻰ ﺃﻣﺮ ‪grepUNIX‬‬
‫ﻳﻤﻜﻦﻓﻚ ﺭﻣﻮﺯﻫﺎ ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﻌﺮﻓﺔ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﺃﻭ ﺭﺑﻤﺎ ﺍﻟﺬﻛﺎء ﻭﺍﻹﻟﻤﺎﻡ ﺑﻤﺤﺮﺭ ‪، UNIX‬‬
‫ﺇﺩ‪.‬ﻣﻈﻬﺮ ﺍﻝ‪grep‬ﻻ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻱ ﺷﻲء ﻟﻠﻤﺒﺘﺪﺉﻴﻦ ﻓﻲ ‪) .UNIX‬ﻓﻲﺇﺩ ‪،‬ﺍﻻﻣﺮ‪/‬ﺗﻌﺒﻴﺮ ﻋﺎﺩﻱ‪/‬‬
‫ﻳﺒﺤﺚﻋﻦ ﺳﻠﺴﻠﺔ ﻓﺮﻋﻴﺔ ﺗﻄﺎﺑﻖ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻌﺎﺩﻱ‪ .‬ﻳﺴﺒﻖ ﻫﺬﺍ ﺑـﺯﻳﺠﻌﻠﻪ ﺃﻣﺮﺍً ﻋﺎﻣﺎً ‪ ،‬ﻣﻊ‬
‫ﺗﺤﺪﻳﺪﺃﻥ ﻧﻄﺎﻕ ﺍﻟﺒﺤﺚ ﻫﻮ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﻳﺘﻢ ﺗﺤﺮﻳﺮﻩ ﺑﺎﻟﻜﺎﻣﻞ‪ .‬ﺍﺗﺒﺎﻉ ﺍﻷﻣﺮ ﺑﺎﻣﺘﺪﺍﺩﺹﻳﺤﺪﺩ‬
‫ﺃﻥﺍﻷﺳﻄﺮ ﺫﺍﺕ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﻄﺎﺑﻘﺔ ﺳﺘﺘﻢ ﻃﺒﺎﻋﺘﻬﺎ‪ .‬ﻟﺬﺍﺯ‪/‬ﺗﻌﺒﻴﺮ ﻋﺎﺩﻱ‪ /‬ﻉ ‪،‬ﻭﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦﺍﺧﺘﺼﺎﺭﻫﺎ ﺑﻮﺿﻮﺡ ﻛـ‪grep‬ﻳﻄﺒﻊ ﻛﻞ ﺍﻷﺳﻄﺮ ﻓﻲ ﻣﻠﻒ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺳﻼﺳﻞ ﻓﺮﻋﻴﺔ‬
‫ﺗﻄﺎﺑﻖﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻌﺎﺩﻱ‪(.‬‬

‫‪1.3.2‬ﺍﻟﻘﺎﺑﻠﻴﺔ ﻟﻠﻜﺘﺎﺑﺔ‬
‫ﺍﻟﻘﺎﺑﻠﻴﺔﻟﻠﻜﺘﺎﺑﺔ ﻫﻲ ﻣﻘﻴﺎﺱ ﻟﻤﺪﻯ ﺳﻬﻮﻟﺔ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﻹﻧﺸﺎء ﺑﺮﺍﻣﺞ ﻟﻤﺠﺎﻝ ﻣﺸﻜﻠﺔ ﻣﺨﺘﺎﺭ‪.‬‬
‫ﺗﺆﺛﺮﺃﻳﻀﺎً ﻣﻌﻈﻢ ﺧﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ‪ .‬ﻳﺄﺗﻲ ﻫﺬﺍ‬
‫ﻣﺒﺎﺷﺮﺓﻣﻦ ﺣﻘﻴﻘﺔ ﺃﻥ ﻋﻤﻠﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺗﺘﻄﻠﺐ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺞ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ﺇﻋﺎﺩﺓ ﻗﺮﺍءﺓ‬
‫ﺟﺰءﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺬﻱ ﺗﻤﺖ ﻛﺘﺎﺑﺘﻪ ﺑﺎﻟﻔﻌﻞ‪.‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ‪ ،‬ﻳﺠﺐ ﻣﺮﺍﻋﺎﺓ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺳﻴﺎﻕ ﻣﺠﺎﻝ ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﺍﻟﻬﺪﻑﻟﻠﻐﺔ‪ .‬ﺑﺒﺴﺎﻃﺔ ‪ ،‬ﻣﻦ ﻏﻴﺮ ﺍﻟﻤﻌﻘﻮﻝ ﻣﻘﺎﺭﻧﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﺑﻠﻐﺘﻴﻦ ﻓﻲ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﻣﻌﻴﻦ‬
‫ﻋﻨﺪﻣﺎﺗﻢ ﺗﺼﻤﻴﻢ ﺇﺣﺪﺍﻫﻤﺎ ﻟﻬﺬﺍ ﺍﻟﺘﻄﺒﻴﻖ ﻭﺍﻷﺧﺮﻯ ﻟﻢ ﻳﺘﻢ ﺗﺼﻤﻴﻤﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺗﺨﺘﻠﻒﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ (‪ Visual BASIC )VB‬ﻭ ‪ C‬ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻹﻧﺸﺎء ﺑﺮﻧﺎﻣﺞ ﻳﺤﺘﻮﻱ ﻋﻠﻰ‬
‫ﻭﺍﺟﻬﺔﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻌﺘﺒﺮ ‪ VB‬ﻣﺜﺎﻟﻴﺎً ﻟﻬﺎ‪ .‬ﻛﻤﺎ ﺃﻥ ﻛﺘﺎﺑﺎﺗﻬﻢ ﻣﺨﺘﻠﻔﺔ ﺗﻤﺎﻣﺎً ﻋﻦ‬
‫ﺑﺮﺍﻣﺞﺃﻧﻈﻤﺔ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﻣﺜﻞ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﺍﻟﺬﻱ ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺳﻲ ﻣﻦ ﺃﺟﻠﻪ‪.‬‬

‫ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺃﻫﻢ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺍﻟﻠﻐﺔ‪.‬‬

‫‪1.3.2.1‬ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺎﻣﺪ‬
‫ﺇﺫﺍﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ‪ ،‬ﻓﻘﺪ ﻻ ﻳﻜﻮﻥ ﺑﻌﺾ‬
‫ﺍﻟﻤﺒﺮﻣﺠﻴﻦﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﻬﺎ ﺟﻤﻴﻌﺎً‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﻤﻮﻗﻒ ﺇﻟﻰ ﺇﺳﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺑﻌﺾ‬
‫ﺍﻟﻤﻴﺰﺍﺕﻭﺇﺳﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺧﺮﻯ ﻗﺪ ﺗﻜﻮﻥ ﺇﻣﺎ ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﺃﻭ ﺃﻛﺜﺮ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪14‬‬

‫ﻛﻔﺎءﺓ ‪،‬ﺃﻭ ﻛﻠﻴﻬﻤﺎ ‪ ،‬ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ‪ .‬ﻗﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ‪ ،‬ﻛﻤﺎ ﺃﺷﺎﺭ (‪، Hoare )1973‬‬
‫ﺍﺳﺘﺨﺪﺍﻡﻣﻴﺰﺍﺕ ﻏﻴﺮ ﻣﻌﺮﻭﻓﺔ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺨﻄﺄ ‪ ،‬ﻣﻊ ﻧﺘﺎﺉﺞ ﻏﺮﻳﺒﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ﻋﺪﺩﺍً ﺃﻗﻞ ﻣﻦ‬
‫ﺍﻟﺘﺮﻛﻴﺒﺎﺕﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻣﺘﺴﻘﺔ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﻟﻠﺠﻤﻊ ﺑﻴﻨﻬﺎ )ﺃﻱ ﺍﻟﺘﻌﺎﻣﺪ( ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ﻣﻦ‬
‫ﻣﺠﺮﺩﻭﺟﻮﺩ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ‪ .‬ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﺗﺼﻤﻴﻢ ﺣﻞ ﻟﻤﺸﻜﻠﺔ ﻣﻌﻘﺪﺓ ﺑﻌﺪ ﺗﻌﻠﻢ‬
‫ﻣﺠﻤﻮﻋﺔﺑﺴﻴﻄﺔ ﻓﻘﻂ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ‪.‬‬

‫ﻣﻦﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺍﻹﻓﺮﺍﻁ ﻓﻲ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﻹﺿﺮﺍﺭ ﺑﺎﻟﻜﺘﺎﺑﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻻ ﻳﺘﻢ‬
‫ﺍﻛﺘﺸﺎﻑﺍﻷﺧﻄﺎء ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﺃﻱ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ﺗﻘﺮﻳﺒﺎً ﻗﺎﻧﻮﻧﻴﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻥ‬
‫ﻳﺆﺩﻱﻫﺬﺍ ﺇﻟﻰ ﺳﺨﺎﻓﺎﺕ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻦ ﻟﻠﻤﺘﺮﺟﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ‪.‬‬

‫‪1.3.2.2‬ﺩﻋﻢ ﺍﻟﺘﺠﺮﻳﺪ‬
‫ﺑﺎﺧﺘﺼﺎﺭ‪،‬ﺍﻟﺘﺠﺮﻳﺪﺗﻌﻨﻲ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﺛﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻬﻴﺎﻛﻞ ﺃﻭ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻌﻘﺪﺓ ﺑﻄﺮﻕ‬
‫ﺗﺴﻤﺢﺑﺘﺠﺎﻫﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺎﺻﻴﻞ‪ .‬ﺍﻟﺘﺠﺮﻳﺪ ﻫﻮ ﻣﻔﻬﻮﻡ ﺭﺉﻴﺴﻲ ﻓﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻌﺎﺻﺮﺓ‪.‬ﻫﺬﺍ ﺍﻧﻌﻜﺎﺱ ﻟﻠﺪﻭﺭ ﺍﻟﻤﺮﻛﺰﻱ ﺍﻟﺬﻱ ﻳﻠﻌﺒﻪ ﺍﻟﺘﺠﺮﻳﺪ ﻓﻲ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﺤﺪﻳﺜﺔ‪.‬ﻟﺬﺍ ﻓﺈﻥ ﺩﺭﺟﺔ ﺍﻟﺘﺠﺮﻳﺪ ﺍﻟﺘﻲ ﺗﺴﻤﺢ ﺑﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻭﻃﺒﻴﻌﻴﺔ ﺗﻌﺒﻴﺮﻫﺎ ﻣﻬﻤﺎﻥ ﻟﻜﺘﺎﺑﺘﻬﺎ‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﺪﻋﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﺉﺘﻴﻦ ﻣﺘﻤﻴﺰﺗﻴﻦ ﻣﻦ ﺍﻟﺘﺠﺮﻳﺪ ﻭﺍﻟﻌﻤﻠﻴﺔ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫ﻣﺜﺎﻝﺑﺴﻴﻂ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﺮﻳﺪ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻟﺘﻨﻔﻴﺬ ﺧﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﻔﺮﺯ‬
‫ﺍﻟﻤﻄﻠﻮﺑﺔﻋﺪﺓ ﻣﺮﺍﺕ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺑﺪﻭﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ‪ ،‬ﻳﺠﺐ ﺗﻜﺮﺍﺭ ﺭﻣﺰ ﺍﻟﻔﺮﺯ ﻓﻲ ﺟﻤﻴﻊ‬
‫ﺍﻷﻣﺎﻛﻦﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻴﻬﺎ ﻣﻄﻠﻮﺑﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻃﻮﻝ ﺑﻜﺜﻴﺮ ﻭﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻜﺘﺎﺑﺔ‪.‬‬
‫ﺭﺑﻤﺎﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﺇﺫﺍ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ‪ ،‬ﻓﺴﻴﺘﻢ ﺗﺸﻮﻳﺶ ﺍﻟﻜﻮﺩ ﺍﻟﺬﻱ‬
‫ﺍﺳﺘﺨﺪﻡﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻟﻠﻔﺮﺯ ﺑﺘﻔﺎﺻﻴﻞ ﺧﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﻔﺮﺯ ‪ ،‬ﻣﻤﺎ ﻳﺆﺩﻱ ﺇﻟﻰ ﺣﺠﺐ ﺍﻟﺘﺪﻓﻖ‬
‫ﻭﺍﻟﻬﺪﻑﺍﻟﻌﺎﻡ ﻟﻬﺬﺍ ﺍﻟﺮﻣﺰ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ‪.‬‬

‫ﻛﻤﺜﺎﻝﻋﻠﻰ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺷﺠﺮﺓ ﺛﻨﺎﺉﻴﺔ ﺗﺨﺰﻥ ﺑﻴﺎﻧﺎﺕ ﻋﺪﺩ ﺻﺤﻴﺢ‬
‫ﻓﻲﻋﻘﺪﻫﺎ‪ .‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺸﺠﺮﺓ ﺍﻟﺜﻨﺎﺉﻴﺔ ﺑﻠﻐﺔ ﻻ ﺗﺪﻋﻢ ﺍﻟﻤﺆﺷﺮﺍﺕ ﻭﺇﺩﺍﺭﺓ‬
‫ﺍﻟﺘﺨﺰﻳﻦﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻛﻮﻣﺔ ‪ ،‬ﻣﺜﻞ ‪ ، Fortran 77‬ﻣﺜﻞ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎﺕ ﺃﻋﺪﺍﺩ‬
‫ﺻﺤﻴﺤﺔﻣﺘﻮﺍﺯﻳﺔ ‪ ،‬ﺣﻴﺚ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻛﻨﺼﻮﺹ ﻓﺮﻋﻴﺔ ﻟﺘﺤﺪﻳﺪ‬
‫ﻋﻘﺪﺍﻟﻨﺴﻞ‪ .‬ﻓﻲ ‪ ++ C‬ﻭ ‪ ، Java‬ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻷﺷﺠﺎﺭ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﺠﺮﻳﺪ ﻋﻘﺪﺓ ﺷﺠﺮﺓ ﻓﻲ‬
‫ﺷﻜﻞﻓﺉﺔ ﺑﺴﻴﻄﺔ ﻣﻊ ﻣﺆﺷﺮﻳﻦ )ﺃﻭ ﻣﺮﺍﺟﻊ( ﻭﻋﺪﺩ ﺻﺤﻴﺢ‪ .‬ﺇﻥ ﻃﺒﻴﻌﻴﺔ ﺍﻟﺘﻤﺜﻴﻞ ﺍﻷﺧﻴﺮ ﺗﺠﻌﻞ‬
‫ﻛﺘﺎﺑﺔﺑﺮﻧﺎﻣﺞ ﻳﺴﺘﺨﺪﻡ ﺍﻷﺷﺠﺎﺭ ﺍﻟﺜﻨﺎﺉﻴﺔ ﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺃﺳﻬﻞ ﺑﻜﺜﻴﺮ ﻣﻦ ﻛﺘﺎﺑﺔ ﻭﺍﺣﺪﺓ ﻓﻲ ‪77‬‬
‫‪ .Fortran‬ﺇﻧﻬﺎ ﻣﺴﺄﻟﺔ ﺑﺴﻴﻄﺔ ﺗﺘﻌﻠﻖ ﺑﻤﺠﺎﻝ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺃﻗﺮﺏ ﺇﻟﻰ ﻣﺠﺎﻝ‬
‫ﺍﻟﻤﺸﻜﻠﺔ‪.‬‬

‫ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻟﺪﻋﻢ ﺍﻟﻌﺎﻡ ﻟﻠﺘﺠﺮﻳﺪ ﻫﻮ ﻋﺎﻣﻞ ﻣﻬﻢ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻟﻠﻐﺔ‪.‬‬

‫‪1.3.2.3‬ﺍﻟﺘﻌﺒﻴﺮﻳﺔ‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﺸﻴﺮ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻋﺪﺓ ﺧﺼﺎﺉﺺ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻓﻲ ﻟﻐﺔ ﻣﺜﻞ (‪Rose ، 1976‬‬
‫‪ ، APL )Gilman and‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﻫﻨﺎﻙ ﻋﻮﺍﻣﻞ ﺗﺸﻐﻴﻞ ﻗﻮﻳﺔ ﺟﺪﺍً ﺗﺴﻤﺢ ﺑﺈﻧﺠﺎﺯ ﻗﺪﺭ ﻛﺒﻴﺮ‬
‫ﻣﻦﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‬
‫‪15‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﻣﻊﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ﺟﺪﺍً‪ .‬ﻭﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺷﻴﻮﻋﺎً ‪ ،‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﻠﻐﺔ ﻟﺪﻳﻬﺎ ﻃﺮﻕ ﻣﻼﺉﻤﺔ ﻧﺴﺒﻴﺎً ‪،‬‬
‫ﻭﻟﻴﺴﺖﻣﺮﻫﻘﺔ ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺍﻟﺤﺴﺎﺑﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ‪ ، C‬ﺍﻟﺘﺮﻣﻴﺰﺍﻟﻌﺪ ‪++‬ﻫﻮ ﺃﻛﺜﺮ‬
‫ﻣﻼءﻣﺔﻭﺃﻗﺼﺮ ﻣﻦﺍﻟﻌﺪ = ﺍﻟﻌﺪ ‪.1 +‬ﺃﻳﻀﺎ ‪،‬ﻭﺛﻢﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﻤﻨﻄﻘﻲ ﻓﻲ ‪ Ada‬ﻫﻮ ﻃﺮﻳﻘﺔ‬
‫ﻣﻼﺉﻤﺔﻟﺘﺤﺪﻳﺪ ﺗﻘﻴﻴﻢ ﺍﻟﺪﺍﺉﺮﺓ ﺍﻟﻘﺼﻴﺮﺓ ﻟﻠﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ‪ .‬ﺇﺩﺭﺍﺝ ﻣﻠﻒﻝﺍﻟﻌﺒﺎﺭﺓ ﻓﻲ ‪Java‬‬
‫ﺗﺠﻌﻞﻛﺘﺎﺑﺔ ﺣﻠﻘﺎﺕ ﺍﻟﻌﺪ ﺃﺳﻬﻞ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡﺑﻴﻨﻤﺎ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﻣﻤﻜﻦ ﺃﻳﻀﺎً‪ .‬ﻛﻞ ﻫﺬﺍ ﻳﺰﻳﺪ ﻣﻦ‬
‫ﻗﺎﺑﻠﻴﺔﺍﻟﻜﺘﺎﺑﺔ ﻟﻠﻐﺔ‪.‬‬

‫‪1.3.3‬ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‬
‫ﻳﻘُﺎﻝﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﻤﻜﻦ ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻴﻪ ﺇﺫﺍ ﻛﺎﻥ ﻳﻌﻤﻞ ﻭﻓﻘﺎً ﻟﻤﻮﺍﺻﻔﺎﺗﻪ ﻓﻲ ﻇﻞ ﺟﻤﻴﻊ ﺍﻟﻈﺮﻭﻑ‪.‬‬
‫ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻣﻮﺛﻮﻗﻴﺔ‬
‫ﺍﻟﺒﺮﺍﻣﺞﻓﻲ ﻟﻐﺔ ﻣﻌﻴﻨﺔ‪.‬‬

‫‪1.3.3.1‬ﻓﺤﺺ ﺍﻟﻨﻮﻉ‬
‫ﻓﺤﺺﺍﻟﻨﻮﻉﻫﻮ ﻣﺠﺮﺩ ﺍﺧﺘﺒﺎﺭ ﻷﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻣﻌﻴﻦ ‪ ،‬ﺇﻣﺎ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻭ ﺃﺛﻨﺎء‬
‫ﺗﻨﻔﻴﺬﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﻌﺪ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﻣﻮﺛﻮﻗﻴﺔ ﺍﻟﻠﻐﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﻓﺤﺺ ﻧﻮﻉ ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞﻣﻜﻠﻒ ‪ ،‬ﻓﺈﻥ ﻓﺤﺺ ﻧﻮﻉ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ﺃﻛﺜﺮ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ‬
‫ﺍﻛﺘﺸﺎﻑﺍﻷﺧﻄﺎء ﺍﻟﺴﺎﺑﻘﺔ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻓﻜﻠﻤﺎ ﻛﺎﻥ ﺇﺟﺮﺍء ﺍﻹﺻﻼﺣﺎﺕ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺃﻗﻞ ﺗﻜﻠﻔﺔ‪.‬‬
‫ﻳﺘﻄﻠﺐﺗﺼﻤﻴﻢ ‪ Java‬ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻧﻮﺍﻉ ﺟﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺗﻘﺮﻳﺒﺎً ﻓﻲ ﻭﻗﺖ‬
‫ﺍﻟﺘﺮﺟﻤﺔ‪.‬ﻫﺬﺍ ﻳﻘﻀﻲ ﻓﻌﻠﻴﺎً ﻋﻠﻰ ﺃﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺑﺮﺍﻣﺞ ‪ .Java‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻨﻮﻉ ﺑﻌﻤﻖ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.6‬‬

‫ﺃﺣﺪﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﻛﻴﻔﻴﺔ ﻓﺸﻞ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﺳﻮﺍء ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ ﺃﻭ ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞ ‪،‬ﺃﺩﻯ ﺇﻟﻰ ﺃﺧﻄﺎء ﺑﺮﻧﺎﻣﺞ ﻻ ﺣﺼﺮ ﻟﻬﺎ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻌﻠﻤﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻓﻲ ﻟﻐﺔ‬
‫‪ C‬ﺍﻷﺻﻠﻴﺔ )‪ .(Kernighan and Ritchie ، 1978‬ﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ‬
‫ﺍﻟﻤﻌﻠﻤﺔﺍﻟﻔﻌﻠﻴﺔ ﻓﻲ ﺍﺳﺘﺪﻋﺎء ﺩﺍﻟﺔ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻧﻮﻋﻬﺎ ﻳﻄﺎﺑﻖ ﻧﻮﻉ ﺍﻟﻤﻌﻠﻤﺔ ﺍﻟﺮﺳﻤﻴﺔ‬
‫ﺍﻟﻤﻘﺎﺑﻠﺔﻓﻲ ﺍﻟﻮﻇﻴﻔﺔ‪ .‬ﺍﻥ‪int‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﻐﻴﺮ ﺍﻟﻨﻮﻉ ﻛﻤﻌﺎﻣﻞ ﻓﻌﻠﻲ ﻓﻲ ﺍﺳﺘﺪﻋﺎء ﺩﺍﻟﺔ‬
‫ﺗﺘﻮﻗﻊ‪a‬ﻳﻄﻔﻮﺍﻛﺘﺐ ﻛﻤﻌﺎﻣﻞ ﺭﺳﻤﻲ ‪ ،‬ﻭﻟﻦ ﻳﻜﺘﺸﻒ ﺍﻟﻤﺘﺮﺟﻢ ﻭﻻ ﻧﻈﺎﻡ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻋﺪﻡ‬
‫ﺍﻻﺗﺴﺎﻕ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ ﺳﻠﺴﻠﺔ ﺍﻟﺒﺖ ﺍﻟﺘﻲ ﺗﻤﺜﻞ ﺍﻟﻌﺪﺩ ﺍﻟﺼﺤﻴﺢ ‪ 23‬ﻏﻴﺮ‬
‫ﻣﺮﺗﺒﻄﺔﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﺑﺴﻠﺴﻠﺔ ﺍﻟﺒﺖ ﺍﻟﺘﻲ ﺗﻤﺜﻞ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ‪ ، 23‬ﺇﺫﺍ ﺗﻢ ﺇﺭﺳﺎﻝ ﻋﺪﺩ‬
‫ﺻﺤﻴﺢ‪ 23‬ﺇﻟﻰ ﺩﺍﻟﺔ ﺗﺘﻮﻗﻊ ﻣﻌﻠﻤﺔ ﻓﺎﺻﻠﺔ ﻋﺎﺉﻤﺔ ‪ ،‬ﻓﺈﻥ ﺃﻱ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﻟﻠﻤﻌﺎﻣﻞ ﻓﻲ ﺳﺘﻨﺘﺞ‬
‫ﺍﻟﻮﻇﻴﻔﺔﻫﺮﺍء‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺼﻌﺐ ﺗﺸﺨﻴﺺ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻼﺕ‪3.‬ﻟﻘﺪ ﻗﻀﻰ‬
‫ﺍﻹﺻﺪﺍﺭﺍﻟﺤﺎﻟﻲ ﻣﻦ ‪ C‬ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﻃﻠﺐ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﺟﻤﻴﻊ ﺍﻟﻤﻌﻠﻤﺎﺕ‪.‬‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﻭﺗﻘﻨﻴﺎﺕ ﺗﺠﺎﻭﺯ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.9‬‬

‫‪.3‬ﺭﺩﺍ ًﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻭﻏﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ﺍﻟﻤﺸﺎﺑﻬﺔ ‪ ،‬ﺗﺘﻀﻤﻦ ﺃﻧﻈﻤﺔ ‪ UNIX‬ﺑﺮﻧﺎﻣﺞ ﻓﺎﺉﺪﺓ ﻣﺴﻤﻰﺍﻟﻮﺑﺮ‬
‫ﻳﻘﻮﻡﺑﻔﺤﺺ ﺑﺮﺍﻣﺞ ‪ C‬ﺑﺤﺜﺎً ﻋﻦ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻼﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪16‬‬

‫‪1.3.3.2‬ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ‬
‫ﺇﻥﻗﺪﺭﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺍﻋﺘﺮﺍﺽ ﺃﺧﻄﺎء ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ )ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻈﺮﻭﻑ ﻏﻴﺮ ﺍﻟﻌﺎﺩﻳﺔ‬
‫ﺍﻷﺧﺮﻯﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺍﻛﺘﺸﺎﻓﻬﺎ( ‪ ،‬ﻭﺍﺗﺨﺎﺫ ﺍﻹﺟﺮﺍءﺍﺕ ﺍﻟﺘﺼﺤﻴﺤﻴﺔ ‪ ،‬ﺛﻢ ﺍﻟﻤﺘﺎﺑﻌﺔ ﻫﻲ‬
‫ﻣﺴﺎﻋﺪﺓﻭﺍﺿﺤﺔ ﻟﻠﻮﺛﻮﻗﻴﺔ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎء‪ .‬ﺗﺘﻀﻤﻦ ‪ Ada‬ﻭ ‪ ++ C‬ﻭ ‪Java‬‬
‫ﻭ‪ # C‬ﺇﻣﻜﺎﻧﺎﺕ ﻭﺍﺳﻌﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ‪ ،‬ﻭﻟﻜﻦ ﻫﺬﻩ ﺍﻟﺘﺴﻬﻴﻼﺕ ﻏﻴﺮ ﻣﻮﺟﻮﺩﺓ ﻋﻤﻠﻴﺎً‬
‫ﻓﻲﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ‪ C‬ﻭ ‪ .Fortran‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.14‬‬

‫‪1.3.3.3‬ﺍﻟﺘﻌﺮﺝ‬
‫ﺗﻌﺮﻳﻔﻬﺎﺑﺸﻜﻞ ﻋﺎﻡ‪،‬ﺍﺳﻢ ﻣﺴﺘﻌﺎﺭﻫﻮ ﻭﺟﻮﺩ ﺍﺳﻤﻴﻦ ﻣﻤﻴﺰﻳﻦ ﺃﻭ ﺃﻛﺜﺮ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﻤﺎ‬
‫ﻟﻠﻮﺻﻮﻝﺇﻟﻰ ﺧﻠﻴﺔ ﺍﻟﺬﺍﻛﺮﺓ ﻧﻔﺴﻬﺎ‪ .‬ﻣﻦ ﺍﻟﻤﻘﺒﻮﻝ ﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺍﻻﺳﻢ ﺍﻟﻤﺴﺘﻌﺎﺭ ﻫﻮ‬
‫ﻣﻴﺰﺓﺧﻄﻴﺮﺓ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺗﺴﻤﺢ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻨﻮﻉ ﻣﻦ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ ‪ -‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﻣﺆﺷﺮﻳﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﻧﻔﺲ ﺍﻟﻤﺘﻐﻴﺮ ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﻣﻤﻜﻦ ﻓﻲ ﻣﻌﻈﻢ‬
‫ﺍﻟﻠﻐﺎﺕ‪.‬ﻓﻲ ﻣﺜﻞ ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﺘﺬﻛﺮ ﺍﻟﻤﺒﺮﻣﺞ ﺩﺍﺉﻤﺎً ﺃﻥ ﺗﻐﻴﻴﺮ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻳﺸﻴﺮ‬
‫ﺇﻟﻴﻬﺎﺃﺣﺪﻫﻤﺎ ﻳﻐﻴﺮ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻳﺸﻴﺮ ﺇﻟﻴﻬﺎ ﺍﻵﺧﺮ‪ .‬ﻳﻤﻜﻦ ﺣﻈﺮ ﺑﻌﺾ ﺃﻧﻮﺍﻉ ﺍﻟﺘﺸﻮﻳﺶ ‪ ،‬ﻛﻤﺎ ﻫﻮ‬
‫ﻣﻮﺿﺢﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ ‪ 5‬ﻭ ‪ 9‬ﺑﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪.‬‬

‫ﻓﻲﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ ﻟﻠﺘﻐﻠﺐ ﻋﻠﻰ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﻓﻲ ﻣﺮﺍﻓﻖ‬
‫ﺗﺠﺮﻳﺪﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺔ‪ .‬ﺗﻌﻤﻞ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻋﻠﻰ ﺗﻘﻴﻴﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ‬
‫ﺑﺸﻜﻞﻛﺒﻴﺮ ﻟﺰﻳﺎﺩﺓ ﻣﻮﺛﻮﻗﻴﺘﻬﺎ‪.‬‬

‫‪1.3.3.4‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ‬


‫ﻛﻞﻣﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﺗﺆﺛﺮ ﻋﻠﻰ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪ .‬ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﻜﺘﻮﺏ ﺑﻠﻐﺔ ﻻ ﺗﺪﻋﻢ ﺍﻟﻄﺮﻕ‬
‫ﺍﻟﻄﺒﻴﻌﻴﺔﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺳﻴﺴﺘﺨﺪﻡ ﺑﺎﻟﻀﺮﻭﺭﺓ ﻣﻨﺎﻫﺞ ﻏﻴﺮ ﻃﺒﻴﻌﻴﺔ‪ .‬ﻣﻦ ﻏﻴﺮ‬
‫ﺍﻟﻤﺮﺟﺢﺃﻥ ﺗﻜﻮﻥ ﺍﻷﺳﺎﻟﻴﺐ ﻏﻴﺮ ﺍﻟﻄﺒﻴﻌﻴﺔ ﺻﺤﻴﺤﺔ ﻓﻲ ﺟﻤﻴﻊ ﺍﻟﻤﻮﺍﻗﻒ ﺍﻟﻤﻤﻜﻨﺔ‪ .‬ﻛﻠﻤﺎ ﻛﺎﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺃﺳﻬﻞ ﻓﻲ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﺯﺍﺩﺕ ﺍﺣﺘﻤﺎﻟﻴﺔ ﺻﺤﺘﻪ‪.‬‬

‫ﺗﺆﺛﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻠﻰ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻓﻲ ﻣﺮﺣﻠﺘﻲ ﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﺼﻴﺎﻧﺔ ﻟﺪﻭﺭﺓ ﺍﻟﺤﻴﺎﺓ‪ .‬ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﺘﻲﻳﺼﻌﺐ ﻗﺮﺍءﺗﻬﺎ ﻳﺼﻌﺐ ﻛﺘﺎﺑﺘﻬﺎ ﻭﺗﻌﺪﻳﻠﻬﺎ‪.‬‬

‫‪1.3.4‬ﺍﻟﺘﻜﻠﻔﺔ‬
‫ﺍﻟﺘﻜﻠﻔﺔﺍﻹﺟﻤﺎﻟﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺩﺍﻟﺔ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺧﺼﺎﺉﺼﻬﺎ‪.‬‬

‫ﺃﻭﻻ ً‪،‬ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺗﺪﺭﻳﺐ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﻫﻲ ﺩﺍﻟﺔ ﻋﻠﻰ ﺑﺴﺎﻃﺔ ﺍﻟﻠﻐﺔ‬
‫ﻭﺗﻌﺎﻣﺪﻫﺎﻭﺧﺒﺮﺓ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﻗﻮﺓ ﻟﻴﺴﺖ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺃﻛﺜﺮ‬
‫ﺻﻌﻮﺑﺔﻓﻲ ﺍﻟﺘﻌﻠﻢ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻛﺬﻟﻚ‪.‬‬

‫ﺛﺎﻧﻴﺎً ‪،‬ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ‪ .‬ﻫﺬﻩ ﻫﻲ ﻭﻇﻴﻔﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻠﻐﺔ ﻟﻠﻜﺘﺎﺑﺔ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﺗﻌﺘﻤﺪﺟﺰﺉﻴﺎً ﻋﻠﻰ ﻗﺮﺑﻬﺎ ﻓﻲ ﺍﻟﻐﺮﺽ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﻌﻴﻦ‪ .‬ﺍﻟﺠﻬﻮﺩ ﺍﻷﺻﻠﻴﺔ ﻟﺘﺼﻤﻴﻢ ﻭ‬
‫‪17‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﺗﻨﻔﻴﺬﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻛﺎﻧﺖ ﻣﺪﻓﻮﻋﺔ ﺑﺎﻟﺮﻏﺒﺔ ﻓﻲ ﺧﻔﺾ ﺗﻜﺎﻟﻴﻒ ﺇﻧﺸﺎء ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬

‫ﻳﻤﻜﻦﺗﻘﻠﻴﻞ ﻛﻞ ﻣﻦ ﺗﻜﻠﻔﺔ ﺗﺪﺭﻳﺐ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺗﻜﻠﻔﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻠﻐﺔ ﻣﺎ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‬
‫ﻓﻲﺑﻴﺉﺔ ﺑﺮﻣﺠﺔ ﺟﻴﺪﺓ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻘﺴﻢ ‪.1.8‬‬

‫ﺛﺎﻟﺜﺎً ‪،‬ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺗﺮﺟﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ‪ .‬ﻛﺎﻥ ﺍﻟﻌﺎﺉﻖ ﺍﻟﺮﺉﻴﺴﻲ ﺃﻣﺎﻡ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺒﻜﺮ‬
‫ﻟـ‪ Ada‬ﻫﻮ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﺒﺎﻫﻈﺔ ﻟﺘﺸﻐﻴﻞ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻣﻦ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ‪ .Ada‬ﺗﻢ ﺗﻘﻠﻴﻞ‬
‫ﻫﺬﻩﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﻇﻬﻮﺭ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ‪ Ada‬ﺍﻟﻤﺤﺴﻨّﺔ‪.‬‬

‫ﺭﺍﺑﻌﺎً ‪،‬ﺗﺘﺄﺛﺮ ﺗﻜﻠﻔﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﻣﺎ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﺑﺘﺼﻤﻴﻢ ﺗﻠﻚ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﺳﺘﻤﻨﻊﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺘﻄﻠﺐ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕﺍﻟﺒﺮﻣﺠﻴﺔ ﺑﺴﺮﻋﺔ ‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺟﻮﺩﺓ ﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻛﻔﺎءﺓ ﺍﻟﺘﻨﻔﻴﺬ‬
‫ﻛﺎﻧﺖﺍﻟﺸﻐﻞ ﺍﻟﺸﺎﻏﻞ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺒﻜﺮﺓ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﺗﻌﺘﺒﺮ ﺍﻵﻥ ﺃﻗﻞ ﺃﻫﻤﻴﺔ‪.‬‬

‫ﻳﻤﻜﻦﺇﺟﺮﺍء ﻣﻔﺎﺿﻠﺔ ﺑﺴﻴﻄﺔ ﺑﻴﻦ ﺗﻜﻠﻔﺔ ﺍﻟﺘﺮﺟﻤﺔ ﻭﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺘﺮﺟﻢ‪.‬ﺗﺤﺴﻴﻦ‬
‫ﻫﻮﺍﻻﺳﻢ ﺍﻟﺬﻱ ﻳﻄﻠﻖ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﺘﻲ ﻗﺪ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺍﻟﻤﺘﺮﺟﻤﻮﻥ ﻟﺘﻘﻠﻴﻞ ﺍﻟﺤﺠﻢ ﻭ‬
‫‪ /‬ﺃﻭ ﺯﻳﺎﺩﺓ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﻳﻨﺘﺠﻮﻧﻬﺎ‪ .‬ﺇﺫﺍ ﺗﻢ ﺇﺟﺮﺍء ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﺤﺴﻴﻦ ﺃﻭ ﻟﻢ ﻳﺘﻢ‬
‫ﺇﺟﺮﺍءﺃﻱ ﺗﺤﺴﻴﻦ ‪ ،‬ﻓﻴﻤﻜﻦ ﺇﺟﺮﺍء ﺍﻟﺘﺠﻤﻴﻊ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﺑﻜﺜﻴﺮ ﻣﻤﺎ ﻟﻮ ﺗﻢ ﺑﺬﻝ ﺟﻬﺪ ﻛﺒﻴﺮ ﻹﻧﺘﺎﺝ‬
‫ﻛﻮﺩﻣﺤﺴﻦ‪ .‬ﻳﺘﺄﺛﺮ ﺍﻻﺧﺘﻴﺎﺭ ﺑﻴﻦ ﺍﻟﺒﺪﻳﻠﻴﻦ ﺑﺎﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﻓﻴﻬﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻓﻲ‬
‫ﻣﻌﻤﻞﻟﺒﺪء ﺍﻟﺒﺮﻣﺠﺔ ﻟﻠﻄﻼﺏ ‪ ،‬ﺍﻟﺬﻳﻦ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻘﻮﻣﻮﻥ ﺑﺘﺠﻤﻴﻊ ﺑﺮﺍﻣﺠﻬﻢ ﻋﺪﺓ ﻣﺮﺍﺕ ﺃﺛﻨﺎء‬
‫ﺍﻟﺘﻄﻮﻳﺮﻭﻟﻜﻨﻬﻢ ﻳﺴﺘﺨﺪﻣﻮﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ )ﺑﺮﺍﻣﺠﻬﻢ‬
‫ﺻﻐﻴﺮﺓﻭﻳﺠﺐ ﻋﻠﻴﻬﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻣﺮﺓ ﻭﺍﺣﺪﺓ ﻓﻘﻂ( ‪ ،‬ﻳﺠﺐ ﺇﺟﺮﺍء ﺍﻟﻘﻠﻴﻞ ﻣﻦ‬
‫ﺍﻟﺘﺤﺴﻴﻦﺃﻭ ﻋﺪﻡ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﻋﻠﻰ ﺍﻹﻃﻼﻕ‪ .‬ﻓﻲ ﺑﻴﺉﺔ ﺍﻹﻧﺘﺎﺝ ‪ ،‬ﺣﻴﺚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻤﺘﺮﺟﻤﺔﻋﺪﺓ ﻣﺮﺍﺕ ﺑﻌﺪ ﺍﻟﺘﻄﻮﻳﺮ ‪ ،‬ﻣﻦ ﺍﻷﻓﻀﻞ ﺩﻓﻊ ﺗﻜﻠﻔﺔ ﺇﺿﺎﻓﻴﺔ ﻟﺘﺤﺴﻴﻦ ﺍﻟﻜﻮﺩ‪.‬‬

‫ﺍﻟﻌﺎﻣﻞﺍﻟﺨﺎﻣﺲ ﻓﻲ ﺗﻜﻠﻔﺔ ﺍﻟﻠﻐﺔ ﻫﻮ ﺗﻜﻠﻔﺔ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ‪ .‬ﺃﺣﺪ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺘﻲ ﺗﻔﺴﺮ‬
‫ﺍﻟﻘﺒﻮﻝﺍﻟﺴﺮﻳﻊ ﻟـ ‪ Java‬ﻫﻮ ﺃﻥ ﺃﻧﻈﻤﺔ ﺍﻟﻤﺘﺮﺟﻢ ‪ /‬ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ ﺃﺻﺒﺤﺖ ﻣﺘﺎﺣﺔ ﻟﻬﺎ ﺑﻌﺪ ﻭﻗﺖ‬
‫ﻗﺼﻴﺮﻣﻦ ﺇﺻﺪﺍﺭ ﺗﺼﻤﻴﻤﻬﺎ‪ .‬ﺳﻴﻜﻮﻥ ﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﻧﻈﺎﻡ ﺗﻨﻔﻴﺬﻫﺎ ﺑﺎﻫﻆ ﺍﻟﺜﻤﻦ ﺃﻭ ﻳﻌﻤﻞ ﻓﻘﻂ‬
‫ﻋﻠﻰﺃﺟﻬﺰﺓ ﺑﺎﻫﻈﺔ ﺍﻟﺜﻤﻦ ﻓﺮﺻﺔ ﺃﻗﻞ ﺑﻜﺜﻴﺮ ﻓﻲ ﺃﻥ ﺗﺼﺒﺢ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺳﺎﻋﺪﺕ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻟﻤﺠﻤﻌﻲ ‪ Ada‬ﻣﻦ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻓﻲ ﻣﻨﻊ ‪ Ada‬ﻣﻦ ﺃﻥ‬
‫ﺗﺼﺒﺢﺷﺎﺉﻌﺔ ﻓﻲ ﺃﻳﺎﻣﻬﺎ ﺍﻷﻭﻟﻰ‪.‬‬

‫ﺳﺎﺩﺳﺎ ً‪،‬ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺿﻌﻒ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪ .‬ﺇﺫﺍ ﻓﺸﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻧﻈﺎﻡ ﺣﺮﺝ ‪ ،‬ﻣﺜﻞ ﻣﺤﻄﺔ‬
‫ﻟﻠﻄﺎﻗﺔﺍﻟﻨﻮﻭﻳﺔ ﺃﻭ ﺟﻬﺎﺯ ﺍﻷﺷﻌﺔ ﺍﻟﺴﻴﻨﻴﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺒﻲ ‪ ،‬ﻓﻘﺪ ﺗﻜﻮﻥ ﺍﻟﺘﻜﻠﻔﺔ ﻋﺎﻟﻴﺔ ﺟﺪﺍً‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﻳﻜﻮﻥ ﻓﺸﻞ ﺍﻷﻧﻈﻤﺔ ﻏﻴﺮ ﺍﻟﺤﺮﺟﺔ ﺃﻳﻀﺎً ﻣﻜﻠﻔﺎً ﻟﻠﻐﺎﻳﺔ ﻣﻦ ﺣﻴﺚ ﻓﻘﺪﺍﻥ ﺍﻷﻋﻤﺎﻝ ﺃﻭ‬
‫ﺍﻟﺪﻋﺎﻭﻯﺍﻟﻘﻀﺎﺉﻴﺔ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒﻞ ﺑﺴﺒﺐ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻌﻴﺒﺔ‪.‬‬
‫ﺍﻻﻋﺘﺒﺎﺭﺍﻷﺧﻴﺮ ﻫﻮ ﺗﻜﻠﻔﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﻛﻼ ًﻣﻦ ﺍﻟﺘﺼﺤﻴﺤﺎﺕ ﻭﺍﻟﺘﻌﺪﻳﻼﺕ‬
‫ﻹﺿﺎﻓﺔﻭﻇﺎﺉﻒ ﺟﺪﻳﺪﺓ‪ .‬ﺗﻌﺘﻤﺪ ﺗﻜﻠﻔﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﻋﺪﺩ ﻣﻦ ﺧﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﻫﻲ‬
‫ﻗﺎﺑﻠﻴﺔﺍﻟﻘﺮﺍءﺓ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺼﻴﺎﻧﺔ ﻳﺘﻢ ﺇﺟﺮﺍﺅﻫﺎ ﻏﺎﻟﺒﺎً ﺑﻮﺍﺳﻄﺔ ﺃﻓﺮﺍﺩ ﺑﺨﻼﻑ‬
‫ﺍﻟﻤﺆﻟﻒﺍﻷﺻﻠﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻓﺈﻥ ﺿﻌﻒ ﺍﻟﻘﺮﺍءﺓ ﻳﻤﻜﻦ ﺃﻥ ﻳﺠﻌﻞ ﺍﻟﻤﻬﻤﺔ ﺻﻌﺒﺔ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻻﻳﻤﻜﻦ ﺍﻟﻤﺒﺎﻟﻐﺔ ﻓﻲ ﺃﻫﻤﻴﺔ ﺇﻣﻜﺎﻧﻴﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺗﺸﻴﺮ ﺍﻟﺘﻘﺪﻳﺮﺍﺕ ﺇﻟﻰ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻷﻧﻈﻤﺔﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺒﻴﺮﺓ ﺫﺍﺕ ﺍﻷﻋﻤﺎﺭ ﺍﻟﻄﻮﻳﻠﺔ ﻧﺴﺒﻴﺎً ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﻞ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺼﻴﺎﻧﺔ ﺇﻟﻰ‬
‫ﺿﻌﻔﻴﻦﺇﻟﻰ ﺃﺭﺑﻌﺔ ﺃﺿﻌﺎﻑ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺘﻄﻮﻳﺮ )‪.(Sommerville ، 2005‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪18‬‬

‫ﻣﻦﺑﻴﻦ ﺟﻤﻴﻊ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻤﺴﺎﻫﻤﺔ ﻓﻲ ﺗﻜﺎﻟﻴﻒ ﺍﻟﻠﻐﺔ ‪ ،‬ﻫﻨﺎﻙ ﺛﻼﺛﺔ ﻋﻮﺍﻣﻞ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ‪:‬‬
‫ﺗﻄﻮﻳﺮﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻭﺍﻟﺼﻴﺎﻧﺔ ‪ ،‬ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﻫﺎﺗﻴﻦ ﺍﻟﻮﻇﻴﻔﺘﻴﻦ ﻫﻤﺎ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ‬
‫ﻭﺍﻟﻘﺮﺍءﺓ ‪،‬ﻓﺈﻥ ﻣﻌﻴﺎﺭ ﺍﻟﺘﻘﻴﻴﻢ ﻫﺬﻳﻦ ﻫﻤﺎ ‪ ،‬ﺑﺪﻭﺭﻩ ‪ ،‬ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ‪.‬‬
‫ﺑﺎﻟﻄﺒﻊ ‪،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺧﺮﻯ ﻟﺘﻘﻴﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻣﺜﺎﻝ ﻭﺍﺣﺪ ﻫﻮ‬
‫ﻗﺎﺑﻠﻴﺔﺍﻟﺘﻨﻘﻞ‪ ،‬ﺃﻭ ﺍﻟﺴﻬﻮﻟﺔ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺑﻬﺎ ﻧﻘﻞ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ ﺗﻄﺒﻴﻖ ﺇﻟﻰ ﺁﺧﺮ‪ .‬ﺗﺘﺄﺛﺮ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ‬
‫ﺑﺸﺪﺓﺑﺪﺭﺟﺔ ﺗﻮﺣﻴﺪ ﺍﻟﻠﻐﺔ‪ .‬ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻣﺜﻞ ‪ ، BASIC‬ﻟﻴﺴﺖ ﻣﻮﺣﺪﺓ ﻋﻠﻰ ﺍﻹﻃﻼﻕ ‪ ،‬ﻣﻤﺎ‬
‫ﻳﺠﻌﻞﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺻﻌﺒﺔ ﻟﻠﻐﺎﻳﺔ ﻟﻼﻧﺘﻘﺎﻝ ﻣﻦ ﺗﻄﺒﻴﻖ ﺇﻟﻰ ﺁﺧﺮ‪ .‬ﺍﻟﺘﻘﻴﻴﺲ ﻋﻤﻠﻴﺔ ﺻﻌﺒﺔ‬
‫ﻭﺗﺴﺘﻐﺮﻕﻭﻗﺘﺎ ﻃﻮﻳﻼ‪ .‬ﺑﺪﺃﺕ ﻟﺠﻨﺔ ﺍﻟﻌﻤﻞ ﻋﻠﻰ ﺇﻧﺘﺎﺝ ﻧﺴﺨﺔ ﻣﻌﻴﺎﺭﻳﺔ ﻣﻦ ‪ ++ C‬ﻓﻲ ﻋﺎﻡ ‪.1989‬‬
‫ﻭﺗﻤﺖﺍﻟﻤﻮﺍﻓﻘﺔ ﻋﻠﻴﻬﺎ ﻓﻲ ﻋﺎﻡ ‪.1998‬‬

‫ﻋﻤﻮﻣﻴﺔ)ﻗﺎﺑﻠﻴﺔ ﺍﻟﺘﻄﺒﻴﻖ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ( ﻭﺩﻗﺔ ﺍﻟﺘﻌﺮﻳﻒ)ﺍﻛﺘﻤﺎﻝ‬


‫ﻭﺩﻗﺔﺍﻟﻮﺛﻴﻘﺔ ﺍﻟﺘﻌﺮﻳﻔﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻠﻐﺔ( ﻣﻌﻴﺎﺭﺍﻥ ﺁﺧﺮﺍﻥ‪.‬‬

‫ﻣﻌﻈﻢﺍﻟﻤﻌﺎﻳﻴﺮ ‪ ،‬ﺧﺎﺻﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ‪ ،‬ﻟﻴﺴﺖ ﻣﺤﺪﺩﺓ ﺑﺪﻗﺔ ﻭﻻ‬
‫ﻗﺎﺑﻠﺔﻟﻠﻘﻴﺎﺱ ﺗﻤﺎﻣﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻬﻲ ﻣﻔﺎﻫﻴﻢ ﻣﻔﻴﺪﺓ ﻭﺗﻮﻓﺮ ﺭﺅﻳﺔ ﻗﻴﻤﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﻭﺗﻘﻴﻴﻢ‬
‫ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻣﻼﺣﻈﺔﺃﺧﻴﺮﺓ ﺣﻮﻝ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﻘﻴﻴﻢ‪ :‬ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﻣﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﻣﺨﺘﻠﻒ ﻣﻦ‬
‫ﻭﺟﻬﺎﺕﻧﻈﺮ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻳﻬﺘﻢ ﺍﻟﻘﺎﺉﻤﻮﻥ ﻋﻠﻰ ﺗﻨﻔﻴﺬ ﺍﻟﻠﻐﺔ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺑﺼﻌﻮﺑﺔ ﺗﻨﻔﻴﺬ ﺑﻨﻴﺎﺕ‬
‫ﻭﻣﻴﺰﺍﺕﺍﻟﻠﻐﺔ‪ .‬ﻳﺸﻌﺮ ﻣﺴﺘﺨﺪﻣﻮ ﺍﻟﻠﻐﺔ ﺑﺎﻟﻘﻠﻖ ﺑﺸﺄﻥ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﺃﻭﻻ ًﻭﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻻﺣﻘﺎً‪.‬‬
‫ﻣﻦﺍﻟﻤﺮﺟﺢ ﺃﻥ ﻳﺆﻛﺪ ﻣﺼﻤﻤﻮ ﺍﻟﻠﻐﺔ ﻋﻠﻰ ﺍﻷﻧﺎﻗﺔ ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺟﺬﺏ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ‬
‫ﺗﺘﻌﺎﺭﺽﻫﺬﻩ ﺍﻟﺨﺼﺎﺉﺺ ﻣﻊ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ‪.‬‬

‫‪1.4‬ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺗﻠﻚ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ ، 1.3‬ﻫﻨﺎﻙ ﻋﺪﺓ ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ﺗﺆﺛﺮ ﻋﻠﻰ‬
‫ﺍﻟﺘﺼﻤﻴﻢﺍﻷﺳﺎﺳﻲ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻭﺃﻫﻤﻬﺎ ﻫﻨﺪﺳﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪1.4.1‬ﻫﻨﺪﺳﺔ ﺍﻟﺤﺎﺳﻮﺏ‬
‫ﻛﺎﻥﻟﻠﺒﻨﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺄﺛﻴﺮ ﻋﻤﻴﻖ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻣﻌﻈﻢ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻟﺸﺎﺉﻌﺔ ﻓﻲ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ ﺣﻮﻝ ﺑﻨﻴﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺴﺎﺉﺪﺓ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ‬
‫ﺍﻟﻌﻤﺎﺭﺓﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ‪ ،‬ﻋﻠﻰ ﺍﺳﻢ ﺃﺣﺪ ﻣﻨﺸﺉﻴﻬﺎ ‪ ،‬ﺟﻮﻥ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ )ﻳﻨُﻄﻖ "ﻓﻮﻥ ﻧﻮﻳﻤﺎﻥ"(‪.‬‬
‫ﺗﺴﻤﻰﻫﺬﻩ ﺍﻟﻠﻐﺎﺕﺇﻟﺰﺍﻣﻲﺍﻟﻠﻐﺎﺕ‪ .‬ﻓﻲ ﻛﻤﺒﻴﻮﺗﺮ ‪ ، von Neumann‬ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻭﺍﻟﺒﺮﺍﻣﺞﻓﻲ ﻧﻔﺲ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ )‪ ، (CPU‬ﺍﻟﺘﻲ ﺗﻨﻔﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﻣﻨﻔﺼﻠﺔ‬
‫ﻋﻦﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﺠﺐ ﻧﻘﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﺃﻭ ﻧﻘﻠﻬﺎ ﻋﺒﺮ ﺍﻷﻧﺎﺑﻴﺐ ‪ ،‬ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ‬
‫ﻭﺣﺪﺓﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ‪ .‬ﻳﺠﺐ ﺇﻋﺎﺩﺓ ﻧﺘﺎﺉﺞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻓﻲ ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ ﺇﻟﻰ‬
‫ﺍﻟﺬﺍﻛﺮﺓ‪.‬ﺗﻘﺮﻳﺒﺎً ﺟﻤﻴﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺮﻗﻤﻴﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻣﻨﺬ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ‬
‫ﺍﻟﻤﺎﺿﻲﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺑﻨﻴﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ‪ .‬ﻳﻈﻬﺮ ﺍﻟﻬﻴﻜﻞ ﺍﻟﻌﺎﻡ ﻟﺠﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ‪von Neumann‬‬
‫ﻓﻲﺍﻟﺸﻜﻞ ‪.1.1‬‬
‫‪19‬‬ ‫‪1.4‬ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﺍﻟﺸﻜﻞ‪1.1‬‬
‫ﻓﻮﻥﻧﻴﻮﻣﺎﻥ‬
‫ﺍﻟﺬﺍﻛﺮﺓ)ﺗﺨﺰﻳﻦ ﻛﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ(‬ ‫ﻫﻨﺪﺳﺔﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬

‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕﻭﺍﻟﺒﻴﺎﻧﺎﺕ‬ ‫ﻧﺘﺎﺉﺞ‬
‫ﻋﻤﻠﻴﺎﺕ‬

‫ﻳﺘﺤﻜﻢ‬ ‫ﺍﻟﺤﺴﺎﺏﻭ‬
‫ﺃﺟﻬﺰﺓﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ‬ ‫ﻭﺣﺪﺓ‬ ‫ﻭﺣﺪﺓﺍﻟﻤﻨﻄﻖ‬

‫ﻭﺣﺪﺓﻣﻌﺎﻟﺠﺔ ﻣﺮﻛﺰﻳﺔ‬

‫ﺑﺴﺒﺐﺑﻨﻴﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ‪ ،‬ﻓﺈﻥ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺮﻛﺰﻳﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻫﻲ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﺍﻟﺘﻲ‬
‫ﺗﻤﺜﻞﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ؛ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﻋﻤﻠﻴﺔ ﺍﻷﻧﺎﺑﻴﺐ ؛ ﻭﺍﻟﺼﻴﻐﺔ‬
‫ﺍﻟﺘﻜﺮﺍﺭﻳﺔﻟﻠﺘﻜﺮﺍﺭ ‪ ،‬ﻭﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﻓﺎﻋﻠﻴﺔ ﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻜﺮﺍﺭ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺒﻨﻴﺔ‪ .‬ﻳﺘﻢ ﻧﻘﻞ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ ‪ ،‬ﻭﻳﺘﻢ ﺇﺭﺟﺎﻉ ﻧﺘﻴﺠﺔ ﺗﻘﻴﻴﻢ‬
‫ﺍﻟﺘﻌﺒﻴﺮﺇﻟﻰ ﺧﻠﻴﺔ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺘﻲ ﻳﻤﺜﻠﻬﺎ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ‪ .‬ﺍﻟﺘﻜﺮﺍﺭ ﺳﺮﻳﻊ ﻋﻠﻰ ﺃﺟﻬﺰﺓ‬
‫ﻛﻤﺒﻴﻮﺗﺮ‪ von Neumann‬ﻷﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻣﺨﺰﻧﺔ ﻓﻲ ﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺗﻜﺮﺍﺭ ﺗﻨﻔﻴﺬ ﺟﺰء‬
‫ﻣﻦﺍﻟﻜﻮﺩ ﻻ ﻳﺘﻄﻠﺐ ﺳﻮﻯ ﺗﻌﻠﻴﻤﺎﺕ ﻓﺮﻉ‪ .‬ﻻ ﺗﺸﺠﻊ ﻫﺬﻩ ﺍﻟﻜﻔﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻠﺘﻜﺮﺍﺭ ‪،‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺘﻜﺮﺍﺭ ﻳﻜﻮﻥ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﺃﻛﺜﺮ ﻃﺒﻴﻌﻴﺔ‪.‬‬

‫ﻳﺤﺪﺙﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﻛﻮﺩ ﺍﻵﻟﺔ ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ﻣﻌﻤﺎﺭﻱ ‪ von Neumann‬ﻓﻲ ﻋﻤﻠﻴﺔ ﺗﺴﻤﻰ‬
‫ﺩﻭﺭﺓﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﺗﻮﺟﺪ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻟﻜﻦ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻲ‬
‫ﻭﺣﺪﺓﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ‪ .‬ﻳﺠﺐ ﻧﻘﻞ ﻛﻞ ﺗﻌﻠﻴﻤﺎﺕ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻳﺘﻢ‬
‫ﺍﻻﺣﺘﻔﺎﻅﺑﻌﻨﻮﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻲ ﺳﺠﻞ ﻳﺴﻤﻰﻋﺪﺍﺩ ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬‬
‫ﻳﻤﻜﻦﻭﺻﻒ ﺩﻭﺭﺓ ﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺑﺒﺴﺎﻃﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺗﻬﻴﺉﺔﻋﺪﺍﺩ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﻜﺮﺭﻟﻸﺑﺪ‬

‫ﺇﺣﻀﺎﺭﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺸﺎﺭ ﺇﻟﻴﻬﺎ ﻣﻦ ﺧﻼﻝ ﺯﻳﺎﺩﺓ ﻋﺪﺍﺩ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺇﻟﻰ ﻋﺪﺍﺩ‬


‫ﺍﻟﺒﺮﻧﺎﻣﺞﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻚ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬

‫ﺗﻨﻔﻴﺬﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻛﺮﺭ‬
‫ﺍﻟﻨﻬﺎﻳﺔ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪20‬‬

‫ﺗﻌﻨﻲﺧﻄﻮﺓ "ﻓﻚ ﺷﻔﺮﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ" ﻓﻲ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻳﺘﻢ ﻓﺤﺼﻬﺎ ﻟﺘﺤﺪﻳﺪ ﺍﻹﺟﺮﺍء‬
‫ﺍﻟﺬﻱﺗﺤﺪﺩﻩ‪ .‬ﻳﻨﺘﻬﻲ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻨﺪ ﻣﻮﺍﺟﻬﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﻳﻘﺎﻑ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻧﺎﺩﺭﺍً ﻣﺎ‬
‫ﻳﺘﻢﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﻳﻘﺎﻑ ﻋﻠﻰ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﻓﻌﻠﻲ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻨﻘﻞﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻣﺴﺘﺨﺪﻡ ﻟﺘﻨﻔﻴﺬﻩ ﺛﻢ ﺍﻟﻌﻮﺩﺓ ﺇﻟﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻋﻨﺪ‬
‫ﺍﻛﺘﻤﺎﻝﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺬﻱ ﻗﺪ ﻳﻜﻮﻥ ﻓﻴﻪ ﺃﻛﺜﺮ ﻣﻦ ﺑﺮﻧﺎﻣﺞ‬
‫ﻣﺴﺘﺨﺪﻡﻭﺍﺣﺪ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﻓﻲ ﻭﻗﺖ ﻣﻌﻴﻦ ‪ ،‬ﺗﻜﻮﻥ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً‪.‬‬

‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻓﺈﻥ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻭ ﺍﻟﺘﻄﺒﻴﻘﻴﺔ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻴﻬﺎ ﺍﻟﻮﺳﻴﻠﺔ‬
‫ﺍﻷﺳﺎﺳﻴﺔﻟﻠﺤﺴﺎﺏ ﻫﻲ ﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﺎﺉﻒ ﻋﻠﻰ ﻣﻌﻠﻤﺎﺕ ﻣﻌﻴﻨﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ‬
‫ﻭﻇﻴﻔﻴﺔﺑﺪﻭﻥ ﻧﻮﻉ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ‪ ،‬ﺑﺪﻭﻥ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ‪،‬‬
‫ﻭﺑﺪﻭﻥﺍﻟﺘﻜﺮﺍﺭ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻗﺪ ﺷﺮﺣﻮﺍ ﺍﻟﻔﻮﺍﺉﺪ ﺍﻟﺘﻲ ﻻ ﺗﻌﺪ‬
‫ﻭﻻﺗﺤﺼﻰ ﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ‪ ،‬ﻣﺜﻞ ‪ ، Scheme‬ﻓﻤﻦ ﻏﻴﺮ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻥ ﻳﺤﻠﻮﺍ ﻣﺤﻞ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻀﺮﻭﺭﻳﺔﺣﺘﻰ ﻳﺘﻢ ﺗﺼﻤﻴﻢ ﻛﻤﺒﻴﻮﺗﺮ ﻏﻴﺮ ‪ von Neumann‬ﻳﺴﻤﺢ ﺑﺎﻟﺘﻨﻔﻴﺬ ﺍﻟﻔﻌﺎﻝ ﻟﻠﺒﺮﺍﻣﺞ‬
‫ﺑﻠﻐﺎﺕﻭﻇﻴﻔﻴﺔ‪ .‬ﻣﻦ ﺑﻴﻦ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﺗﺤﺴﺮﻭﺍ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺤﻘﻴﻘﺔ ‪ ،‬ﻛﺎﻥ ﺟﻮﻥ ﺑﺎﻛﻮﺱ )‪(1978‬‬
‫ﺍﻟﻤﺼﻤﻢﺍﻟﺮﺉﻴﺴﻲ ﻟﻠﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ﻓﻮﺭﺗﺮﺍﻥ ‪ ،‬ﺃﻛﺜﺮﻫﻢ ﺑﻼﻏﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺣﻘﻴﻘﺔ ﺃﻥ ﺑﻨﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺘﻤﻴﺔ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻋﻠﻰ ﻏﺮﺍﺭ ﺑﻨﻴﺔ ﺍﻵﻟﺔ ‪،‬‬
‫ﺑﺪﻻ ًﻣﻦ ﻗﺪﺭﺍﺕ ﻭﻣﻴﻮﻝ ﻣﺴﺘﺨﺪﻣﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﺒﻌﺾ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺤﺘﻤﻴﺔﺃﻣﺮ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺃﻛﺜﺮ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻌﺘﻘﺪ ﻫﺆﻻء ﺍﻷﺷﺨﺎﺹ‬
‫ﺃﻧﻪﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻓﻌﺎﻟﺔ ﻣﺜﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻀﺮﻭﺭﻳﺔ ‪ ،‬ﻓﺈﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻹﻟﺰﺍﻣﻴﺔ ﺳﻴﻈﻞ ﻫﻮ ﺍﻟﻤﺴﻴﻄﺮ‪.‬‬

‫‪1.4.2‬ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ‬


‫ﻗﺪﻣﺖﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﺗﺤﻠﻴﻼ ًﻣﻜﺜﻔﺎً ‪ ،‬ﺑﺪﺃ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﺑﺤﺮﻛﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻬﻴﻜﻠﺔ ‪ ،‬ﻟﻜﻞ ﻣﻦ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻭﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻛﺎﻥﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﻤﻬﻤﺔ ﻟﻬﺬﺍ ﺍﻟﺒﺤﺚ ﻫﻮ ﺍﻟﺘﺤﻮﻝ ﻓﻲ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﺤﻮﺳﺒﺔ ﻣﻦ‬
‫ﺍﻷﺟﻬﺰﺓﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺣﻴﺚ ﺍﻧﺨﻔﻀﺖ ﺗﻜﺎﻟﻴﻒ ﺍﻷﺟﻬﺰﺓ ﻭﺯﺍﺩﺕ ﺗﻜﺎﻟﻴﻒ ﺍﻟﻤﺒﺮﻣﺞ‪ .‬ﻛﺎﻧﺖ‬
‫ﺍﻟﺰﻳﺎﺩﺍﺕﻓﻲ ﺇﻧﺘﺎﺟﻴﺔ ﺍﻟﻤﺒﺮﻣﺞ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﻛﺒﺮ‬
‫ﻭﺍﻷﻛﺜﺮﺗﻌﻘﻴﺪﺍً ﺑﺸﻜﻞ ﺗﺪﺭﻳﺠﻲ ﺑﻮﺍﺳﻄﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺑﺪﻻ ًﻣﻦ ﻣﺠﺮﺩ ﺣﻞ ﻣﺠﻤﻮﻋﺎﺕ ﻣﻦ‬
‫ﺍﻟﻤﻌﺎﺩﻻﺕﻟﻤﺤﺎﻛﺎﺓ ﻣﺴﺎﺭﺍﺕ ﺍﻷﻗﻤﺎﺭ ﺍﻟﺼﻨﺎﻋﻴﺔ ‪ ،‬ﻛﻤﺎ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺗﻜُﺘﺐﻟﻤﻬﺎﻡ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ‪ ،‬ﻣﺜﻞ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﻣﺮﺍﻓﻖ ﺗﻜﺮﻳﺮ ﺍﻟﺒﺘﺮﻭﻝ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺗﻮﻓﻴﺮ ﺃﻧﻈﻤﺔ ﺣﺠﺰ‬
‫ﻃﻴﺮﺍﻥﻋﺎﻟﻤﻴﺔ‪.‬‬

‫ﻛﺎﻧﺖﻣﻨﻬﺠﻴﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻧﺘﻴﺠﺔ ﻟﺒﺤﻮﺙ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‬


‫ﺗﺴﻤﻰﺍﻟﺘﺼﻤﻴﻢ ﻣﻦ ﺃﻋﻠﻰ ﺇﻟﻰ ﺃﺳﻔﻞ ﻭﺍﻟﺘﺤﺴﻴﻦ ﺍﻟﺘﺪﺭﻳﺠﻲ‪ .‬ﻛﺎﻧﺖ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﺍﻷﺳﺎﺳﻴﺔ ﻓﻲ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ ﻫﻲ ﻋﺪﻡ ﺍﻛﺘﻤﺎﻝ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻭﻋﺪﻡ ﻛﻔﺎﻳﺔ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ )ﺍﻟﺘﻲ‬
‫ﺗﺘﻄﻠﺐﺍﺳﺘﺨﺪﺍﻣﺎً ﻣﻜﺜﻔﺎً ﻟـ ‪.(gotos‬‬

‫ﻓﻲﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺑﺪﺃ ﺍﻟﺘﺤﻮﻝ ﻣﻦ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺟﻬﺔ ﺇﻟﻰ‬


‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﺑﺒﺴﺎﻃﺔ ‪ ،‬ﺗﺆﻛﺪ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﺒﻴﺎﻧﺎﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻣﻊ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺠﺮﺩﺓ ﻟﺤﻞ ﺍﻟﻤﺸﻜﻼﺕ‪.‬‬
‫‪21‬‬ ‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬

‫ﻻﺳﺘﺨﺪﺍﻡﺍﺳﺘﺨﻼﺹ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺸﻜﻞ ﻓﻌﺎﻝ ﻓﻲ ﺗﺼﻤﻴﻢ ﻧﻈﺎﻡ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﻳﺠﺐ ﺃﻥ‬


‫ﻳﻜﻮﻥﻣﺪﻋﻮﻣﺎً ﺑﺎﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﻗﺪﻣﺖ ﺣﺘﻰ ﺩﻋﻤﺎً‬
‫ﻣﺤﺪﻭﺩﺍًﻻﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻲ (‪ ، SIMULA 67 )Birtwistle et al. ، 1973‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻥﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺎﻟﺘﺄﻛﻴﺪ ﻟﻢ ﺗﻜﻦ ﻣﺪﻓﻮﻋﺔ ﺑﺎﻟﺸﻌﺒﻴﺔ ﺑﺴﺒﺒﻬﺎ‪ .‬ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻓﻮﺍﺉﺪ ﺗﺠﺮﻳﺪ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺣﺘﻰ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺼﻤﻤﺔ‬
‫ﻣﻨﺬﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﺗﺪﻋﻢ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺬﻱ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻪ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ‬
‫‪.11‬‬
‫ﺃﺣﺪﺙﺧﻄﻮﺓ ﻓﻲ ﺗﻄﻮﺭ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺑﺪﺃﺕ ﻓﻲ ﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪،‬ﻫﻲ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﻮﺟﻪ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻨﺎﺕ‪ .‬ﺗﺒﺪﺃ ﺍﻟﻤﻨﻬﺠﻴﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‬
‫ﺑﺎﺳﺘﺨﺮﺍﺝﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻠﺨﺺ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺑﻜﺎﺉﻨﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺗﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ ‪،‬ﻭﺗﻀﻴﻒ ﺍﻟﻮﺭﺍﺛﺔ ﻭﺭﺑﻂ ﺍﻷﺳﻠﻮﺏ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﺍﻟﻮﺭﺍﺛﺔ ﻣﻔﻬﻮﻡ ﻗﻮﻱ ﻳﻌﺰﺯ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‬
‫ﺇﻋﺎﺩﺓﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﺤﺎﻟﻴﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﻮﻓﺮ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﺰﻳﺎﺩﺍﺕ ﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ ﺇﻧﺘﺎﺟﻴﺔ‬
‫ﺗﻄﻮﻳﺮﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪ .‬ﻫﺬﺍ ﻋﺎﻣﻞ ﻣﻬﻢ ﻓﻲ ﺯﻳﺎﺩﺓ ﺷﻌﺒﻴﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺸﻴﺉﻴﺔ‪ .‬ﻳﺴﻤﺢ ﺭﺑﻂ ﺍﻷﺳﻠﻮﺏ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ)ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ( ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﺮﻭﻧﺔ ﻟﻠﻮﺭﺍﺛﺔ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻟﻐﺔ ﺗﺪﻋﻢ ﻣﻔﺎﻫﻴﻤﻬﺎ‪، 1989( :‬‬
‫‪ .Smalltalk )Goldberg and Robson‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ Smalltalk‬ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻣﺜﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﺇﻻ ﺃﻥ ﺩﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‬
‫ﺃﺻﺒﺢﺍﻵﻥ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ (‪ ، Ada 95 )ARM ، 1995‬ﻭ‬
‫‪ ، Java‬ﻭ ‪ ، ++ C‬ﻭ ‪ .# C‬ﻭﺟﺪﺕ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﻃﺮﻳﻘﻬﺎ ﺃﻳﻀﺎً ﺇﻟﻰ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻮﻇﻴﻔﻴﺔﻓﻲ (‪ CLOS )Bobrow et al. ، 1988‬ﻭ ‪ ، Syme) # F‬ﻭﺁﺧﺮﻭﻥ ‪ ، (2010 ،‬ﺑﺎﻹﺿﺎﻓﺔ‬
‫ﺇﻟﻰﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ (‪ .Prolog ++ )Moss ، 1994‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺩﻋﻢ ﺍﻟﻠﻐﺔ ﻟﻠﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺸﻴﺉﻴﺔﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.12‬‬

‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﻫﻲ ‪ ،‬ﺑﻤﻌﻨﻰ ﻣﺎ ‪ ،‬ﻋﻜﺲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺗﻬﻴﻤﻦ ﺍﻵﻥ ﻋﻠﻰ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﺇﻻ ﺃﻥ‬
‫ﺍﻷﺳﺎﻟﻴﺐﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺨﻠﻲ ﻋﻨﻬﺎ‪ .‬ﻋﻠﻰ ﺍﻟﻌﻜﺲ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ‬
‫ﺍﻷﺧﻴﺮﺓ ‪،‬ﺣﺪﺙ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺒﺤﺚ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻓﻲ ﻣﺠﺎﻝ‬
‫ﺍﻟﺘﺰﺍﻣﻦ‪.‬ﺟﻠﺒﺖ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﺍﻟﺒﺤﺜﻴﺔ ﻣﻌﻬﻢ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﻠﻐﻮﻳﺔ ﻹﻧﺸﺎء ﻭﺣﺪﺍﺕ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻤﺘﺰﺍﻣﻨﺔ ﻭﺍﻟﺘﺤﻜﻢ ﻓﻴﻬﺎ‪ .‬ﺗﺘﻀﻤﻦ ‪ Ada‬ﻭ ‪ Java‬ﻭ ‪ # C‬ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ‪ .‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.13‬‬

‫ﺃﺩﺕﻛﻞ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺍﺕ ﺍﻟﺘﻄﻮﺭﻳﺔ ﻓﻲ ﻣﻨﻬﺠﻴﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ‬
‫ﺟﺪﻳﺪﺓﻟﺪﻋﻤﻬﺎ‪.‬‬

‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬
‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﺘﻢ ﺗﺼﻨﻴﻒ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺃﺭﺑﻊ ﺳﻼﻝ‪ :‬ﺇﻟﺰﺍﻣﻴﺔ ‪ ،‬ﻭﻇﻴﻔﻴﺔ ‪ ،‬ﻣﻨﻄﻘﻴﺔ ‪ ،‬ﻭﻣﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻨﺎ ﻻ ﻧﻌﺘﺒﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﺘﺸﻜﻴﻞ ﻓﺉﺔ‬
‫ﻣﻨﻔﺼﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ‪ .‬ﻟﻘﺪ ﻭﺻﻔﻨﺎ ﻛﻴﻒ ﻧﺸﺄﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻹﻟﺰﺍﻣﻴﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻧﻤﻮﺫﺝ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺟﻪ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕﻳﺨﺘﻠﻒ ﺍﺧﺘﻼﻓﺎً ﻛﺒﻴﺮﺍً ﻋﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻮﺟﻪ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﺎﺩﺓ ًﻣﻊ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻟﺤﺘﻤﻴﺔ ‪،‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪22‬‬

‫ﺍﻣﺘﺪﺍﺩﺍﺕﻟﻠﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻄﻠﻮﺑﺔ ﻟﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﻴﺴﺖ ﻣﻜﺜﻔﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ‪ C‬ﻭ ‪ Java‬ﻣﺘﻄﺎﺑﻘﺔ ﺗﻘﺮﻳﺒﺎً‪) .‬ﻣﻦ ﻧﺎﺣﻴﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﺗﺨﺘﻠﻒ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻭﺩﻻﻻﺕ ‪ Java‬ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ (.C‬ﻳﻤﻜﻦ‬
‫ﺇﺟﺮﺍءﻋﺒﺎﺭﺍﺕ ﻣﻤﺎﺛﻠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫ﻧﻮﻉﺁﺧﺮ ﻣﻦ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﻠﻐﺔ ﺍﻟﻤﺮﺉﻴﺔ ‪ ،‬ﻫﻲ ﻓﺉﺔ ﻓﺮﻋﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ‪ .‬ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﺍﻷﻛﺜﺮ‬
‫ﺷﻴﻮﻋﺎًﻫﻲ ﻟﻐﺎﺕ ‪ .NET.‬ﺗﺘﻀﻤﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ )ﺃﻭ ﺗﻄﺒﻴﻘﺎﺗﻬﺎ( ﺇﻣﻜﺎﻧﻴﺎﺕ ﺇﻧﺸﺎء ﺍﻟﺴﺤﺐ‬
‫ﻭﺍﻹﻓﻼﺕﻣﻦ ﻣﻘﺎﻃﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪ .‬ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﻳﻮﻡ ﻟﻐﺎﺕ ﺍﻟﺠﻴﻞ‬
‫ﺍﻟﺮﺍﺑﻊ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻻﺳﻢ ﻟﻢ ﻳﻌﺪ ﺻﺎﻟﺤﺎً ﻟﻼﺳﺘﺨﺪﺍﻡ‪ .‬ﺗﻮﻓﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﻃﺮﻳﻘﺔ‬
‫ﺑﺴﻴﻄﺔﻹﻧﺸﺎء ﻭﺍﺟﻬﺎﺕ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ﻟﻠﺒﺮﺍﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ‪Studio‬‬
‫‪ Visual‬ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻠﻐﺎﺕ ‪ ، NET.‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻹﻧﺘﺎﺝ ﻋﺮﺽ ﻟﻌﻨﺼﺮ‬
‫ﺗﺤﻜﻢﻓﻲ ﺍﻟﻨﻤﻮﺫﺝ ‪ ،‬ﻣﺜﻞ ﺯﺭ ﺃﻭ ﻣﺮﺑﻊ ﻧﺺ ‪ ،‬ﺑﻀﻐﻄﺔ ﻣﻔﺘﺎﺡ ﻭﺍﺣﺪﺓ‪ .‬ﺗﺘﻮﻓﺮ ﻫﺬﻩ ﺍﻹﻣﻜﺎﻧﺎﺕ ﺍﻵﻥ‬
‫ﺑﺠﻤﻴﻊﻟﻐﺎﺕ ‪.NET.‬‬

‫ﻳﺸﻴﺮﺑﻌﺾ ﺍﻟﻤﺆﻟﻔﻴﻦ ﺇﻟﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻛﻔﺉﺔ ﻣﻨﻔﺼﻠﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﺈﻥ ﺍﻟﻠﻐﺎﺕ ﻓﻲ ﻫﺬﻩ ﺍﻟﻔﺉﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﺑﻄﺮﻳﻘﺔ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﺠﺰﺉﻴﺔ‬
‫ﺃﻭﺍﻟﻜﺎﻣﻠﺔ ‪ ،‬ﺃﻛﺜﺮ ﻣﻦ ﺍﺭﺗﺒﺎﻃﻬﺎ ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﻣﺸﺘﺮﻛﺔ‪ .‬ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻋﺎﺩﺓ ًﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻨﺼﻴﺔ ‪،‬ﻣﻦ ﺑﻴﻨﻬﺎ ‪ Perl‬ﻭ ‪ JavaScript‬ﻭ ‪ ، Ruby‬ﻫﻲ ﻟﻐﺎﺕ ﺿﺮﻭﺭﻳﺔ ﺑﻜﻞ ﻣﻌﻨﻰ ﺍﻟﻜﻠﻤﺔ‪.‬‬

‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﻟﻐﺔ ﻗﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻘﻮﺍﻋﺪ‪ .‬ﻓﻲ ﻟﻐﺔ ﺍﻷﻣﺮ ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ‬
‫ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔﺑﺘﻔﺼﻴﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻳﺠﺐ ﺗﻀﻤﻴﻦ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﻤﺤﺪﺩ ﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺍﻟﻌﺒﺎﺭﺍﺕ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﺍﻟﻘﻮﺍﻋﺪ ‪ ،‬ﻻ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﻋﺪ ﺑﺄﻱ ﺗﺮﺗﻴﺐ ﻣﻌﻴﻦ ‪ ،‬ﻭﻳﺠﺐ‬
‫ﺃﻥﻳﺨﺘﺎﺭ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﺗﺮﺗﻴﺒﺎً ﺗﺴُﺘﺨﺪﻡ ﻓﻴﻪ ﺍﻟﻘﻮﺍﻋﺪ ﻹﻧﺘﺎﺝ ﺍﻟﻨﺘﻴﺠﺔ ﺍﻟﻤﺮﺟﻮﺓ‪ .‬ﻳﺨﺘﻠﻒ ﻫﺬﺍ‬
‫ﺍﻟﻨﻬﺞﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﺧﺘﻼﻓﺎً ﺟﺬﺭﻳﺎً ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻣﻊ ﻓﺉﺘﻴﻦ ﺃﺧﺮﻳﻴﻦ ﻣﻦ ﺍﻟﻠﻐﺎﺕ‬
‫ﻭﻳﺘﻄﻠﺐﺑﻮﺿﻮﺡ ﻧﻮﻋﺎً ﻣﺨﺘﻠﻔﺎً ﺗﻤﺎﻣﺎً ﻣﻦ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻟﻐﺔ ﺑﺮﻭﻟﻮﺝ ‪ ،‬ﻭﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻨﻄﻘﻴﺔﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪ ،‬ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.16‬‬

‫ﻓﻲﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻇﻬﺮﺕ ﻓﺉﺔ ﺟﺪﻳﺪﺓ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ /‬ﺍﻟﺘﺮﻣﻴﺰ‬


‫ﺍﻟﻤﺨﺘﻠﻄﺔ‪.‬ﻟﻐﺎﺕ ﺍﻟﺘﺮﻣﻴﺰ ﻟﻴﺴﺖ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪، HTML‬‬
‫ﻭﻫﻲﻟﻐﺔ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺗﺨﻄﻴﻂ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ‪ .‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﻘﺪ ﺗﺴﻠﻠﺖ ﺑﻌﺾ ﻗﺪﺭﺍﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺑﻌﺾ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺇﻟﻰ ‪ HTML‬ﻭ ‪ .XML‬ﻣﻦ‬
‫ﺑﻴﻨﻬﺎﻣﻜﺘﺒﺔ ﺍﻟﻌﻼﻣﺎﺕ ﺍﻟﻘﻴﺎﺳﻴﺔ ﻟﺼﻔﺤﺎﺕ ﺧﺎﺩﻡ ﺟﺎﻓﺎ )‪ (JSTL‬ﻭﺗﺤﻮﻻﺕ ﻟﻐﺔ ﻭﺭﻗﺔ ﺍﻷﻧﻤﺎﻁ‬
‫ﺍﻟﻤﻮﺳﻌﺔ)‪ .(XSLT‬ﺗﻢ ﺗﻘﺪﻳﻢ ﻛﻼ ﺍﻟﻠﻐﺘﻴﻦ ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻧﻲ ‪ ،‬ﻭﻻ ﻳﻤﻜﻦ ﻣﻘﺎﺭﻧﺔ ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺎﺕﺑﺄﻱ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻜﺎﻣﻠﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﺗﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﻌﺪ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻧﻲ‪.‬‬

‫ﻇﻬﺮﺕﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ‪.‬ﺗﺘﺮﺍﻭﺡ ﻫﺬﻩ ﻣﻦ ﻣﻨُﺸﺊ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﻘﺎﺭﻳﺮ )‪ ، (RPG‬ﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻹﻧﺘﺎﺝ ﺗﻘﺎﺭﻳﺮ‬
‫ﺍﻷﻋﻤﺎﻝ ؛ﺇﻟﻰ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺒﺮﻣﺠﺔ ﺗﻠﻘﺎﺉﻴﺎً )‪ ، (APT‬ﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﻟﺘﻮﺟﻴﻪ ﺃﺩﻭﺍﺕ ﺍﻵﻟﺔ ﺍﻟﻘﺎﺑﻠﺔ‬
‫ﻟﻠﺒﺮﻣﺠﺔ ؛ﺇﻟﻰ ﻧﻈﺎﻡ ﻣﺤﺎﻛﺎﺓ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ )‪ ، (GPSS‬ﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻟﻤﺤﺎﻛﺎﺓ ﺍﻷﻧﻈﻤﺔ‪ .‬ﻫﺬﺍ‬
‫ﺍﻟﻜﺘﺎﺏﻻ ﻳﻨﺎﻗﺶ‬
‫‪23‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺍﻟﻠﻐﺎﺕﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﺘﻄﺒﻴﻖ ﺍﻟﻀﻴﻖ ﻭﺻﻌﻮﺑﺔ‬
‫ﻣﻘﺎﺭﻧﺘﻬﺎﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ‪.‬‬

‫‪1.6‬ﻣﻘﺎﻳﻀﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﺗﻮﻓﺮﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 1.3‬ﺇﻃﺎﺭﺍً ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﻟﺴﻮء ﺍﻟﺤﻆ ‪،‬‬
‫ﻫﺬﺍﺍﻹﻃﺎﺭ ﻣﺘﻨﺎﻗﺾ ﻣﻊ ﻧﻔﺴﻪ‪ .‬ﻓﻲ ﻭﺭﻗﺘﻪ ﺍﻟﺜﺎﻗﺒﺔ ﺣﻮﻝ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﺫﻛﺮ (‪ Hoare )1973‬ﺃﻥ‬
‫"ﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﻬﻤﺔ ﻭﻟﻜﻦ ﺍﻟﻤﺘﻀﺎﺭﺑﺔ ‪ ،‬ﻭﺃﻥ ﺍﻟﺘﻮﻓﻴﻖ ﺑﻴﻨﻬﺎ ﻭﺍﻟﺮﺿﺎ ﻋﻨﻬﺎ ﻫﻲ‬
‫ﻣﻬﻤﺔﻫﻨﺪﺳﻴﺔ ﺭﺉﻴﺴﻴﺔ‪".‬‬

‫ﻣﻌﻴﺎﺭﺍﻥﻳﺘﻌﺎﺭﺿﺎﻥ ﻫﻤﺎ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺗﻜﻠﻔﺔ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻄﻠﺐ ﺗﻌﺮﻳﻒ‬
‫ﻟﻐﺔ‪ Java‬ﻓﺤﺺ ﺟﻤﻴﻊ ﺍﻟﻤﺮﺍﺟﻊ ﺇﻟﻰ ﻋﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﻟﻔﻬﺮﺱ ﺃﻭ ﺍﻟﻔﻬﺎﺭﺱ‬
‫ﻣﻮﺟﻮﺩﺓﻓﻲ ﻧﻄﺎﻗﺎﺗﻬﺎ ﺍﻟﻘﺎﻧﻮﻧﻴﺔ‪ .‬ﺗﻀﻴﻒ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺓ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺗﻜﻠﻔﺔ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ‪Java‬‬
‫ﺍﻟﺘﻲﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺮﺍﺟﻊ ﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ‪ .‬ﻻ ﺗﺘﻄﻠﺐ ﻟﻐﺔ ‪ C‬ﻓﺤﺺ ﻧﻄﺎﻕ‬
‫ﺍﻟﻔﻬﺮﺱ ‪،‬ﻟﺬﻟﻚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ‪ C‬ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻦ ﺑﺮﺍﻣﺞ ‪ Java‬ﺍﻟﻤﻜﺎﻓﺉﺔ ﻟﻐﻮﻳﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺃﻥ ﺑﺮﺍﻣﺞ ‪ Java‬ﺃﻛﺜﺮ ﻣﻮﺛﻮﻗﻴﺔ‪ .‬ﻗﺎﻡ ﻣﺼﻤﻤﻮ ‪ Java‬ﺑﺘﺒﺎﺩﻝ ﻛﻔﺎءﺓ ﺍﻟﺘﻨﻔﻴﺬ ﻣﻦ ﺃﺟﻞ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪.‬‬

‫ﻛﻤﺜﺎﻝﺁﺧﺮ ﻋﻠﻰ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﺘﻀﺎﺭﺑﺔ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻣﺒﺎﺷﺮﺓ ﺇﻟﻰ ﻣﻘﺎﻳﻀﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ‪ ،‬ﺿﻊ‬
‫ﻓﻲﺍﻋﺘﺒﺎﺭﻙ ﺣﺎﻟﺔ ‪ .APL‬ﻳﺘﻀﻤﻦ ‪ APL‬ﻣﺠﻤﻮﻋﺔ ﻗﻮﻳﺔ ﻣﻦ ﺍﻟﻌﻮﺍﻣﻞ ﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﺼﻔﻴﻒ‪.‬‬
‫ﺑﺴﺒﺐﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ‪ ،‬ﻛﺎﻥ ﻻﺑﺪ ﻣﻦ ﺗﻀﻤﻴﻦ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ‬
‫‪ APL‬ﻟﺘﻤﺜﻴﻞ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻮﺍﻣﻞ ﺗﺸﻐﻴﻞ ‪ APL‬ﻓﻲ ﺗﻌﺒﻴﺮ‬
‫ﻭﺍﺣﺪﻃﻮﻳﻞ ﻭﻣﻌﻘﺪ‪ .‬ﺇﺣﺪﻯ ﻧﺘﺎﺉﺞ ﻫﺬﻩ ﺍﻟﺪﺭﺟﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻫﻲ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻠﺘﻄﺒﻴﻘﺎﺕﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻓﺈﻥ ‪ APL‬ﻗﺎﺑﻞ ﻟﻠﻜﺘﺎﺑﺔ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪.‬‬
‫ﻓﻲﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ﺟﺪﺍً‪ .‬ﻧﺘﻴﺠﺔ ﺃﺧﺮﻯ ﻫﻲ ﺃﻥ‬
‫ﺑﺮﺍﻣﺞ‪ APL‬ﻟﺪﻳﻬﺎ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺿﻌﻴﻔﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻳﻤﺘﻠﻚ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻀﻐﻮﻁ ﻭﺍﻟﻤﻮﺟﺰ ﺟﻤﺎﻻً ﺭﻳﺎﺿﻴﺎً‬
‫ﻣﻌﻴﻨﺎًﻭﻟﻜﻦ ﻳﺼﻌﺐ ﻋﻠﻰ ﺃﻱ ﺷﺨﺺ ﺁﺧﺮ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺞ ﻓﻬﻤﻪ‪ .‬ﻻﺣﻆ ﺍﻟﻤﺆﻟﻒ ﺍﻟﺸﻬﻴﺮ ﺩﺍﻧﻴﺎﻝ‬
‫ﻣﻜﺮﺍﻛﻴﻦ)‪ (1970‬ﺫﺍﺕ ﻣﺮﺓ ﺃﻧﻪ ﺍﺳﺘﻐﺮﻕ ﺃﺭﺑﻊ ﺳﺎﻋﺎﺕ ﻟﻘﺮﺍءﺓ ﻭﻓﻬﻢ ﺑﺮﻧﺎﻣﺞ ‪ APL‬ﺍﻟﻤﻜﻮﻥ ﻣﻦ‬
‫ﺃﺭﺑﻌﺔﺃﺳﻄﺮ‪ .‬ﻗﺎﻡ ﻣﺼﻤﻢ ‪ APL‬ﺑﺎﻟﺘﺪﺍﻭﻝ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻟﻠﻜﺘﺎﺑﺔ‪.‬‬

‫ﺍﻟﺼﺮﺍﻉﺑﻴﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻫﻮ ﺷﺎﺉﻊ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﻳﻤﻜﻦ ﻣﻌﺎﻟﺠﺔ‬


‫ﻣﺆﺷﺮﺍﺕ‪ ++ C‬ﺑﻌﺪﺓ ﻃﺮﻕ ‪ ،‬ﻣﻤﺎ ﻳﺪﻋﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﻧﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﺑﺴﺒﺐ ﻣﺸﺎﻛﻞ‬
‫ﺍﻟﻤﻮﺛﻮﻗﻴﺔﺍﻟﻤﺤﺘﻤﻠﺔ ﻣﻊ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ‪.Java‬‬

‫ﺗﻜﺜﺮﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻟﺘﻌﺎﺭﺽ ﺑﻴﻦ ﻣﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ )ﻭﺍﻟﺘﻘﻴﻴﻢ( ؛ ﺑﻌﻀﻬﺎ ﺧﻔﻲ ﻭﺍﻟﺒﻌﺾ‬
‫ﺍﻵﺧﺮﻭﺍﺿﺢ‪ .‬ﻟﺬﻟﻚ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﻬﻤﺔ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻤﻴﺰﺍﺕ ﻋﻨﺪ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‬
‫ﺗﺘﻄﻠﺐﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻨﺎﺯﻻﺕ ﻭﺍﻟﻤﻔﺎﺿﻼﺕ‪.‬‬

‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬
‫ﻛﻤﺎﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ ، 1.4.1‬ﻓﺈﻥ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻤﺎ ﺍﻟﺬﺍﻛﺮﺓ‬
‫ﺍﻟﺪﺍﺧﻠﻴﺔﻭﻣﻌﺎﻟﺠﻬﺎ‪ .‬ﺗﺴﺘﺨﺪﻡ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﺘﺨﺰﻳﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺎﺭﺓ ﻋﻦ‬
‫ﻣﺠﻤﻮﻋﺔﻣﻦ ﺍﻟﺪﻭﺍﺉﺮ ﺍﻟﺘﻲ ﺗﻮﻓﺮ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪24‬‬

‫ﺇﺩﺭﺍﻙﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ‪ ،‬ﺃﻭ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ ‪ ،‬ﻣﺜﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‬


‫ﻭﺍﻟﻤﻨﻄﻘﻴﺔ‪.‬ﻓﻲ ﻣﻌﻈﻢ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ‬
‫ﺃﺣﻴﺎﻧﺎًﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻜﻠﻴﺔ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻹﺭﺷﺎﺩﺍﺕ ﺗﺴﻤﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺪﻗﻴﻘﺔ ‪،‬‬
‫ﻭﺍﻟﺘﻲﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺃﻗﻞ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺒﺮﺍﻣﺞ ﻻ ﺗﺮُﻯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺪﻗﻴﻘﺔ ﻣﻄﻠﻘﺎً ‪،‬‬
‫ﻓﻠﻦﺗﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻫﻨﺎ‪.‬‬

‫ﻟﻐﺔﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﻪ‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺑﺮﺍﻣﺞ ﺩﺍﻋﻤﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﻓﺈﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﺘﻲ "ﺗﻔﻬﻤﻬﺎ" ﻣﻌﻈﻢ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬
‫ﻣﻦﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻨﻈﺮﻳﺔ ‪ ،‬ﻳﻤﻜﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺑﻨﺎﺅﻩ ﺑﻠﻐﺔ ﻣﻌﻴﻨﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻛﻠﻐﺔ ﺍﻵﻟﺔ‬
‫ﺍﻟﺨﺎﺻﺔﺑﻪ ‪ ،‬ﻭﻟﻜﻨﻪ ﺳﻴﻜﻮﻥ ﻣﻌﻘﺪﺍً ﻭﻣﻜﻠﻔﺎً ﻟﻠﻐﺎﻳﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﺳﻴﻜﻮﻥ ﻏﻴﺮ ﻣﺮﻥ ﻟﻠﻐﺎﻳﺔ ‪،‬‬
‫ﻷﻧﻪﺳﻴﻜﻮﻥ ﻣﻦ ﺍﻟﺼﻌﺐ )ﻭﻟﻜﻦ ﻟﻴﺲ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ( ﺍﺳﺘﺨﺪﺍﻣﻪ ﻣﻊ ﻟﻐﺎﺕ ﺃﺧﺮﻯ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯ‪.‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺧﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺎﻛﻴﻨﺔ ﺍﻷﻛﺜﺮ ﻋﻤﻠﻴﺔ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺑﻠﻐﺔ ﻣﻨﺨﻔﻀﺔ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﻟﻠﻐﺎﻳﺔﺗﻮﻓﺮ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﻤﻄﻠﻮﺑﺔ ﻭﺗﺘﻄﻠﺐ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﻹﻧﺸﺎء ﻭﺍﺟﻬﺔ‬
‫ﻟﻠﺒﺮﺍﻣﺞﺑﻠﻐﺎﺕ ﺫﺍﺕ ﻣﺴﺘﻮﻯ ﺃﻋﻠﻰ‪.‬‬

‫ﻻﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﻫﻮ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻮﺣﻴﺪ ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬
‫ﻣﻄﻠﻮﺏﺃﻳﻀﺎً ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺗﺴﻤﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ‬
‫ﺫﺍﺕﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﻋﻠﻰ ﻣﻦ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ ﺍﻵﻟﺔ‪ .‬ﺗﻮﻓﺮ ﻫﺬﻩ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﺇﺩﺍﺭﺓ ﻣﻮﺍﺭﺩ‬
‫ﺍﻟﻨﻈﺎﻡ ‪،‬ﻭﻋﻤﻠﻴﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ‪ ،‬ﻭﻧﻈﺎﻡ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ ‪ ،‬ﻭﻣﺤﺮﺭﻱ ﺍﻟﻨﺼﻮﺹ ﻭ ‪ /‬ﺃﻭ‬
‫ﺍﻟﺒﺮﺍﻣﺞ ‪،‬ﻭﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺧﺮﻯ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺑﺸﻜﻞ ﺷﺎﺉﻊ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺃﻧﻈﻤﺔ‬
‫ﺗﻨﻔﻴﺬﺍﻟﻠﻐﺔ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺮﺍﻓﻖ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻓﺈﻧﻬﺎ ﺗﺘﻔﺎﻋﻞ ﻣﻊ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﺑﺪﻻ ًﻣﻦ ﺍﻟﺘﻌﺎﻣﻞ ﺍﻟﻤﺒﺎﺷﺮ ﻣﻊ ﺍﻟﻤﻌﺎﻟﺞ )ﺑﻠﻐﺔ ﺍﻵﻟﺔ(‪.‬‬

‫ﻳﺘﻢﻭﺿﻊ ﺗﻄﺒﻴﻘﺎﺕ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺍﻟﻠﻐﺔ ﻓﻮﻕ ﻭﺍﺟﻬﺔ ﻟﻐﺔ ﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻳﻤﻜﻦ ﺍﻋﺘﺒﺎﺭ‬
‫ﻫﺬﻩﺍﻟﻄﺒﻘﺎﺕ ﺑﻤﺜﺎﺑﺔ ﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺍﻓﺘﺮﺍﺿﻴﺔ ‪ ،‬ﻣﻤﺎ ﻳﻮﻓﺮ ﻭﺍﺟﻬﺎﺕ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﻤﺴﺘﻮﻳﺎﺕ‬
‫ﺃﻋﻠﻰ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻮﻓﺮ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﻣﺘﺮﺟﻢ ﻟﻐﺔ ﺳﻲ ﺣﺎﺳﻮﺏ ﺳﻲ ﻇﺎﻫﺮﻱ‪ .‬ﻣﻊ‬
‫ﺑﺮﺍﻣﺞﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻷﺧﺮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﺒﺢ ﺍﻵﻟﺔ ﺃﻧﻮﺍﻋﺎً ﺃﺧﺮﻯ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪.‬ﺗﻮﻓﺮ ﻣﻌﻈﻢ ﺃﻧﻈﻤﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ﺗﺸﻜﻞﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻃﺒﻘﺔ ﺃﺧﺮﻯ ﺃﻋﻠﻰ ﻃﺒﻘﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﻳﻈﻬﺮ ﻋﺮﺽ‬
‫ﺍﻟﻄﺒﻘﺎﺕﻟﺠﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.2‬‬

‫ﻛﺎﻧﺖﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﺄﻭﻝ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻓﻲ‬
‫ﺃﻭﺍﺧﺮﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺗﻌﻘﻴﺪﺍً ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪.‬‬
‫ﻓﻲﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺑﺬُﻟﺖ ﺟﻬﻮﺩ ﺑﺤﺜﻴﺔ ﻣﻜﺜﻔﺔ ﻟﻔﻬﻢ ﻭﺇﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻟﺮﺳﻤﻲ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺇﻧﺸﺎء‬
‫ﻫﺬﻩﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻠﻐﻮﻳﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪ .‬ﻛﺎﻥ ﺃﻛﺒﺮ ﻧﺠﺎﺡ ﻟﻬﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻓﻲ ﻣﺠﺎﻝ ﺗﺤﻠﻴﻞ ﺍﻟﻨﺤﻮ ‪،‬‬
‫ﻭﻳﺮﺟﻊﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﺃﻥ ﻫﺬﺍ ﺍﻟﺠﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻮ ﺗﻄﺒﻴﻖ ﻷﺟﺰﺍء ﻣﻦ ﻧﻈﺮﻳﺔ ﺍﻷﻭﺗﻮﻣﺎﺗﺎ‬
‫ﻭﻧﻈﺮﻳﺔﺍﻟﻠﻐﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻬﻤﻬﺎ ﺟﻴﺪﺍً ﺑﻌﺪ ﺫﻟﻚ‪.‬‬

‫‪1.7.1‬ﺍﻟﺘﺠﻤﻴﻊ‬
‫ﻳﻤﻜﻦﺗﻨﻔﻴﺬ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺄﻱ ﻣﻦ ﺍﻟﻄﺮﻕ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺜﻼﺙ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺗﺮﺟﻤﺔ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃ‬
‫ﻣﺘﺮﺟﻢ‬
‫‪25‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺍﻟﻈﺎﻫﺮﻱ‪# C‬‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬ ‫ﺍﻟﺸﻜﻞ‪1.2‬‬


‫ﺣﺎﺳﻮﺏ‬ ‫‪VB .NET‬‬
‫ﺳﻲ ‪#‬‬
‫ﺣﺎﺳﻮﺏﺟﻢ‬
‫ﻣﺘﺮ‬ ‫ﻭﺍﺟﻬﺔﺫﺍﺕ ﻃﺒﻘﺎﺕ ﻟـ‬
‫ﺃﺟﻬﺰﺓﻛﻤﺒﻴﻮﺗﺮ ﺍﻓﺘﺮﺍﺿﻴﺔ ‪،‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻧﻈﺎﻡ‬
‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﻣﺨﻄﻂ‬ ‫ﻛﻤﺒﻴﻮﺗﺮﻧﻤﻮﺫﺟﻲ‬
‫ﺣﺎﺳﻮﺏ‬ ‫‪.‬ﺷﺒﻜﺔ‬
‫ﺷﺎﺉﻊ‬
‫‪...‬‬ ‫ﻟﻐﺔ‬
‫ﻣﺨﻄﻂ‬ ‫ﻣﺪﺓﺍﻟﻌﺮﺽ‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﻣﺘﺮﺟﻢ‬ ‫ﺝ‬
‫ﺣﺎﺳﻮﺏ‬
‫ﻧﻈﺎﻡﺍﻟﺘﺸﻐﻴﻞ‬ ‫ﺝ‬
‫ﻣﺘﺮﺟﻢ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﻧﻈﺎﻡ‬ ‫ﺗﻌﻠﻴﻤﺔﻛﻠﻴﺔ‬
‫ﻣﺘﺮﺟﻢ‬ ‫ﺟﺎﻓﺎ‬
‫ﻳﺄﻣﺮ‬
‫ﻣﺘﺮﺟﻢ‬
‫ﻣﺘﺮﺟﻢ‬
‫‪T‬‬
‫‪.NE‬‬
‫ﻣﺘﺮﺟ ‪VB‬‬
‫ﻢ‬
‫ﻋﺎﺭﻳﺔ‬
‫ﺁﻟﺔ‬ ‫ﺟﺎﻓﺎﺍﻻﻓﺘﺮﺍﺿﻴﺔ‬ ‫ﺟﺎﻓﺎﺍﻻﻓﺘﺮﺍﺿﻴﺔ‬
‫ﺁﻟﺔ‬ ‫ﺣﺎﺳﻮﺏ‬

‫ﺍﻟﻤﺠﻤﻊ‬

‫ﺁﺩﺍ‬
‫ﻣﺘﺮﺟﻢ‬

‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﺣﺸَﺪ‬ ‫‪...‬‬
‫ﻟﻐﺔ‬
‫ﺣﺎﺳﻮﺏ‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﺁﺩﺍ‬
‫ﺣﺎﺳﻮﺏ‬

‫ﺗﻄﺒﻴﻖﻭﻳﺘﻤﺘﻊ ﺑﻤﻴﺰﺓ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺴﺮﻳﻊ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺑﻤﺠﺮﺩ ﺍﻛﺘﻤﺎﻝ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ‬
‫ﻣﻌﻈﻢﺗﻄﺒﻴﻘﺎﺕ ﺍﻹﻧﺘﺎﺝ ﻟﻠﻐﺎﺕ ‪ ،‬ﻣﺜﻞ ‪ C‬ﻭ ‪ COBOL‬ﻭ ‪ ++ C‬ﻭ ‪ ، Ada‬ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ‪.‬‬

‫ﺍﻟﻠﻐﺔﺍﻟﺘﻲ ﻳﺘﺮﺟﻤﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ﺗﺴﻤﻰﻟﻐﺔ ﺍﻟﻤﺼﺪﺭ‪ .‬ﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻋﻠﻰﻋﺪﺓ ﻣﺮﺍﺣﻞ ‪ ،‬ﻭﺃﻫﻤﻬﺎ ﻣﺒﻴﻦ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.3‬‬

‫ﻳﻘﻮﻡﺍﻟﻤﺤﻠﻞ ﺍﻟﻤﻌﺠﻤﻲ ﺑﺘﺠﻤﻴﻊ ﺃﺣﺮﻑ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺼﺪﺭ ﻓﻲ ﻭﺣﺪﺍﺕ ﻣﻌﺠﻤﻴﺔ‪ .‬ﺍﻟﻮﺣﺪﺍﺕ‬


‫ﺍﻟﻤﻌﺠﻤﻴﺔﻟﻠﺒﺮﻧﺎﻣﺞ ﻫﻲ ﺍﻟﻤﻌﺮﻓﺎﺕ ‪ ،‬ﻭﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﺍﻟﻤﺸﻐﻼﺕ ‪ ،‬ﻭﺭﻣﻮﺯ ﺍﻟﺘﺮﻗﻴﻢ‪.‬‬
‫ﻳﺘﺠﺎﻫﻞﺍﻟﻤﺤﻠﻞ ﺍﻟﻤﻌﺠﻤﻲ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺼﺪﺭ ﻷﻥ ﺍﻟﻤﺘﺮﺟﻢ ﻟﻴﺲ ﻟﻪ ﺃﻱ ﻓﺎﺉﺪﺓ‪.‬‬

‫ﻳﺄﺧﺬﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻣﻦ ﻣﺤﻠﻞ ﺍﻟﻤﻌﺠﻢ ﻭﻳﺴﺘﺨﺪﻣﻬﺎ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ‬
‫ﻫﺮﻣﻴﺔﺗﺴﻤﻰﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ‪ .‬ﺗﻤﺜﻞ ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﻫﺬﻩ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ‪ .‬ﻓﻲ ﻛﺜﻴﺮ‬
‫ﻣﻦﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻻ ﻳﺘﻢ ﺇﻧﺸﺎء ﻫﻴﻜﻞ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻓﻌﻠﻲ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺇﻧﺸﺎء ﺍﻟﻤﻌﻠﻮﻣﺎﺕ‬
‫ﺍﻟﻤﻄﻠﻮﺑﺔﻟﺒﻨﺎء ﺷﺠﺮﺓ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺒﺎﺷﺮﺓ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻛﻞ ﻣﻦ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻭﺃﺷﺠﺎﺭ‬
‫ﺍﻟﺘﺤﻠﻴﻞﻓﻲ ﺍﻟﻔﺼﻞ ‪ .3‬ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻌﺠﻤﻲ ﻭﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ‪ ،‬ﺃﻭ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺘﻬﻤﺎﻓﻲ ﺍﻟﻔﺼﻞ ‪.4‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪26‬‬

‫ﺍﻟﺸﻜﻞ‪1.3‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ‬

‫ﻣﻌﺠﻤﻲ‬
‫ﻣﺤﻠﻞ‬

‫ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ‬

‫ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺗﺤﺴﻴﻦ‬ ‫ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ‬ ‫ﺭﻣﺰ‬
‫)ﺧﻴﺎﺭﻱ(‬ ‫ﻭﺍﻟﺪﻻﻻﺕ‬ ‫ﻃﺎﻭﻟﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺷﻔﺮﺓ‬

‫ﺷﻔﺮﺓ‬
‫ﻣﻮﻟﺪﻛﻬﺮﺑﺎء‬

‫ﺁﻟﺔ‬
‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬ ‫ﻟﻐﺔ‬

‫ﺣﺎﺳﻮﺏ‬

‫ﻧﺘﺎﺉﺞ‬

‫ﻳﻨﺘﺞﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻮﺳﻴﻄﺔ ﺑﺮﻧﺎﻣﺠﺎً ﺑﻠﻐﺔ ﻣﺨﺘﻠﻔﺔ ‪ ،‬ﺑﻤﺴﺘﻮﻯ ﻣﺘﻮﺳﻂ ﺑﻴﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺼﺪﺭﻭﺍﻟﻤﺨﺮﺝ ﺍﻟﻨﻬﺎﺉﻲ ﻟﻠﻤﺘﺮﺟﻢ‪ :‬ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ‪4.‬ﺗﺒﺪﻭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﺳﻴﻄﺔ ﺃﺣﻴﺎﻧﺎً ﻣﺜﻞ ﻟﻐﺎﺕ‬
‫ﺍﻟﺘﺠﻤﻴﻊﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﻭﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺗﻜﻮﻥ ﺃﺣﻴﺎﻧﺎً ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ﻓﻌﻠﻴﺔ‪ .‬ﻓﻲ ﺣﺎﻻﺕ ﺃﺧﺮﻯ ‪ ،‬ﻳﻜﻮﻥ‬
‫ﺍﻟﺮﻣﺰﺍﻟﻮﺳﻴﻂ ﻋﻠﻰ ﻣﺴﺘﻮﻯ‬

‫‪.4‬ﻻﺣﻆ ﺃﻥ ﺍﻟﻜﻠﻤﺎﺕﺑﺮﻧﺎﻣﺞﻭﺷﻔﺮﺓﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺑﺎﻟﺘﺒﺎﺩﻝ‪.‬‬


‫‪27‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺇﻟﻰﺣﺪ ﻣﺎ ﺃﻋﻠﻰ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻳﻌﺘﺒﺮ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﺟﺰءﺍً ﻻ ﻳﺘﺠﺰﺃ ﻣﻦ ﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ‬
‫ﺍﻟﻮﺳﻴﻄﺔ‪.‬ﻳﺘﺤﻘﻖ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﻣﻦ ﺍﻷﺧﻄﺎء ‪ ،‬ﻣﺜﻞ ﺃﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﺍﻟﺘﻲ ﻳﺼﻌﺐ ‪ ،‬ﺇﻥ ﻟﻢ‬
‫ﻳﻜﻦﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ‪ ،‬ﺍﻛﺘﺸﺎﻓﻬﺎ ﺃﺛﻨﺎء ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪.‬‬

‫ﺍﻟﺘﺤﺴﻴﻦ ‪،‬ﺍﻟﺬﻱ ﻳﺤﺴﻦ ﺍﻟﺒﺮﺍﻣﺞ )ﻋﺎﺩﺓ ًﻓﻲ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ( ﻋﻦ ﻃﺮﻳﻖ ﺟﻌﻠﻬﺎ ﺃﺻﻐﺮ‬
‫ﺃﻭﺃﺳﺮﻉ ﺃﻭ ﻛﻠﻴﻬﻤﺎ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﺟﺰءﺍً ﺍﺧﺘﻴﺎﺭﻳﺎً ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺑﻌﺾ ﺍﻟﻤﺠﻤﻌﻴﻦ‬
‫ﻏﻴﺮﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﺗﺤﺴﻴﻦ ﻛﺒﻴﺮ‪ .‬ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ ﻓﻲ ﺍﻟﻤﻮﺍﻗﻒ‬
‫ﺍﻟﺘﻲﺗﻜﻮﻥ ﻓﻴﻬﺎ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ﺑﻜﺜﻴﺮ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﻣﺜﺎﻝ ﻋﻠﻰ‬
‫ﻣﺜﻞﻫﺬﺍ ﺍﻟﻤﻮﻗﻒ ﻫﻮ ﻣﺨﺘﺒﺮ ﺍﻟﺤﻮﺳﺒﺔ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻤﺒﺘﺪﺉﻴﻦ‪ .‬ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻤﻮﺍﻗﻒ ﺍﻟﺘﺠﺎﺭﻳﺔ‬
‫ﻭﺍﻟﺼﻨﺎﻋﻴﺔ ‪،‬ﺗﻜﻮﻥ ﺳﺮﻋﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺠﻤﻴﻊ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﺍﻟﺘﺤﺴﻴﻦ ﺃﻣﺮ‬
‫ﻣﺮﻏﻮﺏﻓﻴﻪ ﺑﺸﻜﻞ ﺭﻭﺗﻴﻨﻲ‪ .‬ﻧﻈﺮﺍً ﻟﺼﻌﻮﺑﺔ ﺇﺟﺮﺍء ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ‪ ،‬ﻳﺘﻢ‬
‫ﺇﺟﺮﺍءﻣﻌﻈﻢ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ‪.‬‬

‫ﻳﻘﻮﻡﻣﻨﺸﺊ ﺍﻟﻜﻮﺩ ﺑﺘﺮﺟﻤﺔ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ ﺍﻟﻤﺤﺴﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ‬
‫ﻣﻜﺎﻓﺊ‪.‬‬
‫ﻳﻌﻤﻞﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻛﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺠﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ‬
‫ﻫﻲﺍﻟﻨﻮﻉ ﻭﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﺴﻤﺔ ﻟﻜﻞ ﺍﺳﻢ ﻣﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﺘﻢ ﻭﺿﻊ ﻫﺬﻩ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕﻓﻲ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻠﻲ ﺍﻟﻤﻌﺠﻢ ﻭﺍﻟﻨﺤﻮ ﻭﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻞ‬
‫ﺍﻟﺪﻻﻻﺕﻭﻣﻮﻟﺪ ﺍﻟﺸﻔﺮﺓ‪.‬‬

‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﺮﺟﻢ ﻳﻤﻜﻦ‬
‫ﺗﻨﻔﻴﺬﻫﺎﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻷﺟﻬﺰﺓ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺩﺍﺉﻤﺎً ﺗﺸﻐﻴﻠﻬﺎ ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﺍﻷﺧﺮﻯ‪.‬ﺗﺘﻄﻠﺐ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻳﻀﺎً ﺑﺮﺍﻣﺞ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﻫﺬﻩ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺷﻴﻮﻋﺎً ﺑﺮﺍﻣﺞ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ‪ .‬ﻳﻨﺸﺊ ﺍﻟﻤﺘﺮﺟﻢ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﻟﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻄﻠﻮﺑﺔ‬
‫ﻋﻨﺪﻣﺎﻳﺤﺘﺎﺟﻬﺎ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻗﺒﻞ ﺃﻥ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﻳﻨﺘﺠﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ‪،‬‬
‫ﻳﺠﺐﺇﻳﺠﺎﺩ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺭﺑﻄﻬﺎ ﺑﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻘﻮﻡ ﻋﻤﻠﻴﺔ‬
‫ﺍﻟﺮﺑﻂﺑﺮﺑﻂ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻋﻦ ﻃﺮﻳﻖ ﻭﺿﻊ ﻋﻨﺎﻭﻳﻦ ﻧﻘﺎﻁ ﺩﺧﻮﻝ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ‬
‫ﻓﻲﺍﻟﻤﻜﺎﻟﻤﺎﺕ ﺇﻟﻴﻬﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻄُﻠﻖ ﺃﺣﻴﺎﻧﺎً ﻋﻠﻰ ﺭﻣﺰ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﻨﻈﺎﻡ ﻣﻌﺎً ﺍﺳﻢ‬
‫ﻣﻠﻒﻭﺣﺪﺓ ﺍﻟﺘﺤﻤﻴﻞ‪ ،‬ﺃﻭﺻﻮﺭﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﺗﺴﻤﻰ ﻋﻤﻠﻴﺔ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻭﺭﺑﻄﻬﺎ‬
‫ﺑﺒﺮﺍﻣﺞﺍﻟﻤﺴﺘﺨﺪﻡﺍﻟﺮﺑﻂ ﻭﺍﻟﺘﺤﻤﻴﻞ‪ ،‬ﺃﻭ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﻓﻘﻂﺭﺑﻂ‪ .‬ﻳﺘﻢ ﺇﻧﺠﺎﺯﻩ ﺑﻮﺍﺳﻄﺔ‬
‫ﺑﺮﻧﺎﻣﺞﺃﻧﻈﻤﺔ ﻳﺴﻤﻰ ﺃﺭﺍﺑﻂ‪.‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺑﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ‪ ،‬ﻳﺠﺐ ﻏﺎﻟﺒﺎً ﺭﺑﻂ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺘﻲ‬
‫ﺗﻢﺗﺠﻤﻴﻌﻬﺎ ﻣﺴﺒﻘﺎً ﻭﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻤﻜﺘﺒﺎﺕ‪ .‬ﻟﺬﻟﻚ ﻻ ﻳﺮﺑﻂ ﺍﻟﺮﺍﺑﻂ ﺑﺮﻧﺎﻣﺠﺎً ﻣﻌﻴﻨﺎً ﺑﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻨﻈﺎﻡﻓﺤﺴﺐ ‪ ،‬ﺑﻞ ﻳﻤﻜﻨﻪ ﺃﻳﻀﺎً ﺭﺑﻄﻪ ﺑﺒﺮﺍﻣﺞ ﻣﺴﺘﺨﺪﻡ ﺃﺧﺮﻯ‪.‬‬

‫ﻋﺎﺩﺓ ًﻣﺎ ﺗﺤﺪﺩ ﺳﺮﻋﺔ ﺍﻻﺗﺼﺎﻝ ﺑﻴﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺨﺎﺹ ﺑﻪ ﺳﺮﻋﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﻷﻧﻪﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻤﺎ ﻳﻤﻜﻦ ﻧﻘﻠﻬﺎ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻫﺬﺍ‬
‫ﺍﻻﺗﺼﺎﻝﻳﺴﻤﻰﻋﻨﻖ ﺍﻟﺰﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ؛ ﻫﺬﺍ ﻫﻮ ﺍﻟﻌﺎﻣﻞ ﺍﻟﻤﺤﺪﺩ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺳﺮﻋﺔ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻌﻤﺎﺭﻳﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ‪ .‬ﻛﺎﻥ ﻋﻨﻖ ﺯﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ﺃﺣﺪ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﻟﻠﺒﺤﺚﻭﺍﻟﺘﻄﻮﻳﺮ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻮﺍﺯﻳﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪28‬‬

‫‪1.7.2‬ﺗﻔﺴﻴﺮ ﻧﻘﻲ‬
‫ﻳﻘﻊﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻓﻲ ﺍﻟﻄﺮﻑ ﺍﻵﺧﺮ )ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ( ﻟﻄﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻣﻊ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ‪ ،‬ﻳﺘﻢ‬
‫ﺗﻔﺴﻴﺮﺍﻟﺒﺮﺍﻣﺞ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺁﺧﺮ ﻳﺴﻤﻰ ﻣﺘﺮﺟﻢ ‪ ،‬ﺑﺪﻭﻥ ﺗﺮﺟﻤﺔ ﻋﻠﻰ ﺍﻹﻃﻼﻕ‪ .‬ﻳﻌﻤﻞ ﺑﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺘﺮﺟﻢﺍﻟﻔﻮﺭﻱ ﻛﻤﺤﺎﻛﺎﺓ ﺑﺮﻣﺠﻴﺔ ﻵﻟﺔ ﺗﺘﻌﺎﻣﻞ ﺩﻭﺭﺓ ﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻣﻊ ﻋﺒﺎﺭﺍﺕ‬
‫ﺑﺮﻧﺎﻣﺞﺍﻟﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺑﺪﻻ ًﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﺤﺎﻛﺎﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﺬﻩ‬
‫ﺗﻮﻓﺮﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﻐﺔ‪.‬‬

‫ﻳﺘﻤﻴﺰﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﺑﻤﻴﺰﺓ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟﺘﻨﻔﻴﺬ ﺍﻟﺴﻬﻞ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺗﺼﺤﻴﺢ‬


‫ﺍﻷﺧﻄﺎءﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻤﺼﺪﺭ ‪ ،‬ﻷﻥ ﺟﻤﻴﻊ ﺭﺳﺎﺉﻞ ﺧﻄﺄ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻳﻤﻜﻦ ﺃﻥ ﺗﺸﻴﺮ ﺇﻟﻰ‬
‫ﻭﺣﺪﺍﺕﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻤﺼﺪﺭ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﻓﻬﺮﺱ ﻣﺼﻔﻮﻓﺔ ﺧﺎﺭﺝ‬
‫ﺍﻟﻨﻄﺎﻕ ‪،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺸﻴﺮ ﺭﺳﺎﻟﺔ ﺍﻟﺨﻄﺄ ﺑﺴﻬﻮﻟﺔ ﺇﻟﻰ ﺳﻄﺮ ﺍﻟﻤﺼﺪﺭ ﻭﺍﺳﻢ ﺍﻟﻤﺼﻔﻮﻓﺔ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻬﺎ ﻋﻴﺐ ﺧﻄﻴﺮ ﻳﺘﻤﺜﻞ ﻓﻲ ﺃﻥ ﺍﻟﺘﻨﻔﻴﺬ ﺃﺑﻄﺄ ﻣﻦ ‪ 10‬ﺇﻟﻰ ‪ 100‬ﻣﺮﺓ ﻣﻦ‬
‫ﺍﻷﻧﻈﻤﺔﺍﻟﻤﺘﺮﺟﻤﺔ‪ .‬ﺍﻟﻤﺼﺪﺭ ﺍﻷﺳﺎﺳﻲ ﻟﻬﺬﺍ ﺍﻟﺒﻂء ﻫﻮ ﻓﻚ ﺗﺸﻔﻴﺮ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯ ‪،‬ﻭﺍﻟﺘﻲ ﺗﻌﺪ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻐﺔ ﺍﻵﻟﺔ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻗﺪ ﻳﻜﻮﻥ‬
‫ﻫﻨﺎﻙﻋﺒﺎﺭﺍﺕ ﺃﻗﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ﺍﻟﻤﻜﺎﻓﺊ(‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﺑﻐﺾ‬
‫ﺍﻟﻨﻈﺮﻋﻦ ﻋﺪﺩ ﻣﺮﺍﺕ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺓ ‪ ،‬ﻳﺠﺐ ﻓﻚ ﺗﺸﻔﻴﺮﻫﺎ ﻓﻲ ﻛﻞ ﻣﺮﺓ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺑﻴﺎﻥ ﻓﻚ‬
‫ﺍﻟﺘﺸﻔﻴﺮ ‪،‬‬

‫ﻋﻴﺐﺁﺧﺮ ﻟﻠﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻫﻮ ﺃﻧﻪ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻄﻠﺐ ﻣﺴﺎﺣﺔ ﺃﻛﺒﺮ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺼﺪﺭ ‪،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻣﻮﺟﻮﺩﺍً ﺃﺛﻨﺎء ﺍﻟﺘﻔﺴﻴﺮ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻗﺪ ﻳﺘﻢ ﺗﺨﺰﻳﻦ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﻤﺼﺪﺭ ﻓﻲ ﻧﻤﻮﺫﺝ ﻣﺼﻤﻢ ﻟﺴﻬﻮﻟﺔ ﺍﻟﻮﺻﻮﻝ ﻭﺍﻟﺘﻌﺪﻳﻞ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺬﻱ ﻳﻮﻓﺮ‬
‫ﺍﻟﺤﺪﺍﻷﺩﻧﻰ ﻣﻦ ﺍﻟﺤﺠﻢ‪.‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺒﻜﺮﺓ ﺍﻟﺒﺴﻴﻄﺔ ﻓﻲ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ )‪ APL‬ﻭ ‪ SNOBOL‬ﻭ‬
‫‪ (LISP‬ﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﺑﺤﺘﺔ ‪ ،‬ﺑﺤﻠﻮﻝ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﻧﺎﺩﺭﺍً ﻣﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻓﻲ ﺍﻟﻠﻐﺎﺕ‬
‫ﻋﺎﻟﻴﺔﺍﻟﻤﺴﺘﻮﻯ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﺣﻘﻘﺖ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻔﻮﺭﻳﺔ ﻋﻮﺩﺓ ﻣﻬﻤﺔ ﻣﻊ‬
‫ﺑﻌﺾﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻟﻠﻮﻳﺐ ‪ ،‬ﻣﺜﻞ ‪ JavaScript‬ﻭ ‪ ، PHP‬ﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﺍﻵﻥ ﻋﻠﻰ‬
‫ﻧﻄﺎﻕﻭﺍﺳﻊ‪ .‬ﺗﻈﻬﺮ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﻨﻘﻲ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.4‬‬

‫ﺍﻟﺸﻜﻞ‪1.4‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﺗﻔﺴﻴﺮﻧﻘﻲ‬

‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬

‫ﻣﺘﺮﺟﻢ‬

‫ﻧﺘﺎﺉﺞ‬
‫‪29‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫‪1.7.3‬ﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺨﺘﻠﻄﺔ‬


‫ﺗﻌﺘﺒﺮﺑﻌﺾ ﺃﻧﻈﻤﺔ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﺑﻤﺜﺎﺑﺔ ﺣﻞ ﻭﺳﻂ ﺑﻴﻦ ﺍﻟﻤﺠﻤﻌﻴﻦ ﻭﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﺍﻟﻔﻮﺭﻳﻴﻦ ؛‬
‫ﻳﺘﺮﺟﻤﻮﻥﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻠﻐﻮﻳﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺇﻟﻰ ﻟﻐﺔ ﻣﺘﻮﺳﻄﺔ ﻣﺼﻤﻤﺔ ﻟﻠﺴﻤﺎﺡ ﺑﺎﻟﺘﺮﺟﻤﺔ ﺍﻟﻔﻮﺭﻳﺔ‬
‫ﺑﺴﻬﻮﻟﺔ‪.‬ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃﺳﺮﻉ ﻣﻦ ﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻷﻥ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺼﺪﺭ ﻳﺘﻢ ﻓﻚ‬
‫ﺗﺸﻔﻴﺮﻫﺎﻣﺮﺓ ﻭﺍﺣﺪﺓ ﻓﻘﻂ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻬﺠﻴﻨﺔ‪.‬‬

‫ﺍﻟﻌﻤﻠﻴﺔﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺨﺘﻠﻂ ﻣﻮﺿﺤﺔ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .1.5‬ﺑﺪﻻ ًﻣﻦ ﺗﺮﺟﻤﺔ‬


‫ﻛﻮﺩﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﺇﻟﻰ ﻛﻮﺩ ﺍﻵﻟﺔ ‪ ،‬ﻓﺈﻧﻪ ﺑﺒﺴﺎﻃﺔ ﻳﻔﺴﺮ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ‪.‬‬

‫ﺍﻟﺸﻜﻞ‪1.5‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﺗﻨﻔﻴﺬﻫﺠﻴﻦ‬
‫ﻧﻈﺎﻡ‬

‫ﻣﻌﺠﻤﻲ‬
‫ﻣﺤﻠﻞ‬

‫ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ‬

‫ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺷﻔﺮﺓ‬

‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬

‫ﻣﺘﺮﺟﻢ‬

‫ﻧﺘﺎﺉﺞ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪30‬‬

‫ﻳﺘﻢﺗﻨﻔﻴﺬ ‪ Perl‬ﺑﻨﻈﺎﻡ ﻫﺠﻴﻦ‪ .‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ‪ Perl‬ﺟﺰﺉﻴﺎً ﻻﻛﺘﺸﺎﻑ ﺍﻷﺧﻄﺎء ﻗﺒﻞ‬
‫ﺍﻟﺘﻔﺴﻴﺮﻭﻟﺘﺒﺴﻴﻂ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ‪.‬‬
‫ﻛﺎﻧﺖﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻷﻭﻟﻴﺔ ﻟﺠﺎﻓﺎ ﻣﺨﺘﻠﻄﺔ‪ .‬ﺷﻜﻠﻪ ﺍﻟﻮﺳﻴﻂ ﻳﺴﻤﻰﻛﻮﺩ ﺍﻟﺒﺎﻳﺖ‪،‬‬
‫ﻳﻮﻓﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻨﻘﻞ ﺇﻟﻰ ﺃﻱ ﺟﻬﺎﺯ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ ﺷﻔﺮﺓ ﺑﺎﻳﺖ ﻭﻧﻈﺎﻡ ﻭﻗﺖ ﺗﺸﻐﻴﻞ ﻣﺮﺗﺒﻂ‬
‫ﺑﻪ‪.‬ﻣﻌﺎً ‪ ،‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻷﺟﻬﺰﺓ ‪ .Java Virtual Machine‬ﺗﻮﺟﺪ ﺍﻵﻥ ﺃﻧﻈﻤﺔ ﺗﺘﺮﺟﻢ ﻛﻮﺩ ‪byte‬‬
‫‪ Java‬ﺇﻟﻰ ﻛﻮﺩ ﺁﻟﺔ ﻟﺘﻨﻔﻴﺬ ﺃﺳﺮﻉ‪.‬‬

‫ﻳﻘﻮﻡﻧﻈﺎﻡ ﺍﻟﺘﻨﻔﻴﺬ (‪ Just-in-Time )JIT‬ﺑﺘﺮﺟﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﺒﺪﺉﻴﺎً ﺇﻟﻰ ﻟﻐﺔ ﻭﺳﻴﻄﺔ‪ .‬ﺛﻢ ‪،‬‬
‫ﺃﺛﻨﺎءﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻳﻘﻮﻡ ﺑﺘﺠﻤﻴﻊ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﻓﻲ ﺭﻣﺰ ﺍﻵﻟﺔ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ‪ .‬ﻳﺘﻢ‬
‫ﺍﻻﺣﺘﻔﺎﻅﺑﺈﺻﺪﺍﺭ ﻛﻮﺩ ﺍﻟﺠﻬﺎﺯ ﻟﻠﻤﻜﺎﻟﻤﺎﺕ ﺍﻟﻼﺣﻘﺔ‪ .‬ﺗﺴﺘﺨﺪﻡ ﺃﻧﻈﻤﺔ ‪ JIT‬ﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‬
‫ﻟﺒﺮﺍﻣﺞ‪ .Java‬ﺃﻳﻀﺎً ‪ ،‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ‪ NET.‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻈﺎﻡ ‪.JIT‬‬

‫ﻓﻲﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ‪ ،‬ﻗﺪ ﻳﻮﻓﺮ ﺍﻟﻤﻨﻔﺬ ﻛﻼ ًﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻭﺍﻟﻤﺘﺮﺟﻤﺔ ﻟﻠﻐﺔ‪.‬‬
‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺮﺟﻢ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺗﺼﺤﻴﺤﻬﺎ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﺑﻌﺪ ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰﺣﺎﻟﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻷﺧﻄﺎء )ﻧﺴﺒﻴﺎً( ‪ ،‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﺍﻣﺞ ﻟﺰﻳﺎﺩﺓ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬﻫﺎ‪.‬‬

‫‪1.7.4‬ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﺴﺒﻘﺔ‬
‫ﺃﺍﻟﻤﻌﺎﻟﺞﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻳﻌﺎﻟﺞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮﺓ ﻗﺒﻞ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﻫﻮ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﻮﺳﻊ ﻣﺎﻛﺮﻭ‪ .‬ﺗﺴُﺘﺨﺪﻡ‬
‫ﺇﺭﺷﺎﺩﺍﺕﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻟﺘﺤﺪﻳﺪ ﺃﻥ ﺍﻟﻜﻮﺩ ﻣﻦ ﻣﻠﻒ ﺁﺧﺮ ﺳﻴﺘﻢ ﺗﻀﻤﻴﻨﻪ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪C‬‬

‫"‪# include "myLib.h‬‬

‫ﻳﺘﺴﺒﺐﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﻓﻲ ﻧﺴﺦ ﻣﺤﺘﻮﻳﺎﺕ‪myLib.h‬ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻣﻮﻗﻊ ‪#‬ﻳﺸﻤﻞ‪.‬‬

‫ﺗﺴُﺘﺨﺪﻡﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺧﺮﻯ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺮﻣﻮﺯ ﻟﺘﻤﺜﻴﻞ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‪ .‬ﻋﻠﻰ‬


‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺍﺳﺘﺨﺪﺍﻡ‬

‫‪ #‬ﺣﺪﺩ ﺍﻟﺤﺪ ﺍﻷﻗﺼﻰ )ﺃ ‪ ،‬ﺏ( ))ﺃ(< )ﺏ(؟ )ﺃ(‪) :‬ﺏ((‬

‫ﻟﺘﺤﺪﻳﺪﺃﻛﺒﺮ ﺗﻌﺒﻴﺮﻳﻦ ﻣﺤﺪﺩﻳﻦ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﺘﻌﺒﻴﺮ‬

‫ﺱ= ﻣﺎﻛﺲ )‪ * 2‬ﺹ ‪ ،‬ﺽ ‪ (1.73 /‬؛‬

‫ﺳﻴﺘﻢﺗﻮﺳﻴﻌﻪ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺇﻟﻰ‬

‫ﺱ= ))‪ * 2‬ﺹ(< )ﺽ ‪(1.73 /‬؟ )‪ * 2‬ﺹ(‪) :‬ﺽ ‪ (1.73 /‬؛‬

‫ﻻﺣﻆﺃﻥ ﻫﺬﻩ ﻭﺍﺣﺪﺓ ﻣﻦ ﺗﻠﻚ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺒﺐ ﻓﻴﻬﺎ ﺍﻵﺛﺎﺭ ﺍﻟﺠﺎﻧﺒﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ‬
‫ﻣﺸﻜﻠﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ ﺃﻱ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻌﻄﺎﺓ ﻟـﺍﻷﻋﻠﻰﺍﻟﻤﺎﻛﺮﻭ ﻟﻬﺎ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ‬
‫‪-‬ﻣﺜﻞ‪z ++ -‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺴﺒﺐ ﻣﺸﻜﻠﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻧﻪ ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﺃﺣﺪ ﻣﻌﺎﻣﻠﻲ ﺍﻟﺘﻌﺒﻴﺮ ﻣﺮﺗﻴﻦ ‪ ،‬ﻓﻘﺪ‬
‫ﻳﻨﺘﺞﻋﻦ ﺫﻟﻚﺽﻳﺘﻢ ﺯﻳﺎﺩﺗﻬﺎ ﻣﺮﺗﻴﻦ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﺘﻮﺳﻊ ﺍﻟﻜﻠﻲ‪.‬‬
‫‪31‬‬ ‫ﻣﻠﺨﺺ‬

‫‪1.8‬ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺑﻴﺉﺔﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻗﺪ ﺗﺘﻜﻮﻥ ﻫﺬﻩ‬
‫ﺍﻟﻤﺠﻤﻮﻋﺔﻓﻘﻂ ﻣﻦ ﻧﻈﺎﻡ ﻣﻠﻔﺎﺕ ﻭﻣﺤﺮﺭ ﻧﺼﻮﺹ ﻭﺭﺍﺑﻂ ﻭﻣﺘﺮﺟﻢ‪ .‬ﺃﻭ ﻗﺪ ﻳﺘﻀﻤﻦ ﻣﺠﻤﻮﻋﺔ‬
‫ﻛﺒﻴﺮﺓﻣﻦ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺘﻜﺎﻣﻠﺔ ‪ ،‬ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻛﻞ ﻣﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﻣﻮﺣﺪﺓ‪.‬‬
‫ﻓﻲﺍﻟﺤﺎﻟﺔ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻳﺘﻢ ﺗﺤﺴﻴﻦ ﺗﻄﻮﻳﺮ ﻭﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ﺧﺼﺎﺉﺺ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﻟﻴﺴﺖ ﻫﻲ ﺍﻟﻤﻘﻴﺎﺱ ﺍﻟﻮﺣﻴﺪ ﻟﻘﺪﺭﺓ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻟﻠﻨﻈﺎﻡ‪ .‬ﻧﺤﻦ ﺍﻵﻥ ﻧﺼﻒ‬
‫ﺑﺈﻳﺠﺎﺯﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪ Macintosh.‬ﻭ ‪ Windows‬ﺗﺒﺪﻭ ﻣﺸﺎﺑﻬﺔ ﻟﺘﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺃﻧﻈﻤﺔ ‪ UNIX‬ﺗﺠﻌﻞ‬


‫ﻭﺍﺟﻬﺎﺕﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻫﺬﻩ ﻭﺍﺟﻬﺔ ‪ KDE.‬ﻭ ‪ GNOME‬ﻭ (‪ Solaris )CDE‬ﺑﻴﺉﺔ ﺳﻄﺢ‬
‫ﺍﻟﻤﻜﺘﺐﺍﻟﻤﺸﺘﺮﻛﺔ ﻟـ ‪ UNIX‬ﻣﻦ ﺃﻣﺜﻠﺔ ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻟـ ‪ UNIX.‬ﺗﻌﻤﻞ ﺃﻋﻠﻰ‬
‫ﻧﻈﺎﻡ (‪ )GUI‬ﻏﺎﻟﺒﺎً ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ‪ UNIX‬ﻫﻲ ﺍﻟﻮﺍﺟﻬﺔ ﺍﻟﻤﻮﺣﺪﺓ ﺑﻴﻦ‬
‫ﺃﺩﻭﺍﺗﻬﺎ‪.‬ﻫﺬﺍ ﺟﻌﻞ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺍﻵﻥ ﺍﺳﺘﺨﺪﺍﻡ ‪ UNIX‬ﻫﻲ‬
‫ﺑﻴﺉﺔﺑﺮﻣﺠﺔ ﺃﻗﺪﻡ ‪ ،‬ﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻭﺗﻢ ﺑﻨﺎﺅﻫﺎ ﺣﻮﻝ ﻧﻈﺎﻡ‬
‫ﺗﺸﻐﻴﻞﻣﺘﻌﺪﺩ ﺍﻟﺒﺮﺍﻣﺞ ﻣﺤﻤﻮﻝ‪ .‬ﻳﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺃﺩﻭﺍﺕ ﺍﻟﺪﻋﻢ ﺍﻟﻘﻮﻳﺔ ﻹﻧﺘﺎﺝ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻭﺻﻴﺎﻧﺘﻬﺎﺑﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ‪ .‬ﻓﻲ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻛﺎﻧﺖ ﺃﻫﻢ ﻣﻴﺰﺓ ﻏﺎﺉﺒﺔ ﻋﻦ ‪UNIX‬‬

‫‪ Java.‬ﻫﻮ ﻧﻈﺎﻡ ﻣﻌﻘﺪ ﻭﻗﻮﻱ ﻹﻧﺸﺎء ﺑﺮﺍﻣﺞ ‪. JBuilder‬ﺣﻴﺚ ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻷﺭﺑﻌﺔ ﻣﻦ‬
‫ﺧﻼﻝﻭﺍﺟﻬﺔ ﺭﺳﻮﻣﻴﺔ ‪ Java ،‬ﻫﻲ ﺑﻴﺉﺔ ﺑﺮﻣﺠﺔ ﺗﻮﻓﺮ ﻣﺘﺮﺟﻤﺎً ﻣﺘﻜﺎﻣﻼً ﻭﻣﺤﺮﺭﺍً ﻭﻣﺼﺤﺢ ﺃﺧﻄﺎء‬
‫ﻭﻧﻈﺎﻡﻣﻠﻔﺎﺕ ﻟﺘﻄﻮﻳﺮ ‪Borland JBuilder‬‬

‫ﻳﻌﺪ‪ Microsoft Visual Studio .NET‬ﺧﻄﻮﺓ ﺣﺪﻳﺜﺔ ﻧﺴﺒﻴﺎً ﻓﻲ ﺗﻄﻮﺭ ﺑﻴﺉﺎﺕ ﺗﻄﻮﻳﺮ‬
‫ﺍﻟﺒﺮﺍﻣﺞ‪.‬ﺇﻧﻬﺎ ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻭﻣﺘﻘﻨﺔ ﻣﻦ ﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻭﻛﻠﻬﺎ ﺗﺴﺘﺨﺪﻡ ﻣﻦ ﺧﻼﻝ‬
‫ﻭﺍﺟﻬﺔﻧﺎﻓﺬﺓ‪ .‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺄﻱ ﻟﻐﺔ ﻣﻦ ﻟﻐﺎﺕ ‪ NET.‬ﺍﻟﺨﻤﺲ‪C :‬‬
‫‪ #‬ﻭ ‪ Visual BASIC .NET‬ﻭ ‪) JScript‬ﺇﺻﺪﺍﺭ ‪ Microsoft‬ﻣﻦ ‪ (JavaScript‬ﻭ ‪) # F‬ﻟﻐﺔ‬
‫ﻭﻇﻴﻔﻴﺔ( ﻭ ‪.C ++ / CLI‬‬

‫‪.‬ﺃﻛﺜﺮﻣﻦ ﻣﺠﺮﺩ ﺑﻴﺉﺎﺕ ﺗﻄﻮﻳﺮ ‪ -‬ﻭﻫﻤﺎ ﺃﻳﻀﺎً ﺇﻃﺎﺭﺍﺕ ﻋﻤﻞ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻬﻤﺎ ﻳﻮﻓﺮﺍﻥ‬
‫ﺑﺎﻟﻔﻌﻞﺃﺟﺰﺍء ﻣﺸﺘﺮﻛﺔ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻟﻠﺘﻄﺒﻴﻖ ‪ NetBeans‬ﻭ ‪ Visual Studio‬ﻳﻌﺪ‬
‫ﻛﻞﻣﻦ ‪ PHP.‬ﻭ ‪ Ruby‬ﻭ ‪ JavaScript‬ﻭﻟﻜﻨﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً ‪ Java‬ﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺉﺔ ﺗﻄﻮﻳﺮ ﺗﺴُﺘﺨﺪﻡ‬
‫ﺑﺸﻜﻞﺃﺳﺎﺳﻲ ﻟﺘﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﺕ ‪NetBeans‬‬

‫ﻣﻠﺨﺺ‬

‫ﺗﻌﺘﺒﺮﺩﺭﺍﺳﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ ﻗﻴﻤﺔ ﻟﺒﻌﺾ ﺍﻷﺳﺒﺎﺏ ﺍﻟﻤﻬﻤﺔ‪ :‬ﻓﻬﻲ ﺗﺰﻳﺪ ﻣﻦ ﻗﺪﺭﺗﻨﺎ ﻋﻠﻰ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺗﺮﺍﻛﻴﺐ ﻣﺨﺘﻠﻔﺔ ﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﻭﺗﻤﻜﻨﻨﺎ ﻣﻦ ﺍﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﻟﻠﻤﺸﺎﺭﻳﻊ ﺑﺸﻜﻞ ﺃﻛﺜﺮ‬
‫ﺫﻛﺎء ً‪،‬ﻭﺗﺠﻌﻞ ﺗﻌﻠﻢ ﻟﻐﺎﺕ ﺟﺪﻳﺪﺓ ﺃﺳﻬﻞ‪.‬‬

‫ﺗﺴُﺘﺨﺪﻡﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﺠﺎﻻﺕ ﺣﻞ ﺍﻟﻤﺸﻜﻼﺕ‪ .‬ﻳﻌﺘﻤﺪ‬


‫ﺗﺼﻤﻴﻢﻭﺗﻘﻴﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻠﻰ ﺍﻟﻤﺠﺎﻝ ﺍﻟﺬﻱ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻴﻪ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪32‬‬

‫ﻣﻦﺑﻴﻦ ﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺍﻟﺘﻜﻠﻔﺔ ﺍﻹﺟﻤﺎﻟﻴﺔ‪.‬‬
‫ﺳﺘﻜﻮﻥﻫﺬﻩ ﻫﻲ ﺍﻷﺳﺎﺱ ﺍﻟﺬﻱ ﻧﻘﻮﻡ ﻋﻠﻰ ﺃﺳﺎﺳﻪ ﺑﻔﺤﺺ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﺠﺰء ﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺍﻟﻜﺘﺎﺏ ﻭﺍﻟﺤﻜﻢ ﻋﻠﻴﻬﺎ‪.‬‬

‫ﻛﺎﻧﺖﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻫﻲ ﻫﻨﺪﺳﺔ ﺍﻵﻻﺕ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ‬


‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪.‬‬
‫ﻳﻌﺪﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻓﻲ ﺍﻷﺳﺎﺱ ﺇﻧﺠﺎﺯﺍً ﻫﻨﺪﺳﻴﺎً ‪ ،‬ﺣﻴﺚ ﻳﺠﺐ ﺇﺟﺮﺍء ﻗﺎﺉﻤﺔ ﻃﻮﻳﻠﺔ‬
‫ﻣﻦﺍﻟﻤﻔﺎﺿﻼﺕ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻘﺪﺭﺍﺕ‪.‬‬

‫ﺍﻟﻄﺮﻕﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﺘﻄﺒﻴﻖ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻭﺍﻟﺘﻨﻔﻴﺬ‬


‫ﺍﻟﻤﺨﺘﻠﻂ‪.‬‬
‫ﺃﺻﺒﺤﺖﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺟﺰءﺍً ﻣﻬﻤﺎً ﻣﻦ ﺃﻧﻈﻤﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﻣﺠﺮﺩ‬
‫ﺃﺣﺪﻣﻜﻮﻧﺎﺗﻬﺎ‪.‬‬

‫ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ‬

‫‪.1‬ﻟﻤﺎﺫﺍ ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻟﻠﻤﺒﺮﻣﺞ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻪ ﺑﻌﺾ ﺍﻟﺨﻠﻔﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻧﻪﻗﺪ ﻻ ﻳﻘﻮﻡ ﺃﺑﺪﺍً ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ؟‬

‫‪.2‬ﻛﻴﻒ ﻳﻤﻜﻦ ﺃﻥ ﺗﻔﻴﺪ ﻣﻌﺮﻓﺔ ﺧﺼﺎﺉﺺ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﺑﺄﻛﻤﻠﻪ؟‬

‫‪.3‬ﻣﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻌﻠﻤﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.4‬ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.5‬ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.6‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻤﻌﻈﻢ ﻳﻮﻧﻜﺲ؟‬
‫‪.7‬ﻣﺎ ﻫﻲ ﻋﻴﻮﺏ ﻭﺟﻮﺩ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ ﺍﻟﻠﻐﺔ؟‬
‫‪.8‬ﻛﻴﻒ ﻳﻤﻜﻦ ﻟﻠﻤﺸﻐﻞ ﺍﻟﺬﻱ ﻳﺤﺪﺩﻩ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻥ ﻳﺆﺩﻱ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺇﻟﻰ ﺍﻹﺿﺮﺍﺭ ﺑﻘﺮﺍءﺓ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ؟‬
‫‪.9‬ﻣﺎ ﻫﻮ ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺗﺼﻤﻴﻢ ‪C‬؟‬
‫‪.10‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻌﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺃﺳﺎﺳﻲ؟‬
‫‪.11‬ﻣﺎ ﺑﻴﺎﻥ ﺍﻟﻀﺒﻂ ﺍﻟﺒﺪﺍﺉﻲ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﺒﻨﺎء ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﺑﺎﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﺗﻔﺘﻘﺮﺇﻟﻴﻬﺎ؟‬
‫‪.12‬ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺗﺠﺮﻳﺪﺍً ﻟﻠﻌﻤﻠﻴﺔ؟‬

‫‪.13‬ﻣﺎﺫﺍ ﻳﻌﻨﻲ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻮﺛﻮﻗﺎً ﺑﻪ؟‬


‫‪.14‬ﻟﻤﺎﺫﺍ ﻳﻌﺘﺒﺮ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻣﻦ ﻣﻌﺎﻣﻼﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻣﻬﻤﺎً؟‬
‫‪.15‬ﻣﺎ ﻫﻮ ﺍﻟﺘﻌﺮﺝ؟‬
‫‪33‬‬ ‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.16‬ﻣﺎ ﻫﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ؟‬


‫‪.17‬ﻟﻤﺎﺫﺍ ﺗﻌﺘﺒﺮ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻣﻬﻤﺔ ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ؟‬
‫‪.18‬ﻛﻴﻒ ﺗﺮﺗﺒﻂ ﺗﻜﻠﻔﺔ ﺍﻟﻤﺠﻤﻌﻴﻦ ﻟﻠﻐﺔ ﻣﻌﻴﻨﺔ ﺑﺘﺼﻤﻴﻢ ﺗﻠﻚ ﺍﻟﻠﻐﺔ؟‬

‫‪.19‬ﻣﺎ ﻫﻲ ﺃﻗﻮﻯ ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.20‬ﻣﺎ ﺍﺳﻢ ﻓﺉﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻤﻠﻲ ﺑﻨﻴﺘﻬﺎ ﻣﻦ ﻗﺒﻞ ﻫﻨﺪﺳﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻮﻥ‬
‫ﻧﻴﻮﻣﺎﻥ؟‬
‫‪.21‬ﻣﺎ ﻫﻮ ﺍﻟﻨﻘﺼﺎﻥ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻠﺬﺍﻥ ﺗﻢ ﺍﻛﺘﺸﺎﻓﻬﻤﺎ ﻧﺘﻴﺠﺔ ﺍﻟﺒﺤﺚ ﻓﻲ ﺗﻄﻮﻳﺮ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ؟‬
‫‪.22‬ﻣﺎ ﻫﻲ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟‬

‫‪.23‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻭﻝ ﻣﻦ ﺩﻋﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟‬

‫‪.24‬ﻣﺎ ﻫﻮ ﻣﺜﺎﻝ ﻟﻤﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﻟﻐﺘﻴﻦ ﺗﺘﻌﺎﺭﺽ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﻣﻊ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ؟‬

‫‪.25‬ﻣﺎ ﻫﻲ ﺍﻟﻄﺮﻕ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺜﻼﺙ ﻟﺘﻄﺒﻴﻖ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.26‬ﻣﺎ ﺍﻟﺬﻱ ﻳﻨﺘﺞ ﻋﻨﻪ ﺗﻨﻔﻴﺬ ﺃﺳﺮﻉ ﻟﻠﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻣﺘﺮﺟﻢ ﺃﻡ ﻣﺘﺮﺟﻢ ﻣﺤﺾ؟‬

‫‪.27‬ﻣﺎ ﻫﻮ ﺍﻟﺪﻭﺭ ﺍﻟﺬﻱ ﻳﻠﻌﺒﻪ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻓﻲ ﺍﻟﻤﺘﺮﺟﻢ؟‬


‫‪.28‬ﻣﺎﺫﺍ ﻳﻔﻌﻞ ﺍﻟﺮﺍﺑﻂ؟‬
‫‪.29‬ﻣﺎ ﻫﻲ ﺃﻫﻤﻴﺔ ﻋﻨﻖ ﺍﻟﺰﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ؟‬
‫‪.30‬ﻣﺎ ﻫﻲ ﻣﺰﺍﻳﺎ ﺗﻄﺒﻴﻖ ﻟﻐﺔ ﻣﻊ ﻣﺘﺮﺟﻢ ﺧﺎﻟﺺ؟‬

‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.1‬ﻫﻞ ﺗﻌﺘﻘﺪ ﺃﻥ ﻗﺪﺭﺗﻨﺎ ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺮ ﺍﻟﻤﺠﺮﺩ ﺗﺘﺄﺛﺮ ﺑﻤﻬﺎﺭﺍﺗﻨﺎ ﺍﻟﻠﻐﻮﻳﺔ؟ ﺩﻋﻢ ﺭﺃﻳﻚ‪.‬‬

‫‪.2‬ﻣﺎ ﻫﻲ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺤﺪﺩﺓ ﺍﻟﺘﻲ ﺗﻌﺮﻑ ﺃﺳﺒﺎﺑﻬﺎ ﺍﻟﻐﺎﻣﻀﺔ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻚ؟‬
‫‪.3‬ﻣﺎ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺗﻘﺪﻳﻤﻬﺎ ﻟﻔﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.4‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺍﻟﻘﻴﺎﻡ ﺑﻬﺎ ﺿﺪ ﻓﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.5‬ﺍﺳﻢ ﻭﺷﺮﺡ ﻣﻌﻴﺎﺭﺍً ﺁﺧﺮ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ )ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ(‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪34‬‬

‫‪.6‬ﻣﺎ ﻋﺒﺎﺭﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﺎﺉﻌﺔ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﺍﻷﻛﺜﺮ ﺿﺮﺭﺍً ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ؟‬

‫‪.7‬ﺗﺴﺘﺨﺪﻡ ‪ Java‬ﻗﻮﺳﺎً ﺃﻳﻤﻨﺎً ﻟﺘﻤﻴﻴﺰ ﻧﻬﺎﻳﺔ ﻛﺎﻓﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ‪ .‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ‬
‫ﺍﻟﻤﺆﻳﺪﺓﻭﺍﻟﻤﻌﺎﺭﺿﺔ ﻟﻬﺬﺍ ﺍﻟﺘﺼﻤﻴﻢ؟‬
‫‪.8‬ﺗﻤﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺑﻴﻦ ﺍﻷﺣﺮﻑ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﺼﻐﻴﺮﺓ ﻓﻲ ﺍﻷﺳﻤﺎء ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡ‪.‬ﻣﺎ ﻫﻲ ﺇﻳﺠﺎﺑﻴﺎﺕ ﻭﺳﻠﺒﻴﺎﺕ ﻗﺮﺍﺭ ﺍﻟﺘﺼﻤﻴﻢ ﻫﺬﺍ؟‬
‫‪.9‬ﺷﺮﺡ ﺍﻟﺠﻮﺍﻧﺐ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﺘﻜﻠﻔﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬
‫‪.10‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻓﻌﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻷﺟﻬﺰﺓ ﻏﻴﺮ ﻣﻜﻠﻔﺔ ﻧﺴﺒﻴﺎً؟‬

‫‪.11‬ﺻﻒِ ﺑﻌﺾ ﺍﻟﻤﻘﺎﻳﻀﺎﺕ ﻓﻲ ﺍﻟﺘﺼﻤﻴﻢ ﺑﻴﻦ ﺍﻟﻜﻔﺎءﺓ ﻭﺍﻷﻣﺎﻥ ﻓﻲ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﺗﻌﺮﻓﻬﺎ‪.‬‬
‫‪.12‬ﻓﻲ ﺭﺃﻳﻚ ‪ ،‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﻲ ﻗﺪ ﺗﺘﻀﻤﻨﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ؟‬

‫‪.13‬ﻫﻞ ﺗﻢ ﺗﻨﻔﻴﺬ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺗﻌﻠﻤﺘﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ ﺃﻭ ﻧﻈﺎﻡ‬
‫ﺗﻨﻔﻴﺬﻫﺠﻴﻦ ﺃﻭ ﻣﺘﺮﺟﻢ؟ )ﻗﺪ ﺗﻀﻄﺮ ﺇﻟﻰ ﺍﻟﺒﺤﺚ ﻋﻦ ﻫﺬﺍ‪(.‬‬

‫‪.14‬ﺻﻒ ﻣﺰﺍﻳﺎ ﻭﻋﻴﻮﺏ ﺑﻌﺾ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺍﺳﺘﺨﺪﻣﺘﻬﺎ‪.‬‬

‫‪.15‬ﻛﻴﻒ ﺗﺆﺛﺮ ﺟﻤﻞ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﻠﻐﺔ ‪ ،‬ﻣﻊ ﺍﻷﺧﺬ ﻓﻲ‬
‫ﺍﻻﻋﺘﺒﺎﺭﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻻ ﺗﺘﻄﻠﺒﻬﺎ؟‬

‫‪.16‬ﺍﻛﺘﺐ ﺗﻘﻴﻴﻤﺎً ﻟﺒﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻌﺮﻓﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻔﺼﻞ‪.‬‬
‫‪.17‬ﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺑﺎﺳﻜﺎﻝ ‪ -‬ﺍﺳﺘﺨﺪﻣﺖ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻤﻨﻘﻮﻃﺔ‬
‫ﻟﻔﺼﻞﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﺑﻴﻨﻤﺎ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺟﺎﻓﺎ ﻹﻧﻬﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﺃﻱ ﻣﻦ ﻫﺬﻩ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﻫﻮ‬
‫ﺍﻷﻛﺜﺮﻃﺒﻴﻌﻴﺔ ﻭﺍﻷﻗﻞ ﺍﺣﺘﻤﺎﻻً ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺃﺧﻄﺎء ﻧﺤﻮﻳﺔ؟ ﺍﺩﻋﻢ ﺇﺟﺎﺑﺘﻚ‪.‬‬

‫‪.18‬ﺗﺴﻤﺢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ﺑﻨﻮﻋﻴﻦ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ‪ :‬ﺃﺣﺪﻫﻤﺎ ﻳﺴُﺘﺨﺪﻡ ﻓﻴﻪ‬


‫ﺍﻟﻤﺤﺪﺩﺍﺕﻋﻠﻰ ﻛﻼ ﺍﻟﻄﺮﻓﻴﻦ )ﺗﻌﻠﻴﻘﺎﺕ ﻣﺘﻌﺪﺩﺓ ﺍﻷﺳﻄﺮ( ‪ ،‬ﻭﺍﻵﺧﺮ ﻳﺤﺪﺩ ﻓﻴﻪ ﺍﻟﻤﺤﺪﺩ ﺑﺪﺍﻳﺔ‬
‫ﺍﻟﺘﻌﻠﻴﻖﻓﻘﻂ )ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻋﻠﻰ ﺍﻟﺨﻂ(‪ .‬ﻧﺎﻗﺶ ﻣﺰﺍﻳﺎ ﻭﻋﻴﻮﺏ ﻛﻞ ﻣﻦ ﻫﺬﻩ ﻓﻴﻤﺎ‬
‫ﻳﺘﻌﻠﻖﺑﻤﻌﺎﻳﻴﺮﻧﺎ‪.‬‬
‫‪2‬‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔ‬

‫‪Plankalkül Zuse2.1‬‬
‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬
‫‪2.3‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ 704‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬
‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬
‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬
‫‪2.6‬ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝ‪COBOL :‬‬
‫‪2.7‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﻤﺸﺎﺭﻛﺔ ﺑﺎﻟﻮﻗﺖ‪BASIC :‬‬
‫‪2.8‬ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊ‪PL / I :‬‬
‫‪2.9‬ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ‪ APL :‬ﻭ ‪SNOBOL‬‬
‫‪2.10‬ﺑﺪﺍﻳﺎﺕ ﺍﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ‪SIMULA 67 :‬‬
‫‪2.11‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪ‪ALGOL 68 :‬‬
‫‪2.12‬ﺑﻌﺾ ﺍﻷﺣﻔﺎﺩ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬
‫‪2.13‬ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ ﺍﻟﻤﻨﻄﻖ‪ :‬ﺑﺮﻭﻟﻮﺝ‬
‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬
‫‪2.15‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬
‫‪2.16‬ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪++ C :‬‬
‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬
‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫‪2.19‬ﻟﻐﺔ ‪ NET.‬ﺍﻟﺮﺉﻴﺴﻴﺔ‪# C :‬‬
‫‪2.20‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ /‬ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻬﺠﻴﻨﺔ‬

‫‪35‬‬
‫ﺗﻲ‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫ﺍﻟﻔﺼﻞ‪2‬‬ ‫‪36‬‬

‫ﻳﺼﻒﻓﺼﻠﻪ ﺗﻄﻮﻳﺮ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻳﺴﺘﻜﺸﻒ ﺍﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﺼﻤﻴﻢ ﻛﻞ‬
‫ﻣﻨﻬﺎﻭﻳﺮﻛﺰ ﻋﻠﻰ ﻣﺴﺎﻫﻤﺎﺕ ﺍﻟﻠﻐﺔ ﻭﺍﻟﺪﻭﺍﻓﻊ ﻟﺘﻄﻮﻳﺮﻫﺎ‪ .‬ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻌﺎﻣﺔ ؛ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻧﻨﺎﻗﺶ ﻓﻘﻂ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺍﻟﺘﻲ ﺗﻘﺪﻣﻬﺎ ﻛﻞ ﻟﻐﺔ‪ .‬ﻣﻦ‬
‫ﺍﻷﻣﻮﺭﺫﺍﺕ ﺍﻷﻫﻤﻴﺔ ﺍﻟﺨﺎﺻﺔ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ ﺃﻭ ﻓﻲ ﻣﺠﺎﻝ ﻋﻠﻮﻡ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬

‫ﻻﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﻨﺎﻗﺸﺔ ﻣﺘﻌﻤﻘﺔ ﻷﻱ ﺳﻤﺔ ﺃﻭ ﻣﻔﻬﻮﻡ ﻟﻐﻮﻱ ؛ ﻣﺎ ﺗﺒﻘﻰ ﻣﻦ ﻓﺼﻮﻝ‬
‫ﻻﺣﻘﺔ‪.‬ﺳﺘﻜﻮﻥ ﺍﻟﺸﺮﻭﺣﺎﺕ ﺍﻟﻤﻮﺟﺰﺓ ﻭﻏﻴﺮ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻠﻤﻴﺰﺍﺕ ﻛﺎﻓﻴﺔ ﻟﺮﺣﻠﺘﻨﺎ ﻣﻦ ﺧﻼﻝ ﺗﻄﻮﻳﺮ ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺎﺕ‪.‬‬
‫ﻳﻨﺎﻗﺶﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻭﻣﻔﺎﻫﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻟﻦ ﺗﻜﻮﻥ ﻣﺄﻟﻮﻓﺔ ﻟﻜﺜﻴﺮ‬
‫ﻣﻦﺍﻟﻘﺮﺍء‪ .‬ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ ﺍﻟﻤﻮﺿﻮﻋﺎﺕ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻘﻂ ﻓﻲ ﻓﺼﻮﻝ ﻻﺣﻘﺔ‪ .‬ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺠﺪﻭﻥ‬
‫ﻫﺬﺍﺍﻷﻣﺮ ﻣﺰﻋﺠﺎً ﻗﺪ ﻳﻔﻀﻠﻮﻥ ﺗﺄﺧﻴﺮ ﻗﺮﺍءﺓ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺣﺘﻰ ﻳﺘﻢ ﺩﺭﺍﺳﺔ ﺑﻘﻴﺔ ﺍﻟﻜﺘﺎﺏ‪.‬‬

‫ﻛﺎﻥﺍﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻫﻨﺎ ﺃﻣﺮﺍً ﺷﺨﺼﻴﺎً ‪ ،‬ﻭﺳﻮﻑ ﻳﻼﺣﻆ ﺑﻌﺾ ﺍﻟﻘﺮﺍء‬
‫ﻟﻸﺳﻒﻋﺪﻡ ﻭﺟﻮﺩ ﻭﺍﺣﺪﺓ ﺃﻭ ﺃﻛﺜﺮ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻔﻀﻠﺔ ﻟﺪﻳﻬﻢ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﻠﺤﻔﺎﻅ ﻋﻠﻰ ﻫﺬﻩ‬
‫ﺍﻟﺘﻐﻄﻴﺔﺍﻟﺘﺎﺭﻳﺨﻴﺔ ﺑﺤﺠﻢ ﻣﻌﻘﻮﻝ ‪ ،‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺍﺳﺘﺒﻌﺎﺩ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﻳﻘﺪﺭﻫﺎ ﺍﻟﺒﻌﺾ‬
‫ﺑﺸﻜﻞﻛﺒﻴﺮ‪ .‬ﺍﺳﺘﻨﺪﺕ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ ﺇﻟﻰ ﺗﻘﺪﻳﺮﻧﺎ ﻷﻫﻤﻴﺔ ﻛﻞ ﻟﻐﺔ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﻠﻐﺔ ﻭﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ ﻛﻜﻞ‪.‬‬
‫ﻧﻘﻮﻡﺃﻳﻀﺎً ﺑﺘﻀﻤﻴﻦ ﻣﻨﺎﻗﺸﺎﺕ ﻣﻮﺟﺰﺓ ﻟﺒﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﺘﻲ ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻴﻬﺎ ﻻﺣﻘﺎً ﻓﻲ‬
‫ﺍﻟﻜﺘﺎﺏ‪.‬‬

‫ﻳﺘﻢﺗﻨﻈﻴﻢ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪ :‬ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻨﺴﺦ ﺍﻷﻭﻟﻴﺔ ﻟﻠﻐﺎﺕ ﺑﺸﻜﻞ ﻋﺎﻡ‬
‫ﺑﺘﺮﺗﻴﺐﺯﻣﻨﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺗﻈﻬﺮ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻼﺣﻘﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻣﻊ ﻧﺴﺨﺘﻬﺎ ﺍﻷﻭﻟﻴﺔ ‪ ،‬ﻭﻟﻴﺲ ﻓﻲ‬
‫ﺍﻷﻗﺴﺎﻡﺍﻟﻼﺣﻘﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ‪ Fortran 2003‬ﻓﻲ ﺍﻟﻘﺴﻢ ﻣﻊ (‪I )1956‬‬
‫‪ .Fortran‬ﺃﻳﻀﺎً ‪ ،‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﺗﻈﻬﺮ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻷﻫﻤﻴﺔ ﺍﻟﺜﺎﻧﻮﻳﺔ ﻭﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ ﻟﻬﺎ‬
‫ﻗﺴﻢﺧﺎﺹ ﺑﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ‪.‬‬

‫ﻳﺘﻀﻤﻦﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻗﻮﺍﺉﻢ ﺑـ ‪ 14‬ﻧﻤﻮﺫﺟﺎً ﻛﺎﻣﻼ ًﻟﻠﺒﺮﺍﻣﺞ ‪ ،‬ﻛﻞ ﻣﻨﻬﺎ ﺑﻠﻐﺔ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻟﻢ ﻳﺘﻢ‬
‫ﻭﺻﻒﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ؛ ﺇﻧﻬﺎ ﺗﻬﺪﻑ ﺑﺒﺴﺎﻃﺔ ﺇﻟﻰ ﺗﻮﺿﻴﺢ ﻣﻈﻬﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ‪.‬‬
‫ﻳﺠﺐﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻘﺮﺍء ﺍﻟﻤﻄﻠﻌﻮﻥ ﻋﻠﻰ ﺃﻱ ﻣﻦ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ﺍﻟﺸﺎﺉﻌﺔ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﻗﺮﺍءﺓ ﻭﻓﻬﻢ ﻣﻌﻈﻢ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺑﺎﺳﺘﺜﻨﺎء ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ LISP‬ﻭ ‪ COBOL‬ﻭ ‪Smalltalk‬‬
‫‪.‬‬
‫)ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻭﻇﻴﻔﺔ ﻣﺨﻄﻂ ﻣﺸﺎﺑﻬﺔ ﻟﻤﺜﺎﻝ ‪ LISP‬ﻓﻲ ﺍﻟﻔﺼﻞ ‪ (.15‬ﻳﺘﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﻧﻔﺴﻬﺎ‬
‫ﺑﻮﺍﺳﻄﺔﺑﺮﺍﻣﺞ ‪ Fortran‬ﻭ ‪ ALGOL 60‬ﻭ ‪ PL / I‬ﻭ ‪ BASIC‬ﻭ ‪ Pascal‬ﻭ ‪ C‬ﻭ ‪ Perl‬ﻭ ‪ Ada‬ﻭ ‪ Java‬ﻭ‬
‫‪ JavaScript‬ﻭ ‪ .# C‬ﻻﺣﻆ ﺃﻥ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ﻓﻲ ﻫﺬﻩ ﺍﻟﻘﺎﺉﻤﺔ ﺗﺪﻋﻢ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ‪،‬ﻭﻟﻜﻦ ﺑﺴﺒﺐ ﺑﺴﺎﻃﺔ ﻣﺸﻜﻠﺔ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻟﻢ ﻧﺴﺘﺨﺪﻣﻬﺎ ﻓﻲ ﻧﻤﺎﺫﺝ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻓﻲ‬
‫ﺑﺮﻧﺎﻣﺞ‪ ، Fortran 95‬ﺗﺠﻨﺒﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺃﻥ ﺗﺘﺠﻨﺐ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﺤﻠﻘﺎﺕﺗﻤﺎﻣﺎً ‪ ،‬ﺟﺰﺉﻴﺎً ﻟﻠﺤﻔﺎﻅ ﻋﻠﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺴﻴﻄﺎً ﻭﻗﺎﺑﻞ ﻟﻠﻘﺮﺍءﺓ ﻭﺟﺰﺉﻴﺎً ﻟﺘﻮﺿﻴﺢ ﺑﻨﻴﺔ ﺍﻟﺤﻠﻘﺔ‬
‫ﺍﻷﺳﺎﺳﻴﺔﻟﻠﻐﺔ‪.‬‬

‫ﺍﻟﺸﻜﻞ‪ 2.1‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺨﻄﻂ ﻟﻌﻠﻢ ﺍﻷﻧﺴﺎﺏ ﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ‬
‫ﻫﺬﺍﺍﻟﻔﺼﻞ‪.‬‬
‫‪37‬‬ ‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬

‫ﻣﺘﺪﻓﻖ‬ ‫ﻓﻮﺭﺗﺮﺍﻥﺍﻷﻭﻝ‬ ‫‪1957‬‬


‫ﺍﻟﺠﻮﻝ‪58‬‬ ‫ﻓﻮﺭﺗﺮﺍﻥﺍﻟﺜﺎﻧﻲ‬ ‫‪58‬‬
‫‪LISP‬‬ ‫‪59‬‬
‫ﻛﻮﺑﻮﻝ‬ ‫‪APL‬‬ ‫ﺍﻟﺠﻮﻝ‪60‬‬ ‫‪60‬‬
‫‪61‬‬
‫‪CPL‬‬ ‫‪62‬ﻓﻮﺭﺗﺮﺍﻥ ﺍﻟﺮﺍﺑﻊ‬
‫ﺳﻨﻮﺑﻮﻝ‬ ‫ﺍﻷﻭﻝ‪SIMULA‬‬ ‫‪63‬‬
‫ﺭﺭ ‪ /‬ﺃﻧﺎ‬ ‫ﺃﺳﺎﺳﻲ‬ ‫‪64‬‬
‫‪65‬‬
‫‪ALGOL W‬‬ ‫‪66‬‬
‫ﺳﻴﻤﻮﻻ‪67‬‬ ‫‪67‬‬
‫ﺍﻟﺠﻮﻝ‪68‬‬ ‫‪68‬‬
‫‪BCPL‬‬ ‫‪69‬‬
‫ﺏ‬ ‫‪70‬‬
‫ﺝ‬ ‫ﺑﺎﺳﻜﺎﻝ‬ ‫‪71‬‬
‫‪72‬‬
‫‪ 73‬ﺑﺮﻭﻟﻮﺝ‬
‫‪74‬‬
‫ﻣﺨﻄﻂ‬ ‫‪75‬‬
‫‪76‬‬
‫ﻣﻮﺩﻭﻻ‪2-‬‬ ‫‪77‬‬
‫‪awk‬‬ ‫‪77 78‬‬
‫‪ML‬‬
‫‪79‬‬
‫ﺳﻤﻮﻝﺗﻮﻙ ‪80‬‬ ‫‪80‬‬
‫‪81‬‬
‫ﺃﻳﻘﻮﻧﺔ‬ ‫‪82‬‬
‫ﻣﻴﺮﺍﻧﺪﺍ‬ ‫ﺁﺩﺍ‪83‬‬ ‫‪83‬‬
‫‪ C ++‬ﺍﻟﺸﻮﺍﺉﺐﺍﻟﻤﺸﺘﺮﻛﺔ‬
‫‪84‬‬
‫‪85‬‬
‫ﺑﻴﺮﻝ‬ ‫‪86‬‬
‫‪87‬‬
‫ﻫﺎﺳﻜﻞ‬ ‫ﻛﻮﻳﻚﺑﻴﺴﻚ‬ ‫ﺃﻭﺑﻴﺮﻭﻥ‬ ‫ﻣﻮﺩﻭﻻ‪3‬‬
‫‪88‬‬
‫(‪ANSI C )C89‬‬ ‫‪89‬‬
‫ﺍﻟﺒﺼﺮﻳﺔﺍﻷﺳﺎﺳﻴﺔ‬ ‫ﺍﻳﻔﻞ‬ ‫‪90‬ﻓﻮﺭﺗﺮﺍﻥ ‪90‬‬
‫ﺑﺎﻳﺜﻮﻥ‬ ‫‪91‬‬
‫‪92‬‬
‫‪93‬‬
‫ﺟﺎﻓﺎ‬ ‫ﺑﻲﺃﺗﺶ ﺑﻲ‬ ‫ﻟﻮﺍ‬ ‫‪94‬‬
‫ﺭﻭﺑﻲ‬ ‫ﺁﺩﺍ‪95‬‬ ‫‪ 95‬ﻓﻮﺭﺗﺮﺍﻥ‪95‬‬
‫‪96‬‬
‫ﺟﺎﻓﺎﺳﻜﺮﻳﺒﺖ‬ ‫‪97‬‬
‫‪98‬‬
‫ﺝ ‪99‬‬ ‫‪99‬‬
‫‪Python2.0‬‬
‫ﺳﻲ ‪#‬‬ ‫‪00‬‬
‫‪Visual Basic.NET‬‬ ‫‪01‬‬
‫‪02‬‬
‫‪ 03‬ﻓﻮﺭﺗﺮﺍﻥ‪2003‬‬
‫ﺟﺎﻓﺎ‪5.0‬‬ ‫ﺭﻭﺑﻲ‪1.8‬‬ ‫‪04‬‬
‫‪05‬‬
‫ﺁﺩﺍ‪2005‬‬
‫ﺳﻲ‪2.0 #‬‬ ‫ﺟﺎﻓﺎ‪6.0‬‬ ‫‪06‬‬
‫ﺑﺎﻳﺜﻮﻥ‪3.0‬‬
‫ﺳﻲ‪3.0 #‬‬
‫‪07‬‬
‫ﺭﻭﺑﻲ‪1.9‬‬ ‫‪ 08‬ﻓﻮﺭﺗﺮﺍﻥ‪2008‬‬
‫ﺝ‪4.0 #‬‬ ‫‪09‬‬
‫ﺟﺎﻓﺎ‪7.0‬‬
‫‪10‬‬
‫‪11‬‬

‫ﺍﻟﺸﻜﻞ‪2.1‬‬

‫ﻋﻠﻢﺍﻷﻧﺴﺎﺏ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﺸﺎﺉﻌﺔ‬


‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪38‬‬

‫‪Plankalkül Zuse2.1‬‬
‫ﺗﻌﺘﺒﺮﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻏﻴﺮ ﻣﻌﺘﺎﺩﺓ ﻣﻦ ﻋﺪﺓ ﺟﻮﺍﻧﺐ‪.‬‬
‫ﻟﺴﺒﺐﻭﺍﺣﺪ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻩ ﺃﺑﺪﺍً‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺗﻄﻮﻳﺮﻫﺎ ﻓﻲ ﻋﺎﻡ ‪، 1945‬‬
‫ﻟﻢﻳﺘﻢ ﻧﺸﺮ ﻭﺻﻔﻬﺎ ﺣﺘﻰ ﻋﺎﻡ ‪ .1972‬ﻧﻈﺮﺍً ﻷﻥ ﻗﻠﺔ ﻣﻦ ﺍﻟﻨﺎﺱ ﻛﺎﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺎﻟﻠﻐﺔ ‪ ،‬ﻓﺈﻥ‬
‫ﺑﻌﺾﻗﺪﺭﺍﺗﻬﺎ ﻟﻢ ﺗﻈﻬﺮ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺇﻻ ﺑﻌﺪ ‪ 15‬ﻋﺎﻣﺎً ﻣﻦ ﺗﻄﻮﺭﻫﺎ‪.‬‬

‫‪2.1.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﺑﻴﻦﻋﺎﻣﻲ ‪ 1936‬ﻭ ‪ ، 1945‬ﻗﺎﻡ ﺍﻟﻌﺎﻟﻢ ﺍﻷﻟﻤﺎﻧﻲ ﻛﻮﻧﺮﺍﺩ ﺗﺴﻮﺯﻩ )ﺍﻟﻤﻌﺮﻭﻑ ﺑﺎﺳﻢ "ﺗﺴﻮﺯﻭﻩ"( ﺑﺒﻨﺎء‬
‫ﺳﻠﺴﻠﺔﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻌﻘﺪﺓ ﻭﺍﻟﻤﻌﻘﺪﺓ ﻣﻦ ﺍﻟﻤﺮﺣﻼﺕ ﺍﻟﻜﻬﺮﻭﻣﻴﻜﺎﻧﻴﻜﻴﺔ‪ .‬ﺑﺤﻠﻮﻝ‬
‫ﺃﻭﺍﺉﻞﻋﺎﻡ ‪ ، 1945‬ﺩﻣﺮ ﻗﺼﻒ ﺍﻟﺤﻠﻔﺎء ﺟﻤﻴﻊ ﻣﻮﺩﻳﻼﺗﻪ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﺑﺎﺳﺘﺜﻨﺎء ﻃﺮﺍﺯ ﻭﺍﺣﺪ ‪، Z4 ،‬‬
‫ﻟﺬﻟﻚﺍﻧﺘﻘﻞ ﺇﻟﻰ ﻗﺮﻳﺔ ﺑﺎﻓﺎﺭﻳﺔ ﻧﺎﺉﻴﺔ ‪ ، Hinterstein ،‬ﻭﺫﻫﺐ ﺃﻋﻀﺎء ﻣﺠﻤﻮﻋﺘﻪ ﺍﻟﺒﺤﺜﻴﺔ ﻓﻲ‬
‫ﻃﺮﻳﻘﻬﻢﺍﻟﻤﻨﻔﺼﻞ‪.‬‬
‫ﻣﻦﺧﻼﻝ ﺍﻟﻌﻤﻞ ﺑﻤﻔﺮﺩﻩ ‪ ،‬ﺷﺮﻉ ‪ Zuse‬ﻓﻲ ﻣﺤﺎﻭﻟﺔ ﻟﺘﻄﻮﻳﺮ ﻟﻐﺔ ﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﻟـ‬
‫‪ ، Z4‬ﻭﻫﻮ ﻣﺸﺮﻭﻉ ﻛﺎﻥ ﻗﺪ ﺑﺪﺃﻩ ﻓﻲ ﻋﺎﻡ ‪ 1943‬ﻛﺎﻗﺘﺮﺍﺡ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺩﺭﺟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ‪ .‬ﺃﻃﺮﻭﺣﺔ‪.‬‬
‫ﺃﻃﻠﻖﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﺳﻢ ‪ ، Plankalkül‬ﻣﻤﺎ ﻳﻌﻨﻲﺑﺮﻧﺎﻣﺞ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ‪.‬ﻓﻲ‬
‫ﻣﺨﻄﻮﻃﺔﻃﻮﻳﻠﺔ ﻣﺆﺭﺧﺔ ﻋﺎﻡ ‪ 1945‬ﻭﻟﻜﻦ ﻟﻢ ﺗﻨﺸﺮ ﺣﺘﻰ ﻋﺎﻡ ‪ ، (Zuse ، 1972) 1972‬ﺣﺪﺩ‬
‫‪ Zuse Plankalkül‬ﻭﻛﺘﺐ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺑﺎﻟﻠﻐﺔ ﻟﺤﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ‪.‬‬

‫‪2.1.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻛﺎﻥ‪ Plankalkül‬ﻣﻜﺘﻤﻼً ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ ‪ ،‬ﻣﻊ ﺑﻌﺾ ﻣﻴﺰﺍﺗﻪ ﺍﻷﻛﺜﺮ ﺗﻘﺪﻣﺎً ﻓﻲ ﻣﺠﺎﻝ ﻫﻴﺎﻛﻞ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﻛﺎﻥ ﺃﺑﺴﻂ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻓﻲ ‪ Plankalkül‬ﻫﻮ ﺍﻟﺒﺖ ﺍﻟﻔﺮﺩﻱ‪ .‬ﺗﻢ ﺇﻧﺸﺎء ﺍﻷﻧﻮﺍﻉ ﺍﻟﻌﺪﺩﻳﺔ‬
‫ﺍﻟﺼﺤﻴﺤﺔﻭﺍﻟﻌﺎﺉﻤﺔ ﻣﻦ ﻧﻮﻉ ﺍﻟﺒﺖ‪ .‬ﻳﺴﺘﺨﺪﻡ ﻧﻮﻉ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺗﺪﻭﻳﻦ ﻣﻜﻤﻞ ﺛﻨﺎﺉﻲ ﻭﻧﻈﺎﻡ‬
‫"ﺍﻟﺒﺖ ﺍﻟﻤﺨﻔﻲ" ﺍﻟﻤﺴﺘﺨﺪﻡ ﺣﺎﻟﻴﺎً ﻟﺘﺠﻨﺐ ﺗﺨﺰﻳﻦ ﺃﻫﻢ ﺑﺖ ﻣﻦ ﺟﺰء ﺍﻟﻜﺴﺮ ﺍﻟﻤﻘﻴﺲ ﻟﻘﻴﻤﺔ‬
‫ﺍﻟﻨﻘﻄﺔﺍﻟﻌﺎﺉﻤﺔ‪.‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻘﻴﺎﺳﻴﺔ ﺍﻟﻤﻌﺘﺎﺩﺓ ‪ ،‬ﺗﻀﻤﻦ ‪ Plankalkül‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ )‬


‫ﺗﺴﻤﻰﺍﻟﻬﻴﺎﻛﻞﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ‪ .(C‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﻀﻤﻦ ﺍﻟﺴﺠﻼﺕ ﺳﺠﻼﺕ ﻣﺘﺪﺍﺧﻠﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻠﻐﺔ ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻛﻠﻤﺔ ‪ goo‬ﺻﺮﻳﺤﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﺗﻀﻤﻨﺖ ﺑﻴﺎﻧﺎً ﺗﻜﺮﺍﺭﻳﺎً‬
‫ﻣﺸﺎﺑﻬﺎًﻟـ ‪Ada‬ﻝ‪ .‬ﻛﻤﺎ ﻛﺎﻥ ﻟﺪﻳﻪ ﺍﻷﻣﺮﺯﻋﻨﻔﺔﻣﻊ ﻧﺺ ﻣﺮﺗﻔﻊ ﻳﺤﺪﺩ ﺧﺮﻭﺟﺎً ﻣﻦ ﻋﺪﺩ ﻣﻌﻴﻦ ﻣﻦ‬
‫ﺗﺪﺍﺧﻞﺣﻠﻘﺎﺕ ﺍﻟﺘﻜﺮﺍﺭ ﺃﻭ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺩﻭﺭﺓ ﺗﻜﺮﺍﺭ ﺟﺪﻳﺪﺓ‪ .‬ﺗﻀﻤﻦ ‪ Plankalkül‬ﺑﻴﺎﻥ ﺍﺧﺘﻴﺎﺭ ‪ ،‬ﻟﻜﻨﻪ‬
‫ﻟﻢﻳﺴﻤﺢ ﺑـﺁﺧﺮﺑﻨﺪ‪.‬‬

‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﻛﺜﺮ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ﺑﺮﺍﻣﺞ ‪ Zuse‬ﻫﻲ ﺗﻀﻤﻴﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‬


‫ﺍﻟﺮﻳﺎﺿﻴﺔﺍﻟﺘﻲ ﺗﻮﺿﺢ ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ﺑﻴﻦ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺫﻛﺮﺕ ﻫﺬﻩ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﺎ ﻳﻤﻜﻦ‬
‫ﺃﻥﻳﻜﻮﻥ ﺻﺤﻴﺤﺎً ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ ﻋﻨﺪ ﻧﻘﺎﻁ ﻇﻬﻮﺭﻫﺎ ﻓﻲ ﺍﻟﻜﻮﺩ‪ .‬ﻫﺬﻩ ﺗﺸﺒﻪ ﺇﻟﻰ ﺣﺪ ﺑﻌﻴﺪ ﺗﺄﻛﻴﺪﺍﺕ‬
‫‪ Java‬ﻭﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.3‬‬
‫‪39‬‬ ‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬

‫ﺍﺣﺘﻮﺕﻣﺨﻄﻮﻃﺔ ‪ Zuse‬ﻋﻠﻰ ﺑﺮﺍﻣﺞ ﺫﺍﺕ ﺗﻌﻘﻴﺪ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ﺃﻱ ﺑﺮﺍﻣﺞ ﺗﻤﺖ ﻛﺘﺎﺑﺘﻬﺎ‬
‫ﻗﺒﻞﻋﺎﻡ ‪ .1945‬ﻭﺗﻀﻤﻨﺖ ﺑﺮﺍﻣﺞ ﻟﻔﺮﺯ ﻣﺼﻔﻮﻓﺎﺕ ﻣﻦ ﺍﻷﺭﻗﺎﻡ ؛ ﺍﺧﺘﺒﺎﺭ ﺍﺗﺼﺎﻝ ﺭﺳﻢ ﺑﻴﺎﻧﻲ‬
‫ﻣﻌﻴﻦ ؛ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺎﺕ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﺠﺬﺭ ﺍﻟﺘﺮﺑﻴﻌﻲ ؛‬
‫ﻭﺇﺟﺮﺍءﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺍﻟﺼﻴﻎ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻗﻮﺍﺱ ﻭﻋﻮﺍﻣﻞ ﻓﻲ ﺳﺘﺔ‬
‫ﻣﺴﺘﻮﻳﺎﺕﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻷﺳﺒﻘﻴﺔ‪ .‬ﻭﻟﻌﻞ ﺃﻛﺜﺮ ﻣﺎ ﻳﻤﻴﺰﻩ ﻫﻮ ﺧﻮﺍﺭﺯﻣﻴﺎﺗﻪ ﺍﻟﺘﻲ ﺗﻀﻢ ‪ 49‬ﺻﻔﺤﺔ‬
‫ﻟﻠﻌﺐﺍﻟﺸﻄﺮﻧﺞ ‪ ،‬ﻭﻫﻲ ﻟﻌﺒﺔ ﻟﻢ ﻳﻜﻦ ﺧﺒﻴﺮﺍً ﻓﻴﻬﺎ‪.‬‬

‫ﺇﺫﺍﻛﺎﻥ ﻋﺎﻟﻢ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻗﺪ ﻭﺟﺪ ﻭﺻﻒ ‪ Zuse‬ﻟـ ‪ Plankalkül‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ‬


‫ﻣﻦﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻓﺈﻥ ﺍﻟﺠﺎﻧﺐ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻟﺬﻱ ﻛﺎﻥ ﺳﻴﻌﻮﻕ ﺗﻨﻔﻴﺬﻩ ﻛﻤﺎ ﻫﻮ ﻣﺤﺪﺩ‬
‫ﻟﻜﺎﻥﻫﻮ ﺍﻟﺘﺪﻭﻳﻦ‪ .‬ﺗﺘﻜﻮﻥ ﻛﻞ ﻋﺒﺎﺭﺓ ﻣﻦ ﺳﻄﺮﻳﻦ ﺃﻭ ﺛﻼﺛﺔ ﺃﺳﻄﺮ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪ .‬ﻛﺎﻥ‬
‫ﺍﻟﺴﻄﺮﺍﻷﻭﻝ ﺃﺷﺒﻪ ﺑﺒﻴﺎﻧﺎﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ‪ .‬ﺍﻟﺴﻄﺮ ﺍﻟﺜﺎﻧﻲ ‪ ،‬ﺍﻟﺬﻱ ﻛﺎﻥ ﺍﺧﺘﻴﺎﺭﻳﺎً ‪ ،‬ﺍﺣﺘﻮﻯ ﻋﻠﻰ‬
‫ﺭﻣﻮﺯﻣﺮﺍﺟﻊ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﻭﻝ‪ .‬ﺍﺳﺘﺨﺪﻡ ﺗﺸﺎﺭﻟﺰ ﺑﺎﺑﺎﺝ ﻧﻔﺲ ﻃﺮﻳﻘﺔ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ‬
‫ﺍﻟﻤﺨﻄﻮﻃﺎﺕﻓﻲ ﺑﺮﺍﻣﺞ ﻟﻤﺤﺮﻛﻪ ﺍﻟﺘﺤﻠﻴﻠﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﻘﺮﻥ ﺍﻟﺘﺎﺳﻊ ﻋﺸﺮ‪ .‬ﺍﺣﺘﻮﻯ ﺍﻟﺴﻄﺮ‬
‫ﺍﻷﺧﻴﺮﻣﻦ ﻛﻞ ﺑﻴﺎﻥ ‪ Plankalkül‬ﻋﻠﻰ ﺃﺳﻤﺎء ﺍﻷﻧﻮﺍﻉ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺬﻛﻮﺭﺓ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﻭﻝ‪.‬‬
‫ﻫﺬﺍﺍﻟﺘﺮﻣﻴﺰ ﻣﺨﻴﻒ ﻟﻠﻐﺎﻳﺔ ﻋﻨﺪ ﺭﺅﻳﺘﻪ ﻷﻭﻝ ﻣﺮﺓ‪.‬‬

‫ﻣﺜﺎﻝﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺘﻌﻴﻴﻦ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺮﺃ ]‪1+ [4‬ﻝﺃ ]‪، [5‬ﻳﻮﺿﺢ‬
‫ﻫﺬﺍﺍﻟﺘﺮﻣﻴﺰ‪ .‬ﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺍﻟﺨﺎﻣﺲﻫﻮ ﻟﻠﻤﺨﻄﻮﻃﺎﺕ ‪ ،‬ﻭﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺱﻫﻮ ﻷﻧﻮﺍﻉ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‪1.n،‬‬
‫ﻳﻌﻨﻲﻋﺪﺩﺍً ﺻﺤﻴﺤﺎً ﻣﻦﻥﺃﺟﺰﺍء‪:‬‬

‫| ﺃ ‪ <= 1 +‬ﺃ‬
‫‪5‬‬ ‫ﺍﻟﺨﺎﻣﺲ| ‪4‬‬

‫‪1.n‬‬ ‫‪S | 1.n‬‬

‫ﻻﻳﺴﻌﻨﺎ ﺇﻻ ﺍﻟﺘﻜﻬﻦ ﺑﺎﻻﺗﺠﺎﻩ ﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﺘﺨﺬﻩ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﺫﺍ ﻛﺎﻥ ﻋﻤﻞ‬
‫‪ Zuse‬ﻣﻌﺮﻭﻓﺎً ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻋﺎﻡ ‪ 1945‬ﺃﻭ ﺣﺘﻰ ﻋﺎﻡ ‪ .1950‬ﻭﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻳﻀ ًﺎ‬
‫ﺍﻟﺘﻔﻜﻴﺮﻓﻲ ﻛﻴﻒ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻤﻠﻪ ﻣﺨﺘﻠﻔﺎً ﻟﻮ ﺃﻧﻪ ﻗﺎﻡ ﺑﺬﻟﻚ ﻓﻲ ﺑﻴﺉﺔ ﺳﻠﻤﻴﺔ ﻣﺤﺎﻃﺔ ﺑـ‬
‫ﻋﻠﻤﺎءﺁﺧﺮﻳﻦ ‪ ،‬ﻭﻟﻴﺲ ﻓﻲ ﺃﻟﻤﺎﻧﻴﺎ ﻋﺎﻡ ‪ 1945‬ﻓﻲ ﻋﺰﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ‪.‬‬

‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬
‫ﺃﻭﻻ ‪،‬ﻻﺣﻆ ﺃﻥ ﺍﻟﻜﻠﻤﺔﻛﻮﺩ ﻣﺰﻳﻒﺗﺴﺘﺨﺪﻡ ﻫﻨﺎ ﺑﻤﻌﻨﻰ ﻣﺨﺘﻠﻒ ﻋﻦ ﻣﻌﻨﺎﻫﺎ ﺍﻟﻤﻌﺎﺻﺮ‪ .‬ﻧﺤﻦ ﻧﻄﻠﻖ‬
‫ﻋﻠﻰﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻜﺎﺫﺑﺔ ﻷﻥ ﻫﺬﺍ ﻫﻮ ﻣﺎ ﺗﻢ ﺗﺴﻤﻴﺘﻪ‬
‫ﻓﻲﻭﻗﺖ ﺗﻄﻮﻳﺮﻫﺎ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ )ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ(‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﺃﻛﻮﺍﺩ ﺯﺍﺉﻔﺔ ﺑﺎﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺎﺻﺮ‪.‬‬

‫ﻛﺎﻧﺖﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﻣﺘﻮﻓﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ‬


‫ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﺍﻟﻴﻮﻡ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻛﻮﻧﻬﺎ ﺑﻄﻴﺉﺔ ﻭﻏﻴﺮ ﻣﻮﺛﻮﻗﺔ ﻭﻣﻜﻠﻔﺔ ﻭﻟﺪﻳﻬﺎ ﺫﺍﻛﺮﺓ ﺻﻐﻴﺮﺓ ﻟﻠﻐﺎﻳﺔ ‪ ،‬ﻛﺎﻥ ﻣﻦ‬
‫ﺍﻟﺼﻌﺐﺑﺮﻣﺠﺔ ﺍﻵﻻﺕ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﺑﺴﺒﺐ ﻧﻘﺺ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺪﺍﻋﻤﺔ‪.‬‬
‫ﻟﻢﺗﻜﻦ ﻫﻨﺎﻙ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺃﻭ ﺣﺘﻰ ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ‪ ،‬ﻟﺬﻟﻚ ﺗﻢ ﺇﺟﺮﺍء‬
‫ﺍﻟﺒﺮﻣﺠﺔﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﺷﺎﻕ ﻭﻣﻀﺠﺮ ﻋﻠﻰ ﺣﺪ ﺳﻮﺍء‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪40‬‬

‫ﻣﻌﺮﺽﻟﻠﺨﻄﺄ‪ .‬ﻣﻦ ﺑﻴﻦ ﻣﺸﺎﻛﻠﻬﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺮﻗﻤﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﻗﺪ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺗﻌﻠﻴﻤﺎﺕ ﺇﺿﺎﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ ‪ 14‬ﺑﺪﻻ ًﻣﻦ ﺍﺳﻢ ﻧﺼﻲ ﺿﻤﻨﻲ ‪ ،‬ﺣﺘﻰ‬
‫ﻟﻮﻛﺎﻥ ﺣﺮﻓﺎً ﻭﺍﺣﺪﺍً ﻓﻘﻂ‪ .‬ﻫﺬﺍ ﻳﺠﻌﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺻﻌﺒﺔ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﺍﻟﻤﺸﻜﻠﺔ ﺍﻷﻛﺜﺮ ﺧﻄﻮﺭﺓ ﻫﻲ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﻄﻠﻘﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺗﻌﺪﻳﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻤﻼ ًﻭﻋﺮﺿﺔ ﻟﻠﺨﻄﺄ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻓﺘﺮﺽﺃﻥ ﻟﺪﻳﻨﺎ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ ﻣﺨﺰﻥ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﺗﺸﻴﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﻣﺜﻞ ﻫﺬﺍ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺇﻟﻰ ﻣﻮﺍﻗﻊ ﺃﺧﺮﻯ ﺩﺍﺧﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻋﺎﺩﺓ ًﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻫﺪﺍﻑ‬
‫ﺗﻌﻠﻴﻤﺎﺕﺍﻟﻔﺮﻉ‪ .‬ﻳﺆﺩﻱ ﺇﺩﺧﺎﻝ ﺗﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺃﻱ ﻣﻮﺿﻊ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺨﻼﻑ ﺍﻟﻨﻬﺎﻳﺔ ﺇﻟﻰ ﺇﺑﻄﺎﻝ‬
‫ﺻﺤﺔﺟﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﺘﺠﺎﻭﺯ ﻧﻘﻄﺔ ﺍﻹﺩﺭﺍﺝ ‪ ،‬ﻷﻧﻪ ﻳﺠﺐ ﺯﻳﺎﺩﺓ‬
‫ﻫﺬﻩﺍﻟﻌﻨﺎﻭﻳﻦ ﻹﻓﺴﺎﺡ ﺍﻟﻤﺠﺎﻝ ﻟﻠﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﻹﺟﺮﺍء ﺍﻹﺿﺎﻓﺔ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ‪ ،‬ﻳﺠﺐ‬
‫ﺍﻟﻌﺜﻮﺭﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻹﺭﺷﺎﺩﺍﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﻠﻲ ﺍﻹﺿﺎﻓﺔ ﻭﺗﻌﺪﻳﻠﻬﺎ‪ .‬ﺗﺤﺪﺙ‬
‫ﻣﺸﻜﻠﺔﻣﻤﺎﺛﻠﺔ ﻣﻊ ﺣﺬﻑ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺘﻀﻤﻦ ﻟﻐﺎﺕ ﺍﻵﻟﺔ‬
‫ﺗﻌﻠﻴﻤﺎﺕ"ﺑﺪﻭﻥ ﻋﻤﻠﻴﺔ" ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺤﻞ ﻣﺤﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺤﺬﻭﻓﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺗﺠﻨﺐ‬
‫ﺍﻟﻤﺸﻜﻠﺔ‪.‬‬

‫ﻫﺬﻩﻣﺸﻜﻼﺕ ﻗﻴﺎﺳﻴﺔ ﻣﻊ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻭﻛﺎﻧﺖ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﺳﺎﺳﻴﺔ ﻻﺧﺘﺮﺍﻉ‬


‫ﺍﻟﻤﺠﻤﻌﺎﺕﻭﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﻣﻌﻈﻢ ﻣﺸﺎﻛﻞ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﺭﻗﻤﻴﺔ ﻭﺗﺘﻄﻠﺐ ﻋﻤﻠﻴﺎﺕ ﺣﺴﺎﺑﻴﺔ ﺑﺎﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻭﻓﻬﺮﺳﺔ ﻣﻦ ﻧﻮﻉ ﻣﺎ ﻟﻠﺴﻤﺎﺡ‬
‫ﺑﺎﻻﺳﺘﺨﺪﺍﻡﺍﻟﻤﺮﻳﺢ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺃﻱ ﻣﻦ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ﻓﻲ ﺑﻨﻴﺔ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﺃﺩﺕ ﺃﻭﺟﻪ‬
‫ﺍﻟﻘﺼﻮﺭﻫﺬﻩ ﺑﻄﺒﻴﻌﺔ ﺍﻟﺤﺎﻝ ﺇﻟﻰ ﺗﻄﻮﻳﺮ ﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪.‬‬

‫‪2.2.1‬ﺍﻟﺮﻣﺰ ﺍﻟﻤﺨﺘﺼﺮ‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ‪ ، Short Code‬ﺑﻮﺍﺳﻄﺔ ‪ John Mauchly‬ﻓﻲ‬
‫ﻋﺎﻡ‪ 1949‬ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ، BINAC‬ﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻭﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔﺍﻟﻨﺎﺟﺤﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻤﺨﺰﻧﺔ‪ .‬ﺗﻢ ﻧﻘﻞ ﺍﻟﺮﻣﺰ ﺍﻟﻘﺼﻴﺮ ﻻﺣﻘﺎً ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪) UNIVAC I‬ﺃﻭﻝ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺇﻟﻜﺘﺮﻭﻧﻲ ﺗﺠﺎﺭﻱ ﻳﺒُﺎﻉ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ( ‪ ،‬ﻭﻛﺎﻥ ﻟﻌﺪﺓ ﺳﻨﻮﺍﺕ ﺃﺣﺪ ﺍﻟﻮﺳﺎﺉﻞ‬
‫ﺍﻷﺳﺎﺳﻴﺔﻟﺒﺮﻣﺠﺔ ﺗﻠﻚ ﺍﻷﺟﻬﺰﺓ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻻ ﻳﻌُﺮﻑ ﺳﻮﻯ ﺍﻟﻘﻠﻴﻞ ﻋﻦ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺨﺘﺼﺮ‬
‫ﺍﻷﺻﻠﻲﻷﻧﻪ ﻟﻢ ﻳﺘﻢ ﻧﺸﺮ ﻭﺻﻔﻪ ﺍﻟﻜﺎﻣﻞ ﻣﻄﻠﻘﺎً ‪ ،‬ﻓﻘﺪ ﻧﺠﺎ ﺩﻟﻴﻞ ﺑﺮﻣﺠﺔ ﻹﺻﺪﺍﺭ (‪-Rand ، 1952‬‬
‫‪ .UNIVAC I )Remington‬ﻣﻦ ﺍﻵﻣﻦ ﺃﻥ ﻧﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻨﺴﺨﺘﻴﻦ ﻛﺎﻧﺘﺎ ﻣﺘﺸﺎﺑﻬﺘﻴﻦ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻛﺎﻧﺖﻛﻠﻤﺎﺕ ﺫﺍﻛﺮﺓ ‪ UNIVAC I‬ﺗﺤﺘﻮﻱ ﻋﻠﻰ ‪ 72‬ﺑﺘﺎً ‪ ،‬ﻣﺠﻤﻌﺔ ﻓﻲ ‪ 12‬ﺑﺎﻳﺖ ﺳﺘﺔ ﺑﺖ‪.‬‬
‫ﻳﺘﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﻣﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻣﺸﻔﺮﺓ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﻟﺘﻲ ﻳﺠﺐ ﺗﻘﻴﻴﻤﻬﺎ‪.‬‬
‫ﻛﺎﻧﺖﺍﻟﺮﻣﻮﺯ ﻋﺒﺎﺭﺓ ﻋﻦ ﻗﻴﻢ ﺛﻨﺎﺉﻴﺔ ﺍﻟﺒﺎﻳﺖ ‪ ،‬ﻭﻳﻤﻜﻦ ﺗﺮﻣﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻌﺎﺩﻻﺕ ﻓﻲ ﻛﻠﻤﺔ‬
‫ﻭﺍﺣﺪﺓ‪.‬ﺗﻢ ﺗﻀﻤﻴﻦ ﺭﻣﻮﺯ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪ 1‬ﻥ )ﻥ ‪ (2 +‬ﺍﻟﻘﻮﺓ ﺍﻟﺜﺎﻧﻴﺔ‬ ‫ﻗﻴﻤﺔﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻄﻠﻘﺔ‬ ‫‪06‬‬ ‫‪-‬‬ ‫‪01‬‬


‫‪ 2‬ﻥ )ﻥ ‪ (2 +‬ﻭ ﺟﺬﺭ‬ ‫‪+‬‬ ‫‪07‬‬ ‫(‬ ‫‪02‬‬
‫‪ 4‬ﻥ ﺇﺫﺍ>= ‪n‬‬ ‫ﻳﻮﻗﻒ‬ ‫‪08‬‬ ‫=‬ ‫‪03‬‬
‫‪ 58‬ﻃﺒﺎﻋﺔﻭﻋﻼﻣﺔ ﺗﺒﻮﻳﺐ‬ ‫)‬ ‫‪09‬‬ ‫‪/‬‬ ‫‪04‬‬
‫‪41‬‬ ‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬

‫ﺗﻤﺖﺗﺴﻤﻴﺔ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺑﺮﻣﻮﺯ ﺯﻭﺝ ﺍﻟﺒﺎﻳﺖ ‪ ،‬ﻭﻛﺬﻟﻚ ﺍﻟﻤﻮﺍﻗﻊ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺜﻮﺍﺑﺖ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪X0،‬ﻭ‪Y0‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﻐﻴﺮﺍﺕ‪ .‬ﺍﻟﺒﻴﺎﻥ‬

‫((‪X0 = SQRT )ABS )Y0‬‬

‫ﺳﻴﺘﻢﺗﺮﻣﻴﺰﻫﺎ ﻓﻲ ﻛﻠﻤﺔ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪00 X0 03 20 06 Y0.‬ﺍﻷﻭﻟﻲ‪00‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﺤﺸﻮ‬


‫ﻟﻤﻞءﺍﻟﻜﻠﻤﺔ‪ .‬ﻭﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻧﻪ ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﻛﻮﺩ ﺍﻟﻀﺮﺏ‪ .‬ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻀﺮﺏ‬
‫ﻣﻦﺧﻼﻝ ﻭﺿﻊ ﺍﻟﻤﻌﺎﻣﻠﻴﻦ ﺑﺠﻮﺍﺭ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ﺍﻟﺠﺒﺮ‪.‬‬

‫ﻟﻢﺗﺘﻢ ﺗﺮﺟﻤﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺇﻟﻰ ﺭﻣﺰ ﺍﻟﺠﻬﺎﺯ ؛ ﺑﺪﻻ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻣﻊ ﻣﺘﺮﺟﻢ ﻧﻘﻲ‪.‬‬
‫ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻠﻘﺎﺉﻴﺔ‪.‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻳﺒﺴﻂ ﻋﻤﻠﻴﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔ ‪،‬ﻭﻟﻜﻦ ﻋﻠﻰ ﺣﺴﺎﺏ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻥ ﺗﻔﺴﻴﺮ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺃﺑﻄﺄ ﺑﺤﻮﺍﻟﻲ ‪ 50‬ﻣﺮﺓ ﻣﻦ‬
‫ﻛﻮﺩﺍﻵﻟﺔ‪.‬‬

‫‪2.2.2‬ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ‬
‫ﻓﻲﺃﻣﺎﻛﻦ ﺃﺧﺮﻯ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﻔﺴﻴﺮﻳﺔ ﺍﻟﺘﻲ ﻭﺳﻌﺖ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻟﺘﺸﻤﻞ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻳﻌﺪ ﻧﻈﺎﻡ ‪ Speedcoding‬ﺍﻟﺬﻱ ﻃﻮﺭﻩ ‪ John Backus‬ﻟـ ‪ IBM 701‬ﻣﺜﺎﻻ ً‬
‫ﻋﻠﻰﻣﺜﻞ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ )‪ .(Backus ، 1954‬ﻗﺎﻡ ﻣﺘﺮﺟﻢ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ ﺑﺘﺤﻮﻳﻞ ‪ 701‬ﺇﻟﻰ ﺁﻟﺔ‬
‫ﺣﺎﺳﺒﺔﺍﻓﺘﺮﺍﺿﻴﺔ ﺫﺍﺕ ﺛﻼﺛﺔ ﻋﻨﺎﻭﻳﻦ ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﺗﻀﻤﻦ ﺍﻟﻨﻈﺎﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺯﺍﺉﻔﺔ‬
‫ﻟﻠﻌﻤﻠﻴﺎﺕﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻷﺭﺑﻊ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ‪ ،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻋﻤﻠﻴﺎﺕ ﻣﺜﻞ ﺍﻟﺠﺬﺭ‬
‫ﺍﻟﺘﺮﺑﻴﻌﻲﻭﺍﻟﺠﻴﺐ ﻭﺍﻟﻈﻞ ﺍﻟﻘﻮﺳﻲ ﻭﺍﻷﺱ ﻭﺍﻟﻠﻮﻏﺎﺭﻳﺘﻢ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻔﺮﻭﻉ ﺍﻟﺸﺮﻃﻴﺔ ﻭﻏﻴﺮ ﺍﻟﻤﺸﺮﻭﻃﺔ‬
‫ﻭﺗﺤﻮﻳﻼﺕﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻌﻤﺎﺭﺓ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻜﺮﺓ ﻋﻦ ﻗﻴﻮﺩ ﻫﺬﻩ‬
‫ﺍﻷﻧﻈﻤﺔ ‪،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺃﻥ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺒﻘﻴﺔ ﺑﻌﺪ ﺗﺤﻤﻴﻞ ﺍﻟﻤﺘﺮﺟﻢ ﻛﺎﻧﺖ‬
‫‪700‬ﻛﻠﻤﺔ ﻓﻘﻂ ﻭﺃﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺿﺎﻓﺔ ﺍﺳﺘﻐﺮﻗﺖ ‪ 4.2‬ﻣﻠﻠﻲ ﺛﺎﻧﻴﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪،‬‬
‫ﺗﻀﻤﻨﺖ‪ Speedcoding‬ﻣﺮﻓﻘﺎً ﺟﺪﻳﺪﺍً ﻳﺘﻤﺜﻞ ﻓﻲ ﺯﻳﺎﺩﺓ ﺳﺠﻼﺕ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺗﻠﻘﺎﺉﻴﺎً‪ .‬ﻟﻢ ﺗﻈﻬﺮ‬
‫ﻫﺬﻩﺍﻟﻤﻴﺰﺓ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺣﺘﻰ ﺣﻮﺍﺳﻴﺐ ‪ UNIVAC 1107‬ﻟﻌﺎﻡ ‪ .1962‬ﻭﺑﺴﺒﺐ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ ‪،‬‬
‫ﻳﻤﻜﻦﺇﺟﺮﺍء ﻣﻀﺎﻋﻔﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ‪ 12‬ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ‪ .Speedcoding‬ﺍﺩﻋﻰ ﺑﺎﻛﻮﺱ ﺃﻥ‬
‫ﺍﻟﻤﺸﺎﻛﻞﺍﻟﺘﻲ ﻗﺪ ﺗﺴﺘﻐﺮﻕ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺒﺮﻣﺠﺘﻬﺎ ﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ﻳﻤﻜﻦ ﺑﺮﻣﺠﺘﻬﺎ ﻓﻲ ﺑﻀﻊ ﺳﺎﻋﺎﺕ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ‪.‬‬

‫‪2.2.3‬ﻧﻈﺎﻡ ‪" UNIVAC‬ﺍﻟﺘﺠﻤﻴﻊ"‬


‫ﺑﻴﻦﻋﺎﻣﻲ ‪ 1951‬ﻭ ‪ ، 1953‬ﻃﻮﺭ ﻓﺮﻳﻖ ﺑﻘﻴﺎﺩﺓ ‪ Grace Hopper‬ﻓﻲ ‪ UNIVAC‬ﺳﻠﺴﻠﺔ ﻣﻦ‬
‫ﺃﻧﻈﻤﺔ"ﺍﻟﺘﺠﻤﻴﻊ" ﺍﻟﻤﺴﻤﺎﺓ ‪ A-0‬ﻭ ‪ A-1‬ﻭ ‪ A-2‬ﻭﺍﻟﺘﻲ ﻭﺳﻌﺖ ﺭﻣﺰﺍً ﺯﺍﺉﻔﺎً ﺇﻟﻰ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻟﺮﻣﺰ‬
‫ﺍﻵﻟﺔﺑﻨﻔﺲ ﻃﺮﻳﻘﺔ ﺗﻮﺳﻴﻊ ﻭﺣﺪﺍﺕ ﺍﻟﻤﺎﻛﺮﻭ ﻓﻲ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻛﺎﻥ ﻣﺼﺪﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻜﺎﺫﺏ ﻟﻬﺆﻻء "‬
‫ﺍﻟﻤﺘﺮﺟﻤﻴﻦ" ﻻ ﻳﺰﺍﻝ ﺑﺪﺍﺉﻴﺎً ﺗﻤﺎﻣﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻛﺎﻥ ﺗﺤﺴﻴﻨﺎً ﻛﺒﻴﺮﺍً ﻋﻠﻰ ﺭﻣﺰ ﺍﻟﺠﻬﺎﺯ‬
‫ﻷﻧﻪﺟﻌﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﺼﺪﺭ ﺃﻗﺼﺮ ﺑﻜﺜﻴﺮ‪ .‬ﺍﻗﺘﺮﺡ ﻭﻳﻠﻜﺲ )‪ (1952‬ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﻋﻤﻠﻴﺔ ﻣﻤﺎﺛﻠﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪42‬‬

‫‪2.2.4‬ﺍﻷﻋﻤﺎﻝ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‬


‫ﺗﻢﺗﻄﻮﻳﺮ ﻭﺳﺎﺉﻞ ﺃﺧﺮﻯ ﻟﺘﺴﻬﻴﻞ ﻣﻬﻤﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻧﻔﺲ ﺍﻟﻮﻗﺖ ﺗﻘﺮﻳﺒﺎً‪ .‬ﻓﻲ ﺟﺎﻣﻌﺔ‬
‫ﻛﺎﻣﺒﺮﻳﺪﺝ ‪،‬ﻃﻮﺭ ﺩﻳﻔﻴﺪ ﺟﻴﻪ ﻭﻳﻠﺮ )‪ (1950‬ﻃﺮﻳﻘﺔ ﻻﺳﺘﺨﺪﺍﻡ ﻛﺘﻞ ﻣﻦ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻠﻨﻘﻞ‬
‫ﻟﺤﻞﻣﺸﻜﻠﺔ ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻤﻄﻠﻘﺔ ‪ ،‬ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ‪ ،‬ﻭﺑﻌﺪ ﺫﻟﻚ ﻗﺎﻡ ﻣﻮﺭﻳﺲ ﻓﻲ‪ .‬ﻭﻳﻠﻜﺲ )ﺃﻳﻀﺎً‬
‫ﻓﻲﻛﺎﻣﺒﺮﻳﺪﺝ( ﺑﺘﻮﺳﻴﻊ ﺍﻟﻔﻜﺮﺓ ﻟﺘﺸﻤﻞ ﺍﻟﺘﺼﻤﻴﻢ ﺑﺮﻧﺎﻣﺞ ﺗﺠﻤﻴﻊ ﻳﻤﻜﻨﻪ ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻹﺟﺮﺍءﺍﺕ‬
‫ﺍﻟﻔﺮﻋﻴﺔﺍﻟﻤﺨﺘﺎﺭﺓ ﻭﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ )‪ .(Wilkes et al.، 1951، 1957‬ﻛﺎﻥ ﻫﺬﺍ ﺑﺎﻟﻔﻌﻞ ﺗﻘﺪﻣﺎً‬
‫ﻣﻬﻤﺎًﻭﺃﺳﺎﺳﻴﺎً‪.‬‬

‫ﻳﺠﺐﺃﻥ ﻧﺬﻛﺮ ﺃﻳﻀﺎً ﺃﻥ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ‪ ،‬ﺗﻄﻮﺭﺕ ﺧﻼﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﻥ ﻟﻬﺎ‬
‫ﺗﺄﺛﻴﺮﺿﺉﻴﻞ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬

‫‪2.3‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ 704‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬
‫ﻣﻦﺍﻟﻤﺆﻛﺪ ﺃﻥ ﺃﺣﺪ ﺃﻋﻈﻢ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﻔﺮﺩﻳﺔ ﻓﻲ ﺍﻟﺤﻮﺳﺒﺔ ﺟﺎء ﻣﻊ ﺇﺩﺧﺎﻝ ‪ IBM 704‬ﻓﻲ ﻋﺎﻡ‬
‫‪، 1954‬ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻷﻥ ﻗﺪﺭﺍﺗﻪ ﺩﻓﻌﺖ ﺇﻟﻰ ﺗﻄﻮﻳﺮ ‪ .Fortran‬ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺠﺎﺩﻝ ﺑﺄﻧﻪ ﺇﺫﺍ‬
‫ﻟﻢﺗﻜﻦ ﺷﺮﻛﺔ ‪ IBM‬ﻣﻊ ‪ 704‬ﻭ ‪ ، Fortran‬ﻟﻜﺎﻧﺖ ﺑﻌﺪ ﺫﻟﻚ ﻗﺮﻳﺒﺎً ﻣﻨﻈﻤﺔ ﺃﺧﺮﻯ ﻟﺪﻳﻬﺎ ﻛﻤﺒﻴﻮﺗﺮ‬
‫ﻣﺸﺎﺑﻪﻭﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺫﺍﺕ ﺻﻠﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﺷﺮﻛﺔ ‪ IBM‬ﻫﻲ ﺍﻷﻭﻟﻰ ﻣﻦ ﺣﻴﺚ‬
‫ﺍﻟﺒﺼﻴﺮﺓﻭﺍﻟﻤﻮﺍﺭﺩ ﺍﻟﻼﺯﻣﺔ ﻟﻠﻘﻴﺎﻡ ﺑﻬﺬﻩ ﺍﻟﺘﻄﻮﺭﺍﺕ‪.‬‬

‫‪2.3.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻛﺎﻥﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﻲ ﺃﺩﺕ ﺇﻟﻰ ﺍﻟﺘﺴﺎﻣﺢ ﻣﻊ ﺑﻂء ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﻔﺴﻴﺮﻳﺔ ﻣﻦ ﺃﻭﺍﺧﺮ‬
‫ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕﺇﻟﻰ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﻫﻮ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻔﺎﺻﻠﺔ‬
‫ﺍﻟﻌﺎﺉﻤﺔﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺘﺎﺣﺔ‪ .‬ﻛﺎﻥ ﻻ ﺑﺪ ﻣﻦ ﻣﺤﺎﻛﺎﺓ ﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ‬
‫ﻓﻲﺑﺮﻧﺎﻣﺞ ‪ ،‬ﻭﻫﻲ ﻋﻤﻠﻴﺔ ﺗﺴﺘﻐﺮﻕ ﻭﻗﺘﺎً ﻃﻮﻳﻼ‪ ً.‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻭﻗﺖ ﺍﻟﻤﻌﺎﻟﺞ ﻗﺪ ﺗﻢ ﺇﻧﻔﺎﻗﻪ‬
‫ﻓﻲﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﻌﺎﺉﻤﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﻨﻔﻘﺎﺕ ﺍﻟﻌﺎﻣﺔ ﻟﻠﺘﻔﺴﻴﺮ ﻭﻣﺤﺎﻛﺎﺓ ﺍﻟﻔﻬﺮﺳﺔ ﻛﺎﻧﺖ ﻏﻴﺮ‬
‫ﻣﻬﻤﺔﻧﺴﺒﻴﺎً‪ .‬ﻃﺎﻟﻤﺎ ﺃﻥ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻳﺠﺐ ﺃﻥ ﺗﺘﻢ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﻓﺈﻥ ﺍﻟﺘﺮﺟﻤﺔ‬
‫ﺍﻟﻔﻮﺭﻳﺔﺗﻌﺘﺒﺮ ﻧﻔﻘﺔ ﻣﻘﺒﻮﻟﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻟﻢ‬
‫ﻳﺴﺘﺨﺪﻣﻮﺍﺃﺑﺪﺍً ﺃﻧﻈﻤﺔ ﺗﻔﺴﻴﺮﻳﺔ ‪ ،‬ﻣﻔﻀﻠﻴﻦ ﻛﻔﺎءﺓ ﻟﻐﺔ ﺍﻵﻟﺔ )ﺃﻭ ﺍﻟﺘﺠﻤﻴﻊ( ﺍﻟﻤﺸﻔﺮﺓ ﻳﺪﻭﻳﺎً‪ .‬ﺃﻋﻠﻦ‬
‫ﺍﻹﻋﻼﻥﻋﻦ ﻧﻈﺎﻡ ‪ ، IBM 704‬ﻣﻊ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻔﻬﺮﺳﺔ ﻭﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ‪ ،‬ﺑﻨﻬﺎﻳﺔ‬
‫ﻋﺼﺮﺍﻟﺘﻔﺴﻴﺮ ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻟﻠﺤﺴﺎﺑﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﺃﺩﻯ ﺗﻀﻤﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺇﻟﻰ ﺇﺯﺍﻟﺔ‬
‫ﻣﻜﺎﻥﺍﻻﺧﺘﺒﺎء ﻟﺘﻜﻠﻔﺔ ﺍﻟﺘﺮﺟﻤﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ Fortran‬ﻳﻨُﺴﺐ ﺇﻟﻴﻬﺎ ﻏﺎﻟﺒﺎً ﻛﻮﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﻣﺠُﻤﻌَّﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪،‬‬
‫ﺇﻻﺃﻥ ﺍﻟﺴﺆﺍﻝ ﺣﻮﻝ ﻣﻦ ﻳﺴﺘﺤﻖ ﺍﻟﺘﻘﺪﻳﺮ ﻟﺘﻨﻔﻴﺬ ﺃﻭﻝ ﻟﻐﺔ ﻣﻦ ﻫﺬﺍ ﺍﻟﻘﺒﻴﻞ ﻣﻔﺘﻮﺡ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪.‬‬
‫ﺃﻋﻄﻰ (‪ Knuth and Pardo )1977‬ﺍﻟﻔﻀﻞ ﺇﻟﻰ ‪ .Alick E‬ﻃﻮﺭ ﺟﻠﻴﻨﻲ ﺍﻟﻤﺘﺮﺟﻢ ﻓﻲ‬
‫‪ ، Fort Halstead‬ﻣﺆﺳﺴﺔ ﺃﺑﺤﺎﺙ ﺍﻟﺘﺴﻠﺢ ﺍﻟﻤﻠﻜﻴﺔ ‪ ،‬ﻓﻲ ﺇﻧﺠﻠﺘﺮﺍ‪ .‬ﺗﻢ ﺗﺸﻐﻴﻞ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺤﻠﻮﻝ‬
‫ﺳﺒﺘﻤﺒﺮ‪ .1952‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻭﻓﻘﺎً ﻟﺠﻮﻥ ﺑﺎﻛﻮﺱ )‪ ، Wexelblat ، 1981‬ﺹ ‪، (26‬‬
‫‪43‬‬ ‫‪2.3‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ 704‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬

‫ﻛﺎﻥ‪ Autocode‬ﺍﻟﺨﺎﺹ ﺑـ ‪ Glennie‬ﻣﻨﺨﻔﺾ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻠﻐﺎﻳﺔ ﻭﻣﻮﺟﻪ ﻧﺤﻮ ﺍﻵﻟﺔ ﺑﺤﻴﺚ ﻻ‬


‫ﻳﻨﺒﻐﻲﺍﻋﺘﺒﺎﺭﻩ ﻧﻈﺎﻣﺎً ﻣﺠﻤﻌﺎً‪ .‬ﻳﻌﻄﻲ ‪ Backus‬ﺍﻟﻔﻀﻞ ﺇﻟﻰ ‪ Laning‬ﻭ ‪ Zierler‬ﻓﻲ ﻣﻌﻬﺪ‬
‫ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬
‫ﻛﺎﻥﻧﻈﺎﻡ (‪ Laning and Zierler )Laning and Zierler ، 1954‬ﺃﻭﻝ ﻧﻈﺎﻡ ﺗﺮﺟﻤﺔ‬
‫ﺟﺒﺮﻱﻳﺘﻢ ﺗﻨﻔﻴﺬﻩ‪ .‬ﻣﻦ ﺧﻼﻝ ﺍﻟﺠﺒﺮ ‪ ،‬ﻓﺈﻧﻨﺎ ﻧﻌﻨﻲ ﺃﻧﻬﺎ ﺗﺮﺟﻤﺖ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ‪ ،‬ﻭﺗﺴﺘﺨﺪﻡ‬
‫ﺑﺮﺍﻣﺞﻓﺮﻋﻴﺔ ﻣﺸﻔﺮﺓ ﺑﺸﻜﻞ ﻣﻨﻔﺼﻞ ﻟﺤﺴﺎﺏ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻤﺘﻌﺎﻟﻴﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻟﺠﻴﺐﻭﺍﻟﻠﻮﻏﺎﺭﻳﺘﻢ( ‪ ،‬ﻭﺗﻀﻤﻨﺖ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﺗﻢ ﺗﻨﻔﻴﺬ ﺍﻟﻨﻈﺎﻡ ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪Whirlwind‬‬
‫‪ ، MIT‬ﻓﻲ ﺷﻜﻞ ﻧﻤﻮﺫﺝ ﺃﻭﻟﻲ ﺗﺠﺮﻳﺒﻲ ‪ ،‬ﻓﻲ ﺻﻴﻒ ﻋﺎﻡ ‪ 1952‬ﻭﻓﻲ ﺷﻜﻞ ﺃﻛﺜﺮ ﻗﺎﺑﻠﻴﺔ‬
‫ﻟﻼﺳﺘﺨﺪﺍﻡﺑﺤﻠﻮﻝ ﻣﺎﻳﻮ ‪ .1953‬ﻗﺎﻡ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺈﻧﺸﺎء ﺍﺳﺘﺪﻋﺎء ﺭﻭﺗﻴﻦ ﻓﺮﻋﻲ ﻟﺘﺸﻔﻴﺮ ﻛﻞ ﺻﻴﻐﺔ ‪،‬‬
‫ﺃﻭﺗﻌﺒﻴﺮ ‪ ،‬ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻛﺎﻧﺖ ﻟﻐﺔ ﺍﻟﻤﺼﺪﺭ ﺳﻬﻠﺔ ﺍﻟﻘﺮﺍءﺓ ‪ ،‬ﻭﻛﺎﻧﺖ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ ﺍﻟﻔﻌﻠﻴﺔ‬
‫ﺍﻟﻮﺣﻴﺪﺓﺍﻟﻤﺘﻀﻤﻨﺔ ﻫﻲ ﺍﻟﺘﻔﺮﻳﻊ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ﺳﺒﻖ ﺍﻟﻌﻤﻞ ﻋﻠﻰ ‪ ، Fortran‬ﺇﻻ‬
‫ﺃﻧﻪﻟﻢ ﻳﻔﻠﺖ ﻣﻦ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻫﺬﻩ ﺍﻷﻋﻤﺎﻝ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺃﻭﻝ ﻟﻐﺔ ﻣﺠﻤﻌﺔ ﺭﻓﻴﻌﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻣﻘﺒﻮﻟﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺗﺆﺭﺥ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻫﺬﺍ ﺍﻟﺘﻄﻮﺭ ﺍﻟﻤﻬﻢ‪.‬‬

‫‪2.3.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺣﺘﻰﻗﺒﻞ ﺍﻹﻋﻼﻥ ﻋﻦ ﻧﻈﺎﻡ ‪ 704‬ﻓﻲ ﻣﺎﻳﻮ ‪ ، 1954‬ﺑﺪﺃﺕ ﺧﻄﻂ ﻓﻮﺭﺗﺮﺍﻥ‪ .‬ﺑﺤﻠﻮﻝ ﻧﻮﻓﻤﺒﺮ‬
‫‪، 1954‬ﺃﻧﺘﺞ ﺟﻮﻥ ﺑﺎﻛﻮﺱ ﻭﻣﺠﻤﻮﻋﺘﻪ ﻓﻲ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ﺗﻘﺮﻳﺮﺍً ﺑﻌﻨﻮﺍﻥ "ﻧﻈﺎﻡ ﻧﻘﻞ ﺍﻟﺼﻴﻐﺔ‬
‫ﺍﻟﺮﻳﺎﺿﻴﺔﻟﺼﻴﻐﺔ ﺁﻱ ﺑﻲ ﺇﻡ‪) "FORTRAN :‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ .(1954 ،‬ﻭﺻﻒ ﻫﺬﺍ ﺍﻟﻤﺴﺘﻨﺪ ﺍﻹﺻﺪﺍﺭ‬
‫ﺍﻷﻭﻝﻣﻦ ‪ ، Fortran‬ﻭﺍﻟﺬﻱ ﻧﺸﻴﺮ ﺇﻟﻴﻪ ﺑﺎﺳﻢ ‪ ، Fortran 0‬ﻗﺒﻞ ﺗﻨﻔﻴﺬﻩ‪ .‬ﻛﻤﺎ ﻧﺼﺖ ﺑﺠﺮﺃﺓ ﻋﻠﻰ‬
‫ﺃﻥﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻮﻓﺮ ﻛﻔﺎءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﺸﻔﺮﺓ ﻳﺪﻭﻳﺎً ﻭﺳﻬﻮﻟﺔ ﺑﺮﻣﺠﺔ ﺃﻧﻈﻤﺔ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻜﺎﺫﺑﺔ‬
‫ﺍﻟﺘﻔﺴﻴﺮﻳﺔ‪.‬ﻭﻓﻲ ﻣﻮﺟﺔ ﺃﺧﺮﻯ ﻣﻦ ﺍﻟﺘﻔﺎﺅﻝ ‪ ،‬ﺫﻛﺮﺕ ﺍﻟﻮﺛﻴﻘﺔ ﺃﻥ ﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻘﻀﻲ ﻋﻠﻰ ﺃﺧﻄﺎء‬
‫ﺍﻟﺘﺮﻣﻴﺰﻭﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﺤﻴﺢ‪ .‬ﺑﻨﺎء ًﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻔﺮﺿﻴﺔ ‪ ،‬ﺗﻀﻤﻦ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻝ ﺍﻟﻘﻠﻴﻞ ﻣﻦ‬
‫ﺍﻟﺘﺤﻘﻖﻣﻦ ﺍﻷﺧﻄﺎء ﺍﻟﻨﺤﻮﻳﺔ‪.‬‬

‫ﻛﺎﻧﺖﺍﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻴﻬﺎ ﺗﻄﻮﻳﺮ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪ (1) :‬ﻛﺎﻧﺖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺫﺍﺕﺫﺍﻛﺮﺓ ﺻﻐﻴﺮﺓ ﻭﻛﺎﻧﺖ ﺑﻄﻴﺉﺔ ﻭﻏﻴﺮ ﻣﻮﺛﻮﻗﺔ ﻧﺴﺒﻴﺎً ؛ )‪ (2‬ﻛﺎﻥ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﺎﺳﻲ ﻷﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻓﻲ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ (3) .‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ ﻃﺮﻕ ﻓﻌﺎﻟﺔ ﻭﻓﻌﺎﻟﺔ ﻟﺒﺮﻣﺠﺔ ﺃﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ؛ﻭ )‪ (4‬ﻧﻈﺮﺍً ﻻﺭﺗﻔﺎﻉ ﺗﻜﻠﻔﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻣﻘﺎﺭﻧﺔ ًﺑﺘﻜﻠﻔﺔ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻛﺎﻧﺖ ﺳﺮﻋﺔ‬
‫ﻛﻮﺩﺍﻟﻜﺎﺉﻦ ﺍﻟﺬﻱ ﺗﻢ ﺇﻧﺸﺎﺅﻩ ﺍﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﻟﻤﺠﻤﻌﻲ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﺍﺉﻞ‪ .‬ﺗﺘﺒﻊ ﺧﺼﺎﺉﺺ‬
‫ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ ‪ Fortran‬ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﻫﺬﻩ ﺍﻟﺒﻴﺉﺔ‪.‬‬

‫‪2.3.3‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﻓﻮﺭﺗﺮﺍﻥ ‪1‬‬


‫ﺗﻢﺗﻌﺪﻳﻞ ‪ Fortran 0‬ﺧﻼﻝ ﻓﺘﺮﺓ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﺍﻟﺘﻲ ﺑﺪﺃﺕ ﻓﻲ ﻳﻨﺎﻳﺮ ‪ 1955‬ﻭﺍﺳﺘﻤﺮﺕ ﺣﺘﻰ ﺇﺻﺪﺍﺭ‬
‫ﺍﻟﻤﺘﺮﺟﻢﻓﻲ ﺃﺑﺮﻳﻞ ‪ .1957‬ﺍﻟﻠﻐﺔ ﺍﻟﻤﻄﺒﻘﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻧﺴﻤﻴﻬﺎ ‪ ، Fortran I‬ﻣﻮﺻﻮﻓﺔ ﻓﻲ ﺃﻭﻝ‬
‫‪ Fortran‬ﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻤﺒﺮﻣﺞ ‪،‬ﻧﺸُﺮ ﻓﻲ ﺃﻛﺘﻮﺑﺮ ‪ .(IBM ، 1956) 1956‬ﺃﺩﺭﺟﺖ ‪I‬‬
‫‪ Fortran‬ﺗﻨﺴﻴﻖ ﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ‪ ،‬ﻭﺃﺳﻤﺎء ﻣﺘﻐﻴﺮﺓ ﺗﺼﻞ ﺇﻟﻰ ﺳﺘﺔ ﺃﺣﺮﻑ )ﻛﺎﻥ ﺍﺛﻨﺎﻥ ﻓﻘﻂ‬
‫ﻓﻲ‪ ، (Fortran 0‬ﻭﺍﻟﺮﻭﺗﻴﻨﺎﺕ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪44‬‬

‫ﻻﻳﻤﻜﻦ ﺗﺠﻤﻴﻌﻬﺎ ﺑﺸﻜﻞ ﻣﻨﻔﺼﻞ ‪ ،‬ﻓﺈﻥﻟﻮﺑﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ‪ ،‬ﻭﻳﻔﻌﻞﺑﻴﺎﻥ ﺍﻟﺤﻠﻘﺔ‪.‬‬

‫ﺍﺳﺘﻨﺪﺕﺟﻤﻴﻊ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Fortran I‬ﺇﻟﻰ ‪ 704‬ﺗﻌﻠﻴﻤﺎﺕ‪ .‬ﻟﻴﺲ ﻣﻦ‬


‫ﺍﻟﻮﺍﺿﺢﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻣﺼﻤﻤﻮ ‪ 704‬ﻗﺪ ﻓﺮﺿﻮﺍ ﺗﺼﻤﻴﻢ ﺑﻴﺎﻥ ﺍﻟﺘﺤﻜﻢ ﻟـ ‪ Fortran I‬ﺃﻭ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ‬
‫ﻣﺼﻤﻤﻮ‪ Fortran I‬ﻗﺪ ﺍﻗﺘﺮﺣﻮﺍ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﻣﺼﻤﻤﻲ ‪.704‬‬

‫ﻟﻢﺗﻜﻦ ﻫﻨﺎﻙ ﻋﺒﺎﺭﺍﺕ ﻟﻜﺘﺎﺑﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﻠﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻟﻰ‪ .‬ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺘﻲ ﺑﺪﺃﺕ‬
‫ﺃﺳﻤﺎﺅﻫﺎﺑـ‪I ، J ، K ، L ، M ،‬ﻭﻥﻛﺎﻧﺖ ﻧﻮﻋﺎً ﺻﺤﻴﺤﺎً ﺿﻤﻨﻴﺎً ‪ ،‬ﻭﻛﺎﻧﺖ ﺟﻤﻴﻊ ﺍﻷﻧﻮﺍﻉ ﺍﻷﺧﺮﻯ ﻋﺒﺎﺭﺓ‬
‫ﻋﻦﻓﺎﺻﻠﺔ ﻋﺎﺉﻤﺔ ﺿﻤﻨﻴﺎً‪ .‬ﺍﺳﺘﻨﺪ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺤﺮﻭﻑ ﻟﻬﺬﻩ ﺍﻻﺗﻔﺎﻗﻴﺔ ﺇﻟﻰ ﺣﻘﻴﻘﺔ ﺃﻧﻪ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﺍﺳﺘﺨﺪﻡ ﺍﻟﻌﻠﻤﺎء ﻭﺍﻟﻤﻬﻨﺪﺳﻮﻥ ﺍﻷﺣﺮﻑ ﻛﻨﺼﻮﺹ ﻣﺘﻐﻴﺮﺓ ‪ ،‬ﻋﺎﺩﺓًﺍﻱ ﺟﺎﻱ‪،‬ﻭﻙ‪.‬ﻓﻲ ﻟﻔﺘﺔ‬
‫ﻣﻦﺍﻟﻜﺮﻡ ‪ ،‬ﺃﻟﻘﻰ ﻣﺼﻤﻤﻮ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﺣﺮﻑ ﺍﻟﺜﻼﺛﺔ ﺍﻹﺿﺎﻓﻴﺔ‪.‬‬

‫ﻛﺎﻥﺍﻹﺩﻋﺎء ﺍﻷﻛﺜﺮ ﺟﺮﺃﺓ ﺍﻟﺬﻱ ﻗﺪﻣﺘﻪ ﻣﺠﻤﻮﻋﺔ ﺗﻄﻮﻳﺮ ﻓﻮﺭﺗﺮﺍﻥ ﺃﺛﻨﺎء ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻫﻮ ﺃﻥ‬
‫ﻛﻮﺩﺍﻵﻟﺔ ﺍﻟﺬﻱ ﻳﻨﺘﺠﻪ ﺍﻟﻤﺘﺮﺟﻢ ﺳﻴﻜﻮﻥ ﻧﺼﻒ ﻛﻔﺎءﺓ ﻣﺎ ﻳﻤﻜﻦ ﺇﻧﺘﺎﺟﻪ ﻳﺪﻭﻳﺎً‪1.‬ﺃﺛﺎﺭ ﻫﺬﺍ ‪ ،‬ﺃﻛﺜﺮ ﻣﻦ‬
‫ﺃﻱﺷﻲء ﺁﺧﺮ ‪ ،‬ﺷﻜﻮﻛﺎً ﻓﻲ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻤﺤﺘﻤﻠﻴﻦ ﻭﻣﻨﻊ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻻﻫﺘﻤﺎﻡ ﺑـ ‪Fortran‬‬
‫ﻗﺒﻞﺇﺻﺪﺍﺭﻩ ﺍﻟﻔﻌﻠﻲ‪ .‬ﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺎﺟﺄ ﺍﻟﺠﻤﻴﻊ ﺗﻘﺮﻳﺒﺎً ‪ ،‬ﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﺩﺕ ﻣﺠﻤﻮﻋﺔ ﺗﻄﻮﻳﺮ‬
‫‪ Fortran‬ﺃﻥ ﺗﺤﻘﻖ ﻫﺪﻓﻬﺎ ﻓﻲ ﺍﻟﻜﻔﺎءﺓ‪ .‬ﺗﻢ ﺇﻧﻔﺎﻕ ﺍﻟﺠﺰء ﺍﻷﻛﺒﺮ ﻣﻦ ‪ 18‬ﻋﺎﻣﺎً ﻣﻦ ﺍﻟﺠﻬﺪ ﺍﻟﻤﺒﺬﻭﻝ‬
‫ﻟﺒﻨﺎءﺃﻭﻝ ﻣﺘﺮﺟﻢ ﻋﻠﻰ ﺍﻟﺘﺤﺴﻴﻦ ‪ ،‬ﻭﻛﺎﻧﺖ ﺍﻟﻨﺘﺎﺉﺞ ﻓﻌﺎﻟﺔ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ‪.‬‬

‫ﻳﻈﻬﺮﺍﻟﻨﺠﺎﺡ ﺍﻟﻤﺒﻜﺮ ﻟـ ‪ Fortran‬ﻣﻦ ﺧﻼﻝ ﻧﺘﺎﺉﺞ ﺍﻻﺳﺘﻄﻼﻉ ﺍﻟﺬﻱ ﺗﻢ ﺇﺟﺮﺍﺅﻩ ﻓﻲ ﺃﺑﺮﻳﻞ‬


‫‪.1958‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻥ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ﻧﺼﻒ ﺍﻟﻜﻮﺩ ﺍﻟﻤﻜﺘﻮﺏ ﻟـ ‪ 704s‬ﻳﻜُﺘﺐ ﺑﻠﻐﺔ‬
‫‪ ، Fortran‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺷﻜﻮﻙ ﻣﻌﻈﻢ ﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻘﻂ ﻗﺒﻞ ﻋﺎﻡ‪.‬‬

‫‪2.3.4‬ﻓﻮﺭﺗﺮﺍﻥ ‪II‬‬
‫ﺗﻢﺗﻮﺯﻳﻊ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ ‪ 2‬ﻓﻲ ﺭﺑﻴﻊ ﻋﺎﻡ ‪ .1958‬ﻭﺃﺻﻠﺢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﺧﻄﺎء ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﺘﺠﻤﻴﻊ‬
‫ﻓﻮﺭﺗﺮﺍﻥ‪ 1‬ﻭﺃﺿﺎﻑ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻠﻐﺔ ‪ ،‬ﻭﺃﻫﻤﻬﺎ ﺍﻟﺘﺠﻤﻴﻊ ﺍﻟﻤﺴﺘﻘﻞ ﻟﻠﺮﻭﺗﻴﻨﺎﺕ‬
‫ﺍﻟﻔﺮﻋﻴﺔ‪.‬ﺑﺪﻭﻥ ﺗﺠﻤﻴﻊ ﻣﺴﺘﻘﻞ ‪ ،‬ﺃﻱ ﺗﻐﻴﻴﺮ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻄﻠﺐ ﺇﻋﺎﺩﺓ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺄﻛﻤﻠﻪ‪.‬‬
‫ﺃﺩﻯﺍﻓﺘﻘﺎﺭ ‪ Fortran I‬ﺇﻟﻰ ﻗﺪﺭﺓ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻤﺴﺘﻘﻠﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺿﻌﻒ ﻣﻮﺛﻮﻗﻴﺔ ‪ ، 704‬ﺇﻟﻰ‬
‫ﻭﺿﻊﻗﻴﻮﺩ ﻋﻤﻠﻴﺔ ﻋﻠﻰ ﻃﻮﻝ ﺍﻟﺒﺮﺍﻣﺞ ﺇﻟﻰ ﺣﻮﺍﻟﻲ ‪ 300‬ﺇﻟﻰ ‪ 400‬ﺳﻄﺮ )‪، Wexelblat ، 1981‬‬
‫ﺹ‪ .(68‬ﻛﺎﻥ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻷﻃﻮﻝ ﻓﺮﺻﺔ ﺿﻌﻴﻔﺔ ﻓﻲ ﺃﻥ ﻳﺘﻢ ﺗﺠﻤﻴﻌﻬﺎ ﺑﺎﻟﻜﺎﻣﻞ ﻗﺒﻞ ﺣﺪﻭﺙ ﻋﻄﻞ‬
‫ﻓﻲﺍﻟﺠﻬﺎﺯ‪ .‬ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻀﻤﻴﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻣﺴﺒﻘﺎً ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺗﻘﺼﺮ‬
‫ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻭﺟﻌﻠﻬﺎ ﻋﻤﻠﻴﺔ ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ‪.‬‬

‫‪.1‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺍﻋﺘﻘﺪ ﻓﺮﻳﻖ ‪ Fortran‬ﺃﻥ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻻ ﻳﻤﻜﻦ ﺃﻥ‬
‫ﺗﻜﻮﻥﺃﻗﻞ ﻣﻦ ﻧﺼﻒ ﺳﺮﻋﺔ ﺭﻣﺰ ﺍﻵﻟﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﺨﻂ ﺍﻟﻴﺪ ‪ ،‬ﺃﻭ ﻟﻦ ﻳﺘﻢ ﺍﻋﺘﻤﺎﺩ ﺍﻟﻠﻐﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ‪.‬‬
‫‪45‬‬ ‫‪2.3‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ 704‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬

‫ﻭ‪ 77‬ﻭ ‪ 90‬ﻭ ‪ 95‬ﻭ ‪ 2003‬ﻭ ‪2.3.5 Fortrans IV 2008‬‬


‫ﺗﻢﺗﻄﻮﻳﺮ ‪ ، Fortran III‬ﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻮﺯﻳﻌﻪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺃﺻﺒﺤﺖ ﻟﻐﺔ ‪IV‬‬
‫‪ Fortran‬ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻛﺜﺮ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻓﻲ ﻋﺼﺮﻫﺎ‪ .‬ﺗﻄﻮﺭﺕ ﺧﻼﻝ ﺍﻟﻔﺘﺮﺓ ﻣﻦ‬
‫‪1960‬ﺇﻟﻰ ‪ 1962‬ﻭﺗﻢ ﺗﻮﺣﻴﺪﻫﺎ ﺑﺎﺳﻢ (‪ ، Fortran 66 )ANSI ، 1966‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ‬
‫ﺍﻻﺳﻢﻛﺎﻥ ﻧﺎﺩﺭﺍً ﻣﺎ ﻳﺴﺘﺨﺪﻡ‪ .‬ﻛﺎﻥ ‪ Fortran IV‬ﺗﺤﺴﻴﻨﺎً ﻋﻠﻰ ‪ Fortran II‬ﻣﻦ ﻧﻮﺍﺡ ﻛﺜﻴﺮﺓ‪ .‬ﻣﻦ‬
‫ﺑﻴﻦﺃﻫﻢ ﺇﺿﺎﻓﺎﺗﻬﺎ ﻛﺎﻧﺖ ﺇﻋﻼﻧﺎﺕ ﺍﻟﻨﻮﻉ ﺍﻟﺼﺮﻳﺢ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﻭﻫﻮ ﻣﻨﻄﻘﻲﻟﻮﺑﻨﺎء ‪ ،‬ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ‬
‫ﺗﻤﺮﻳﺮﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻛﻤﻌﻠﻤﺎﺕ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻷﺧﺮﻯ‪.‬‬

‫ﺗﻢﺍﺳﺘﺒﺪﺍﻝ ‪ Fortran IV‬ﺑـ ‪ ، Fortran 77‬ﻭﺍﻟﺬﻱ ﺃﺻﺒﺢ ﺍﻟﻤﻌﻴﺎﺭ ﺍﻟﺠﺪﻳﺪ ﻓﻲ ﻋﺎﻡ ‪) 1978‬‬
‫‪ ANSI، 1978‬ﺃ(‪ .‬ﺍﺣﺘﻔﻆ ‪ Fortran 77‬ﺑﻤﻌﻈﻢ ﻣﻴﺰﺍﺕ ‪ Fortran IV‬ﻭﺃﺿﻒ ﻣﻌﺎﻟﺠﺔ ﺳﻠﺴﻠﺔ‬
‫ﺍﻷﺣﺮﻑ ‪،‬ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ‪ ،‬ﻭ‬
‫ﻟﻮﻣﻊ ﺧﻴﺎﺭﺁﺧﺮﺑﻨﺪ‪.‬‬
‫ﻛﺎﻥ (‪ Fortran 90 )ANSI ، 1992‬ﻣﺨﺘﻠﻔﺎً ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻦ ‪ .Fortran 77‬ﻭﻛﺎﻧﺖ ﺃﻫﻢ‬
‫ﺍﻹﺿﺎﻓﺎﺕﻫﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺍﻟﺴﺠﻼﺕ ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ﻭﺑﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﻌﺪﺩ‬
‫ﻭﺍﻟﻮﺣﺪﺍﺕﺍﻟﻨﻤﻄﻴﺔ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ‪ Fortran 90‬ﺑﺸﻜﻞ‬
‫ﻣﺘﻜﺮﺭ‪.‬‬
‫ﻛﺎﻥﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﺠﺪﻳﺪ ﺍﻟﺬﻱ ﺗﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻲ ﺗﻌﺮﻳﻒ ‪ Fortran 90‬ﻫﻮ ﺇﺯﺍﻟﺔ ﺑﻌﺾ ﻣﻴﺰﺍﺕ‬
‫ﺍﻟﻠﻐﺔﻣﻦ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﺴﺎﺑﻘﺔ‪ .‬ﺑﻴﻨﻤﺎ ﺗﻀﻤﻨﺖ ‪ Fortran 90‬ﺟﻤﻴﻊ ﻣﻴﺰﺍﺕ ‪، Fortran 77‬‬
‫ﺗﻀﻤﻦﺗﻌﺮﻳﻒ ﺍﻟﻠﻐﺔ ﻗﺎﺉﻤﺔ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﺍﻟﺘﻮﺻﻴﺔ ﺑﺈﺯﺍﻟﺘﻬﺎ ﻓﻲ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻣﻦ‬
‫ﺍﻟﻠﻐﺔ‪.‬‬
‫ﺗﻀﻤﻨﺖ‪ Fortran 90‬ﺗﻐﻴﻴﺮﻳﻦ ﻧﺤﻮﻳﻴﻦ ﺑﺴﻴﻄﻴﻦ ﻏﻴﺮﺍ ﻣﻈﻬﺮ ﻛﻼ ﺍﻟﺒﺮﻧﺎﻣﺠﻴﻦ ﻭﺍﻷﺩﺑﻴﺎﺕ‬
‫ﺍﻟﺘﻲﺗﺼﻒ ﺍﻟﻠﻐﺔ‪ .‬ﺃﻭﻻ ً‪ ،‬ﺗﻢ ﺇﺳﻘﺎﻁ ﺍﻟﺘﻨﺴﻴﻖ ﺍﻟﺜﺎﺑﺖ ﺍﻟﻤﻄﻠﻮﺏ ﻟﻠﺸﻔﺮﺓ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﺘﻄﻠﺐ‬
‫ﺍﺳﺘﺨﺪﺍﻡﻣﻮﺍﺿﻊ ﺷﺨﺼﻴﺔ ﻣﺤﺪﺩﺓ ﻷﺟﺰﺍء ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ‬
‫ﺗﻈﻬﺮﺗﺴﻤﻴﺎﺕ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﺍﻟﻤﻮﺍﺿﻊ ﺍﻟﺨﻤﺴﺔ ﺍﻷﻭﻟﻰ ﻓﻘﻂ ﻭﻻ ﻳﻤﻜﻦ ﺃﻥ ﺗﺒﺪﺃ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻗﺒﻞ‬
‫ﺍﻟﻤﻮﺿﻊﺍﻟﺴﺎﺑﻊ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻫﺬﺍ ﺍﻟﺘﻨﺴﻴﻖ ﺍﻟﺼﺎﺭﻡ ﻟﻠﺸﻔﺮﺓ ﺣﻮﻝ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﻄﺎﻗﺎﺕ ﺍﻟﻤﺜﻘﺒﺔ‪.‬‬
‫ﺍﻟﺘﻐﻴﻴﺮﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺃﻥ ﺍﻟﺘﻬﺠﺉﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻟـ ‪ FORTRAN‬ﺃﺻﺒﺤﺖ ‪ .Fortran‬ﻛﺎﻥ ﻫﺬﺍ ﺍﻟﺘﻐﻴﻴﺮ‬
‫ﻣﺼﺤﻮﺑﺎًﺑﺘﻐﻴﻴﺮ ﻓﻲ ﺍﺻﻄﻼﺡ ﺍﺳﺘﺨﺪﺍﻡ ﺟﻤﻴﻊ ﺍﻷﺣﺮﻑ ﺍﻟﻜﺒﻴﺮﺓ ﻟﻠﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻭﺍﻟﻤﻌﺮﻓﺎﺕ‬
‫ﻓﻲﺑﺮﺍﻣﺞ ‪ .Fortran‬ﻛﺎﻧﺖ ﺍﻻﺗﻔﺎﻗﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻫﻲ ﺃﻥ ﺍﻟﺤﺮﻑ ﺍﻷﻭﻝ ﻓﻘﻂ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔﻭﺍﻟﻤﻌﺮﻓﺎﺕ ﺳﻴﻜﻮﻥ ﻛﺒﻴﺮﺍً‪.‬‬

‫ﺍﺳﺘﻤﺮﻓﻮﺭﺗﺮﺍﻥ ‪ (INCITS / ISO / IEC ، 1997) 95‬ﻓﻲ ﺗﻄﻮﺭ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﻟﻜﻦ ﺗﻢ ﺇﺟﺮﺍء‬
‫ﺗﻐﻴﻴﺮﺍﺕﻗﻠﻴﻠﺔ ﻓﻘﻂ‪ .‬ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ ‪ ،‬ﺑﻨﺎء ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺠﺪﻳﺪ ‪،‬ﻓﻮﺭﺍﻝ ‪،‬ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﻟﺘﺴﻬﻴﻞ‬
‫ﻣﻬﻤﺔﻣﻮﺍﺯﺍﺓ ﺑﺮﺍﻣﺞ ﻓﻮﺭﺗﺮﺍﻥ‪.‬‬
‫‪ C.‬ﺃﺿﺎﻑ ﺩﻋﻤﺎً ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻭﺃﻧﻮﺍﻉ ﻣﺸﺘﻘﺔ ﺫﺍﺕ ﻣﻌﻠﻤﺎﺕ ‪ ،‬ﻭﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻹﺟﺮﺍءﺍﺕ ‪،‬ﻭﻗﺎﺑﻠﻴﺔ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﺒﻴﻨﻲ ﻣﻊ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪2003 )Metcalf et al. ، 2004( ،‬‬
‫‪Fortran‬‬
‫ﺃﺿﺎﻑﺍﻹﺻﺪﺍﺭ ﺍﻷﺧﻴﺮ ﻣﻦ (‪Fortran ، Fortran 2008 )ISO / IEC 1539-1 ، 2010‬‬
‫ﺩﻋﻤﺎًﻟﻠﻜﺘﻞ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻗﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ ‪ ،‬ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﻤﺸﺘﺮﻛﺔ ‪ ،‬ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﻧﻤﻮﺫﺝ ﺗﻨﻔﻴﺬ‬
‫ﻣﺘﻮﺍﺯﻱ ‪،‬ﻭﻫﻞ ﻣﺘﻄﺎﺑﻘﺔﺑﻨﺎء ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺍﻟﺤﻠﻘﺎﺕ ﺩﻭﻥ ﺍﻻﻋﺘﻤﺎﺩ ﺍﻟﻤﺘﺒﺎﺩﻝ‪.‬‬

‫‪2.3.6‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻓﻜﺮﻓﺮﻳﻖ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺻﻠﻲ ﻟـ ‪ Fortran‬ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻘﻂ ﻛﻤﻘﺪﻣﺔ ﺿﺮﻭﺭﻳﺔ ﻟﻠﻤﻬﻤﺔ‬
‫ﺍﻟﺤﺎﺳﻤﺔﺍﻟﻤﺘﻤﺜﻠﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺨﻄﺮ ﺑﺒﺎﻟﻬﻢ ﺃﺑﺪﺍً ﺃﻧﻪ ﻟﻦ ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡ‪ Fortran‬ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪46‬‬

‫ﻣﻦﺻﻨﻊ ﺷﺮﻛﺔ ‪ .IBM‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻟﻘﺪ ﺃﺟُﺒﺮﻭﺍ ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺑﻨﺎء ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﻟـ‬
‫‪ Fortran‬ﻷﺟﻬﺰﺓ ‪ IBM‬ﺍﻷﺧﺮﻯ ﻓﻘﻂ ﻷﻧﻪ ﺗﻢ ﺍﻹﻋﻼﻥ ﻋﻦ ﺧﻠﻴﻔﺔ ‪ ، 709 ، 704‬ﻗﺒﻞ ﺇﺻﺪﺍﺭ‬
‫ﻣﺘﺮﺟﻢ‪ .Fortran 704‬ﺇﻥ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻟﺬﻱ ﺃﺣﺪﺛﺘﻪ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﺇﻟﻰﺟﺎﻧﺐ ﺣﻘﻴﻘﺔ ﺃﻥ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻼﺣﻘﺔ ﻣﺪﻳﻨﺔ ﺑﻔﻮﺭﺗﺮﺍﻥ ‪ ،‬ﻣﺜﻴﺮ ﻟﻺﻋﺠﺎﺏ ﺣﻘﺎً ﻓﻲ‬
‫ﺿﻮءﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﺘﻮﺍﺿﻌﺔ ﻟﻤﺼﻤﻤﻴﻬﺎ‪.‬‬

‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﻣﻴﺰﺍﺕ ‪ ، Fortran I‬ﻭﺟﻤﻴﻊ ﻣﻦ ﻳﺨﻠﻔﻬﻢ ﻗﺒﻞ ‪ ، 90‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﻟﻠﻤﺘﺮﺟﻤﻴﻦ‬


‫ﺑﺎﻟﺘﺤﺴﻴﻦﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﺃﻥ ﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﺘﺨﺰﻳﻦ ﻟﺠﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻳﺘﻢ ﺇﺻﻼﺣﻬﺎ ﻗﺒﻞ ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬ﻻ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺺ ﻣﺘﻐﻴﺮﺍﺕ ﺃﻭ ﻣﺴﺎﺣﺔ ﺟﺪﻳﺪﺓ ﺧﻼﻝ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻥ ﻫﺬﺍ‬
‫ﺗﻀﺤﻴﺔﺑﺎﻟﻤﺮﻭﻧﺔ ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﻜﻔﺎءﺓ‪ .‬ﻟﻘﺪ ﺃﻟﻐﻰ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻭﺟﻌﻞ‬
‫ﻣﻦﺍﻟﺼﻌﺐ ﺗﻨﻔﻴﺬ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻨﻤﻮ ﺃﻭ ﺗﻐﻴﺮ ﺍﻟﺸﻜﻞ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻛﺎﻧﺖ ﺃﻧﻮﺍﻉ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻓﻲ ﻭﻗﺖ ﺗﻄﻮﻳﺮ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻷﻭﻟﻰ ﻣﻦ ‪ Fortran‬ﺫﺍﺕ ﻃﺒﻴﻌﺔ ﺭﻗﻤﻴﺔ‬
‫ﻓﻲﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﻭﻛﺎﻧﺖ ﺑﺴﻴﻄﺔ ﻣﻘﺎﺭﻧﺔ ﺑﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺤﺪﻳﺜﺔ‪ .‬ﻟﺬﻟﻚ ﻟﻢ ﺗﻜﻦ ﺍﻟﺬﺑﻴﺤﺔ‬
‫ﻋﻈﻴﻤﺔ‪.‬‬

‫ﻣﻦﺍﻟﺼﻌﺐ ﺍﻟﻤﺒﺎﻟﻐﺔ ﻓﻲ ﺗﻘﺪﻳﺮ ﺍﻟﻨﺠﺎﺡ ﺍﻟﺸﺎﻣﻞ ﻟـ ‪ :Fortran‬ﻓﻘﺪ ﻏﻴﺮ ﻃﺮﻳﻘﺔ ﺍﺳﺘﺨﺪﺍﻡ‬


‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪ .‬ﻫﺬﺍ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻳﺮﺟﻊ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﺇﻟﻰ ﻛﻮﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺑﺎﻟﻤﻘﺎﺭﻧﺔ ﻣﻊ ﺍﻟﻤﻔﺎﻫﻴﻢ ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ‬
‫ﻻﺣﻘﺎً ‪،‬ﻓﺈﻥ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺗﻌﺎﻧﻲ ﺑﻄﺮﻕ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﺘﻮﻗﻊ‪ .‬ﺑﻌﺪ‬
‫ﻛﻞﺷﻲء ‪ ،‬ﻟﻦ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻌﺪﻝ ﻣﻘﺎﺭﻧﺔ ﺃﺩﺍء ﻭﺭﺍﺣﺔ ﻃﺮﺍﺯ ‪ 1910‬ﻣﻦ ﻃﺮﺍﺯ ‪ T Ford‬ﻣﻊ ﺃﺩﺍء ﻭﺭﺍﺣﺔ‬
‫‪ .Ford Mustang2013‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﻓﻲ ‪ ، Fortran‬ﻓﺈﻥ ﺯﺧﻢ‬
‫ﺍﻻﺳﺘﺜﻤﺎﺭﺍﻟﻀﺨﻢ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ ، Fortran‬ﻣﻦ ﺑﻴﻦ ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ‪ ،‬ﻗﺪ ﺃﺑﻘﻰ ﻋﻠﻴﻪ ﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ‬
‫ﻷﻛﺜﺮﻣﻦ ﻧﺼﻒ ﻗﺮﻥ‪.‬‬

‫ﻗﺎﻝﺁﻻﻥ ﺑﻴﺮﻟﻴﺲ ‪ ،‬ﺃﺣﺪ ﻣﺼﻤﻤﻲ ‪ ، ALGOL 60‬ﻋﻦ ‪ Fortran‬ﻓﻲ ﻋﺎﻡ ‪، 1978‬‬


‫"‪ Fortran‬ﻫﻲﻟﻐﺔ ﻣﺸﺘﺮﻛﺔﻓﻲ ﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ‪ .‬ﺇﻧﻬﺎ ﻟﻐﺔ ﺍﻟﺸﻮﺍﺭﻉ ﺑﺄﻓﻀﻞ ﻣﻌﺎﻧﻲ ﺍﻟﻜﻠﻤﺔ ‪،‬‬
‫ﻭﻟﻴﺲﺑﺎﻟﻤﻌﻨﻰ ﺍﻟﺪﻋﺎﺉﻲ ﻟﻠﻜﻠﻤﺔ‪ .‬ﻭﻗﺪ ﻧﺠﺎ ﻭﺳﻴﺒﻘﻰ ﻷﻧﻪ ﺗﺒﻴﻦ ﺃﻧﻪ ﺟﺰء ﻣﻔﻴﺪ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ ﻣﻦ‬
‫ﺗﺠﺎﺭﺓﺣﻴﻮﻳﺔ ﻟﻠﻐﺎﻳﺔ ")‪.(Wexelblat، 1981، p. 161‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:Fortran 95‬‬

‫!ﺑﺮﻧﺎﻣﺞ ﻓﻮﺭﺗﺮﺍﻥ ‪ 95‬ﻛﻤﺜﺎﻝ!‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ،‬ﺣﻴﺚ ‪ List_Len‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫ﻣﺪﺧﻞ‪:‬‬
‫‪ List_Len-Integer‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬ ‫!‬
‫!‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫!‬
‫ﻻﺷﻲء ﺿﻤﻨﻲ‬
‫ﺍﻟﺒﻌﺪﺍﻟﺼﺤﻴﺢ )‪Int_List :: (99‬‬
‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ::‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ﺍﻟﻨﺘﻴﺠﺔ = ‪0‬‬

‫ﺍﻟﻤﺠﻤﻮﻉ= ‪0‬‬
‫ﻗﺮﺍءﺓ* ‪List_Len ،‬‬
‫ﺇﺫﺍﻛﺎﻥ ))‪ (AND. )List_Len >100(. (List_Len< 0‬ﺛﻢ! ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ‬
‫ﻣﺼﻔﻮﻓﺔﻭﺣﺴﺎﺏ ﻣﺠﻤﻮﻋﻬﺎ‬
‫ﻋﻤﻞﺍﻟﻌﺪﺍﺩ = ‪List_Len ، 1‬‬
‫ﻗﺮﺍءﺓ* ‪) Int_List ،‬ﻋﺪﺍﺩ( ‪= Sum + Int_List‬‬
‫‪) Sum‬ﻋﺪﺍﺩ(‬
‫‪47‬‬ ‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬

‫ﻧﻬﺎﻳﺔﺗﻔﻌﻞ‬
‫!ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪Sum / List_Len‬‬
‫!ﻗﻢ ﺑﺤﺴﺎﺏ ﺍﻟﻘﻴﻢ ﺍﻷﻛﺒﺮ ﻣﻦ ﺍﻟﻤﺘﻮﺳﻂ‬
‫ﻋﻤﻞﺍﻟﻌﺪﺍﺩ = ‪List_Len ، 1‬‬
‫ﺇﺫﺍ)‪) Int_List‬ﻋﺪﺍﺩ(< ﻣﺘﻮﺳﻂ( ﺛﻢ‬
‫ﺍﻟﻨﺘﻴﺠﺔ= ﺍﻟﻨﺘﻴﺠﺔ ‪ 1 +‬ﻧﻬﺎﻳﺔ ﺇﺫﺍ‬

‫ﻧﻬﺎﻳﺔﺗﻔﻌﻞ‬
‫!ﺍﻃﺒﻊ ﺍﻟﻨﺘﻴﺠﺔ‬
‫ﻃﺒﺎﻋﺔ* ‪" ،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪ ، ":‬ﺍﻟﻨﺘﻴﺠﺔ ﺍﻷﺧﺮﻯ‬

‫ﻃﺒﺎﻋﺔ* ‪" ،‬ﺧﻄﺄ ‪ -‬ﻗﻴﻤﺔ ﻃﻮﻝ ﺍﻟﻘﺎﺉﻤﺔ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻴﺔ" ‪End If‬‬

‫ﻣﺜﺎﻝﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻨﻬﺎﻳﺔ‬

‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬


‫ﺗﻢﺍﺧﺘﺮﺍﻉ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ ﻟﺘﻮﻓﻴﺮ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ ‪ ،‬ﻭﺍﻟﺘﻲ ﻧﺸﺄﺕ ﺍﻟﺤﺎﺟﺔ‬
‫ﺇﻟﻴﻬﺎﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻭﻟﻰ ﻓﻲ ﻣﺠﺎﻝ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ )‪.(AI‬‬

‫‪2.4.1‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ‬


‫ﻇﻬﺮﺍﻻﻫﺘﻤﺎﻡ ﺑﺎﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﻓﻲ ﻋﺪﺩ ﻣﻦ‬
‫ﺍﻷﻣﺎﻛﻦ‪.‬ﻧﺸﺄ ﺑﻌﺾ ﻫﺬﺍ ﺍﻻﻫﺘﻤﺎﻡ ﻣﻦ ﻋﻠﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻣﻦ ﻋﻠﻢ ﺍﻟﻨﻔﺲ ‪ ،‬ﻭﺍﻟﺒﻌﺾ‬
‫ﺍﻵﺧﺮﻣﻦ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ‪ .‬ﻛﺎﻥ ﺍﻟﻠﻐﻮﻳﻮﻥ ﻣﻬﺘﻤﻴﻦ ﺑﻤﻌﺎﻟﺠﺔ ﺍﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻛﺎﻥ ﻋﻠﻤﺎء ﺍﻟﻨﻔﺲ‬
‫ﻣﻬﺘﻤﻴﻦﺑﻨﻤﺬﺟﺔ ﺗﺨﺰﻳﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺒﺸﺮﻳﺔ ﻭﺍﺳﺘﻌﺎﺩﺗﻬﺎ ‪ ،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﺍﻷﺧﺮﻯﻟﻠﺪﻣﺎﻍ‪ .‬ﻛﺎﻥ ﻋﻠﻤﺎء ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﻣﻬﺘﻤﻴﻦ ﺑﻤﻴﻜﻨﺔ ﺑﻌﺾ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺬﻛﻴﺔ ‪ ،‬ﻣﺜﻞ ﺇﺛﺒﺎﺕ‬
‫ﺍﻟﻨﻈﺮﻳﺔ‪.‬ﺗﻮﺻﻠﺖ ﻛﻞ ﻫﺬﻩ ﺍﻟﺘﺤﻘﻴﻘﺎﺕ ﺇﻟﻰ ﻧﻔﺲ ﺍﻟﻨﺘﻴﺠﺔ‪ :‬ﻳﺠﺐ ﺗﻄﻮﻳﺮ ﻃﺮﻳﻘﺔ ﻣﺎ ﻟﻠﺴﻤﺎﺡ‬
‫ﻷﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﻤﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻓﻲ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻤﺮﺗﺒﻄﺔ‪ .‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻧﺖ‬
‫ﻣﻌﻈﻢﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺗﺘﻢ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺮﻗﻤﻴﺔ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ ﻣﻔﻬﻮﻡ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﺑﻮﺍﺳﻄﺔ ‪ Allen Newell‬ﻭ ‪ JC Shaw‬ﻭ ‪Simon‬‬


‫‪ Herbert‬ﻓﻲ ﻣﺆﺳﺴﺔ ‪ .RAND‬ﺗﻢ ﻧﺸﺮﻩ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻭﺭﻗﺔ ﺑﺤﺜﻴﺔ ﻛﻼﺳﻴﻜﻴﺔ ﺗﺼﻒ ﺃﺣﺪ‬
‫ﺑﺮﺍﻣﺞﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺍﻷﻭﻟﻰ ‪2، The Logic Theorist ،‬ﻭﻟﻐﺔ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ )‪، 1956‬‬
‫‪ .(Newell and Simon‬ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ‪) IPL-I‬ﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ‪ .(1‬ﺗﻢ‬
‫ﺗﻨﻔﻴﺬﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ‪ ، IPL-II ،‬ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪ .RAND Johnniac‬ﺍﺳﺘﻤﺮ ﺗﻄﻮﻳﺮ ‪ IPL‬ﺣﺘﻰ ﻋﺎﻡ‬
‫‪، 1960‬ﻋﻨﺪﻣﺎ ﺗﻢ ﻧﺸﺮ ﻭﺻﻒ (‪ .IPL-V )Newell and Tonge ، 1960‬ﻣﻨﻊ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﺍﻟﻤﻨﺨﻔﺾﻟﻠﻐﺎﺕ ‪ IPL‬ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻛﺎﻧﺖ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ﻟﺠﻬﺎﺯ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺍﻓﺘﺮﺍﺿﻲ ‪ ،‬ﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ ‪ ،‬ﻭﻓﻴﻬﺎ‬

‫‪.2‬ﺍﻛﺘﺸﻒ ﻣﻨﻈﺮّ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺒﺮﺍﻫﻴﻦ ﻟﻠﻨﻈﺮﻳﺎﺕ ﻓﻲ ﺣﺴﺎﺏ ﺍﻻﻓﺘﺮﺍﺽ‪.‬‬


‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪48‬‬

‫ﺗﻢﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﻫﻨﺎﻙ ﻋﺎﻣﻞ ﺁﺧﺮ ﻣﻨﻊ ﻟﻐﺎﺕ ‪ IPL‬ﻣﻦ ﺍﻻﻧﺘﺸﺎﺭ ﻭﻫﻮ‬
‫ﺗﻄﺒﻴﻘﻬﺎﻋﻠﻰ ﺁﻟﺔ ‪ Johnniac‬ﺍﻟﻐﺎﻣﻀﺔ‪.‬‬

‫ﻛﺎﻧﺖﻣﺴﺎﻫﻤﺎﺕ ﻟﻐﺎﺕ ‪ IPL‬ﻓﻲ ﺗﺼﻤﻴﻢ ﻗﺎﺉﻤﺘﻬﻢ ﻭﺇﺛﺒﺎﺗﻬﻢ ﺃﻥ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﻛﺎﻧﺖ‬


‫ﻣﺠﺪﻳﺔﻭﻣﻔﻴﺪﺓ‪.‬‬
‫ﺃﺻﺒﺤﺖﺷﺮﻛﺔ ‪ IBM‬ﻣﻬﺘﻤﺔ ﺑﺎﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ‬
‫ﺍﻟﻤﺎﺿﻲﻭﺍﺧﺘﺎﺭﺕ ﺇﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ ﻛﻤﺠﺎﻝ ﻟﻠﻌﺮﺽ‪ .‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻥ ﻣﺸﺮﻭﻉ ﻓﻮﺭﺗﺮﺍﻥ ﻻ‬
‫ﻳﺰﺍﻝﻗﻴﺪ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﺃﻗﻨﻌﺖ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻟﻤﺘﺮﺟﻢ ‪ Fortran I‬ﺷﺮﻛﺔ ‪ IBM‬ﺑﻀﺮﻭﺭﺓ ﺇﺭﻓﺎﻕ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﻢ ﺑـ ‪ ، Fortran‬ﻭﻟﻴﺲ ﻓﻲ ﺷﻜﻞ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪ .‬ﻭﻫﻜﺬﺍ ‪ ،‬ﺗﻢ ﺗﺼﻤﻴﻢ‬
‫ﻭﺗﻨﻔﻴﺬﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﻗﺎﺉﻤﺔ ﻓﻮﺭﺗﺮﺍﻥ )‪ (FLPL‬ﻛﺎﻣﺘﺪﺍﺩ ﻟـ ‪ .Fortran‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ FLPL‬ﻟﺒﻨﺎء‬
‫ﻣﺒﺮﻫﻦﻧﻈﺮﻱ ﻟﻬﻨﺪﺳﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻌﺘﺒﺮ ﺑﻌﺪ ﺫﻟﻚ ﺃﺳﻬﻞ ﻣﻨﻄﻘﺔ ﻹﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ‬
‫ﺍﻟﻤﻴﻜﺎﻧﻴﻜﻴﺔ‪.‬‬

‫‪2.4.2‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ‪LISP‬‬


‫ﺗﻮﻟﻰﺟﻮﻥ ﻣﻜﺎﺭﺛﻲ ﻣﻦ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ ﻣﻨﺼﺒﺎً ﺻﻴﻔﻴﺎً ﻓﻲ ﻗﺴﻢ ﺃﺑﺤﺎﺙ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕﻓﻲ ﺁﻱ ﺑﻲ ﺇﻡ ﻓﻲ ﻋﺎﻡ ‪ .1958‬ﻛﺎﻥ ﻫﺪﻓﻪ ﻓﻲ ﺍﻟﺼﻴﻒ ﻫﻮ ﺍﻟﺘﺤﻘﻴﻖ ﻓﻲ ﺍﻟﺤﺴﺎﺑﺎﺕ‬
‫ﺍﻟﺮﻣﺰﻳﺔﻭﺗﻄﻮﻳﺮ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ﻹﺟﺮﺍء ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺤﺴﺎﺑﺎﺕ‪ .‬ﻛﻤﺜﺎﻝ ﺗﺠﺮﻳﺒﻲ ﻟﻤﻨﻄﻘﺔ‬
‫ﺍﻟﻤﺸﻜﻠﺔ ‪،‬ﺍﺧﺘﺎﺭ ﺗﻤﺎﻳﺰ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺠﺒﺮﻳﺔ‪ .‬ﻣﻦ ﻫﺬﻩ ﺍﻟﺪﺭﺍﺳﺔ ﺟﺎءﺕ ﻗﺎﺉﻤﺔ ﻣﺘﻄﻠﺒﺎﺕ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﻣﻦﺑﻴﻨﻬﺎ ﻃﺮﻕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﻟﻠﻮﻇﺎﺉﻒ ﺍﻟﺮﻳﺎﺿﻴﺔ‪ :‬ﺍﻟﻌﻮﺩﻳﺔ ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺸﺮﻃﻴﺔ‪ .‬ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻮﺣﻴﺪﺓﺍﻟﻤﺘﺎﺣﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻟﻰ ‪ ،‬ﻟﻢ ﺗﻜﻦ ﺗﻤﺘﻠﻚ ﺃﻳﺎً ﻣﻦ‬
‫ﻫﺬﻳﻦﺍﻟﻠﻐﺘﻴﻦ‪.‬‬

‫ﻫﻨﺎﻙﻣﻄﻠﺐ ﺁﺧﺮ ﻧﺸﺄ ﻣﻦ ﺗﺤﻘﻴﻖ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻟﺮﻣﺰﻱ ﻭﻫﻮ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻤﺮﺗﺒﻄﺔ‬
‫ﺍﻟﻤﻮﺯﻋﺔﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻭﻧﻮﻉ ﻣﻦ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻀﻤﻨﻲ ﻟﻠﻘﻮﺍﺉﻢ ﺍﻟﻤﺘﺮﻭﻛﺔ‪ .‬ﻟﻦ ﻳﺴﻤﺢ ﻣﻜﺎﺭﺛﻲ‬
‫ﺑﺒﺴﺎﻃﺔﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻷﻧﻴﻘﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ﺃﻥ ﺗﺘﺸﺎﺑﻚ ﻣﻊ ﻋﺒﺎﺭﺍﺕ ﺇﻟﻐﺎء ﺍﻟﺘﺨﺼﻴﺺ‬
‫ﺍﻟﺼﺮﻳﺤﺔ‪.‬‬

‫ﻧﻈﺮﺍًﻷﻥ ‪ FLPL‬ﻟﻢ ﻳﺪﻋﻢ ﺍﻟﻌﻮﺩﻳﺔ ﺃﻭ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺸﺮﻃﻴﺔ ﺃﻭ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬


‫ﺃﻭﺇﻟﻐﺎء ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻀﻤﻨﻲ ‪ ،‬ﻓﻘﺪ ﻛﺎﻥ ﻭﺍﺿﺤﺎً ﻟﻤﻜﺎﺭﺛﻲ ﺃﻥ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪.‬‬

‫ﻋﻨﺪﻣﺎﻋﺎﺩ ﻣﻜﺎﺭﺛﻲ ﺇﻟﻰ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ ﻓﻲ ﺧﺮﻳﻒ ﻋﺎﻡ ‪ ، 1958‬ﺷﻜﻞ‬


‫ﻫﻮﻭﻣﺎﺭﻓﻦ ﻣﻴﻨﺴﻜﻲ ﻣﺸﺮﻭﻉ ‪ ، MIT AI‬ﺑﺘﻤﻮﻳﻞ ﻣﻦ ﻣﺨﺘﺒﺮ ﺃﺑﺤﺎﺙ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ‪ .‬ﻛﺎﻥ ﺍﻟﺠﻬﺪ‬
‫ﺍﻟﻤﻬﻢﺍﻷﻭﻝ ﻟﻠﻤﺸﺮﻭﻉ ﻫﻮ ﺇﻧﺘﺎﺝ ﻧﻈﺎﻡ ﺑﺮﻣﺠﻴﺎﺕ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻣﻪ‬
‫ﻓﻲﺍﻟﺒﺪﺍﻳﺔ ﻟﺘﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﺍﻗﺘﺮﺣﻪ ﻣﻜﺎﺭﺛﻲ ﻳﺴﻤﻰ ‪3.Advice Taker‬ﺃﺻﺒﺢ ﻫﺬﺍ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺪﺍﻓﻊ‬
‫ﻟﺘﻄﻮﻳﺮﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ‪ .LISP‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺍﻹﺻﺪﺍﺭ ﺍﻷﻭﻝ ﻣﻦ ‪ LISP‬ﺃﺣﻴﺎﻧﺎً ﺍﺳﻢ "‪LISP‬‬
‫ﺍﻟﺨﺎﻟﺺ" ﻷﻧﻪ ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﺑﺤﺘﺔ‪ .‬ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﻧﺼﻒ ﺗﻄﻮﻳﺮ ‪ LISP‬ﺍﻟﻨﻘﻲ‪.‬‬

‫‪.3‬ﻗﺎﻡ ‪ Advice Taker‬ﺑﺘﻤﺜﻴﻞ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺑﺠﻤﻞ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﺭﺳﻤﻴﺔ ﻭﺍﺳﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺍﺳﺘﻨﺘﺎﺝ ﻣﻨﻄﻘﻲ ﻟﺘﻘﺮﻳﺮ ﻣﺎ‬
‫ﻳﺠﺐﺍﻟﻘﻴﺎﻡ ﺑﻪ‪.‬‬
‫‪49‬‬ ‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬

‫‪2.4.3‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬

‫‪2.4.3.1‬ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻳﺤﺘﻮﻱ‪ Pure LISP‬ﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻓﻘﻂ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﺬﺭﺍﺕ ﻭﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﺍﻟﺬﺭﺍﺕ ﻫﻲ ﺇﻣﺎ‬
‫ﺭﻣﻮﺯﻟﻬﺎ ﺷﻜﻞ ﻣﻌﺮﻓّﺎﺕ ﺃﻭ ﺣﺮﻓﻴﺔ ﺭﻗﻤﻴﺔ‪ .‬ﻳﻌﺘﺒﺮ ﻣﻔﻬﻮﻡ ﺗﺨﺰﻳﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻓﻲ ﻗﻮﺍﺉﻢ‬
‫ﻣﺮﺗﺒﻄﺔﺃﻣﺮﺍً ﻃﺒﻴﻌﻴﺎً ﻭﻗﺪ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ‪ .IPL-II‬ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻟﻬﻴﺎﻛﻞ ﺑﻌﻤﻠﻴﺎﺕ ﺍﻹﺩﺭﺍﺝ‬
‫ﻭﺍﻟﺤﺬﻑﻓﻲ ﺃﻱ ﻭﻗﺖ ‪ ،‬ﻭﻫﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺑﻌﺪ ﺫﻟﻚ ﺃﻧﻬﺎ ﺟﺰء ﺿﺮﻭﺭﻱ ﻣﻦ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﻭﻗﺪ ﺗﻘﺮﺭ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ‪ ،‬ﻣﻊ ﺫﻟﻚ ‪ ،‬ﺃﻥ ﺑﺮﺍﻣﺞ ‪ LISP‬ﻧﺎﺩﺭﺍً ﻣﺎ ﺗﺘﻄﻠﺐ ﻫﺬﻩ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕ‪.‬‬
‫ﻳﺘﻢﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﺉﻢ ﻋﻦ ﻃﺮﻳﻖ ﺗﺤﺪﻳﺪ ﻋﻨﺎﺻﺮﻫﺎ ﺑﺄﻗﻮﺍﺱ‪ .‬ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﺒﺴﻴﻄﺔ ‪ ،‬ﺍﻟﺘﻲ ﺗﻘﺘﺼﺮ‬
‫ﻓﻴﻬﺎﺍﻟﻌﻨﺎﺻﺮ ﻋﻠﻰ ﺍﻟﺬﺭﺍﺕ ‪ ،‬ﻟﻬﺎ ﺍﻟﺸﻜﻞ‬

‫)ﺍ ﺏ ﺕ ﺙ(‬

‫ﻳﺘﻢﺃﻳﻀﺎً ﺗﺤﺪﻳﺪ ﻫﻴﺎﻛﻞ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻷﻗﻮﺍﺱ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﻘﺎﺉﻤﺔ‬

‫)ﺃ )ﻕ( ﺩ )ﻩ )ﻓﻎ(((‬

‫ﻳﺘﻜﻮﻥﻣﻦ ﺃﺭﺑﻌﺔ ﻋﻨﺎﺻﺮ‪ .‬ﺍﻷﻭﻝ ﻫﻮ ﺍﻟﺬﺭﺓﺃ؛ﻭﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ‬


‫)ﻗﺒﻞ ﺍﻟﻤﻴﻼﺩ(؛ﻭﺍﻟﺜﺎﻟﺚ ﻫﻮ ﺍﻟﺬﺭﺓﺩ؛ﺍﻟﺮﺍﺑﻊ ﻫﻮ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ )‪E )FG(( ،‬ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ‬
‫ﻋﻨﺼﺮﻫﺎﺍﻟﺜﺎﻧﻲ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ )‪FG(.‬‬
‫ﺩﺍﺧﻠﻴﺎً ‪،‬ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﺍﻟﻘﻮﺍﺉﻢ ﻋﻠﻰ ﻫﻴﺉﺔ ﻫﻴﺎﻛﻞ ﻗﺎﺉﻤﺔ ﻣﺮﺗﺒﻄﺔ ﺑﻤﻔﺮﺩﻫﺎ ‪ ،‬ﺣﻴﺚ ﺗﺤﺘﻮﻱ‬
‫ﻛﻞﻋﻘﺪﺓ ﻋﻠﻰ ﻣﺆﺷﺮﻳﻦ ﻭﺗﻤﺜﻞ ﻋﻨﺼﺮ ﻗﺎﺉﻤﺔ‪ .‬ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺬﺭﺓ ﻟﻬﺎ ﺃﻭﻝ ﻣﺆﺷﺮ‬
‫ﻟﻬﺎﻳﺸﻴﺮ ﺇﻟﻰ ﺑﻌﺾ ﺗﻤﺜﻴﻞ ﺍﻟﺬﺭﺓ ‪ ،‬ﻣﺜﻞ ﺭﻣﺰﻫﺎ ﺃﻭ ﻗﻴﻤﺘﻬﺎ ﺍﻟﺮﻗﻤﻴﺔ ‪ ،‬ﺃﻭ ﻣﺆﺷﺮ ﺇﻟﻰ ﻗﺎﺉﻤﺔ ﻓﺮﻋﻴﺔ‪.‬‬
‫ﻋﻘﺪﺓﻋﻨﺼﺮ ﻗﺎﺉﻤﺔ ﻓﺮﻋﻴﺔ ﻟﻬﺎ ﺃﻭﻝ ﻣﺆﺷﺮ ﻟﻬﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻘﺪﺓ ﺍﻷﻭﻟﻰ ﻣﻦ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ‪.‬‬
‫ﻓﻲﻛﻠﺘﺎ ﺍﻟﺤﺎﻟﺘﻴﻦ ‪ ،‬ﻳﺸﻴﺮ ﺍﻟﻤﺆﺷﺮ ﺍﻟﺜﺎﻧﻲ ﻟﻠﻌﻘﺪﺓ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺮ ﺍﻟﺘﺎﻟﻲ ﻣﻦ ﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﺗﺘﻢ ﺍﻹﺷﺎﺭﺓ‬
‫ﺇﻟﻰﻗﺎﺉﻤﺔ ﺑﻤﺆﺷﺮ ﺇﻟﻰ ﻋﻨﺼﺮﻫﺎ ﺍﻷﻭﻝ‪.‬‬

‫ﺍﻟﺘﻤﺜﻴﻼﺕﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﻠﻘﺎﺉﻤﺘﻴﻦ ﺍﻟﻤﺒﻴﻨﺔ ﺳﺎﺑﻘﺎً ﻣﺒﻴﻨﺔ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .2.2‬ﻻﺣﻆ ﺃﻥ ﻋﻨﺎﺻﺮ‬


‫ﺍﻟﻘﺎﺉﻤﺔﺗﻈﻬﺮ ﺃﻓﻘﻴﺎً‪ .‬ﺍﻟﻌﻨﺼﺮ ﺍﻷﺧﻴﺮ ﻓﻲ ﺍﻟﻘﺎﺉﻤﺔ ﻟﻴﺲ ﻟﻪ ﺧﻠﻒ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﺍﺭﺗﺒﺎﻃﻪ ﻫﻮﻻ ﺷﻲء ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺘﻢ ﺗﻤﺜﻴﻠﻪ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 2.2‬ﻛﺨﻂ ﻗﻄﺮﻱ ﻓﻲ ﺍﻟﻌﻨﺼﺮ‪ .‬ﺗﻈﻬﺮ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻔﺮﻋﻴﺔ ﺑﻨﻔﺲ‬
‫ﺍﻟﻬﻴﻜﻞ‪.‬‬

‫‪2.4.3.2‬ﺍﻟﻌﻤﻠﻴﺎﺕ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‬


‫ﺗﻢﺗﺼﻤﻴﻢ ‪ LISP‬ﻛﻠﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ‪ .‬ﻳﺘﻢ ﺇﻧﺠﺎﺯ ﺟﻤﻴﻊ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻭﻇﻴﻔﻲ‬
‫ﺑﺤﺖﻣﻦ ﺧﻼﻝ ﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﺎﺉﻒ ﻋﻠﻰ ﺍﻟﻮﺳﺎﺉﻂ‪ .‬ﻻ ﺗﻌﺘﺒﺮ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﻻ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‬
‫ﺍﻟﻜﺜﻴﺮﺓﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻠﻐﺔ ﺍﻟﺤﺘﻤﻴﺔ ﺿﺮﻭﺭﻳﺔ ﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺗﺤﺪﻳﺪﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺘﻜﺮﺭﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻌﻮﺩﻳﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﺘﻜﺮﺍﺭ )‬
‫ﺍﻟﺤﻠﻘﺎﺕ( ﻏﻴﺮ ﺿﺮﻭﺭﻱ‪ .‬ﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺗﺠﻌﻠﻬﺎ ﻣﺨﺘﻠﻔﺔ ﺑﺸﻜﻞ‬
‫ﻛﺒﻴﺮﻋﻦ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻟﻐﺔ ﺍﻷﻣﺮ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪50‬‬

‫ﺍﻟﺸﻜﻞ‪2.2‬‬

‫ﺍﻟﺘﻤﺜﻴﻞﺍﻟﺪﺍﺧﻠﻲ ﻟﻘﺎﺉﻤﺘﻴﻦ‬
‫ﻣﻦ‪LISP‬‬
‫ﺩ‬ ‫ﺝ‬ ‫ﺏ‬ ‫ﺃ‬

‫ﺩ‬ ‫ﺃ‬

‫ﻩ‬ ‫ﺝ‬ ‫ﺏ‬

‫ﺟﻲ‬ ‫‪F‬‬

‫‪2.4.3.3‬ﺑﻨﺎء ﺟﻤﻠﺔ ‪LISP‬‬


‫ﺗﺨﺘﻠﻒ‪ LISP‬ﻛﺜﻴﺮﺍً ﻋﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ ﻭﻷﻥ ﻣﻈﻬﺮ ﺑﺮﺍﻣﺞ ‪LISP‬‬
‫ﻳﺨﺘﻠﻒﻛﺜﻴﺮﺍً ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻟﻐﺎﺕ ﻣﺜﻞ ‪ Java‬ﺃﻭ ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﺒﺮ ﺑﻨﺎء‬
‫ﺟﻤﻠﺔ‪ Java‬ﻣﺰﻳﺠﺎً ﻣﻌﻘﺪﺍً ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻭﺍﻟﺠﺒﺮ ‪ ،‬ﺑﻴﻨﻤﺎ ﻳﻌﺪ ﺗﺮﻛﻴﺐ ‪ LISP‬ﻧﻤﻮﺫﺟﺎً‬
‫ﻟﻠﺒﺴﺎﻃﺔ‪.‬ﺭﻣﺰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻬﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻜﻞ ﺗﻤﺎﻣﺎً‪ :‬ﺍﻟﻘﻮﺍﺉﻢ ﺑﻴﻦ ﻗﻮﺳﻴﻦ‪ .‬ﺍﻟﻨﻈﺮ ﻣﺮﺓ‬
‫ﺃﺧﺮﻯﻓﻲ ﺍﻟﻘﺎﺉﻤﺔ‬

‫)ﺍ ﺏ ﺕ ﺙ(‬

‫ﻋﻨﺪﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ ﺑﻴﺎﻧﺎﺕ ‪ ،‬ﻓﻬﻲ ﻗﺎﺉﻤﺔ ﻣﻦ ﺃﺭﺑﻌﺔ ﻋﻨﺎﺻﺮ‪ .‬ﻋﻨﺪﻣﺎ ﻳﻨﻈﺮ ﺇﻟﻴﻪ ﻋﻠﻰ ﺃﻧﻪ ﺭﻣﺰ ‪،‬‬
‫ﻓﻬﻮﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻤﺴﻤﺎﺓﺃﻟﻠﻤﻌﻠﻤﺎﺕ ﺍﻟﺜﻼﺛﺔﺏ ‪ ،‬ﺝ ‪،‬ﻭﺩ‪.‬‬

‫‪2.4.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﺳﻴﻄﺮ‪ LISP‬ﺗﻤﺎﻣﺎً ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻟﻤﺪﺓ ﺭﺑﻊ ﻗﺮﻥ‪ .‬ﺗﻢ ﺍﻟﻘﻀﺎء ﻋﻠﻰ ﺍﻟﻜﺜﻴﺮ ﻣﻦ‬
‫ﺃﺳﺒﺎﺏﺳﻤﻌﺔ ‪ LISP‬ﻟﻜﻮﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ‪،‬‬
‫ﻭﻳﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﺃﺳﺮﻉ ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﺸﻐﻴﻞ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺼﺪﺭﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻧﺠﺎﺣﻬﺎ‬
‫ﻓﻲﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ‪ ،‬ﻛﺎﻧﺖ ‪ LISP‬ﺭﺍﺉﺪﺓ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺛﺒﺘﺖ ﺃﻧﻬﺎ ﻣﺠﺎﻝ‬
‫ﻧﺸﻂﻟﻠﺒﺤﺚ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﻤﺎ ﻫﻮ ﻣﺬﻛﻮﺭ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﺎﺣﺜﻲ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺃﻥ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻫﻲ ﻧﻬﺞ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻹﺟﺮﺍﺉﻴﺔﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ‪.‬‬
‫‪51‬‬ ‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:LISP‬‬

‫ﺩﺍﻟﺔ‪ LISP‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‬ ‫؛‬


‫ﻳﻌﺮﻑّﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﺩﺍﻟﺔ ‪ LISP‬ﺍﻟﻤﺴﻨﺪ ﺍﻟﺘﻲ ﺗﺄﺧﺬ ﻗﺎﺉﻤﺘﻴﻦ ﻛﻮﺳﻴﻄﺎﺕ ﻭﺗﻌﻴﺪ ‪ True‬ﺇﺫﺍ‬ ‫؛‬
‫ﻛﺎﻧﺖﺍﻟﻘﺎﺉﻤﺘﺎﻥ ﻣﺘﺴﺎﻭﻳﺘﻴﻦ ‪ ،‬ﻭ ‪) NIL‬ﺧﻄﺄ( ﺑﺨﻼﻑ ﺫﻟﻚ )(‪DEFUN equipists )lis1 lis2‬‬ ‫؛‬
‫؛‬

‫‪)COND‬‬
‫(ﻻ ﺷﻲء (‪lis1( )EQ lis1 lis2(( ))ATOM lis2‬‬
‫‪))ATOM‬‬
‫))ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )‪((CAR lis2) (CAR lis1‬‬
‫)ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )‪(((CDR lis2) (CDR lis1‬‬
‫)ﻻ ﺷﻲء(‬
‫(‬
‫(‬

‫‪2.4.5‬ﺍﺛﻨﺎﻥ ﻣﻦ ﺃﺣﻔﺎﺩ ‪LISP‬‬


‫ﻳﺘﻢﺍﻵﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻬﺠﺘﻴﻦ ﻣﻦ ‪ LISP‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ Scheme ،‬ﻭ ‪ .Common LISP‬ﻫﺬﻩ‬
‫ﻧﻮﻗﺸﺖﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.‬‬

‫‪2.4.5.1‬ﻣﺨﻄﻂ‬
‫ﻇﻬﺮﺕﻟﻐﺔ ﺍﻟﻤﺨﻄﻂ ﻣﻦ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ )‬
‫‪ .(Dybvig، 2003‬ﻳﺘﻤﻴﺰ ﺑﺼﻐﺮ ﺣﺠﻤﻪ ‪ ،‬ﻭﺍﺳﺘﺨﺪﺍﻣﻪ ﺍﻟﺤﺼﺮﻱ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺜﺎﺑﺖ )ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺘﻪﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺨﺎﻣﺲ( ‪ ،‬ﻭﻣﻌﺎﻟﺠﺘﻪ ﻟﻠﻮﻇﺎﺉﻒ ﻛﻜﻴﺎﻧﺎﺕ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ‪ .‬ﻛﻜﻴﺎﻧﺎﺕ‬
‫ﻣﻦﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ ‪ ،‬ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﻭﻇﺎﺉﻒ ﺍﻟﻤﺨﻄﻂ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﻭﺗﻤﺮﻳﺮﻫﺎ ﻛﻤﻌﻠﻤﺎﺕ ‪،‬‬
‫ﻭﺇﻋﺎﺩﺗﻬﺎﻛﻘﻴﻢ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺃﻳﻀﺎً ﻋﻨﺎﺻﺮ ﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﻟﻢ ﺗﻮﻓﺮ‬
‫ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ‪ LISP‬ﻛﻞ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ‪ ،‬ﻭﻟﻢ ﺗﺴﺘﺨﺪﻡ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺜﺎﺑﺖ‪.‬‬

‫ﺑﺎﻋﺘﺒﺎﺭﻫﺎﻟﻐﺔ ﺻﻐﻴﺮﺓ ﺫﺍﺕ ﺑﻨﺎء ﺟﻤﻠﺔ ﻭﺩﻻﻻﺕ ﺑﺴﻴﻄﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﻤﺨﻄﻂ ﻣﻨﺎﺳﺐ ﺗﻤﺎﻣﺎً‬
‫ﻟﻠﺘﻄﺒﻴﻘﺎﺕﺍﻟﺘﻌﻠﻴﻤﻴﺔ ‪ ،‬ﻣﺜﻞ ﺍﻟﺪﻭﺭﺍﺕ ﺍﻟﺘﺪﺭﻳﺒﻴﺔ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻭﺍﻟﻤﻘﺪﻣﺎﺕ ﺍﻟﻌﺎﻣﺔ‬
‫ﻟﻠﺒﺮﻣﺠﺔ‪.‬ﺗﻢ ﻭﺻﻒ ﺍﻟﻤﺨﻄﻂ ﺑﺸﻲء ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.15‬‬

‫ﺍﻟﻤﺸﺘﺮﻙ‪2.4.5.2 LISP‬‬
‫ﺧﻼﻝﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﻭﺍﺳﺘﺨﺪﺍﻡ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﻟﻬﺠﺎﺕ ‪LISP‬‬
‫ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬ﺃﺩﻯ ﺫﻟﻚ ﺇﻟﻰ ﻣﺸﻜﻠﺔ ﻣﺄﻟﻮﻓﺔ ﺗﺘﻤﺜﻞ ﻓﻲ ﻋﺪﻡ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ ﺑﻴﻦ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ‬
‫ﺑﺎﻟﻠﻬﺠﺎﺕﺍﻟﻤﺨﺘﻠﻔﺔ‪ .‬ﺗﻢ ﺇﻧﺸﺎء ‪ LISP‬ﺍﻟﻤﺸﺘﺮﻙ )‪ (Graham ، 1996‬ﻓﻲ ﻣﺤﺎﻭﻟﺔ ﻟﺘﺼﺤﻴﺢ ﻫﺬﺍ‬
‫ﺍﻟﻮﺿﻊ‪.‬ﺗﻢ ﺗﺼﻤﻴﻢ ‪ LISP‬ﺍﻟﻤﺸﺘﺮﻙ ﻣﻦ ﺧﻼﻝ ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻬﺠﺎﺕ ‪LISP‬‬
‫ﺍﻟﺘﻲﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ‪ ، Scheme‬ﻓﻲ ﻟﻐﺔ ﻭﺍﺣﺪﺓ‪ .‬ﻛﻮﻧﻬﺎ‬
‫ﻣﺰﻳﺠﺎًﻣﻦ ﻫﺬﺍ ﺍﻟﻘﺒﻴﻞ ‪ ،‬ﻓﺈﻥ ‪ LISP‬ﺍﻟﺸﺎﺉﻌﺔ ﻫﻲ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ﻧﺴﺒﻴﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ‬
‫ﺃﺳﺎﺳﻬﺎﻫﻮ ‪ LISP‬ﺍﻟﺨﺎﻟﺺ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﺗﺮﻛﻴﺒﻬﺎ ﻭﻭﻇﺎﺉﻔﻬﺎ ﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﻃﺒﻴﻌﺘﻬﺎ ﺍﻷﺳﺎﺳﻴﺔ ﺗﺄﺗﻲ‬
‫ﻣﻦﺗﻠﻚ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪52‬‬

‫ﻣﻦﺧﻼﻝ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻤﺮﻭﻧﺔ ﺍﻟﺘﻲ ﻳﻮﻓﺮﻫﺎ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺑﺴﺎﻃﺔ‬
‫ﺍﻟﻨﻄﺎﻕﺍﻟﺜﺎﺑﺖ ‪ ،‬ﻳﺴﻤﺢ ‪ LISP‬ﺍﻟﻤﺸﺘﺮﻙ ﺑﻜﻠﻴﻬﻤﺎ‪ .‬ﺍﻟﻨﻄﺎﻕ ﺍﻻﻓﺘﺮﺍﺿﻲ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﻫﻮ ﺛﺎﺑﺖ ‪،‬‬
‫ﻭﻟﻜﻦﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﻟﻤﺘﻐﻴﺮ ﻟﻴﻜﻮﻥﺧﺎﺹ‪ ،‬ﻳﺼﺒﺢ ﻫﺬﺍ ﺍﻟﻤﺘﻐﻴﺮ ﻣﺤﺪﺩ ﺍﻟﻨﻄﺎﻕ‬
‫ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪.‬‬
‫ﻳﺤﺘﻮﻱ‪ LISP‬ﺍﻟﺸﺎﺉﻊ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﻬﻴﺎﻛﻞ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﺴﺠﻼﺕﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﻤﺮﻛﺒﺔ ﻭﺳﻼﺳﻞ ﺍﻷﺣﺮﻑ‪ .‬ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺷﻜﻞ ﻣﻦ ﺍﻟﺤﺰﻡ‬
‫ﻟﺘﻘﺴﻴﻢﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ‪.‬‬

‫ﺗﻢﻭﺻﻒ ‪ LISP‬ﺍﻟﺸﺎﺉﻊ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.15‬‬

‫‪2.4.6‬ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‬


‫) ‪ML‬ﻡﺇﺗﺎﺇﻝﻋﺬﺍﺏ‪ .‬ﺃﻭﻟﻤﺎﻥ ‪ (1998 ،‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻓﻲ ﺍﻷﺻﻞ ﻓﻲ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺭﻭﺑﻦ‬
‫ﻣﻴﻠﻨﺮﻓﻲ ﺟﺎﻣﻌﺔ ﺇﺩﻧﺒﺮﺓ ﻛﻠﻐﺔ ﻣﻌﺪﻧﻴﺔ ﻟﻨﻈﺎﻡ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﻤﻰ ‪Functions‬‬
‫‪ LCF) Logic for Computable‬؛ ‪ .(Milner et al. ، 1990‬ﺗﻌﺘﺒﺮ ‪ ML‬ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﻓﻲ‬
‫ﺍﻟﻤﻘﺎﻡﺍﻷﻭﻝ ‪ ،‬ﻭﻟﻜﻨﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﻟﺰﺍﻣﻴﺔ‪ .‬ﻋﻠﻰ ﻋﻜﺲ ‪ LISP‬ﻭ ‪ ، Scheme‬ﻳﻤﻜﻦ‬
‫ﺗﺤﺪﻳﺪﻧﻮﻉ ﻛﻞ ﻣﺘﻐﻴﺮ ﻭﺗﻌﺒﻴﺮ ﻓﻲ ‪ ML‬ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﺗﺮﺗﺒﻂ ﺍﻷﻧﻮﺍﻉ ﺑﺎﻟﻜﺎﺉﻨﺎﺕ ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﻷﺳﻤﺎء‪.‬ﻳﺘﻢ ﺍﻻﺳﺘﺪﻻﻝ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﺍﻷﺳﻤﺎء ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺳﻴﺎﻗﻬﺎ‪.‬‬

‫ﻋﻠﻰﻋﻜﺲ ‪ LISP‬ﻭ ‪ ، Scheme‬ﻻ ﻳﺴﺘﺨﺪﻡ ‪ ML‬ﺍﻟﺼﻴﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺑﻴﻦ ﻗﻮﺳﻴﻦ ﻭﺍﻟﺘﻲ‬


‫ﻧﺸﺄﺕﻣﻊ ﺗﻌﺒﻴﺮﺍﺕ ‪ .lambda‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺑﻨﺎء ﺟﻤﻠﺔ ‪ ML‬ﻳﺸﺒﻪ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ‪ ،‬ﻣﺜﻞ‬
‫‪ Java‬ﻭ ‪.++ C‬‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﻣﻴﺮﺍﻧﺪﺍ ﻣﻦ ﻗﺒﻞ ﺩﻳﻔﻴﺪ ﺗﻴﺮﻧﺮ )‪ (1986‬ﻓﻲ ﺟﺎﻣﻌﺔ ﻛﻨﺖ ﻓﻲ ﻛﺎﻧﺘﺮﺑﺮﻱ ‪ ،‬ﺇﻧﺠﻠﺘﺮﺍ ‪،‬‬
‫ﻓﻲﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﺗﻌﺘﻤﺪ ‪ Miranda‬ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ‪ ML‬ﻭ ‪ SASL‬ﻭ ‪ .KRC‬ﻫﺎﺳﻜﻞ )‬
‫‪ (Hudak and Fasel، 1992‬ﻳﻌﺘﻤﺪ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﻋﻠﻰ ﻣﻴﺮﺍﻧﺪﺍ‪ .‬ﻣﺜﻞ ﻣﻴﺮﺍﻧﺪﺍ ‪ ،‬ﺇﻧﻬﺎ ﻟﻐﺔ‬
‫ﻭﻇﻴﻔﻴﺔﺑﺤﺘﺔ ‪ ،‬ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ ﻭﻻ ﺑﻴﺎﻥ ﺗﺨﺼﻴﺺ‪ .‬ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻤﻤﻴﺰﺓ ﺍﻷﺧﺮﻯ‬
‫ﻟـ‪ Haskell‬ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻠﺘﻘﻴﻴﻢ ﺍﻟﻜﺴﻮﻝ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻻ ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﺃﻱ ﺗﻌﺒﻴﺮ ﺣﺘﻰ ﺗﻜﻮﻥ ﻗﻴﻤﺘﻪ‬
‫ﻣﻄﻠﻮﺑﺔ‪.‬ﻫﺬﺍ ﻳﺆﺩﻱ ﺇﻟﻰ ﺑﻌﺾ ﺍﻟﻘﺪﺭﺍﺕ ﺍﻟﻤﺪﻫﺸﺔ ﻓﻲ ﺍﻟﻠﻐﺔ‪.‬‬

‫‪.‬ﻛﻼ ًﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ‪ .‬ﻛﻤﺎ ﺃﻧﻪ ﻳﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺑﺸﻜﻞ‬
‫ﻛﺎﻣﻞ‪ F #‬ﻳﺪﻋﻢ ‪ .NET.‬ﺃﻳﻀﺎً ﺃﻧﻪ ﻳﻤﻜﻨﻬﺎ ﺍﻟﺘﻌﺎﻣﻞ ﺑﺴﻼﺳﺔ ﻣﻊ ﺃﻱ ﻟﻐﺔ ﺃﺧﺮﻯ ﻣﻦ ﻟﻐﺎﺕ ‪NET‬‬
‫ﺑﺎﻟﻜﺎﻣﻞ‪.‬ﻛﻮﻧﻪ ‪ .‬ﺗﻌﻨﻲ ﻟﻐﺔ ‪ .NET‬ﻣﻊ ﻭﺻﻮﻝ ﻣﺒﺎﺷﺮ ﺇﻟﻰ ﻣﻜﺘﺒﺔ ‪ .NET‬ﻫﻲ ﻟﻐﺔ (‪et al.، 2010‬‬
‫‪ OCaml. F # )Syme‬ﻫﻲ ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ ﺟﺪﻳﺪﺓ ﻧﺴﺒﻴﺎً ﺗﻌﺘﻤﺪ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ‪ ، F #‬ﺃﺧﻴﺮﺍً ‪Haskell.‬‬
‫ﻭ ‪ ML‬ﺗﻨﺤﺪﺭ ﻣﻦ ‪ ، OCaml )Smith ، 2006( ،‬ﻭﻟﻬﺠﺘﻬﺎ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ (‬
‫‪Caml )Cousineau et al. ، 1998‬‬

‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ‪ ML‬ﻭ ‪ Haskell‬ﻭ ‪ # F‬ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.15‬‬

‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬


‫ﻛﺎﻥﻟـ ‪ ALGOL 60‬ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻼﺣﻘﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﻬﻮ ﺫﻭ ﺃﻫﻤﻴﺔ ﻣﺮﻛﺰﻳﺔ ﻓﻲ‬
‫ﺃﻱﺩﺭﺍﺳﺔ ﺗﺎﺭﻳﺨﻴﺔ ﻟﻠﻐﺎﺕ‪.‬‬
‫‪53‬‬ ‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬

‫‪2.5.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻛﺎﻥ‪ ALGOL 60‬ﻧﺘﻴﺠﺔ ﺍﻟﺠﻬﻮﺩ ﺍﻟﻤﺒﺬﻭﻟﺔ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻤﻴﺔ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪.‬‬
‫ﺑﺤﻠﻮﻝﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ ، 1954‬ﻛﺎﻥ ﻧﻈﺎﻡ ‪ Laning‬ﻭ ‪ Zierler‬ﺍﻟﺠﺒﺮﻱ ﻗﻴﺪ ﺍﻟﺘﺸﻐﻴﻞ ﻷﻛﺜﺮ ﻣﻦ ﻋﺎﻡ ‪،‬‬
‫ﻭﺗﻢﻧﺸﺮ ﺃﻭﻝ ﺗﻘﺮﻳﺮ ﻋﻦ ‪ .Fortran‬ﺃﺻﺒﺤﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺣﻘﻴﻘﺔ ﻭﺍﻗﻌﺔ ﻓﻲ ﻋﺎﻡ ‪ ، 1957‬ﻭﺗﻢ‬
‫ﺗﻄﻮﻳﺮﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺧﺮﻯ‪ .‬ﻛﺎﻥ ﺃﺑﺮﺯﻫﺎ ﻫﻮ ‪ ، IT‬ﺍﻟﺬﻱ ﺻﻤﻤﻪ ‪Perlis‬‬
‫‪ Alan‬ﻓﻲ ‪ ، Carnegie Tech‬ﻭﻟﻐﺘﻴﻦ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ UNIVAC ، MATH-MATIC‬ﻭ‬
‫‪ .UNICODE‬ﺃﺩﻯ ﺍﻧﺘﺸﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺇﻟﻰ ﺻﻌﻮﺑﺔ ﻣﺸﺎﺭﻛﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻴﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ‬
‫ﺫﻟﻚ ‪،‬ﻧﺸﺄﺕ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺣﻮﻝ ﻣﻌﻤﺎﺭﻳﺎﺕ ﻓﺮﺩﻳﺔ ‪ ،‬ﺑﻌﻀﻬﺎ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ‬
‫‪ UNIVAC‬ﻭﺑﻌﻀﻬﺎ ﻷﺟﻬﺰﺓ ‪ .IBM 700-series‬ﺭﺩﺍً ﻋﻠﻰ ﺍﺯﺩﻫﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻵﻟﺔ ‪،‬‬
‫ﻓﺈﻥﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﺑﻤﺎ ﻓﻲ‬
‫ﺫﻟﻚ‪) SHARE‬ﻣﺠﻤﻮﻋﺔ ﻣﺴﺘﺨﺪﻣﻲ ‪ IBM‬ﺍﻟﻌﻠﻤﻴﻴﻦ( ﻭ ‪Scientific Exchange) USE‬‬
‫‪ ، UNIVAC‬ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﺔ ‪ UNIVAC‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ( ‪ ،‬ﻗﺪﻣﺖ ﻋﺮﻳﻀﺔ‬
‫ﺇﻟﻰﺟﻤﻌﻴﺔ ﺁﻻﺕ ﺍﻟﺤﻮﺳﺒﺔ )‪ (ACM‬ﻓﻲ ‪ 10‬ﻣﺎﻳﻮ ‪ ، 1957‬ﻟﺘﺸﻜﻴﻞ ﻟﺠﻨﺔ ﻟﻠﺪﺭﺍﺳﺔ ﻭﺍﻟﺘﻮﺻﻴﺔ‬
‫ﺑﺎﺗﺨﺎﺫﺇﺟﺮﺍءﺍﺕ ﻹﻧﺸﺎء ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﻠﻤﻴﺔ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪Fortran‬‬
‫ﻗﺪﺗﻜﻮﻥ ﻣﺮﺷﺤﺎً ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻻ ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﺒﺢ ﻟﻐﺔ ﻋﺎﻟﻤﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻛﺎﻧﺖ ﻣﻤﻠﻮﻛﺔ‬
‫ﻟﺸﺮﻛﺔ‪ IBM‬ﻭﺣﺪﻫﺎ‪.‬‬

‫ﻓﻲﺍﻟﺴﺎﺑﻖ ‪ ،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1955‬ﺷﻜﻠﺖ ‪) GAMM‬ﺍﺧﺘﺼﺎﺭ ﺃﻟﻤﺎﻧﻲ ﻟﺠﻤﻌﻴﺔ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ‬


‫ﺍﻟﺘﻄﺒﻴﻘﻴﺔﻭﺍﻟﻤﻴﻜﺎﻧﻴﻜﺎ( ﻟﺠﻨﺔ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺧﻮﺍﺭﺯﻣﻴﺔ ﻋﺎﻟﻤﻴﺔ ﻭﺍﺣﺪﺓ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ‪ .‬ﻛﺎﻧﺖ‬
‫ﺍﻟﺮﻏﺒﺔﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺗﻌﻮﺩ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺧﻮﻑ ﺍﻷﻭﺭﻭﺑﻴﻴﻦ ﻣﻦ ﻫﻴﻤﻨﺔ ﺷﺮﻛﺔ ‪ .IBM‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﺑﺤﻠﻮﻝ ﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ ، 1957‬ﺃﻗﻨﻊ ﻇﻬﻮﺭ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ‬
‫ﺍﻟﻤﺘﺤﺪﺓﺍﻟﻠﺠﻨﺔ ﺍﻟﻔﺮﻋﻴﺔ ﻟـ ‪ GAMM‬ﺑﻀﺮﻭﺭﺓ ﺗﻮﺳﻴﻊ ﺟﻬﻮﺩﻫﺎ ﻟﺘﺸﻤﻞ ﺍﻷﻣﺮﻳﻜﻴﻴﻦ ‪ ،‬ﻭﺗﻢ ﺇﺭﺳﺎﻝ‬
‫ﺧﻄﺎﺏﺩﻋﻮﺓ ﺇﻟﻰ ‪ .ACM‬ﻓﻲ ﺃﺑﺮﻳﻞ ‪ ، 1958‬ﺑﻌﺪ ﺃﻥ ﻗﺪﻡ ﻓﺮﻳﺘﺰ ﺑﺎﻭﺭ ﻣﻦ ‪ GAMM‬ﺍﻻﻗﺘﺮﺍﺡ‬
‫ﺍﻟﺮﺳﻤﻲﺇﻟﻰ ‪ ، ACM‬ﻭﺍﻓﻘﺖ ﺍﻟﻤﺠﻤﻮﻋﺘﺎﻥ ﺭﺳﻤﻴﺎً ﻋﻠﻰ ﻣﺸﺮﻭﻉ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻣﺸﺘﺮﻙ‪.‬‬

‫‪2.5.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺒﻜﺮﺓ‬


‫ﺃﺭﺳﻞﻛﻞ ﻣﻦ ‪ GAMM‬ﻭ ‪ ACM‬ﺃﺭﺑﻌﺔ ﺃﻋﻀﺎء ﻻﺟﺘﻤﺎﻉ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻝ‪ .‬ﺑﺪﺃ ﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺬﻱ ﻋﻘﺪ‬
‫ﻓﻲﺯﻳﻮﺭﺥ ﻓﻲ ﺍﻟﻔﺘﺮﺓ ﻣﻦ ‪ 27‬ﻣﺎﻳﻮ ﺇﻟﻰ ‪ 1‬ﻳﻮﻧﻴﻮ ‪ 1958‬ﺑﺎﻷﻫﺪﺍﻑ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‪:‬‬

‫• ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺗﺮﻛﻴﺐ ﺍﻟﻠﻐﺔ ﺃﻗﺮﺏ ﻣﺎ ﻳﻜﻮﻥ ﺇﻟﻰ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﺮﻳﺎﺿﻲ ﺍﻟﻘﻴﺎﺳﻲ ‪ ،‬ﻭﻳﺠﺐ ﺃﻥ‬
‫ﺗﻜﻮﻥﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻪ ﻗﺎﺑﻠﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻊ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺸﺮﺡ ﺍﻹﺿﺎﻓﻲ‪.‬‬

‫• ﻳﻨﺒﻐﻲ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﻟﻮﺻﻒ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻨﺸﻮﺭﺍﺕ‬


‫ﺍﻟﻤﻄﺒﻮﻋﺔ‪.‬‬
‫• ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺮﺟﻤﺔ ﺁﻟﻴﺎً ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ‪.‬‬

‫ﺃﺷﺎﺭﺍﻟﻬﺪﻑ ﺍﻷﻭﻝ ﺇﻟﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻌﻠﻤﻴﺔ ‪،‬‬
‫ﻭﺍﻟﺘﻲﻛﺎﻧﺖ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻛﺎﻥ ﺍﻟﺜﺎﻧﻲ ﺷﻴﺉﺎً ﺟﺪﻳﺪﺍً ﺗﻤﺎﻣﺎً‬
‫ﻓﻲﻣﺠﺎﻝ ﺍﻟﺤﻮﺳﺒﺔ‪ .‬ﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﻫﻮ ﺿﺮﻭﺭﺓ ﻭﺍﺿﺤﺔ ﻷﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪54‬‬

‫ﻧﺠﺢﺍﺟﺘﻤﺎﻉ ﺯﻳﻮﺭﺥ ﻓﻲ ﺇﻧﺘﺎﺝ ﻟﻐﺔ ﺗﻠﺒﻲ ﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﻌﻠﻨﺔ ‪ ،‬ﻟﻜﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺗﻄﻠﺒﺖ‬
‫ﺗﻨﺎﺯﻻﺕﻻ ﺣﺼﺮ ﻟﻬﺎ ‪ ،‬ﺑﻴﻦ ﺍﻷﻓﺮﺍﺩ ﻭﺑﻴﻦ ﺟﺎﻧﺒﻲ ﺍﻟﻤﺤﻴﻂ ﺍﻷﻃﻠﺴﻲ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻟﻢ ﺗﻜﻦ‬
‫ﺍﻟﺤﻠﻮﻝﺍﻟﻮﺳﻂ ﺗﺪﻭﺭ ﺣﻮﻝ ﻗﻀﺎﻳﺎ ﻛﺒﻴﺮﺓ ﺑﻘﺪﺭ ﻣﺎ ﻛﺎﻧﺖ ﺗﺘﻌﻠﻖ ﺑﻤﺠﺎﻻﺕ ﺍﻟﻨﻔﻮﺫ‪ .‬ﺇﻥ ﻣﺴﺄﻟﺔ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻔﺎﺻﻠﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ( ﺃﻭ ﺍﻟﻨﻘﻄﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ( ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺸﺮﻳﺔ ﻫﻲ ﺃﺣﺪ‬
‫ﺍﻷﻣﺜﻠﺔ‪.‬‬

‫ﻧﻈﺮﺓﻋﺎﻣﺔ ‪2.5.3 ALGOL 58‬‬


‫ﺗﻢﺗﺴﻤﻴﺔ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺼﻤﻤﺔ ﻓﻲ ﺍﺟﺘﻤﺎﻉ ﺯﻳﻮﺭﺥ ﺑﺎﻟﻠﻐﺔ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺪﻭﻟﻴﺔ )‪ .(IAL‬ﺗﻢ ﺍﻗﺘﺮﺍﺡ ﺃﺛﻨﺎء‬
‫ﺍﻟﺘﺼﻤﻴﻢﺃﻥ ﻳﺘﻢ ﺗﺴﻤﻴﺔ ﺍﻟﻠﻐﺔ ‪ ، ALGOL‬ﻟﻠﻐﺔ ‪ ، ALGOrithmic‬ﻭﻟﻜﻦ ﺗﻢ ﺭﻓﺾ ﺍﻻﺳﻢ ﻷﻧﻪ ﻻ‬
‫ﻳﻌﻜﺲﺍﻟﻨﻄﺎﻕ ﺍﻟﺪﻭﻟﻲ ﻟﻠﺠﻨﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺧﻼﻝ ﺍﻟﻌﺎﻡ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﻻﺳﻢ ﺇﻟﻰ ‪، ALGOL‬‬
‫ﻭﺃﺻﺒﺤﺖﺍﻟﻠﻐﺔ ﻓﻴﻤﺎ ﺑﻌﺪ ﺗﻌﺮﻑ ﺑﺎﺳﻢ ‪.ALGOL 58‬‬

‫ﻣﻦﻧﻮﺍﺡ ﻛﺜﻴﺮﺓ ‪ ،‬ﻛﺎﻥ ‪ ALGOL 58‬ﺳﻠﻴﻼً ﻟـ ‪ ، Fortran‬ﻭﻫﻮ ﺃﻣﺮ ﻃﺒﻴﻌﻲ ﺗﻤﺎﻣﺎً‪ .‬ﻗﺎﻣﺖ‬
‫ﺑﺘﻌﻤﻴﻢﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﻴﺰﺍﺕ ‪ Fortran‬ﻭﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﺑﻌﺾ‬
‫ﺍﻟﺘﻌﻤﻴﻤﺎﺕﻛﺎﻥ ﻟﻬﺎ ﻋﻼﻗﺔ ﺑﻬﺪﻑ ﻋﺪﻡ ﺭﺑﻂ ﺍﻟﻠﻐﺔ ﺑﺄﻱ ﺁﻟﺔ ﻣﻌﻴﻨﺔ ‪ ،‬ﻭﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻛﺎﻥ ﻣﺤﺎﻭﻻﺕ‬
‫ﻟﺠﻌﻞﺍﻟﻠﻐﺔ ﺃﻛﺜﺮ ﻣﺮﻭﻧﺔ ﻭﻗﻮﺓ‪ .‬ﻇﻬﺮ ﻣﺰﻳﺞ ﻧﺎﺩﺭ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻷﻧﺎﻗﺔ ﻣﻦ ﻫﺬﺍ ﺍﻟﺠﻬﺪ‪.‬‬

‫ﻗﺎﻡ‪ ALGOL 58‬ﺑﺈﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻟﺮﺳﻤﻲ ﻋﻠﻰ ﻣﻔﻬﻮﻡ ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﺘﻲ ﻟﻢ ﺗﻜﻦ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺗﺘﻄﻠﺐ ﺗﺼﺮﻳﺤﺎً ﺻﺮﻳﺤﺎً‪ .‬ﺃﺿﺎﻑ ﻓﻜﺮﺓ ﺍﻟﻌﺒﺎﺭﺍﺕ‬
‫ﺍﻟﻤﺮﻛﺒﺔ ‪،‬ﻭﺍﻟﺘﻲ ﺃﺩﺭﺟﺘﻬﺎ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ‪ .‬ﻓﻴﻤﺎ ﻳﻠﻲ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ‪ Fortran‬ﺍﻟﺘﻲ ﺗﻢ‬
‫ﺗﻌﻤﻴﻤﻬﺎ‪:‬ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﻌﺮﻓﺎﺕ ﺑﺄﻱ ﻃﻮﻝ ‪ ،‬ﻋﻠﻰ ﻋﻜﺲ ﺗﻘﻴﻴﺪ ‪ Fortran I‬ﺑﺴﺘﺔ ﺃﺣﺮﻑ ﺃﻭ‬
‫ﺃﻗﻞ ؛ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺄﻱ ﻋﺪﺩ ﻣﻦ ﺃﺑﻌﺎﺩ ﺍﻟﺼﻔﻴﻒ ‪ ،‬ﻋﻠﻰ ﻋﻜﺲ ﻗﻴﻮﺩ ‪ Fortran I‬ﻋﻠﻰ ﻣﺎ ﻻ ﻳﺰﻳﺪ‬
‫ﻋﻦﺛﻼﺛﺔ ؛ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﺗﺤﺪﻳﺪ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ‪ Fortran‬ﻛﺎﻥ ﺍﻟﺤﺪ‬
‫ﺍﻷﺩﻧﻰ‪ 1‬؛ ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﻌﺒﺎﺭﺍﺕ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ‪ ،‬ﻭﻟﻢ ﻳﻜﻦ ﻫﺬﺍ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ‪.Fortran I‬‬

‫ﺍﺳﺘﺤﻮﺫ‪ ALGOL 58‬ﻋﻠﻰ ﻋﺎﻣﻞ ﺍﻟﺘﺨﺼﻴﺺ ﺑﻄﺮﻳﻘﺔ ﻏﻴﺮ ﻋﺎﺩﻳﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪ .‬ﺍﺳﺘﺨﺪﻡ‬
‫‪ Zuse‬ﺍﻟﻨﻤﻮﺫﺝ‬
‫ﺍﻟﺘﻌﺒﻴﺮ=< ﻣﺘﻐﻴﺮ‬
‫ﻟﺒﻴﺎﻥﺍﻟﺘﻨﺎﺯﻝ ﻓﻲ ‪ .Plankalkül‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻋﺪﻡ ﻧﺸﺮ ‪ Plankalkül‬ﺑﻌﺪ ‪ ،‬ﺇﻻ ﺃﻥ ﺑﻌﺾ‬
‫ﺍﻷﻋﻀﺎءﺍﻷﻭﺭﻭﺑﻴﻴﻦ ﻓﻲ ﻟﺠﻨﺔ ‪ ALGOL 58‬ﻛﺎﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺎﻟﻠﻐﺔ‪ .‬ﺍﻧﺨﺮﻃﺖ ﺍﻟﻠﺠﻨﺔ ﻓﻲ ﻧﻤﻮﺫﺝ‬
‫ﺗﻌﻴﻴﻦ‪ Plankalkül‬ﻭﻟﻜﻦ ﺑﺴﺒﺐ ﺍﻟﺤﺠﺞ ﺣﻮﻝ ﻗﻴﻮﺩ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺣﺮﻑ ‪4،‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺭﻣﺰ ﺃﻛﺒﺮ ﻣﻦ‬
‫ﺇﻟﻰﻧﻘﻄﺘﻴﻦ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻭﺑﺈﺻﺮﺍﺭ ﻣﻦ ﺍﻷﻣﺮﻳﻜﻴﻴﻦ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﺗﻢ ﺗﺤﻮﻳﻞ ﺍﻟﺒﻴﺎﻥ ﺑﺎﻟﻜﺎﻣﻞ ﺇﻟﻰ‬
‫ﻧﻤﻮﺫﺝﻓﻮﺭﺗﺮﺍﻥ‬

‫ﺍﻟﻤﺘﻐﻴﺮ‪ =:‬ﺍﻟﺘﻌﺒﻴﺮ‬
‫ﻓﻀﻞﺍﻷﻭﺭﻭﺑﻴﻮﻥ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﺎﻛﺲ ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﺳﻴﻜﻮﻥ ﻋﻜﺲ ﻓﻮﺭﺗﺮﺍﻥ‪.‬‬

‫‪.4‬ﻟﻢ ﺗﺘﻀﻤﻦ ﺧﺮﺍﻣﺎﺕ ﺍﻟﺒﻄﺎﻗﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﺍﻟﺮﻣﺰ ﺃﻛﺒﺮ ﻣﻦ‪.‬‬


‫‪55‬‬ ‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬

‫‪2.5.4‬ﺍﺳﺘﻼﻡ ﺗﻘﺮﻳﺮ ‪ALGOL 58‬‬


‫ﻓﻲﺩﻳﺴﻤﺒﺮ ‪ ، 1958‬ﺗﻢ ﺍﻟﺘﺮﺣﻴﺐ ﺑﻨﺸﺮ ﺗﻘﺮﻳﺮ (‪ALGOL 58 )Perlis and Samelson ، 1958‬‬
‫ﺑﻘﺪﺭﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺤﻤﺎﺱ‪ .‬ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﻛﺎﻥ ﻳﻨُﻈﺮ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻋﻠﻰ ﺃﻧﻬﺎ ﻣﺠﻤﻮﻋﺔ‬
‫ﻣﻦﺍﻷﻓﻜﺎﺭ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻛﺜﺮ ﻣﻦ ﻛﻮﻧﻬﺎ ﻟﻐﺔ ﻗﻴﺎﺳﻴﺔ ﻋﺎﻟﻤﻴﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻟﻢ ﻳﻜﻦ‬
‫ﺍﻟﻤﻘﺼﻮﺩﻣﻦ ﺗﻘﺮﻳﺮ ‪ ALGOL 58‬ﺃﻥ ﻳﻜﻮﻥ ﻣﻨﺘﺠﺎً ﻧﻬﺎﺉﻴﺎً ﺑﻞ ﻭﺛﻴﻘﺔ ﺃﻭﻟﻴﺔ ﻟﻠﻤﻨﺎﻗﺸﺔ ﺍﻟﺪﻭﻟﻴﺔ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﺍﺳﺘﺨﺪﻣﺖ ﺛﻼﺙ ﺟﻬﻮﺩ ﺭﺉﻴﺴﻴﺔ ﻟﻠﺘﺼﻤﻴﻢ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻘﺮﻳﺮ ﻛﺄﺳﺎﺱ ﻟﻬﺎ‪ .‬ﻓﻲ‬
‫ﺟﺎﻣﻌﺔﻣﻴﺸﻴﻐﺎﻥ ‪ ،‬ﻭﻟﺪﺕ ﻟﻐﺔ (‪ .MAD )Arden et al. ، 1961‬ﺃﻧﺘﺠﺖ ﻣﺠﻤﻮﻋﺔ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ‬
‫ﺍﻟﺒﺤﺮﻳﺔﺍﻷﻣﺮﻳﻜﻴﺔ ﻟﻐﺔ (‪ .NELIAC )Huskey et al. ، 1963‬ﻓﻲ ﺷﺮﻛﺔ ‪Corporation‬‬
‫‪ ، System Development‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻭﺗﻨﻔﻴﺬ (‪ .JOVIAL )Shaw ، 1963‬ﺟﻮﻓﻴﺎﻝ ‪ ،‬ﺍﺧﺘﺼﺎﺭ‬
‫ﻟﻨﺴﺨﺔﺟﻮﻝ ﺍﻟﺨﺎﺻﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺒﺮﻳﺔ ﺍﻟﺪﻭﻟﻴﺔ ‪ ،‬ﺗﻤﺜﻞ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ‪58‬‬
‫‪ ALGOL‬ﻟﺘﺤﻘﻴﻖ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ )ﻛﺎﻥ ‪ Jules‬ﻫﻮ ‪ ، Jules I. Schwartz‬ﺃﺣﺪ ﻣﺼﻤﻤﻲ‬
‫‪ .(JOVIAL‬ﺃﺻﺒﺤﺖ ﺟﻮﻓﻴﺎﻝ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ‬
‫ﻟﻠﻘﻮﺍﺕﺍﻟﺠﻮﻳﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ ﻟﻤﺪﺓ ﺭﺑﻊ ﻗﺮﻥ‪.‬‬

‫ﻟﻢﻳﻜﻦ ﺑﺎﻗﻲ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ﻟﻄﻴﻔﺎً ﺟﺪﺍً ﻣﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﻓﻲ‬
‫ﺍﻟﺒﺪﺍﻳﺔ ‪،‬ﺑﺪﺍ ﺃﻥ ﻛﻞ ﻣﻦ ‪ IBM‬ﻭﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﺎﺑﻌﺔ ﻟﻬﺎ ‪SHARE ،‬‬
‫‪،‬ﺗﺘﺒﻨﻰ ‪ .ALGOL 58‬ﺑﺪﺃﺕ ‪ IBM‬ﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ﺑﻌﺪ ﻭﻗﺖ ﻗﺼﻴﺮ ﻣﻦ ﻧﺸﺮ ﺍﻟﺘﻘﺮﻳﺮ ‪ ،‬ﻭﺷﻜﻠﺖ‬
‫‪ SHARE‬ﻟﺠﻨﺔ ﻓﺮﻋﻴﺔ ‪ ، SHARE IAL ،‬ﻟﺪﺭﺍﺳﺔ ﺍﻟﻠﻐﺔ‪ .‬ﺃﻭﺻﺖ ﺍﻟﻠﺠﻨﺔ ﺍﻟﻔﺮﻋﻴﺔ ﻓﻴﻤﺎ ﺑﻌﺪ ﺑﺄﻥ‬
‫ﺗﻘﻮﻡ‪ ACM‬ﺑﺘﻮﺣﻴﺪ ‪ ALGOL 58‬ﻭﺃﻥ ﺗﻘﻮﻡ ﺷﺮﻛﺔ ‪ IBM‬ﺑﺘﻄﺒﻴﻘﻪ ﻋﻠﻰ ﺟﻤﻴﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﻣﻦﺍﻟﺴﻠﺴﻠﺔ ‪ .700‬ﻟﻜﻦ ﺍﻟﺤﻤﺎﺱ ﻟﻢ ﻳﺪﻡ ﻃﻮﻳﻼ‪ .‬ﺑﺤﻠﻮﻝ ﺭﺑﻴﻊ ﻋﺎﻡ ‪ ، 1959‬ﻛﺎﻥ ﻟﺪﻯ ﻛﻞ ﻣﻦ‬
‫‪ IBM‬ﻭ ‪ ، SHARE‬ﻣﻦ ﺧﻼﻝ ﺗﺠﺮﺑﺘﻬﻢ ﻓﻲ ‪ ، Fortran‬ﻣﺎ ﻳﻜﻔﻲ ﻣﻦ ﺍﻷﻟﻢ ﻭﺍﻟﻨﻔﻘﺎﺕ ﻟﺒﺪء ﻟﻐﺔ‬
‫ﺟﺪﻳﺪﺓ ‪،‬ﺳﻮﺍء ﻣﻦ ﺣﻴﺚ ﺗﻄﻮﻳﺮ ﻭﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻤﻲ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻭﻣﻦ ﺣﻴﺚ ﺗﺪﺭﻳﺐ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻋﻠﻰ ﺫﻟﻚ‪ .‬ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻭﺇﻗﻨﺎﻋﻬﻢ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻣﻨﺘﺼﻒ ﻋﺎﻡ ‪، 1959‬ﺍﻝ‬
‫ﻟﻐﺔﻋﻠﻤﻴﺔ ﻵﻻﺕ ﺳﻠﺴﻠﺔ ‪ ، IBM 700‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﺨﻠﻲ ﻋﻦ ‪.ALGOL 58‬‬

‫‪2.5.5‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ‪ALGOL 60‬‬


‫ﺧﻼﻝﻋﺎﻡ ‪ ، 1959‬ﻧﻮﻗﺶ ‪ ALGOL 58‬ﺑﺸﺪﺓ ﻓﻲ ﻛﻞ ﻣﻦ ﺃﻭﺭﻭﺑﺎ ﻭﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪ .‬ﺗﻢ ﻧﺸﺮ‬
‫ﻋﺪﺩﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻭﺍﻹﺿﺎﻓﺎﺕ ﺍﻟﻤﻘﺘﺮﺣﺔ ﻓﻲ ﺃﻭﺭﻭﺑﺎﻧﺸﺮﺓ ‪ALGOL‬ﻭ ﻓﻲﺍﺗﺼﺎﻻﺕ ﻣﻦ‬
‫‪.ACM‬ﻛﺎﻥ ﻣﻦ ﺃﻫﻢ ﺃﺣﺪﺍﺙ ﻋﺎﻡ ‪ 1959‬ﺗﻘﺪﻳﻢ ﻋﻤﻞ ﻟﺠﻨﺔ ﺯﻳﻮﺭﺥ ﺇﻟﻰ ﺍﻟﻤﺆﺗﻤﺮ ﺍﻟﺪﻭﻟﻲ ﻟﻤﻌﺎﻟﺠﺔ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ‪،‬ﺣﻴﺚ ﻗﺪﻡ ﺑﺎﻛﻮﺱ ﺗﺪﻭﻳﻨﻪ ﺍﻟﺠﺪﻳﺪ ﻟﻮﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻭﺍﻟﺬﻱ‬
‫ﺃﺻﺒﺢﻓﻴﻤﺎ ﺑﻌﺪ ﻳﻌﺮﻑ ﺑـ ‪ -Backus) BNF‬ﺷﻜﻞ ﻧﺎﻭﺭ(‪ .‬ﺗﻢ ﻭﺻﻒ ‪ BNF‬ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ‬
‫‪.3‬‬

‫ﻓﻲﻳﻨﺎﻳﺮ ‪ ، 1960‬ﻋﻘُﺪ ﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺜﺎﻧﻲ ﻟـ ‪ ، ALGOL‬ﻫﺬﻩ ﺍﻟﻤﺮﺓ ﻓﻲ ﺑﺎﺭﻳﺲ‪ .‬ﻭﻛﺎﻥ ﺍﻟﻐﺮﺽ‬


‫ﻣﻦﺍﻻﺟﺘﻤﺎﻉ ﻫﻮ ﻣﻨﺎﻗﺸﺔ ‪ 80‬ﺍﻗﺘﺮﺍﺣﺎ ﺗﻢ ﺗﻘﺪﻳﻤﻬﺎ ﺭﺳﻤﻴﺎ ﻟﻠﻨﻈﺮ ﻓﻴﻬﺎ‪ .‬ﺷﺎﺭﻙ ﺑﻴﺘﺮ ﻧﻮﺭ ﻣﻦ‬
‫ﺍﻟﺪﻧﻤﺎﺭﻙﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ‪ ، ALGOL‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻟﻢ ﻳﻜﻦ ﻛﺬﻟﻚ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪56‬‬

‫ﻋﻀﻮﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺯﻳﻮﺭﺥ‪ .‬ﻛﺎﻥ ﻧﻮﺭ ﻫﻮ ﻣﻦ ﺃﻧﺸﺄ ﻭﻧﺸﺮ ﻣﻠﻒ ﻧﺸﺮﺓ ‪.ALGOL‬ﻗﻀﻰ ﻭﻗﺘﺎً ﻃﻮﻳﻼ ً‬
‫ﻓﻲﺩﺭﺍﺳﺔ ﻭﺭﻗﺔ ﺑﺎﻛﻮﺱ ﺍﻟﺘﻲ ﻗﺪﻣﺖ ‪ BNF‬ﻭﻗﺮﺭ ﺍﺳﺘﺨﺪﺍﻡ ‪ BNF‬ﻟﻮﺻﻒ ﻧﺘﺎﺉﺞ ﺍﺟﺘﻤﺎﻉ ‪1960‬‬
‫ﺭﺳﻤﻴﺎً‪.‬ﺑﻌﺪ ﺇﺟﺮﺍء ﺑﻌﺾ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻄﻔﻴﻔﺔ ﻧﺴﺒﻴﺎً ﻋﻠﻰ ‪ ، BNF‬ﻛﺘﺐ ﻭﺻﻔﺎً ﻟﻠﻐﺔ ﺍﻟﻤﻘﺘﺮﺣﺔ‬
‫ﺍﻟﺠﺪﻳﺪﺓﻓﻲ ‪ BNF‬ﻭﻭﺯﻋﻪ ﻋﻠﻰ ﺃﻋﻀﺎء ﻣﺠﻤﻮﻋﺔ ‪ 1960‬ﻓﻲ ﺑﺪﺍﻳﺔ ﺍﻻﺟﺘﻤﺎﻉ‪.‬‬

‫ﻧﻈﺮﺓﻋﺎﻣﺔ ‪2.5.6 ALGOL 60‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﺟﺘﻤﺎﻉ ‪ 1960‬ﺍﺳﺘﻤﺮ ﺳﺘﺔ ﺃﻳﺎﻡ ﻓﻘﻂ ‪ ،‬ﺇﻻ ﺃﻥ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻟﺘﻲ ﺗﻢ ﺇﺟﺮﺍﺅﻫﺎ‬
‫ﻋﻠﻰ‪ ALGOL 58‬ﻛﺎﻧﺖ ﺩﺭﺍﻣﺎﺗﻴﻜﻴﺔ‪ .‬ﻭﻣﻦ ﺃﻫﻢ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻣﺎ ﻳﻠﻲ‪:‬‬

‫• ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻔﻬﻮﻡ ﻫﻴﻜﻞ ﺍﻟﻜﺘﻠﺔ‪ .‬ﺳﻤﺢ ﺫﻟﻚ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺘﻮﻃﻴﻦ ﺃﺟﺰﺍء ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻦ ﻃﺮﻳﻖ‬
‫ﺇﺩﺧﺎﻝﺑﻴﺉﺎﺕ ﺃﻭ ﻧﻄﺎﻗﺎﺕ ﺑﻴﺎﻧﺎﺕ ﺟﺪﻳﺪﺓ‪.‬‬

‫• ﺳﻤُﺢ ﺑﻮﺳﻴﻠﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ‪ :‬ﺍﻟﺘﻤﺮﻳﺮ ﺣﺴﺐ ﺍﻟﻘﻴﻤﺔ‬
‫ﻭﺍﻟﻤﺮﻭﺭﺑﺎﻻﺳﻢ‪.‬‬
‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻺﺟﺮﺍءﺍﺕ ﺃﻥ ﺗﻜﻮﻥ ﻋﻮﺩﻳﺔ‪ .‬ﻟﻢ ﻳﻜﻦ ﻭﺻﻒ ‪ ALGOL 58‬ﻭﺍﺿﺤﺎً ﺑﺸﺄﻥ ﻫﺬﻩ‬
‫ﺍﻟﻤﺴﺄﻟﺔ‪.‬ﻻﺣﻆ ﺃﻧﻪ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻟﺘﻜﺮﺍﺭ ﻛﺎﻥ ﺟﺪﻳﺪﺍً ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ ‪ ،‬ﻓﻘﺪ ﻗﺪﻡ ‪LISP‬‬
‫ﺑﺎﻟﻔﻌﻞﻭﻇﺎﺉﻒ ﺗﻜﺮﺍﺭﻳﺔ ﻓﻲ ﻋﺎﻡ ‪.1959‬‬

‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ‪ .‬ﺍﻟﻤﺼﻔﻮﻓﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ ﻫﻲ‬


‫ﺍﻟﺘﻲﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺃﻭ ﺍﻟﻨﻄﺎﻗﺎﺕ ﻣﻦ ﺃﺟﻠﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﻐﻴﺮﺍﺕ ‪ ،‬ﺑﺤﻴﺚ ﻳﺘﻢ ﺗﻌﻴﻴﻦ‬
‫ﺣﺠﻢﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﻭﻗﺖ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﻟﻠﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﺤﺪﺙ ﻋﻨﺪ ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰﺍﻹﻋﻼﻥ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ ﻣﻮﺻﻮﻓﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪.6‬‬
‫ﺗﻢﺍﻗﺘﺮﺍﺡ ﻭﺭﻓﺾ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻗﺪ ﻳﻜﻮﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻧﺠﺎﺡ ﺃﻭ ﻓﺸﻞ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻭﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﺑﻴﻨﻬﺎ ﻛﺎﻧﺖ ﻋﺒﺎﺭﺍﺕ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ﺑﺎﻟﺘﻨﺴﻴﻖ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺣﺬﻓﻬﺎ‬
‫ﻷﻧﻪﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻧﻬﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻵﻟﺔ‪.‬‬

‫ﻧﺸُﺮﺗﻘﺮﻳﺮ ‪ ALGOL 60‬ﻓﻲ ﻣﺎﻳﻮ ‪ .(Naur ، 1960) 1960‬ﻻ ﻳﺰﺍﻝ ﻫﻨﺎﻙ ﻋﺪﺩ ﻣﻦ‬
‫ﺍﻟﻐﻤﻮﺽﻓﻲ ﻭﺻﻒ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﻋﻘﺪ ﺍﺟﺘﻤﺎﻉ ﺛﺎﻟﺚ ﻓﻲ ﺃﺑﺮﻳﻞ ‪ 1962‬ﻓﻲ ﺭﻭﻣﺎ‬
‫ﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﺸﺎﻛﻞ‪ .‬ﻓﻲ ﻫﺬﺍ ﺍﻻﺟﺘﻤﺎﻉ ﺗﻌﺎﻣﻠﺖ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻣﻊ ﺍﻟﻤﺸﺎﻛﻞ ﻓﻘﻂ‪ .‬ﻟﻢ ﻳﺴُﻤﺢ‬
‫ﺑﺈﺿﺎﻓﺎﺕﺇﻟﻰ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻢ ﻧﺸﺮ ﻧﺘﺎﺉﺞ ﻫﺬﺍ ﺍﻻﺟﺘﻤﺎﻉ ﺗﺤﺖ ﻋﻨﻮﺍﻥ "ﺗﻘﺮﻳﺮ ﻣﻨﻘﺢ ﻋﻦ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ‪) "ALGOL 60‬ﺑﺎﻛﻮﺱ ﻭﺁﺧﺮﻭﻥ ‪.(1963 ،‬‬

‫‪2.5.7‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻣﻦﺑﻌﺾ ﺍﻟﻨﻮﺍﺣﻲ ‪ ،‬ﺣﻘﻖ ‪ ALGOL 60‬ﻧﺠﺎﺣﺎً ﻛﺒﻴﺮﺍً ؛ ﻣﻦ ﻧﻮﺍﺡ ٍﺃﺧﺮﻯ ‪ ،‬ﻛﺎﻥ ﻓﺸﻼ ًﺫﺭﻳﻌﺎً‪ .‬ﻧﺠﺢ‬
‫ﻓﻲﺃﻥ ﻳﺼﺒﺢ ‪ ،‬ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﺗﻘﺮﻳﺒﺎً ‪ ،‬ﺍﻟﻮﺳﻴﻠﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﻘﺒﻮﻟﺔ ﻟﺘﻮﺻﻴﻞ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ‬
‫ﻓﻲﺃﺩﺑﻴﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ‪ ،‬ﻭﻇﻞ ﻛﺬﻟﻚ ﻷﻛﺜﺮ ﻣﻦ ‪ 20‬ﻋﺎﻣﺎً‪ .‬ﻛﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺿﺮﻭﺭﻳﺔ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ‬
‫ﻣﻨﺬﻋﺎﻡ ‪ 1960‬ﺗﺪﻳﻦ ﺑﺸﻲء ﻟـ ‪ .ALGOL 60‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻣﻌﻈﻤﻬﺎ ﻣﺒﺎﺷﺮ‬
‫‪57‬‬ ‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬

‫ﺃﻭﺃﺣﻔﺎﺩ ﻏﻴﺮ ﻣﺒﺎﺷﺮ ؛ ﺗﺘﻀﻤﻦ ﺍﻷﻣﺜﻠﺔ ‪ PL / I‬ﻭ ‪ SIMULA 67‬ﻭ ‪ ALGOL 68‬ﻭ ‪ C‬ﻭ ‪ Pascal‬ﻭ‬
‫‪ Ada‬ﻭ ‪ ++ C‬ﻭ ‪ Java‬ﻭ ‪.# C‬‬
‫ﺗﻀﻤﻨﺖﺟﻬﻮﺩ ﺗﺼﻤﻴﻢ ‪ ALGOL 58 / ALGOL 60‬ﻗﺎﺉﻤﺔ ﻃﻮﻳﻠﺔ ﻣﻦ ﺍﻷﻭﺍﺉﻞ‪ .‬ﻛﺎﻧﺖ‬
‫ﻫﺬﻩﻫﻲ ﺍﻟﻤﺮﺓ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺣﺎﻭﻟﺖ ﻓﻴﻬﺎ ﻣﺠﻤﻮﻋﺔ ﺩﻭﻟﻴﺔ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‪ .‬ﻛﺎﻧﺖ ﺃﻭﻝ ﻟﻐﺔ‬
‫ﺻﻤُﻤﺖﻟﺘﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ‪ .‬ﻛﺎﻧﺖ ﺃﻳﻀﺎً ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻢ ﻭﺻﻒ ﺗﺮﻛﻴﺒﻬﺎ ﺭﺳﻤﻴﺎً‪ .‬ﺑﺪﺃ‬
‫ﻫﺬﺍﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻨﺎﺟﺢ ﻟﺸﻜﻠﻴﺔ ‪ BNF‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺠﺎﻻﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻌﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ :‬ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺮﺳﻤﻴﺔ ‪،‬ﻭﻧﻈﺮﻳﺔ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻭﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻤﺴﺘﻨﺪ ﺇﻟﻰ ‪ .BNF‬ﺃﺧﻴﺮﺍً ‪ ،‬ﺃﺛﺮ ﻫﻴﻜﻞ ‪60‬‬
‫‪ ALGOL‬ﻋﻠﻰ ﺑﻨﻴﺔ ﺍﻟﻤﺎﻛﻴﻨﺔ‪ .‬ﻓﻲ ﺍﻟﻤﺜﺎﻝ ﺍﻷﻛﺜﺮ ﻭﺿﻮﺣﺎ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻣﺘﺪﺍﺩ ﺍﻟﻠﻐﺔ‬
‫ﻛﻠﻐﺔﺃﻧﻈﻤﺔ ﻟﺴﻠﺴﻠﺔ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﺳﻌﺔ ﺍﻟﻨﻄﺎﻕ ‪ ،‬ﺁﻻﺕ ‪ Burroughs B5000‬ﻭ‬
‫‪ B6000‬ﻭ ‪ ، B7000‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻜﺪﺱ ﺃﺟﻬﺰﺓ ﻟﺘﻨﻔﻴﺬ ﺍﻟﻜﺘﻠﺔ ﺑﻜﻔﺎءﺓ ﺍﻟﺒﻨﻴﺔ‬
‫ﻭﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻠﻐﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺠﺎﻧﺐ ﺍﻵﺧﺮ ﻣﻦ ﺍﻟﻌﻤﻠﺔ ‪ ،‬ﻟﻢ ﻳﺤﻘﻖ ‪ ALGOL 60‬ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻓﻲ‬
‫ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ‪ .‬ﺣﺘﻰ ﻓﻲ ﺃﻭﺭﻭﺑﺎ ‪ ،‬ﺣﻴﺚ ﻛﺎﻧﺖ ﺃﻛﺜﺮ ﺷﻌﺒﻴﺔ ﻣﻦ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﻟﻢ ﺗﺼﺒﺢ‬
‫ﺃﺑﺪﺍًﺍﻟﻠﻐﺔ ﺍﻟﻤﻬﻴﻤﻨﺔ‪ .‬ﻫﻨﺎﻙ ﻋﺪﺩ ﻣﻦ ﺍﻷﺳﺒﺎﺏ ﻟﻌﺪﻡ ﻗﺒﻮﻟﻬﺎ‪ .‬ﻟﺴﺒﺐ ﻭﺍﺣﺪ ‪ ،‬ﺗﺒﻴﻦ ﺃﻥ ﺑﻌﺾ‬
‫ﻣﻴﺰﺍﺕ‪ ALGOL 60‬ﻣﺮﻧﺔ ﻟﻠﻐﺎﻳﺔ ؛ ﺟﻌﻠﻮﺍ ﺍﻟﻔﻬﻢ ﺻﻌﺒﺎً ﻭﺍﻟﺘﻨﻔﻴﺬ ﻏﻴﺮ ﻓﻌﺎﻝ‪ .‬ﺃﻓﻀﻞ ﻣﺜﺎﻝ ﻋﻠﻰ‬
‫ﺫﻟﻚﻫﻮ ﻃﺮﻳﻘﺔ ﺗﻤﺮﻳﺮ ﺍﻻﺳﻢ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪ .9‬ﻭﻳﺘﻀﺢ ﺍﻟﺼﻌﻮﺑﺎﺕ ﺍﻟﺘﻲ ﺗﻮﺍﺟﻪ ﺗﻨﻔﻴﺬ ‪ ALGOL 60‬ﻣﻦ ﺧﻼﻝ ﺑﻴﺎﻥ ﺭﻭﺗﻴﺸﺎﻭﺳﺮ ﻓﻲ‬
‫ﻋﺎﻡ‪ 1967‬ﺃﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ‪ ،‬ﺇﻥ ﻭﺟﺪﺕ ‪ ،‬ﺗﻀﻤﻨﺖ ‪ ALGOL‬ﺍﻟﻜﺎﻣﻞ ‪ 60‬ﻟﻐﺔ )‬
‫ﺭﻭﺗﻴﺸﻮﺯﺭ ‪ ، 1967،‬ﺹ ‪.(8‬‬

‫ﻛﺎﻥﻋﺪﻡ ﻭﺟﻮﺩ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻤﺪﺧﻼﺕ ﻭﺍﻟﻤﺨﺮﺟﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﺳﺒﺒﺎً ﺭﺉﻴﺴﻴﺎً ﺁﺧﺮ ﻟﻌﺪﻡ ﻗﺒﻮﻟﻬﺎ‪.‬‬
‫ﺃﺩﻯﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ﺍﻟﻤﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﺘﻨﻔﻴﺬ ﺇﻟﻰ ﺻﻌﻮﺑﺔ ﻧﻘﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻷﺧﺮﻯ‪.‬‬
‫ﻭﻣﻦﺍﻟﻤﻔﺎﺭﻗﺎﺕ ‪ ،‬ﺃﻥ ﺃﺣﺪ ﺃﻫﻢ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑـ ‪60 ، BNF‬‬
‫‪ ، ALGOL‬ﻛﺎﻥ ﺃﻳﻀﺎً ﻋﺎﻣﻼ ًﻓﻲ ﻋﺪﻡ ﻗﺒﻮﻟﻪ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ BNF‬ﻳﻌﺘﺒﺮ ﺍﻵﻥ ﻭﺳﻴﻠﺔ ﺑﺴﻴﻄﺔ‬
‫ﻭﺃﻧﻴﻘﺔﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻓﻲ ﻋﺎﻡ ‪ 1960‬ﺑﺪﺍ ﻏﺮﻳﺒﺎً ﻭﻣﻌﻘﺪﺍً‪.‬‬

‫ﺃﺧﻴﺮﺍً ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻭﺟﻮﺩ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﺭﺑﻤﺎ ﻛﺎﻥ ﺗﺮﺳﻴﺦ ﻓﻮﺭﺗﺮﺍﻥ‬
‫ﺑﻴﻦﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻭﻧﻘﺺ ﺍﻟﺪﻋﻢ ﻣﻦ ﻗﺒﻞ ﺷﺮﻛﺔ ‪ IBM‬ﻣﻦ ﺃﻫﻢ ﺍﻟﻌﻮﺍﻣﻞ ﻓﻲ ﻓﺸﻞ ‪ALGOL 60‬‬
‫ﻓﻲﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ‪.‬‬
‫ﻟﻢﻳﻜﻦ ﺟﻬﺪ ‪ ALGOL 60‬ﻣﻜﺘﻤﻼً ﺣﻘﺎً ‪ ،‬ﺑﻤﻌﻨﻰ ﺃﻥ ﺍﻟﻐﻤﻮﺽ ﻭﺍﻟﻐﻤﻮﺽ ﻛﺎﻥ ﺩﺍﺉﻤﺎً ﺟﺰءﺍً‬
‫ﻣﻦﻭﺻﻒ ﺍﻟﻠﻐﺔ )‪.(Knuth ، 1967‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:ALGOL 60‬‬

‫ﺗﻌﻠﻴﻖﺑﺮﻧﺎﻣﺞ ‪ ALGOL 60‬ﻣﺜﺎﻝ ﻹﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ‪:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ؛‬
‫ﻳﺒﺪﺃ‬
‫ﻣﺠﻤﻮﻋﺔﻋﺪﺩ ﺻﺤﻴﺢ؛ [‪intlist ]1:99‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪58‬‬

‫ﻋﺪﺩﺻﺤﻴﺢﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ؛ ﺍﻟﻤﺠﻤﻮﻉ‪ 0 = :‬؛ ‪listlen ،‬‬

‫ﺍﻟﻨﺘﻴﺠﺔ‪ 0 =:‬؛‬
‫؛ (‪readint )listlen‬‬
‫ﻟﻮ)(‪listlen >100() ∧listlen< 0‬ﺛﻢ‬
‫ﻳﺒﺪﺃ‬
‫ﺗﻌﻠﻴﻖﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ؛‬
‫ﻝﺍﻟﻌﺪﺍﺩ‪1 = :‬ﺧﻄﻮﺓ‪1‬ﺣﺘﻰ‪listlen‬ﻳﻔﻌﻞ‬
‫ﻳﺒﺪﺃ‬
‫[‪: = sum + intlist ]counter‬؛ ﺍﻟﻤﺠﻤﻮﻉ‬
‫([‪ readint )intlist ]counter‬ﻧﻬﺎﻳﺔ؛‬

‫ﺗﻌﻠﻴﻖﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ‬
‫ﺍﻟﻤﺘﻮﺳﻂ‪ sum / listlen =:‬؛‬
‫ﺗﻌﻠﻴﻖﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ؛‬
‫ﻝﺍﻟﻌﺪﺍﺩ‪1 = :‬ﺧﻄﻮﺓ‪1‬ﺣﺘﻰ‪listlen‬ﻳﻔﻌﻞ‬
‫ﻟﻮﻣﺘﻮﺳﻂ <[ﻋﺪﺍﺩ] ‪intlist‬‬
‫ﺛﻢﺍﻟﻨﺘﻴﺠﺔ‪ = :‬ﻧﺘﻴﺠﺔ ‪ 1 +‬؛ ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﺗﻌﻠﻴﻖ‬
‫(ﻧﺘﻴﺠﺔ) ‪ printint‬؛("‪:‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪printstring‬‬

‫ﻧﻬﺎﻳﺔ‬
‫ﺁﺧﺮ‬
‫ﺧﻄﺄ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ" ؛") ‪printstring‬‬
‫ﻧﻬﺎﻳﺔ‬

‫‪2.6‬ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝ‪COBOL :‬‬


‫ﻗﺼﺔ‪ COBOL‬ﻫﻲ ‪ ،‬ﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻋﻜﺲ ﻗﺼﺔ ‪ .ALGOL 60‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺍﺳﺘﺨﺪﻣﺖ‬
‫ﺃﻛﺜﺮﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ‪ ،‬ﺇﻻ ﺃﻥ ‪ COBOL‬ﻛﺎﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﺿﺉﻴﻞ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻼﺣﻘﺔ ‪،‬ﺑﺎﺳﺘﺜﻨﺎء ‪ .PL / I‬ﻗﺪ ﺗﻜﻮﻥ ﻻ ﺗﺰﺍﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪5،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺻﻌﻮﺑﺔ‬
‫ﺍﻟﺘﺄﻛﺪﺑﻄﺮﻳﻘﺔ ﺃﻭ ﺑﺄﺧﺮﻯ‪ .‬ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺃﻫﻢ ﺳﺒﺐ ﻟﻌﺪﻡ ﺗﺄﺛﻴﺮ ‪ COBOL‬ﻫﻮ ﺃﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻨﻬﻢ ﺣﺎﻭﻝ‬
‫ﺗﺼﻤﻴﻢﻟﻐﺔ ﺟﺪﻳﺪﺓ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻣﻨﺬ ﻇﻬﻮﺭﻫﺎ‪ .‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﻣﺪﻯ ﺗﻠﺒﻴﺔ‬
‫ﻗﺪﺭﺍﺕ‪ COBOL‬ﻻﺣﺘﻴﺎﺟﺎﺕ ﻣﻨﻄﻘﺔ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪ .‬ﺳﺒﺐ ﺁﺧﺮ ﻫﻮ ﺃﻥ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ‬
‫ﺍﻟﻨﻤﻮﻓﻲ ﺣﻮﺳﺒﺔ ﺍﻷﻋﻤﺎﻝ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺜﻼﺛﻴﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ ﻗﺪ ﺣﺪﺙ ﻓﻲ ﺍﻟﺸﺮﻛﺎﺕ ﺍﻟﺼﻐﻴﺮﺓ‪.‬‬
‫ﻓﻲﻫﺬﻩ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻟﻘﻠﻴﻞ ﺟﺪﺍً ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺷﺮﺍء ﻣﻌﻈﻢ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﺔﻛﺤﺰﻡ ﺟﺎﻫﺰﺓ ﻟﻤﺨﺘﻠﻒ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺍﻟﻌﺎﻣﺔ‪.‬‬

‫‪.5‬ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻓﻲ ﺩﺭﺍﺳﺔ ﻣﺮﺗﺒﻄﺔ ﺑﻤﺸﻜﻠﺔ ﻋﺎﻡ ‪ ، 2000‬ﻗﺪﺭ ﺃﻥ ﻫﻨﺎﻙ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ‪ 800‬ﻣﻠﻴﻮﻥ ﺧﻂ ﻣﻦ‬
‫‪ COBOL‬ﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻓﻲ ‪ 22‬ﻣﻴﻼ ًﻣﺮﺑﻌﺎ ًﻣﻦ ﻣﺎﻧﻬﺎﺗﻦ‪.‬‬
‫‪59‬‬ ‫‪2.6‬ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝ‪COBOL :‬‬

‫‪2.6.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﺗﺸﺒﻪﺑﺪﺍﻳﺔ ‪ COBOL‬ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ ، ALGOL 60‬ﺑﻤﻌﻨﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ﻗﺪ ﺗﻢ‬
‫ﺗﺼﻤﻴﻤﻬﺎﻣﻦ ﻗﺒﻞ ﻟﺠﻨﺔ ﻣﻦ ﺍﻷﺷﺨﺎﺹ ﺍﻟﺬﻳﻦ ﻳﺠﺘﻤﻌﻮﻥ ﻟﻔﺘﺮﺍﺕ ﺯﻣﻨﻴﺔ ﻗﺼﻴﺮﺓ ﻧﺴﺒﻴﺎً‪ .‬ﻓﻲ‬
‫ﺫﻟﻚﺍﻟﻮﻗﺖ ‪ ،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1959‬ﻛﺎﻧﺖ ﺣﺎﻟﺔ ﺣﻮﺳﺒﺔ ﺍﻷﻋﻤﺎﻝ ﻣﺸﺎﺑﻬﺔ ﻟﺤﺎﻟﺔ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻌﻠﻤﻴﺔ‬
‫ﻗﺒﻞﻋﺪﺓ ﺳﻨﻮﺍﺕ ‪ ،‬ﻋﻨﺪﻣﺎ ﺗﻢ ﺗﺼﻤﻴﻢ ﻓﻮﺭﺗﺮﺍﻥ‪ .‬ﺗﻢ ﺗﻨﻔﻴﺬ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺠﻤﻌﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻷﻋﻤﺎﻝ ‪ ، FLOW-MATIC،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1957‬ﻟﻜﻨﻬﺎ ﺗﻨﺘﻤﻲ ﺇﻟﻰ ﺷﺮﻛﺔ ﻣﺼﻨﻌﺔ ﻭﺍﺣﺪﺓ ‪،‬‬
‫‪ ، UNIVAC‬ﻭﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺗﻠﻚ ﺍﻟﺸﺮﻛﺔ‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﺃﺧﺮﻯ ‪، AIMACO ،‬‬
‫ﻣﻦﻗﺒﻞ ﺍﻟﻘﻮﺍﺕ ﺍﻟﺠﻮﻳﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ ‪ ،‬ﻟﻜﻨﻬﺎ ﻛﺎﻧﺖ ﻣﺠﺮﺩ ﺍﺧﺘﻼﻑ ﺑﺴﻴﻂ ﻓﻲ ‪.FLOW-MATIC‬‬
‫ﺻﻤﻤﺖ‪ IBM‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ‪COMTRAN )COMmercial TRANslator( ،‬‬
‫‪،‬ﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﻌﺪ‪ .‬ﺗﻢ ﺍﻟﺘﺨﻄﻴﻂ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﻣﺸﺎﺭﻳﻊ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻷﺧﺮﻯ‪.‬‬

‫‪2.6.2‬ﺗﺪﻓﻖ ﻣﺎﺗﻴﻚ‬
‫ﺗﺴﺘﺤﻖﺃﺻﻮﻝ ‪ FLOW-MATIC‬ﻣﻨﺎﻗﺸﺔ ﻣﻮﺟﺰﺓ ﻋﻠﻰ ﺍﻷﻗﻞ ‪ ،‬ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺍﻟﺴﻠﻒ ﺍﻷﺳﺎﺳﻲ ﻟـ‬
‫‪ .COBOL‬ﻓﻲ ﻛﺎﻧﻮﻥ ﺍﻷﻭﻝ )ﺩﻳﺴﻤﺒﺮ( ‪ ، 1953‬ﻛﺘﺒﺖ ﺟﺮﻳﺲ ﻫﻮﺑﺮ ﻣﻦ ﺭﻳﻤﻨﺠﺘﻮﻥ ﺭﺍﻧﺪ ﻳﻮﻧﻴﻔﺎﻙ‬
‫ﺍﻗﺘﺮﺍﺣﺎًﻧﺒﻮﻳﺎً ﺑﺎﻟﻔﻌﻞ‪ .‬ﻭﺍﻗﺘﺮﺡ ﺃﻧﻪ "ﻳﺠﺐ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺑﺘﺮﻣﻴﺰ ﺭﻳﺎﺿﻲ ‪ ،‬ﻭﻳﺠﺐ ﻛﺘﺎﺑﺔ‬
‫ﺑﺮﺍﻣﺞﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﻋﺒﺎﺭﺍﺕ ﺑﺎﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ" )‪ ، Wexelblat ، 1981‬ﺹ ‪ .(16‬ﻟﺴﻮء‬
‫ﺍﻟﺤﻆ ‪،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1953‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ﺇﻗﻨﺎﻉ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺑﺄﻧﻪ ﻳﻤﻜﻦ ﺗﺼﻨﻴﻊ ﺟﻬﺎﺯ‬
‫ﻛﻤﺒﻴﻮﺗﺮﻟﻔﻬﻢ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ‪ .‬ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﺑﻌﺾ ﺍﻷﻣﻞ ﻓﻲ ﺃﻥ ﻳﺘﻢ ﺗﻤﻮﻳﻞ ﺍﻗﺘﺮﺍﺡ ﻣﻤﺎﺛﻞ‬
‫ﻣﻦﻗﺒﻞ ﺇﺩﺍﺭﺓ ‪ UNIVAC‬ﺣﺘﻰ ﻋﺎﻡ ‪ ، 1955‬ﻭﺣﺘﻰ ﺑﻌﺪ ﺫﻟﻚ ﺍﺳﺘﻐﺮﻕ ﺍﻷﻣﺮ ﻧﻈﺎﻣﺎً ﻧﻤﻮﺫﺟﻴﺎً‬
‫ﻟﻠﻘﻴﺎﻡﺑﺎﻹﻗﻨﺎﻉ ﺍﻟﻨﻬﺎﺉﻲ‪ .‬ﺗﻀﻤﻦ ﺟﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺒﻴﻊ ﻫﺬﻩ ﺗﺠﻤﻴﻊ ﻭﺗﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ‪،‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻭﻻ ً‪ ،‬ﺛﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻔﺮﻧﺴﻴﺔ ‪ ،‬ﺛﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻷﻟﻤﺎﻧﻴﺔ‪.‬‬

‫‪2.6.3‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ﻛﻮﺑﻮﻝ‬


‫ﻋﻘُﺪﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺮﺳﻤﻲ ﺍﻷﻭﻝ ﺣﻮﻝ ﻣﻮﺿﻮﻉ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺸﺘﺮﻛﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﻭﺍﻟﺬﻱ ﺭﻋﺘﻪ‬
‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ‪ ،‬ﻓﻲ ﺍﻟﺒﻨﺘﺎﻏﻮﻥ ﻓﻲ ‪ 28‬ﻭ ‪ 29‬ﻣﺎﻳﻮ ‪) 1959‬ﺑﺎﻟﻀﺒﻂ ﺑﻌﺪ ﻋﺎﻡ ﻭﺍﺣﺪ ﻣﻦ ﺍﺟﺘﻤﺎﻉ‬
‫ﺯﻳﻮﺭﺥ‪ .(ALGOL‬ﻛﺎﻥ ﺇﺟﻤﺎﻉ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻋﻠﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﺁﻧﺬﺍﻙ ‪) CBL‬ﻟﻐﺔ‬
‫ﺍﻷﻋﻤﺎﻝﺍﻟﻌﺎﻣﺔ( ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﺘﻤﺘﻊ ﺑﺎﻟﺨﺼﺎﺉﺺ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺘﺎﻟﻴﺔ‪ :‬ﺍﺗﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻧﻪ ﻳﻨﺒﻐﻲ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻗﺪﺭ ﺍﻹﻣﻜﺎﻥ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺒﻌﺾ ﺟﺎﺩﻝ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺗﺪﻭﻳﻦ‬
‫ﺭﻳﺎﺿﻲﺃﻛﺜﺮ‪ .‬ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺳﻬﻠﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﺣﺘﻰ ﻋﻠﻰ ﺣﺴﺎﺏ ﻛﻮﻧﻬﺎ ﺃﻗﻞ ﻗﻮﺓ ‪ ،‬ﻣﻦ‬
‫ﺃﺟﻞﺗﻮﺳﻴﻊ ﻗﺎﻋﺪﺓ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﻤﻜﻨﻬﻢ ﺑﺮﻣﺠﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺟﻌﻞ ﺍﻟﻠﻐﺔ‬
‫ﺳﻬﻠﺔﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻛﺎﻥ ﻳﻌﺘﻘﺪ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺳﻴﺴﻤﺢ ﻟﻠﻤﺪﻳﺮﻳﻦ ﺑﻘﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬
‫ﺃﺧﻴﺮﺍً ‪،‬ﻻ ﻳﻨﺒﻐﻲ ﺗﻘﻴﻴﺪ ﺍﻟﺘﺼﻤﻴﻢ ﺑﺸﻜﻞ ﻣﻔﺮﻁ ﺑﺴﺒﺐ ﻣﺸﺎﻛﻞ ﺗﻨﻔﻴﺬﻩ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪60‬‬

‫ﻛﺎﻥﺃﺣﺪ ﺍﻻﻫﺘﻤﺎﻣﺎﺕ ﺍﻟﻤﻬﻴﻤﻨﺔ ﻓﻲ ﺍﻻﺟﺘﻤﺎﻉ ﻫﻮ ﺃﻧﻪ ﻳﻨﺒﻐﻲ ﺍﺗﺨﺎﺫ ﺧﻄﻮﺍﺕ ﻹﻧﺸﺎء ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺔﺍﻟﻌﺎﻟﻤﻴﺔ ﺑﺴﺮﻋﺔ ‪ ،‬ﺣﻴﺚ ﺗﻢ ﺑﺎﻟﻔﻌﻞ ﺑﺬﻝ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻌﻤﻞ ﻹﻧﺸﺎء ﻟﻐﺎﺕ ﺃﻋﻤﺎﻝ ﺃﺧﺮﻯ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ‪ ،‬ﻛﺎﻥ ‪ RCA‬ﻭ ‪ Sylvania‬ﻳﻌﻤﻼﻥ ﻋﻠﻰ ﻟﻐﺎﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ‬
‫ﺍﻟﺨﺎﺻﺔﺑﻬﻤﺎ‪ .‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻛﻠﻤﺎ ﺍﺳﺘﻐﺮﻕ ﺇﻧﺘﺎﺝ ﻟﻐﺔ ﻋﺎﻟﻤﻴﺔ ﻭﻗﺘﺎً ﺃﻃﻮﻝ ‪ ،‬ﺯﺍﺩﺕ ﺻﻌﻮﺑﺔ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻠﻐﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻋﻠﻰ ﻫﺬﺍ ﺍﻷﺳﺎﺱ ‪ ،‬ﺗﻘﺮﺭ ﺃﻧﻪ ﻳﺠﺐ ﺇﺟﺮﺍء ﺩﺭﺍﺳﺔ ﺳﺮﻳﻌﺔ‬
‫ﻟﻠﻐﺎﺕﺍﻟﻤﻮﺟﻮﺩﺓ‪ .‬ﻟﻬﺬﻩ ﺍﻟﻤﻬﻤﺔ ‪ ،‬ﺗﻢ ﺗﺸﻜﻴﻞ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ‪.‬‬

‫ﻛﺎﻧﺖﻫﻨﺎﻙ ﻗﺮﺍﺭﺍﺕ ﻣﺒﻜﺮﺓ ﻟﻔﺼﻞ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻓﺉﺘﻴﻦ ‪ -‬ﻭﺻﻒ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻭﺍﻟﻌﻤﻠﻴﺎﺕﺍﻟﻘﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ ‪ -‬ﻭﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﻫﺎﺗﻴﻦ ﺍﻟﻔﺉﺘﻴﻦ ﻓﻲ ﺃﺟﺰﺍء ﻣﺨﺘﻠﻔﺔ ﻣﻦ‬
‫ﺍﻟﺒﺮﺍﻣﺞ‪.‬ﻛﺎﻧﺖ ﺇﺣﺪﻯ ﻣﻨﺎﻗﺸﺎﺕ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ﺣﻮﻝ ﺇﺩﺭﺍﺝ ﺍﻷﺳﻤﺎء‪ .‬ﺟﺎﺩﻝ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺃﻋﻀﺎءﺍﻟﻠﺠﻨﺔ ﺑﺄﻥ ﺍﻟﺘﺴﺠﻴﻼﺕ ﻛﺎﻧﺖ ﻣﻌﻘﺪﺓ ﻟﻠﻐﺎﻳﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﺷﺨﺎﺹ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪،‬‬
‫ﻭﺍﻟﺬﻳﻦﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻧﻬﻢ ﻏﻴﺮ ﻣﺮﺗﺎﺣﻴﻦ ﻟﻠﺘﺪﻭﻳﻦ ﺍﻟﺮﻳﺎﺿﻲ‪ .‬ﺩﺍﺭﺕ ﺣﺠﺞ ﻣﻤﺎﺛﻠﺔ ﺣﻮﻝ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ‬
‫ﻳﻨﺒﻐﻲﺗﻀﻤﻴﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‪ .‬ﻭﺻﻒ ﺍﻟﺘﻘﺮﻳﺮ ﺍﻟﻨﻬﺎﺉﻲ ﻟﻠﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ‪ ،‬ﺍﻟﺬﻱ‬
‫ﺍﻛﺘﻤﻞﻓﻲ ﺩﻳﺴﻤﺒﺮ ‪ ، 1959‬ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺳﻤﻴﺖ ﻓﻴﻤﺎ ﺑﻌﺪ ‪.COBOL 60‬‬

‫ﺗﻢﻭﺻﻒ ﻣﻮﺍﺻﻔﺎﺕ ﻟﻐﺔ ‪ ، COBOL 60‬ﺍﻟﺘﻲ ﻧﺸﺮﻫﺎ ﻣﻜﺘﺐ ﺍﻟﻄﺒﺎﻋﺔ ﺍﻟﺤﻜﻮﻣﻲ ﻓﻲ ﺃﺑﺮﻳﻞ‬
‫‪)1960‬ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ ، (1960 ،‬ﺑﺄﻧﻬﺎ "ﺃﻭﻟﻴﺔ"‪ .‬ﻧﺸُﺮﺕ ﻧﺴﺦ ﻣﻨﻘﺤﺔ ﻓﻲ ﻋﺎﻣﻲ ‪ 1961‬ﻭ ‪) 1962‬‬
‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ‪ .(1962 ، 1961 ،‬ﺗﻢ ﺗﻮﺣﻴﺪ ﺍﻟﻠﻐﺔ ﻣﻦ ﻗﺒﻞ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ‬
‫ﻟﻠﻤﻌﺎﻳﻴﺮ)‪ (ANSI‬ﻓﻲ ﻋﺎﻡ ‪ .1968‬ﺗﻢ ﺗﻮﺣﻴﺪ ﺍﻟﻤﺮﺍﺟﻌﺎﺕ ﺍﻟﺜﻼﺛﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻦ ﻗﺒﻞ ‪ ANSI‬ﻓﻲ‬
‫‪1974‬ﻭ ‪ 1985‬ﻭ ‪ .2002‬ﻭﺗﺴﺘﻤﺮ ﺍﻟﻠﻐﺔ ﻓﻲ ﺍﻟﺘﻄﻮﺭ ﺍﻟﻴﻮﻡ‪.‬‬

‫‪2.6.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻧﺸﺄﺕﻟﻐﺔ ‪ COBOL‬ﻋﺪﺩﺍً ﻣﻦ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﻇﻬﺮ ﺑﻌﻀﻬﺎ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﺑﻠﻐﺎﺕ ﺃﺧﺮﻯ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻠﻒﻳﻌُﺮﻑِّﻛﺎﻥ ﻓﻌﻞ ‪ COBOL 60‬ﺃﻭﻝ ﺑﻨﺎء ﻟﻐﺔ ﻋﺎﻟﻲ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻮﺣﺪﺍﺕ‬
‫ﺍﻟﻤﺎﻛﺮﻭ‪.‬ﻭﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﺃﻥ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻬﺮﻣﻴﺔ )ﺍﻟﺴﺠﻼﺕ( ‪ ،‬ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ‬
‫‪ ، Plankalkül‬ﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ‪ .COBOL‬ﺗﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ‬
‫ﺍﻟﻤﺼﻤﻤﺔﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ‪ .‬ﻛﺎﻧﺖ ‪ COBOL‬ﺃﻳﻀﺎً ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺳﻤﺤﺖ ﻟﻸﺳﻤﺎء ﺑﺄﻥ‬
‫ﺗﻜﻮﻥﺫﺍﺕ ﺩﻻﻟﺔ ﺣﻘﻴﻘﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﺳﻤﺤﺖ ﺑﻜﻞ ﻣﻦ ﺍﻷﺳﻤﺎء ﺍﻟﻄﻮﻳﻠﺔ )ﺣﺘﻰ ‪ 30‬ﺣﺮﻓﺎً( ﻭﺃﺣﺮﻑ‬
‫ﺭﺍﺑﻂﺍﻟﻜﻠﻤﺎﺕ )ﺍﻟﻮﺍﺻﻼﺕ(‪.‬‬

‫ﺑﺸﻜﻞﻋﺎﻡ ‪ ،‬ﻳﻌﺪ ﺗﻘﺴﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻮ ﺍﻟﺠﺰء ﺍﻟﻘﻮﻱ ﻣﻦ ﺗﺼﻤﻴﻢ ‪ ، COBOL‬ﻓﻲ ﺣﻴﻦ ﺃﻥ‬
‫ﻗﺴﻢﺍﻹﺟﺮﺍءﺍﺕ ﺿﻌﻴﻒ ﻧﺴﺒﻴﺎً‪ .‬ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻛﻞ ﻣﺘﻐﻴﺮ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺗﻘﺴﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﺑﻤﺎ‬
‫ﻓﻲﺫﻟﻚ ﻋﺪﺩ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﻭﻣﻮﻗﻊ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺸﺮﻳﺔ ﺍﻟﻀﻤﻨﻴﺔ‪ .‬ﻳﺘﻢ ﺃﻳﻀﺎً ﻭﺻﻒ ﺳﺠﻼﺕ‬
‫ﺍﻟﻤﻠﻔﺎﺕﺑﻬﺬﺍ ﺍﻟﻤﺴﺘﻮﻯ ﻣﻦ ﺍﻟﺘﻔﺎﺻﻴﻞ ‪ ،‬ﻭﻛﺬﻟﻚ ﺍﻷﺳﻄﺮ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺇﺧﺮﺍﺟﻬﺎ ﺇﻟﻰ ﺍﻟﻄﺎﺑﻌﺔ ‪ ،‬ﻣﻤﺎ‬
‫ﻳﺠﻌﻞ‪ COBOL‬ﻣﺜﺎﻟﻴﺎً ﻟﻄﺒﺎﻋﺔ ﺍﻟﺘﻘﺎﺭﻳﺮ ﺍﻟﻤﺤﺎﺳﺒﻴﺔ‪ .‬ﻭﻟﻌﻞ ﺃﻫﻢ ﻧﻘﺎﻁ ﺿﻌﻒ ﻗﺴﻢ ﺍﻹﺟﺮﺍءﺍﺕ‬
‫ﺍﻷﺻﻠﻴﺔﻫﻮ ﺍﻓﺘﻘﺎﺭﻫﺎ ﺇﻟﻰ ﺍﻟﻮﻇﺎﺉﻒ‪ .‬ﺇﺻﺪﺍﺭﺍﺕ ‪ COBOL‬ﺍﻟﺴﺎﺑﻘﺔ ﻟﻤﻌﻴﺎﺭ ‪ 1974‬ﻟﻢ ﺗﺴﻤﺢ‬
‫ﺃﻳﻀﺎًﺑﺎﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺫﺍﺕ ﺍﻟﻤﻌﻠﻤﺎﺕ‪.‬‬

‫ﺗﻌﻠﻴﻘﻨﺎﺍﻷﺧﻴﺮ ﻋﻠﻰ ‪ :COBOL‬ﻛﺎﻧﺖ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻢ ﺗﻔﻮﻳﺾ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻦ‬
‫ﻗﺒﻞﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ )‪ .(DoD‬ﺟﺎء ﻫﺬﺍ ﺍﻟﺘﻔﻮﻳﺾ ﺑﻌﺪ ﺗﻄﻮﻳﺮﻩ ﺍﻷﻭﻟﻲ ‪ ،‬ﻷﻥ ‪ COBOL‬ﻟﻢ ﻳﺘﻢ‬
‫ﺗﺼﻤﻴﻤﻪﺧﺼﻴﺼﺎً ﻟﻮﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺰﺍﻳﺎﻫﺎ ‪ ،‬ﻣﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻻ ﻳﻜﻮﻥ ‪COBOL‬‬
‫‪61‬‬ ‫‪2.6‬ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝ‪COBOL :‬‬

‫ﻧﺠﺎﺑﺪﻭﻥ ﻫﺬﺍ ﺍﻟﺘﻔﻮﻳﺾ‪ .‬ﺃﺩﻯ ﺍﻷﺩﺍء ﺍﻟﻀﻌﻴﻒ ﻟﻠﻤﺘﺮﺟﻤﻴﻦ ﺍﻷﻭﺍﺉﻞ ﺇﻟﻰ ﺟﻌﻞ ﺍﻟﻠﻐﺔ ﺑﺎﻫﻈﺔ‬
‫ﺍﻟﺜﻤﻦﻟﻠﻐﺎﻳﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ‪ .‬ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﺃﺻﺒﺢ ﺍﻟﻤﺘﺮﺟﻤﻮﻥ ﺃﻛﺜﺮ ﻛﻔﺎءﺓ ﻭﺃﺻﺒﺤﺖ ﺃﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﺃﺳﺮﻉ ﻭﺃﺭﺧﺺ ﺑﻜﺜﻴﺮ ﻭﻟﺪﻳﻬﺎ ﺫﺍﻛﺮﺓ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ‪ .‬ﻫﺬﻩ ﺍﻟﻌﻮﺍﻣﻞ ﻣﺠﺘﻤﻌﺔ ﺳﻤﺤﺖ ﻟـ‬
‫‪ COBOL‬ﺑﺎﻟﻨﺠﺎﺡ ‪ ،‬ﺩﺍﺧﻞ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﻭﺧﺎﺭﺟﻬﺎ‪ .‬ﺃﺩﻯ ﻇﻬﻮﺭﻫﺎ ﺇﻟﻰ ﺍﻟﻤﻴﻜﻨﺔ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ‬
‫ﻟﻠﻤﺤﺎﺳﺒﺔ ‪،‬ﻭﻫﻲ ﺛﻮﺭﺓ ﻣﻬﻤﺔ ﺑﻜﻞ ﺍﻟﻤﻘﺎﻳﻴﺲ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪ .COBOL‬ﻳﻘﺮﺃ ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻠﻔﺎً ﺑﺎﺳﻢﻣﻠﻒ ‪BAL-FWD‬ﺍﻟﺬﻱ‬
‫ﻳﺤﺘﻮﻱﻋﻠﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﻤﺨﺰﻭﻥ ﺣﻮﻝ ﻣﺠﻤﻮﻋﺔ ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻌﻨﺎﺻﺮ‪ .‬ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ ‪،‬‬
‫ﻳﺘﻀﻤﻦﻛﻞ ﺳﺠﻞ ﻋﻨﺼﺮ ﺍﻟﺮﻗﻢ ﺍﻟﻤﻮﺟﻮﺩ ﺣﺎﻟﻴﺎً )ﺑﺎﻝ ﻋﻠﻰ ﺍﻟﻴﺪ(ﻭﻧﻘﻄﺔ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻌﻨﺼﺮ‬
‫‪)BAL-REORDER-POINT(.‬ﻧﻘﻄﺔ ﺇﻋﺎﺩﺓ ﺍﻟﻄﻠﺐ ﻫﻲ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻟﻌﺪﺩ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﻮﺟﻮﺩﺓ‬
‫ﻭﺍﻟﺘﻲﻳﺠﺐ ﻃﻠﺐ ﺍﻟﻤﺰﻳﺪ ﻋﻨﺪﻫﺎ‪ .‬ﻳﻨﺘﺞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻗﺎﺉﻤﺔ ﺑﺎﻟﻌﻨﺎﺻﺮ ﺍﻟﺘﻲ ﻳﺠﺐ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺒﻬﺎ‬
‫ﻛﻤﻠﻒﻣﺴﻤﻰﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ‪.‬‬

‫ﻗﺴﻢﺍﻟﺘﻌﺮﻳﻒ‪ .‬ﻣﻌﺮﻑّ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻗﺎﺉﻤﺔ ﺍﻟﻤﻨﺘﺠﺎﺕ ﺍﻟﻤﻌُﺎﺩ‬


‫ﺗﺮﺗﻴﺒﻬﺎ‪.‬‬

‫ﻗﺴﻢﺍﻟﺒﻴﺉﺔ‪.‬‬
‫ﻗﺴﻢﺍﻟﺘﻜﻮﻳﻦ‪.‬‬
‫‪DEC-VAX. SOURCE-COMPUTER.‬‬
‫‪DEC-VAX.‬‬ ‫ﻛﺎﺉﻦ‪-‬ﺣﺎﺳﻮﺏ‪.‬‬
‫ﻗﺴﻢﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ‪.‬‬
‫ﺍﻟﺘﺤﻜﻢﻓﻲ ﺍﻟﻤﻠﻔﺎﺕ‪.‬‬
‫ﺗﻌﻴﻴﻦﻟﻠﻘﺎﺭﺉ‪.‬‬ ‫ﺣﺪﺩ‪BAL-FWD-FILE‬‬
‫ﺗﻌﻴﻴﻦﺇﻟﻰ ﺍﻟﻄﺎﺑﻌﺔ ﺍﻟﻤﺤﻠﻴﺔ‪.‬‬ ‫ﺣﺪﺩﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ‬

‫ﺗﻘﺴﻴﻢﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬
‫ﻗﺴﻢﺍﻟﻤﻠﻒ‪.‬‬
‫ﻓﺪ ﻣﻠﻒ‪BAL-FWD‬‬
‫ﺳﺠﻼﺕﺍﻟﻤﻠﺼﻘﺎﺕ ﻫﻲ ﺳﺠﻼﺕ ﻗﻴﺎﺳﻴﺔ ﺗﺤﺘﻮﻱ‬
‫ﻋﻠﻰ‪ 80‬ﺣﺮﻓﺎً‪.‬‬

‫ﺑﻄﺎﻗﺔ‪.BAL-FWD‬‬ ‫‪01‬‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02‬ﺑﻞ ﺍﻟﺒﻨﺪ ﺭﻗﻢ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )20‬‬ ‫‪02 BAL-ITEM-DESC‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻲ ‪.999V99‬‬ ‫‪02 BAL-UNIT-PRICE‬‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02 BAL-REORDER-POINT‬‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02‬ﺑﺎﻝ ﻓﻲ ﺍﻟﻴﺪ‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02‬ﺑﺎﻝ ﻋﻨﺪ ﺍﻟﻄﻠﺐ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )30‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺇﻋﺎﺩﺓﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ‬ ‫ﻓﺪ‬
‫ﺳﺠﻼﺕﺍﻟﻤﻠﺼﻘﺎﺕ ﻫﻲ ﺳﺠﻼﺕ ﻗﻴﺎﺳﻴﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ‬
‫‪132‬ﺣﺮﻓﺎً‪.‬‬

‫‪01‬ﺧﻂ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ‪.‬‬


‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪62‬‬

‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.Z )5‬‬ ‫‪02 RL-ITEM-NO‬‬


‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )20‬‬ ‫‪02 RL-ITEM-DESC‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻲ ‪.ZZZ.99‬‬ ‫‪02 RL-UNIT-PRICE‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺣﺸﻮ‪02 RL-AVAILABLE-STOCK PICTURE IS Z )5(. 02‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.Z )5‬‬ ‫‪02 RL-REORDER-POINT‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )71‬‬ ‫‪02‬ﺣﺸﻮ‬

‫ﻗﺴﻢﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻌﺎﻣﻞ‪01 .‬‬


‫ﻣﻔﺎﺗﻴﺢ‪.‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻲ ‪.X‬‬ ‫‪02 CARD-EOF-SWITCH‬‬
‫‪ 01‬ﻣﺠﺎﻻﺕﺍﻟﻌﻤﻞ‪.‬‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02‬ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ‬

‫ﻗﺴﻢﺍﻹﺟﺮﺍءﺍﺕ‪.‬‬
‫‪-000‬ﻣﻨﺘﺞ‪ -‬ﻗﻮﺍﺉﻢ‪.REORDER-LISTING -‬‬
‫ﻓﺘﺢ‪ BAL-FWD-FILE‬ﺍﻟﻤﺪﺧﻼﺕ‪ .‬ﻓﺘﺢ ﻗﻮﺍﺉﻢ ﺇﻋﺎﺩﺓ‬
‫ﺗﺮﺗﻴﺐﺍﻹﺧﺮﺍﺝ‪ .‬ﻧﻘﻞ "‪ "N‬ﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺑﻄﺎﻗﺔ ‪-LINE‬‬
‫‪EOF. PERFORM 100-PRODUCE-REORDER‬‬

‫ﺣﺘﻰﻳﺼﺒﺢ ﻣﻔﺘﺎﺡ ‪ CARD-EOF-SWITCH‬ﻣﺴﺎﻭﻳﺎً ﻟـ "‪ ."Y‬ﺃﻏﻠﻖ‬


‫‪.BAL-FWD-FILE‬‬
‫ﺇﻏﻼﻕﻗﺎﺉﻤﺔ ﺇﻋﺎﺩﺓ ﺍﻟﺘﺮﺗﻴﺐ‪.‬‬
‫ﺗﻮﻗﻒﺗﺸﻐﻴﻞ‪.‬‬

‫‪-100‬ﻣﻨﺘﺞ‪.REORDER-LINE -‬‬
‫ﺃﺩﺍء‪ .READ-INVENTORY RECORD-110‬ﺇﺫﺍ ﻛﺎﻥ ‪-SWITCH‬‬
‫‪ CARD-EOF‬ﻻ ﻳﺴﺎﻭﻱ "‪["Y‬‬
‫ﺃﺩﺍء‪ 120‬ﺣﺴﺎﺏ ‪ -‬ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ‬
‫ﺇﺫﺍﻛﺎﻥ ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﺎﺡ ﺃﻗﻞ ﻣﻦ ﻧﻘﻄﺔ ‪BAL-REORDER-POINT‬‬
‫‪PERFORM 130-PRINT-REORDER-LINE.‬‬

‫‪-110‬ﻗﺮﺍءﺓ‪-‬ﺳﺠﻞ ﺍﻟﻤﺨﺰﻭﻥ‪.‬‬
‫ﻗﺮﺍءﺓﺳﺠﻞ ‪BAL-FWD-FILE‬‬
‫ﻓﻲﺍﻟﻨﻬﺎﻳﺔ‬
‫ﺣﺮﻙﺣﺮﻑ "‪ "Y‬ﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺑﻄﺎﻗﺔ ‪.EOF‬‬

‫‪-120‬ﺣﺴﺎﺏ‪-‬ﺍﻟﻤﺨﺰﻭﻥ‪-‬ﺍﻟﻤﺘﻮﻓﺮ‪ .‬ﺃﺿﻒ ﺑﻠﻠﺔ ﻋﻠﻰ ﺍﻟﻴﺪ‬

‫ﺇﻋﻄﺎءﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﺎﺡ‪.‬‬

‫‪130-PRINT-REORDER-LINE.‬‬
‫ﻹﻋﺎﺩﺓﺗﺮﺗﻴﺐ ﺍﻟﺨﻂ‪.‬‬ ‫ﻧﻘﻞﺍﻟﻔﻀﺎء‬
‫‪63‬‬ ‫‪2.7‬ﺑﺪﺍﻳﺎﺕ ﺗﻘﺎﺳﻢ ﺍﻟﻮﻗﺖ‪ :‬ﺃﺳﺎﺳﻲ‬

‫ﺇﻟﻰ‪.RL-ITEM-NO‬‬ ‫ﻧﻘﻞ‪BAL-ITEM-NO‬‬
‫ﺇﻟﻰ‪.RL-ITEM-DESC‬‬ ‫ﻧﻘﻞ‪BAL-ITEM-DESC‬‬
‫ﺇﻟﻰ‪.RL-UNIT-PRICE‬‬ ‫ﻧﻘﻞ‪BAL-UNIT-PRICE‬‬
‫ﺇﻟﻰ‪.RL-AVAILABLE-STOCK‬‬ ‫ﻧﻘﻞﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ‬
‫ﺍﻧﻘﻞ‪ BAL-REORDER-POINT‬ﺇﻟﻰ ‪ .RL-REORDER-POINT‬ﺍﻛﺘﺐ ﺧﻂ‬
‫ﺇﻋﺎﺩﺓﺗﺮﺗﻴﺐ‪.‬‬

‫‪2.7‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﻤﺸﺎﺭﻛﺔ ﺑﺎﻟﻮﻗﺖ‪BASIC :‬‬


‫‪.‬ﻛﺎﻥﻓﻲ ﺇﺻﺪﺍﺭﺍﺗﻪ ﺍﻷﻭﻟﻰ ﻏﻴﺮ ﺃﻧﻴﻖ ﻭﻟﻢ ﻳﺘﻀﻤﻦ ﺳﻮﻯ ﻣﺠﻤﻮﻋﺔ ﻫﺰﻳﻠﺔ ﻣﻦ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ‪،‬‬
‫‪ COBOL‬ﺗﻢ ﺗﺠﺎﻫﻠﻪ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﻗﺒﻞ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻣﺜﻞ ‪ COBOL ،‬ﻫﻲ ﻟﻐﺔ‬
‫ﺑﺮﻣﺠﺔﺃﺧﺮﻯ ﺗﻤﺘﻌﺖ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﻟﻜﻨﻬﺎ ﻟﻢ ﺗﺤﻆ ﺇﻻ ﺑﺎﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻻﺣﺘﺮﺍﻡ‪ .‬ﻣﺜﻞ (‬
‫‪BASIC )Mather and Waite، 1971‬‬

‫ﻛﺎﻧﺖ‪ BASIC‬ﺗﺤﻈﻰ ﺑﺸﻌﺒﻴﺔ ﻛﺒﻴﺮﺓ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ‬


‫ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕﻭﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﺟﺎء ﻫﺬﺍ ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺮﺉﻴﺴﻴﺔ‬
‫ﻟﻺﺻﺪﺍﺭﺍﺕﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ‪ .BASIC‬ﻛﺎﻥ ﻣﻦ ﺍﻟﺴﻬﻞ ﻋﻠﻰ ﺍﻟﻤﺒﺘﺪﺉﻴﻦ ﺍﻟﺘﻌﻠﻢ ‪ ،‬ﺧﺎﺻﺔ ﺃﻭﻟﺉﻚ‬
‫ﺍﻟﺬﻳﻦﻟﻢ ﻳﻜﻦ ﻟﺪﻳﻬﻢ ﺗﻮﺟﻪ ﻋﻠﻤﻲ ‪ ،‬ﻭﻳﻤﻜﻦ ﺗﻄﺒﻴﻖ ﻟﻬﺠﺎﺗﻬﺎ ﺍﻷﺻﻐﺮ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺫﺍﺕ‬
‫ﺍﻟﺬﻛﺮﻳﺎﺕﺍﻟﺼﻐﻴﺮﺓ ﺟﺪﺍً‪6.‬ﻋﻨﺪﻣﺎ ﻧﻤﺖ ﻗﺪﺭﺍﺕ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﻭﻧﻔُﺬﺕ ﻟﻐﺎﺕ ﺃﺧﺮﻯ ‪،‬‬
‫ﺗﻀﺎءﻝﺍﺳﺘﺨﺪﺍﻡ ‪ .BASIC‬ﺑﺪﺃﺕ ﻋﻮﺩﺓ ﻗﻮﻳﺔ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ‪ BASIC‬ﻣﻊ ﻇﻬﻮﺭ (‪، 1991‬‬
‫‪ Visual Basic )Microsoft‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪.‬‬

‫‪2.7.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺗﻢﺗﺼﻤﻴﻢ ‪) BASIC‬ﻛﻮﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻟﺠﻤﻴﻊ ﺍﻷﻏﺮﺍﺽ ﻟﻠﻤﺒﺘﺪﺉﻴﻦ( ﻓﻲ ﺍﻷﺻﻞ ﻓﻲ ﻛﻠﻴﺔ‬
‫ﺩﺍﺭﺗﻤﻮﺙ)ﺍﻵﻥ ﺟﺎﻣﻌﺔ ﺩﺍﺭﺗﻤﻮﺙ( ﻓﻲ ﻧﻴﻮ ﻫﺎﻣﺒﺸﺎﻳﺮ ﻣﻦ ﻗﺒﻞ ﻋﺎﻟﻤﻴﻦ ﺭﻳﺎﺿﻴﻴﻦ ‪ ،‬ﺟﻮﻥ ﻛﻴﻤﻴﻨﻲ‬
‫ﻭﺗﻮﻣﺎﺱﻛﻮﺭﺗﺰ ‪ ،‬ﺍﻟﺬﻳﻦ ﻃﻮﺭﻭﺍ ‪ ،‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﻣﺘﺮﺟﻤﻴﻦ ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ‬
‫ﻟﻬﺠﺎﺕﻓﻮﺭﺗﺮﺍﻥ ﻭ ‪ .ALGOL 60‬ﻻ ﻳﻮﺍﺟﻪ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻋﻤﻮﻣﺎً ﺻﻌﻮﺑﺔ ﻓﻲ ﺗﻌﻠﻢ ﺃﻭ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺗﻠﻚﺍﻟﻠﻐﺎﺕ ﻓﻲ ﺩﺭﺍﺳﺎﺗﻬﻢ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﺩﺍﺭﺗﻤﻮﺙ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﺆﺳﺴﺔ ﻟﻠﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ ‪،‬‬
‫ﺣﻴﺚﺷﻜﻞ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻭﺍﻟﻬﻨﺪﺳﺔ ﺣﻮﺍﻟﻲ ‪ 25‬ﺑﺎﻟﻤﺎﺉﺔ ﻓﻘﻂ ﻣﻦ ﻫﻴﺉﺔ ﺍﻟﻄﻼﺏ‪ .‬ﺗﻘﺮﺭ ﻓﻲ‬
‫ﺭﺑﻴﻊﻋﺎﻡ ‪ 1963‬ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﺧﺎﺻﺔ ﻟﻄﻼﺏ ﺍﻟﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ‪ .‬ﺳﺘﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‬
‫ﺍﻟﻤﺤﻄﺎﺕﻛﻄﺮﻳﻘﺔ ﻟﻠﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻛﺎﻧﺖ ﺃﻫﺪﺍﻑ ﺍﻟﻨﻈﺎﻡ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫‪.1‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺳﻬﻼً ﻋﻠﻰ ﺍﻟﻄﻼﺏ ﻏﻴﺮ ﺍﻟﻤﺪﺭﻛﻴﻦ‪.‬‬


‫‪.2‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ "ﻟﻄﻴﻔﺎً ﻭﻭﺩﻭﺩﺍً"‪.‬‬
‫‪.3‬ﻳﺠﺐ ﺃﻥ ﺗﻮﻓﺮ ﺗﺤﻮﻝ ﺳﺮﻳﻊ ﻟﻠﻮﺍﺟﺐ ﺍﻟﻤﻨﺰﻟﻲ‪.‬‬

‫‪.6‬ﺍﺷﺘﻤﻠﺖ ﺑﻌﺾ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻟﻤﺒﻜﺮﺓ ﻋﻠﻰ ﻣﺘﺮﺟﻤﻴﻦ ﺃﺳﺎﺳﻴﻴﻦ ﻳﻘﻴﻤﻮﻥ ﻓﻲ ‪ 4096‬ﺑﺎﻳﺖ ﻣﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻘﺮﺍءﺓ‬
‫ﻓﻘﻂ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪64‬‬

‫‪.4‬ﻳﺠﺐ ﺃﻥ ﻳﺴﻤﺢ ﺑﺎﻟﻮﺻﻮﻝ ﺍﻟﻤﺠﺎﻧﻲ ﻭﺍﻟﺨﺎﺹ‪.‬‬


‫‪.5‬ﻳﺠﺐ ﺍﻋﺘﺒﺎﺭ ﻭﻗﺖ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﻭﻗﺖ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬

‫ﻛﺎﻥﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﺑﺎﻟﻔﻌﻞ ﻣﻔﻬﻮﻣﺎً ﺛﻮﺭﻳﺎً‪ .‬ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ﻋﻠﻰ ﺍﻻﻋﺘﻘﺎﺩ ﺑﺄﻥ ﺃﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﺳﺘﺼﺒﺢ ﺃﺭﺧﺺ ﺑﻜﺜﻴﺮ ﻣﻊ ﻣﺮﻭﺭ ﺍﻟﻮﻗﺖ ‪ ،‬ﻭﻫﻮ ﻣﺎ ﻓﻌﻠﻮﻩ ﺑﺎﻟﻄﺒﻊ‪.‬‬

‫ﺃﺩﻯﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻷﻫﺪﺍﻑ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺍﻟﺜﺎﻟﺜﺔ ﻭﺍﻟﺮﺍﺑﻌﺔ ﺇﻟﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻟﻤﺸﺘﺮﻙ ﺑﺎﻟﻮﻗﺖ ﻣﻦ‬
‫‪ .BASIC‬ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻔﺮﺩﻱ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﻤﺘﺰﺍﻣﻨﻴﻦ ﻳﻤﻜﻦ ﺗﺤﻘﻴﻖ ﻫﺬﻩ ﺍﻷﻫﺪﺍﻑ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪.‬‬
‫ﻓﻲﺻﻴﻒ ﻋﺎﻡ ‪ ، 1963‬ﺑﺪﺃ ‪ Kemeny‬ﺍﻟﻌﻤﻞ ﻋﻠﻰ ﺍﻟﻤﺘﺮﺟﻢ ﻟﻠﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ‪، BASIC‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻮﺻﻮﻝ ﻋﻦ ﺑﻌﺪ ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪ .GE 225‬ﺑﺪﺃ ﺗﺼﻤﻴﻢ ﻭﺗﺮﻣﻴﺰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻟـ ‪BASIC‬‬
‫ﻓﻲﺧﺮﻳﻒ ﻋﺎﻡ ‪ .1963‬ﺍﻟﺴﺎﻋﺔ ‪4:00‬‬
‫ﺃ‪.‬ﻡ‪.‬ﻓﻲ ‪ 1‬ﻣﺎﻳﻮ ‪ ، 1964‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﻭﺗﺸﻐﻴﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻷﻭﻝ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ‪ BASIC‬ﺍﻟﻤﺸﺘﺮﻙ‬
‫ﺑﺎﻟﻮﻗﺖ‪.‬ﻓﻲ ﻳﻮﻧﻴﻮ ‪ ،‬ﺍﺭﺗﻔﻊ ﻋﺪﺩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺇﻟﻰ ‪ ، 11‬ﻭﺑﺤﻠﻮﻝ ﺍﻟﺨﺮﻳﻒ ﺍﺭﺗﻔﻊ ﺇﻟﻰ ‪.20‬‬

‫‪2.7.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻛﺎﻧﺖﺍﻟﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ‪ BASIC‬ﺻﻐﻴﺮﺓ ﺟﺪﺍً ‪ ،‬ﻭﺍﻟﻐﺮﻳﺐ ﺃﻧﻬﺎ ﻟﻢ ﺗﻜﻦ ﺗﻔﺎﻋﻠﻴﺔ‪ :‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ‬
‫ﻃﺮﻳﻘﺔﻟﺒﺮﻧﺎﻣﺞ ﻣﻨﻔﺬ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻭﺗﺼﻨﻴﻔﻬﺎﻭﺗﺸﻐﻴﻠﻬﺎ ﺑﻄﺮﻳﻘﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﺪﻓُﻌﺎﺕ‪ .‬ﻳﺤﺘﻮﻱ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻋﻠﻰ ‪ 14‬ﻧﻮﻋﺎً‬
‫ﻣﺨﺘﻠﻔﺎًﻓﻘﻂ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻭﺍﺣﺪ ‪ -‬ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻷﻧﻪ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻥ ﻗﻠﺔ ﻣﻦ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﻤﺴﺘﻬﺪﻓﻴﻦ ﺳﻴﻘﺪﺭﻭﻥ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺃﻧﻮﺍﻉ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺃﻧﻮﺍﻉ ﺍﻟﻔﺎﺻﻠﺔ‬
‫ﺍﻟﻌﺎﺉﻤﺔ ‪،‬ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻨﻮﻉ ﺑﺎﺳﻢ "ﺍﻷﺭﻗﺎﻡ"‪ .‬ﺑﺸﻜﻞ ﻋﺎﻡ ‪ ،‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻣﺤﺪﻭﺩﺓ ﻟﻠﻐﺎﻳﺔ ‪،‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺳﻬﻮﻟﺔ ﺗﻌﻠﻤﻬﺎ‪.‬‬

‫‪2.7.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﺃﻫﻢ ﺟﺎﻧﺐ ﻓﻲ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻭﻝ ﻟﻐﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻣﺘﺼﻠﺔ ﺑﺠﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺑﻌﻴﺪ‪7.‬ﻛﺎﻧﺖ ﺍﻟﻤﺤﻄﺎﺕ ﻗﺪ ﺑﺪﺃﺕ ﻟﻠﺘﻮ‬
‫ﻓﻲﺃﻥ ﺗﻜﻮﻥ ﻣﺘﺎﺣﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻗﺒﻞ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺇﺩﺧﺎﻝ ﻣﻌﻈﻢ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺇﻣﺎﻣﻦ ﺧﻼﻝ ﺑﻄﺎﻗﺎﺕ ﻣﺜﻘﺒﺔ ﺃﻭ ﺷﺮﻳﻂ ﻭﺭﻗﻲ‪.‬‬

‫ﺟﺎءﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺗﺼﻤﻴﻢ ‪ BASIC‬ﻣﻦ ‪ ، Fortran‬ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻟﺒﺴﻴﻂ ﻣﻦ ﺑﻨﺎء ﺟﻤﻠﺔ‬


‫‪ .ALGOL60‬ﻻﺣﻘﺎً ‪ ،‬ﻧﻤﺎ ﺑﻄﺮﻕ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻣﻊ ﺑﺬﻝ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺠﻬﺪ ﺃﻭ ﺑﺪﻭﻥ ﺃﻱ ﺟﻬﺪ ﻟﺘﻮﺣﻴﺪﻩ‪.‬‬
‫ﺃﺻﺪﺭﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ ﻟﻠﻤﻌﺎﻳﻴﺮ ﻣﻌﻴﺎﺭﺍً ﺃﺳﺎﺳﻴﺎً ﺃﺩﻧﻰ )‪ ANSI ، 1978‬ﺏ( ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﻻ‬
‫ﻳﻤﺜﻞﺳﻮﻯ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻣﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻛﺎﻥ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻣﺸﺎﺑﻬﺎً ﺟﺪﺍً ﻟـ‬
‫‪.Minimal BASIC‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻗﺪ ﻳﺒﺪﻭ ﻣﻔﺎﺟﺉﺎً ‪ ،‬ﻓﻘﺪ ﺍﺳﺘﺨﺪﻣﺖ ﺷﺮﻛﺔ ‪Equipment Corporation‬‬


‫‪ Digital‬ﻧﺴﺨﺔ ﻣﻌﻘﺪﺓ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻣﻦ ‪ BASIC‬ﺗﺴﻤﻰ ‪ BASIC-PLUS‬ﻟﻜﺘﺎﺑﺔ ﻣﻬﻤﺔ‬

‫‪.7‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ LISP‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﺍﻟﻄﺮﻓﻴﺔ ‪ ،‬ﻭﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪.‬‬
‫‪65‬‬ ‫‪2.7‬ﺑﺪﺍﻳﺎﺕ ﺗﻘﺎﺳﻢ ﺍﻟﻮﻗﺖ‪ :‬ﺃﺳﺎﺳﻲ‬

‫ﺃﺟﺰﺍءﻣﻦ ﺃﻛﺒﺮ ﻧﻈﺎﻡ ﺗﺸﻐﻴﻞ ﺧﺎﺹ ﺑﻬﺎ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ ‪ ، PDP-11 ، RSTS‬ﻓﻲ‬
‫ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪.‬‬
‫ﺗﻢﺍﻧﺘﻘﺎﺩ ‪ BASIC‬ﻟﻀﻌﻒ ﺑﻨﻴﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻬﺎ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ‪ .‬ﻭﻓﻘﺎً ﻟﻤﻌﺎﻳﻴﺮ‬
‫ﺍﻟﺘﻘﻴﻴﻢﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ‪ ،‬ﻭﺗﺤﺪﻳﺪﺍ ًﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ‪ ،‬ﻓﺈﻥ‬
‫ﺍﻟﻠﻐﺔﺗﻌﻤﻞ ﺑﺎﻟﻔﻌﻞ ﺑﺸﻜﻞ ﺳﻲء ﻟﻠﻐﺎﻳﺔ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻟﻢ ﺗﻜﻦ‬
‫ﻣﺨﺼﺼﺔﻭﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﺠﺎﺩﺓ ﻣﻦ ﺃﻱ ﺣﺠﻢ ﻛﺒﻴﺮ‪ .‬ﺗﻌﺪ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻼﺣﻘﺔ‬
‫ﺃﻛﺜﺮﻣﻼءﻣﺔ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﻤﻬﺎﻡ‪.‬‬

‫ﻛﺎﻥﻇﻬﻮﺭ ‪ BASIC‬ﻓﻲ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﺪﻓﻮﻋﺎ ًﺑﻈﻬﻮﺭ (‪ .Visual BASIC )VB‬ﺃﺻﺒﺢ ‪VB‬‬


‫ﻣﺴﺘﺨﺪﻣﺎًﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻷﻧﻪ ﻳﻮﻓﺮ ﻃﺮﻳﻘﺔ ﺑﺴﻴﻄﺔ ﻟﺒﻨﺎء ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ‬
‫)‪ ، (GUIs‬ﻭﻣﻦ ﻫﻨﺎ ﺟﺎء ﺍﺳﻢ ‪ ، Visual BASIC. Visual Basic .NET‬ﺃﻭ ‪ VB.NET‬ﻓﻘﻂ ‪ ،‬ﻫﻲ‬
‫ﺇﺣﺪﻯﻟﻐﺎﺕ ‪ .Microsoft .NET‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻌﺪ ﺧﺮﻭﺟﺎً ﻛﺒﻴﺮﺍً ﻋﻦ ‪ ، VB‬ﺇﻻ ﺃﻧﻪ ﺳﺮﻋﺎﻥ‬
‫ﻣﺎﺃﺯﺍﺡ ﺍﻟﻠﻐﺔ ﺍﻟﻘﺪﻳﻤﺔ‪ .‬ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺍﻻﺧﺘﻼﻑ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﺑﻴﻦ ‪ VB‬ﻭ ‪ VB.NET‬ﻫﻮ ﺃﻥ ‪VB.NET‬‬
‫ﻳﺪﻋﻢﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺑﺸﻜﻞ ﻛﺎﻣﻞ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:BASIC‬‬

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺑﺮﻧﺎﻣﺞﺍﻟﻤﺜﺎﻝ ﺍﻷﺳﺎﺳﻲ‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ﻋﺪﺩ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﻣﺪﺧﻞ‪:‬‬
‫ﺻﺤﻴﺢ‪ listlen‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﻗﺎﺉﻤﺔ (‪DIM )99‬‬


‫ﺍﻟﻨﺘﻴﺠﺔ= ‪0‬‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪0‬‬
‫‪INPUT listlen‬‬
‫ﺇﺫﺍ‪ listlen< 0 AND listlen >100‬ﺛﻢ ‪REM‬‬
‫ﻗﺮﺍءﺓﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﻣﺠﻤﻮﻉ ﺍﻟﻌﺪﺍﺩ = ‪TO listlen 1‬‬

‫(ﻋﺪﺍﺩ) ‪INPUT intlist‬‬


‫‪= sum + intlist )counter( NEXT counter‬‬
‫‪sum‬‬
‫ﻣﺘﻮﺳﻂ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺍﺣﺴﺐﺍﻝ‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪sum / listlen‬‬
‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺣﺴﺎﺏﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ﻟﻠﻌﺪﺍﺩ = ‪TO listlen 1‬‬

‫ﺇﺫﺍ‪) intlist‬ﻋﺪﺍﺩ(< ﻣﺘﻮﺳﻂ‬


‫ﺛﻢﺍﻟﻨﺘﻴﺠﺔ = ﺍﻟﻨﺘﻴﺠﺔ ‪ 1 +‬ﺍﻟﻌﺪﺍﺩ ﺍﻟﺘﺎﻟﻲ‬

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺍﻃﺒﻊﺍﻟﻨﺘﻴﺠﺔ‬
‫ﺍﻃﺒﻊ"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪":‬؛‬
‫ﻧﺘﻴﺠﺔ‬
‫ﺁﺧﺮ‬
‫ﺍﻃﺒﻊ"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ" ‪END IF‬‬

‫ﻧﻬﺎﻳﺔ‬
‫ﻣﻘﺎﺑﻠﺔ‬

‫ﺗﺼﻤﻴﻢﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﺍﻻﻧﻜﻮﺑﺮ‬
‫ﺍﻟﻤﺆﻟﻒﺍﻷﻛﺜﺮ ﻣﺒﻴﻌﺎً ﻟـﺣﻮﻝ ﺍﻟﻮﺟﻪ‪ :‬ﺃﺳﺎﺳﻴﺎﺕ ﺗﺼﻤﻴﻢ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬ﻛﺎﻥ ﻟـ ‪Alan Cooper‬‬
‫ﺃﻳﻀﺎًﺩﻭﺭ ﻛﺒﻴﺮ ﻓﻲ ﺗﺼﻤﻴﻢ ﻣﺎ ﻳﻤﻜﻦ ﻭﺻﻔﻪ ﺑﺄﻧﻪ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﻫﺘﻤﺎﻣﺎً ﺑﺘﺼﻤﻴﻢ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬‬
‫‪ .Visual Basic‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻪ ‪ ،‬ﺍﻷﻣﺮ ﻛﻠﻪ ﻳﺘﻌﻠﻖ ﺑﺮﺅﻳﺔ ﻹﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻹﻧﺴﺎﻧﻲ ﻋﻠﻰ ﺍﻟﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬

‫ﻛﺎﻥ‪ MSDOS.exe‬ﻫﻮ ﺑﺮﻧﺎﻣﺞ ‪ shell‬ﻟﻺﺻﺪﺍﺭﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ‬ ‫ﺑﻌﺾﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻋﻦ ﺍﻷﺳﺎﺳﻴﺎﺕ‬


‫ﻣﻦ‪ .Windows‬ﻟﻘﺪ ﻛﺎﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﻈﻴﻌﺎً ‪ ،‬ﻭﺃﻋﺘﻘﺪ ﺃﻧﻪ ﻳﻤﻜﻦ‬
‫ﺗﺤﺴﻴﻨﻪﺑﺸﻜﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻛﻨﺖ ﺍﻟﺸﺨﺺ ﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺬﻟﻚ‪ .‬ﻓﻲ‬ ‫ﻛﻴﻒﺑﺪﺃﺕ ﻓﻲ ﻛﻞ ﻫﺬﺍ؟ﺃﻧﺎ ﻣﻨﺘﺸﻲ‬
‫ﻭﻗﺖﻓﺮﺍﻏﻲ ‪ ،‬ﺑﺪﺃﺕ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﺷﻞ ﺃﻓﻀﻞ ﻣﻦ‬ ‫ﺍﻟﺘﺴﺮﺏﻣﻦ ﺍﻟﻤﺪﺭﺳﺔ ﻣﻊ ﺷﻬﺎﺩﺓ ﺟﺎﻣﻌﻴﺔ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻦ ﻛﻠﻴﺔ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﺬﻱ ﺟﺎء ﺑﻪ ‪ .Windows‬ﺃﺳﻤﻴﺘﻪ ﺗﺮﺍﻳﺒﻮﺩ‪ .‬ﻛﺎﻧﺖ ﻗﺬﻳﻔﺔ‬ ‫ﻣﺠﺘﻤﻊﺑﻜﺎﻟﻴﻔﻮﺭﻧﻴﺎ‪ .‬ﻛﺎﻧﺖ ﻭﻇﻴﻔﺘﻲ ﺍﻷﻭﻟﻰ ﻛﻤﺒﺮﻣﺞ ﻟﺸﺮﻛﺔ ‪Lines‬‬
‫‪ Microsoft‬ﺍﻷﺻﻠﻴﺔ ‪ ، MSDOS.exe ،‬ﺇﺣﺪﻯ ﺍﻟﻌﻘﺒﺎﺕ‬ ‫‪) American President‬ﺇﺣﺪﻯ ﺃﻗﺪﻡ ﺷﺮﻛﺎﺕ ﺍﻟﻨﻘﻞ ﺍﻟﺒﺤﺮﻱ ﻓﻲ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔﺃﻣﺎﻡ ﺍﻟﻨﺠﺎﺡ ﺍﻷﻭﻟﻲ ﻟﻨﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪.Windows‬‬ ‫ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ( ﻓﻲ ﺳﺎﻥ ﻓﺮﺍﻧﺴﻴﺴﻜﻮ‪ .‬ﺑﺎﺳﺘﺜﻨﺎء ﺑﻀﻌﺔ ﺃﺷﻬﺮ‬
‫ﺣﺎﻭﻝﺛﻼﺛﻲ ﺍﻟﻘﻮﺍﺉﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﺳﻬﻮﻟﺔ ﺍﺳﺘﺨﺪﺍﻣﻪ‬ ‫ﻫﻨﺎﻭﻫﻨﺎﻙ ‪ ،‬ﻇﻠﻠﺖ ﺃﻋﻤﻞ ﻟﺤﺴﺎﺑﻲ ﺍﻟﺨﺎﺹ‪.‬‬
‫ﻭﺗﻜﻮﻳﻨﻪ‪.‬‬

‫ﻣﺎﻫﻲ ﻭﻇﻴﻔﺘﻚ ﺍﻟﺤﺎﻟﻴﺔ؟ﺍﻟﻤﺆﺳﺲ ﻭﺭﺉﻴﺲ ﻣﺠﻠﺲ ﺍﻹﺩﺍﺭﺓ‬


‫ﻣﺘﻰﻛﺎﻥ ﺫﻟﻚ "ﺁﻫﺎ!" ﻟﺤﻈﺔ؟ﻟﻢ ﻳﻜﻦ ﺣﺘﻰ‬ ‫ﻛﻮﺑﺮ ‪،‬ﺍﻟﺸﺮﻛﺔ ﺍﻟﺘﻲ ﺗﻀﻔﻲ ﺍﻟﻄﺎﺑﻊ ﺍﻟﺒﺸﺮﻱ ﻋﻠﻰ ﺍﻟﺘﻜﻨﻮﻟﻮﺟﻴﺎ‬
‫ﻓﻲﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ ، 1987‬ﻋﻨﺪﻣﺎ ﻛﻨﺖ ﺃﺟﺮﻱ ﻣﻘﺎﺑﻠﺔ ﻣﻊ ﻋﻤﻴﻞ ﺷﺮﻛﺔ ‪،‬‬ ‫)‪.(www.cooper.com‬‬
‫ﺑﺮﺯﺕﺍﺳﺘﺮﺍﺗﻴﺠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﺘﺮﺍﻳﺒﻮﺩ ﻓﻲ ﺭﺃﺳﻲ‪ .‬ﻛﻤﺎ‬
‫ﻣﺎﻫﻲ ﺃﻭ ﻛﺎﻧﺖ ﻭﻇﻴﻔﺘﻚ ﺍﻟﻤﻔﻀﻠﺔ؟ﺗﻔﺎﻋﻞ‬
‫ﺃﻭﺿﺢﻟﻲ ﻣﺪﻳﺮ ‪ IS‬ﺣﺎﺟﺘﻪ ﺇﻟﻰ ﺇﻧﺸﺎء ﻭﻧﺸﺮ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ‬
‫ﺍﺳﺘﺸﺎﺭﻱﺍﻟﺘﺼﻤﻴﻢ‪.‬‬
‫ﺣﻠﻮﻝﺍﻟﺼﺪﻓﺔ ﻟﻘﺎﻋﺪﺓ ﻣﺴﺘﺨﺪﻣﻴﻪ ﺍﻟﻤﺘﺒﺎﻳﻨﺔ ‪ ،‬ﺃﺩﺭﻛﺖ ﺍﻟﻠﻐﺰ‬
‫ﺍﻟﻤﺘﻤﺜﻞﻓﻲ ﻋﺪﻡ ﻭﺟﻮﺩ ﺷﻲء ﻣﺜﻞ ﺍﻟﺼﺪﻓﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ‪ .‬ﺳﻴﺤﺘﺎﺝ ﻛﻞ‬ ‫ﺃﻧﺖﻣﻌﺮﻭﻑ ﺟﻴﺪﺍً ﻓﻲ ﻣﺠﺎﻻﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺗﺼﻤﻴﻢ‬
‫ﻣﺴﺘﺨﺪﻡﺇﻟﻰ ﻏﻼﻑ ﺷﺨﺼﻲ ﺧﺎﺹ ﺑﻪ ‪ ،‬ﺗﻢ ﺗﻜﻮﻳﻨﻪ ﻭﻓﻘﺎً‬ ‫ﻭﺍﺟﻬﺔﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺃﻱ ﺃﻓﻜﺎﺭ ﺣﻮﻝ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻣﻘﺎﺑﻞ‬
‫ﻻﺣﺘﻴﺎﺟﺎﺗﻪﻭﻣﺴﺘﻮﻳﺎﺕ ﻣﻬﺎﺭﺗﻪ‪ .‬ﻓﻲ ﻟﺤﻈﺔ ‪ ،‬ﺃﺩﺭﻛﺖ ﺍﻟﺤﻞ ﻟﻤﺸﻜﻠﺔ‬ ‫ﺗﺼﻤﻴﻢﺍﻟﺒﺮﺍﻣﺞ ﻣﻘﺎﺑﻞ ﺗﺼﻤﻴﻢ ﺃﻱ ﺷﻲء ﺁﺧﺮ؟ﺇﻧﻪ‬
‫ﺗﺼﻤﻴﻢﺍﻟﻘﺸﺮﺓ‪ :‬ﺳﺘﻜﻮﻥ ﻣﺠﻤﻮﻋﺔ ﺑﻨﺎء ﻗﺸﺮﺓ ؛ ﺃﺩﺍﺓ ﻳﻤﻜﻦ ﻟﻜﻞ‬
‫ﻣﺴﺘﺨﺪﻡﻣﻦ ﺧﻼﻟﻬﺎ ﺇﻧﺸﺎء ﺍﻟﺼﺪﻓﺔ ﺍﻟﺘﻲ ﻳﺤﺘﺎﺟﻬﺎ ﺑﺎﻟﻀﺒﻂ ﻟﻤﺰﻳﺞ‬ ‫ﺇﻟﻰﺣﺪ ﻛﺒﻴﺮ ﻧﻔﺲ ﺍﻟﺸﻲء ﻓﻲ ﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪ :‬ﺗﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻤﺴﺘﺨﺪﻡ‬
‫ﻓﺮﻳﺪﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻭﺍﻟﺘﺪﺭﻳﺐ‪.‬‬ ‫ﺍﻟﺨﺎﺹﺑﻚ‪.‬‬

‫ﺣﻮﻝﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻟﻤﺒﻜﺮ ﻟـ ‪WINDOWS‬‬


‫ﻣﺎﺍﻟﻤﻘﻨﻊ ﻓﻲ ﻓﻜﺮﺓ ﺍﻟﻘﺸﺮﺓ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺼﻬﺎ‬ ‫ﻓﻲﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﺑﺪﺃﺕ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺑﺸﻜﻞﻓﺮﺩﻱ؟ﺑﺪﻻ ﻣﻦ ﺃﻥ ﺃﻗﻮﻝ‬ ‫‪ Windows‬ﻭﺗﺤﺪﺛﺖ ﻋﻦ ﺍﺳﺘﺪﺭﺍﺟﻚ ﻣﻦ ﺧﻼﻝ ﻣﺰﺍﻳﺎﻫﺎ‪:‬‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻣﺎ ﻛﺎﻧﺖ ﻋﻠﻴﻪ ﺍﻟﺼﺪﻓﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ ‪ ،‬ﻳﻤﻜﻨﻬﻢ ﺗﺼﻤﻴﻢ‬ ‫ﺩﻋﻢﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻭﺍﻟﻤﻜﺘﺒﺔ ﺍﻟﻤﺮﺗﺒﻄﺔ‬
‫ﻏﻼﻓﻬﻢﺍﻟﻤﺜﺎﻟﻲ ﺍﻟﻤﺨﺼﺺ‪ .‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻏﻼﻑ ﻗﺎﺑﻞ ﻟﻠﺘﺨﺼﻴﺺ ‪،‬‬ ‫ﺩﻳﻨﺎﻣﻴﻜﻴﺎًﺍﻟﺘﻲ ﺗﺘﻴﺢ ﻟﻚ ﺇﻧﺸﺎء ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻲ ﺗﻬﻴﺊ‬
‫ﻳﻤﻜﻦﻟﻠﻤﺒﺮﻣﺞ ﺇﻧﺸﺎء ﻏﻼﻑ ﻗﻮﻱ ﻭﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﻟﻜﻨﻪ ﺃﻳﻀﺎً‬ ‫ﻧﻔﺴﻬﺎﺑﻨﻔﺴﻬﺎ‪ .‬ﻣﺎﺫﺍ ﻋﻦ ﺃﺟﺰﺍء ‪ Windows‬ﺍﻟﺘﻲ‬
‫ﺧﻄﻴﺮﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻓﻲ ﺣﻴﻦ ﺃﻥ ﻣﺪﻳﺮ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻳﻤﻜﻦ‬ ‫ﺳﺎﻋﺪﺕﻓﻲ ﺗﺸﻜﻴﻠﻬﺎ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ؟ﺍﻧﺎ ﻛﻨﺖ‬
‫ﺃﻥﻳﻨُﺸﺊ ﻏﻼﻓﺎً ﻳﻤﻜﻦ ﺃﻥ ﻳﻌُﻄﻰ ﻟﻤﻮﻇﻒ ﻣﻜﺘﺐ ﻳﻜﺸﻒ ﻓﻘﻂ‬ ‫ﺃﻋﺠﺐﺟﺪﺍً ﺑﺈﺩﺭﺍﺝ ‪ Microsoft‬ﺩﻋﻤﺎً ﻟﺘﻌﺪﺩ ﺍﻟﻤﻬﺎﻡ ﺍﻟﻌﻤﻠﻲ ﻓﻲ‬
‫ﺗﻠﻚﺍﻷﺩﻭﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻬﺎ‬ ‫‪ ، Windows‬ﻭﺷﻤﻞ ﺫﻟﻚ ﺍﻟﻨﻘﻞ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻭﺍﻻﺗﺼﺎﻻﺕ ﺑﻴﻦ‬
‫ﺍﻟﻤﻮﻇﻒﻣﺴﺘﺨﺪﻡ‪.‬‬ ‫ﺍﻟﻌﻤﻠﻴﺎﺕ‪.‬‬

‫‪66‬‬
‫ﻛﺎﻥ‪ MSDOS.exe‬ﻫﻮ ﺑﺮﻧﺎﻣﺞ ‪ shell‬ﻟﻺﺻﺪﺍﺭﺍﺕ‬ ‫"‬ ‫ﻛﻴﻒﺍﻧﺘﻘﻠﺖ ﻣﻦ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ‬
‫ﺷﻞﺇﻟﻰ ﺍﻟﺘﻌﺎﻭﻥ ﻣﻊ ‪Microsoft‬؟‬
‫ﺍﻟﻘﻠﻴﻠﺔﺍﻷﻭﻟﻰ ﻣﻦ ‪ .Windows‬ﻟﻘﺪ ﻛﺎﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﻈﻴﻌﺎً ‪،‬‬
‫ﺣﺎﻣﻞﺛﻼﺛﻲ ﺍﻟﻘﻮﺍﺉﻢ‬
‫ﻭﺃﻋﺘﻘﺪﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺴﻴﻨﻪ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻛﻨﺖ ﺍﻟﺸﺨﺺ‬ ‫ﻭﺭﻭﺑﻲﻫﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻲء‪ .‬ﺑﻌﺪ ﺃﻥ‬
‫ﺍﻟﺬﻱﻳﻘﻮﻡ ﺑﺬﻟﻚ‪ .‬ﻓﻲ ﻭﻗﺖ ﻓﺮﺍﻏﻲ ‪ ،‬ﺑﺪﺃﺕ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻓﻲ‬ ‫ﻭﻗﻌﺖﺻﻔﻘﺔ ﻣﻊ ﺑﻴﻞ ﺟﻴﺘﺲ ‪،‬‬
‫ﻗﻤﺖﺑﺘﻐﻴﻴﺮ ﺍﺳﻢ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻷﻭﻟﻲ ﻣﻦ‬
‫ﻛﺘﺎﺑﺔﺑﺮﻧﺎﻣﺞ ﺷﻞ ﺃﻓﻀﻞ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺬﻱ ﺟﺎء ﺑﻪ‬
‫‪.Windows‬‬ ‫"‬ ‫ﺗﺮﺍﻳﺒﻮﺩﺇﻟﻰ ﺭﻭﺑﻲ‪ .‬ﺛﻢ ﺍﺳﺘﺨﺪﻣﺖ‬
‫ﻧﻤﻮﺫﺝﺭﻭﺑﻲ ﻛﻨﻤﺎﺫﺝ ﺃﻭﻟﻴﺔ ﻳﺠﺐ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‪:‬ﻛﻨﻤﻮﺫﺝ ﻳﻤﻜﻦ ﺍﻟﺘﺨﻠﺺ‬
‫ﻣﻨﻪﻟﺒﻨﺎء ﺟﻮﺩﺓ ﺍﻹﺻﺪﺍﺭ‬

‫ﻟﻤﺎﺫﺍﻳﺴﻤﻮﻧﻚ "ﺃﺑﻮ ﺍﻟﺒﺼﺮﻳﺎﺕ‬ ‫ﺷﻔﺮﺓ‪.‬ﻭﻫﻮ ﻣﺎ ﻓﻌﻠﺘﻪ‪ .‬ﺃﺧﺬﺕ ‪ MS‬ﻧﺴﺨﺔ ﺍﻹﺻﺪﺍﺭ ﻣﻦ ‪Ruby‬‬


‫ﺃﺳﺎﺳﻲ"؟ﺟﺎء ﺭﻭﺑﻲ ﺑﻠﻐﺔ ﺻﻐﻴﺮﺓ ‪ ،‬ﻟﻐﺔ ﻣﻨﺎﺳﺒﺔ ﻓﻘﻂ ﻟﺘﻨﻔﻴﺬ‬ ‫ﻭﺃﺿﻔﺖ‪ QuickBASIC‬ﺇﻟﻴﻬﺎ ‪ ،‬ﻣﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺇﻧﺸﺎء ‪ .VB‬ﻛﻞ ﺗﻠﻚ‬
‫ﻋﺸﺮﺍﺕﺍﻷﻭﺍﻣﺮ ﺍﻟﺒﺴﻴﻄﺔ ﺍﻟﺘﻲ ﻳﺤﺘﺎﺟﻬﺎ ﺑﺮﻧﺎﻣﺞ ﺷﻞ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪،‬‬ ‫ﺍﻻﺑﺘﻜﺎﺭﺍﺕﺍﻷﺻﻠﻴﺔ ﻛﺎﻧﺖ ﻓﻲ ﺗﺮﺍﻳﺒﻮﺩ ‪ /‬ﺭﻭﺑﻲ‪.‬‬
‫ﺗﻢﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻛﺴﻠﺴﻠﺔ ﻣﻦ ﻣﻜﺘﺒﺎﺕ ‪ ، DLL‬ﺃﻱ ﻋﺪﺩ ﻣﻨﻬﺎ‬
‫ﻳﻤﻜﻦﺗﺜﺒﻴﺘﻪ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻳﻘﻮﻡ ﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ﺍﻟﺪﺍﺧﻠﻲ‬ ‫ﻛﺤﺎﺿﻨﺔﻟﻸﺳﺎﺳﻴﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ‪RUBY‬‬
‫ﺑﺘﺤﺪﻳﺪﺍﻟﻔﻌﻞ ﺛﻢ ﺗﻤﺮﻳﺮﻩ ﻋﻠﻰ ﻃﻮﻝ ﺳﻠﺴﻠﺔ ﻣﻜﺘﺒﺎﺕ ‪ DLL‬ﺣﺘﻰ‬ ‫ﺩﻋﻨﺎﻧﻌﻴﺪ ﺍﻟﻨﻈﺮ ﻓﻲ ﺍﻫﺘﻤﺎﻣﻚ ﺑﺈﺻﺪﺍﺭﺍﺕ ‪ Windows‬ﻭ‬
‫ﻳﺪﺭﻙﺃﺣﺪﻫﻢ ﺃﻧﻪ ﻳﻌﺮﻑ ﻛﻴﻔﻴﺔ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻔﻌﻞ‪ .‬ﺇﺫﺍ ﺗﻢ ﺗﻤﺮﻳﺮ ﻛﺎﻓﺔ‬ ‫ﺃﻥﻣﻴﺰﺓ ‪.DLL‬ﻟﻢ ﻳﻜﻦ ‪ DLL‬ﺷﻴﺉﺎً ‪ ،‬ﻟﻘﺪ ﻛﺎﻥ ﻣﻨﺸﺄﺓ ﻓﻲ ﻧﻈﺎﻡ‬
‫ﻣﻜﺘﺒﺎﺕ‪ ، DLL‬ﻓﻘﺪ ﺣﺪﺙ ﺧﻄﺄ ﻓﻲ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪ .‬ﻣﻨﺬ ﻣﻨﺎﻗﺸﺎﺗﻨﺎ‬ ‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬ﻟﻘﺪ ﺳﻤﺢ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺒﻨﺎء ﻛﺎﺉﻨﺎﺕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻷﻭﻟﻰ ‪،‬ﺍﺳﺘﻤﺘﻌﺖ ﺃﻧﺎ ﻭﻣﺎﻳﻜﺮﻭﺳﻮﻓﺖ ﺑﻔﻜﺮﺓ ﺗﻨﻤﻴﺔ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺭﺑﻤﺎ‬ ‫ﺍﻟﺒﺮﻣﺠﻴﺔﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺭﺑﻄﻬﺎ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﺑﺪﻻ ًﻣﻦ ﻭﻗﺖ‬
‫ﺣﺘﻰﺍﺳﺘﺒﺪﺍﻟﻬﺎ ﻛﻠﻴﺎً ﺑﻠﻐﺔ "ﺣﻘﻴﻘﻴﺔ"‪ .‬ﻛﺎﻥ ‪ C‬ﻫﻮ ﺍﻟﻤﺮﺷﺢ ﺍﻷﻛﺜﺮ‬ ‫ﺍﻟﺘﺮﺟﻤﺔﻓﻘﻂ ‪ ،‬ﻭﻫﺬﺍ ﻣﺎ ﺳﻤﺢ ﻟﻲ ﺑﺎﺧﺘﺮﺍﻉ ﺍﻷﺟﺰﺍء ﺍﻟﻘﺎﺑﻠﺔ‬
‫ﺫﻛﺮﺍً ‪،‬ﻭﻟﻜﻦ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ‪ ،‬ﺍﺳﺘﻔﺎﺩﺕ ‪ Microsoft‬ﻣﻦ ﻫﺬﻩ ﺍﻟﻮﺍﺟﻬﺔ‬ ‫ﻟﻠﺘﻮﺳﻴﻊﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻣﻦ ‪ ، VB‬ﺣﻴﺚ ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ ﻋﻨﺎﺻﺮ ﺍﻟﺘﺤﻜﻢ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﻟﻔﺼﻞ ﻟﻐﺔ ‪ shell‬ﺍﻟﺼﻐﻴﺮﺓ ﻭﺍﺳﺘﺒﺪﺍﻟﻬﺎ ﺑﺎﻟﻜﺎﻣﻞ ﺑـ‬ ‫ﻣﻦﻗﺒﻞ ﺍﻟﺒﺎﺉﻌﻴﻦ ﺍﻟﺨﺎﺭﺟﻴﻴﻦ‪.‬‬
‫‪.Quick-BASIC‬‬ ‫ﺟﺴﺪﻣﻨﺘﺞ ‪ Ruby‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﺒﺮﺍﻣﺞ ‪،‬ﻟﻜﻦ ﺍﺛﻨﺘﻴﻦ ﻣﻨﻬﻤﺎ ﺑﺮﺯﺗﺎ ﻋﻠﻰ ﺃﻧﻬﻤﺎ ﻧﺎﺟﺤﺎﻥ ﺑﺸﻜﻞ‬
‫ﺍﺳﺘﺜﻨﺎﺉﻲ‪.‬ﻛﻤﺎ ﺫﻛﺮﺕ ‪ ،‬ﻛﺎﻧﺖ ﻗﺪﺭﺓ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻟـ‬
‫‪ Windows‬ﺗﺜﻴﺮ ﺍﻫﺘﻤﺎﻣﻲ ﺩﺍﺉﻤﺎً ‪ ،‬ﻭﻟﻜﻦ ﺍﻣﺘﻼﻙ ﺍﻷﺩﻭﺍﺕ‬
‫ﻭﻣﻌﺮﻓﺔﻣﺎ ﻳﺠﺐ ﻓﻌﻠﻪ ﺑﻬﺎ ﻛﺎﻧﺎ ﺷﻴﺉﺎﻥ ﻣﺨﺘﻠﻔﺎﻥ‪ .‬ﻣﻊ ‪، Ruby‬‬
‫ﻭﺟﺪﺕﺃﺧﻴﺮﺍً ﺍﺳﺘﺨﺪﺍﻣﻴﻦ ﻋﻤﻠﻴﻴﻦ ﻟﻠﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ‪ ،‬ﻭﺍﺣﺘﻮﻯ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻷﺻﻠﻲ ﻋﻠﻰ ﻛﻠﻴﻬﻤﺎ‪ .‬ﺃﻭﻻ ً‪ ،‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺜﺒﻴﺖ‬
‫ﻭﻳﻤﻜﻦﺗﻤﺪﻳﺪﻫﺎ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺛﺎﻧﻴﺎً ‪ ،‬ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ ﻟﻮﺣﺔ ﺍﻷﺩﻭﺍﺕ‬
‫ﺑﺸﻜﻞﺩﻳﻨﺎﻣﻴﻜﻲ‪.‬‬
‫ﺑﻌﺾﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻋﻠﻰ ﺃﻓﻜﺎﺭ ﺟﺪﻳﺪﺓ‬

‫ﻓﻲﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻭﺃﺩﻭﺍﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻠﻐﺎﺕ‬


‫ﻭﺍﻟﺒﻴﺉﺎﺕ ‪،‬ﻣﺎ ﺃﻛﺜﺮ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺘﻲ ﺗﻬﻤﻚ؟ﺃﻧﺎ ﻣﻬﺘﻢ ﺏ‬ ‫ﻫﻞﻛﺎﻧﺖ ﻟﻐﺘﻚ ﻓﻲ ‪ Ruby‬ﺃﻭﻝ ﻣﻦ ﺍﻣﺘﻠﻚ ﻣﻜﺘﺒﺔ‬
‫ﻣﺮﺗﺒﻄﺔﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﻢ ﺭﺑﻄﻬﺎ ﺑﻤﻠﻒ‬
‫ﺇﻧﺸﺎءﺃﺩﻭﺍﺕ ﺑﺮﻣﺠﺔ ﻣﺼﻤﻤﺔ ﻟﻤﺴﺎﻋﺪﺓ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺑﺪﻻ ًﻣﻦ‬ ‫ﺍﻟﻮﺍﺟﻬﺔﺍﻷﻣﺎﻣﻴﺔ ﺍﻟﻤﺮﺉﻴﺔ؟ﻋﻠﻰ ﺣﺪ ﻋﻠﻤﻲ ‪ ،‬ﻧﻌﻢ‪.‬‬
‫ﺍﻟﻤﺒﺮﻣﺠﻴﻦ‪.‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﻣﺜﺎﻝ ﺑﺴﻴﻂ ‪ ،‬ﻣﺎ ﺍﻟﺬﻱ ﺳﻴﻤﻜﻦ ﻫﺬﺍ ﺍﻟﻤﺒﺮﻣﺞ‬
‫ﻣﺎﻫﻲ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ‪ ،‬ﺃﻭ ﺍﻻﻗﺘﺒﺎﺱ ﺍﻟﺸﻬﻴﺮ ‪ ،‬ﺃﻭ ﻓﻜﺮﺓ‬ ‫ﻣﻦﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺑﺒﺮﻧﺎﻣﺠﻪ؟ﺑﻮﺭ‪-‬‬
‫ﺍﻟﺘﺼﻤﻴﻢﺍﻟﺘﻲ ﻳﺠﺐ ﻭﺿﻌﻬﺎ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ؟ﻟﻢ ﻳﺘﻢ ﺑﻨﺎء ﺍﻟﺠﺴﻮﺭ‬ ‫ﻗﻢﺑﻤﻄﺎﺭﺩﺓ ﻋﻨﺼﺮ ﺗﺤﻜﻢ ‪ ،‬ﻣﺜﻞ ﻋﻨﺼﺮ ﺗﺤﻜﻢ ﻓﻲ ﺍﻟﺸﺒﻜﺔ ‪ ،‬ﻣﻦ‬
‫ﺍﻟﻤﻬﻨﺪﺳﻴﻦ‪.‬ﺗﻢ ﺑﻨﺎﺅﻫﺎ ﻣﻦ ﻗﺒﻞ ﻋﻤﺎﻝ ﺍﻟﺤﺪﻳﺪ‪.‬‬ ‫ﺑﺎﺉﻊﻃﺮﻑ ﺛﺎﻟﺚ ‪ ،‬ﻭﻗﻢ ﺑﺘﺜﺒﻴﺘﻪ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺨﺎﺹ ﺑﻪ ‪،‬‬
‫ﻭﺑﺎﻟﻤﺜﻞ ‪،‬ﻓﺈﻥ ﺍﻟﺒﺮﺍﻣﺞ ﻻ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﻬﻨﺪﺳﻴﻦ ‪،‬‬ ‫ﻭﺟﻌﻞﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺸﺒﻜﺔ ﻳﻈﻬﺮ ﻛﺠﺰء ﻻ ﻳﺘﺠﺰﺃ ﻣﻦ ﺍﻟﻠﻐﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ‬
‫ﺑﻞﻳﺘﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ‪.‬‬ ‫ﺫﻟﻚﺍﻟﻮﺍﺟﻬﺔ ﺍﻷﻣﺎﻣﻴﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﺮﺉﻴﺔ‪.‬‬

‫‪67‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪68‬‬

‫‪2.8‬ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊ‪PL / I :‬‬


‫ﺗﻤﺜﻞ‪ PL / I‬ﺃﻭﻝ ﻣﺤﺎﻭﻟﺔ ﻭﺍﺳﻌﺔ ﺍﻟﻨﻄﺎﻕ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻤﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ‬
‫ﻣﺠﺎﻻﺕﺍﻟﺘﻄﺒﻴﻖ‪ .‬ﺭﻛﺰﺕ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ﻭﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ ﻋﻠﻰ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ‬
‫ﻣﻌﻴﻦ ‪،‬ﻣﺜﻞ ﺍﻟﻌﻠﻮﻡ ﺃﻭ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺃﻭ ﺍﻷﻋﻤﺎﻝ‪.‬‬

‫‪2.8.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻣﺜﻞ‪ ، Fortran‬ﺗﻢ ﺗﻄﻮﻳﺮ ‪ PL / I‬ﻛﻤﻨﺘﺞ ‪ .IBM‬ﺑﺤﻠﻮﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺍﺳﺘﻘﺮ ﻣﺴﺘﺨﺪﻣﻮ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺼﻨﺎﻋﺔ ﻓﻲ ﻣﻌﺴﻜﺮﻳﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻭﻣﺨﺘﻠﻔﻴﻦ ﺗﻤﺎﻣﺎً‪ :‬ﺍﻟﻌﻠﻤﻲ ﻭﺍﻟﺘﺠﺎﺭﻱ‪.‬‬
‫ﻣﻦﻭﺟﻬﺔ ﻧﻈﺮ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻌﻠﻤﻴﻴﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺇﻣﺎ ‪ 7090‬ﺃﻭ ﺃﺟﻬﺰﺓ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺁﻱ ﺑﻲ ﺇﻡ ﺻﻐﻴﺮﺓ ﺍﻟﺤﺠﻢ ‪ .1620‬ﺍﺳﺘﺨﺪﻣﺖ ﻫﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺑﻴﺎﻧﺎﺕ ﻭﻣﺼﻔﻮﻓﺎﺕ‬
‫ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﺳﺎﺳﻴﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻳﻀﺎً‪ .‬ﻛﺎﻥ ﻟﺪﻳﻬﻢ ﻣﺠﻤﻮﻋﺔ ﻣﺴﺘﺨﺪﻣﻴﻦ ﺧﺎﺻﺔ ﺑﻬﻢ ‪، SHARE ،‬‬
‫ﻭﻟﻢﻳﻜﻦ ﻟﺪﻳﻬﻢ ﺍﺗﺼﺎﻝ ﻳﺬﻛﺮ ﻣﻊ ﺃﻱ ﺷﺨﺺ ﻳﻌﻤﻞ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ‪.‬‬

‫ﺑﺎﻟﻨﺴﺒﺔﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﺍﺳﺘﺨﺪﻡ ﺍﻟﻨﺎﺱ ﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ‪ 7080‬ﺍﻟﻜﺒﻴﺮﺓ ﺃﻭ ﺃﺟﻬﺰﺓ‬


‫ﻛﻤﺒﻴﻮﺗﺮ‪ IBM‬ﺍﻟﺼﻐﻴﺮﺓ ‪ .1401‬ﻟﻘﺪ ﺍﺣﺘﺎﺟﻮﺍ ﺇﻟﻰ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻌﺸﺮﻳﺔ ﻭﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ ‪،‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺗﺴﻬﻴﻼﺕ ﺇﺩﺧﺎﻝ ﻭﺇﺧﺮﺍﺝ ﻣﻌﻘﺪﺓ ﻭﻓﻌﺎﻟﺔ‪ .‬ﺍﺳﺘﺨﺪﻣﻮﺍ ‪ ، COBOL‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻧﻪﻓﻲ ﺃﻭﺍﺉﻞ ﻋﺎﻡ ‪ 1963‬ﻋﻨﺪﻣﺎ ﺑﺪﺃﺕ ﻗﺼﺔ ‪ ، PL / I‬ﻛﺎﻥ ﺍﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ‬
‫‪ COBOL‬ﺑﻌﻴﺪﺍً ﻋﻦ ﺍﻻﻛﺘﻤﺎﻝ‪ .‬ﻛﺎﻥ ﻟﻬﺬﻩ ﺍﻟﻔﺉﺔ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺃﻳﻀﺎً ﻣﺠﻤﻮﻋﺔ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ، GUIDE ،‬ﻭﻧﺎﺩﺭﺍً ﻣﺎ ﻛﺎﻧﺖ ﻋﻠﻰ ﺍﺗﺼﺎﻝ ﺑﺎﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﻴﻦ‪.‬‬
‫ﻓﻲﺃﻭﺍﺉﻞ ﻋﺎﻡ ‪ ، 1963‬ﺃﺩﺭﻙ ﻣﺨﻄﻄﻮ ﺷﺮﻛﺔ ‪ IBM‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﺘﻐﻴﻴﺮ ﻓﻲ ﻫﺬﺍ ﺍﻟﻮﺿﻊ‪ .‬ﻛﺎﻧﺖ‬
‫ﻣﺠﻤﻮﻋﺘﺎﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻨﻔﺼﻠﺘﺎﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺗﺘﺠﻬﺎﻥ ﻧﺤﻮ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ‬
‫ﺑﻄﺮﻕﻛﺎﻥ ﻳﻌﺘﻘﺪ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﺆﻛﺪ ﺃﻧﻬﺎ ﺗﺨﻠﻖ ﻣﺸﺎﻛﻞ‪ .‬ﺑﺪﺃ ﺍﻟﻌﻠﻤﺎء ﻓﻲ ﺟﻤﻊ ﻣﻠﻔﺎﺕ ﻛﺒﻴﺮﺓ ﻣﻦ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻟﺘﺘﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ‪ .‬ﺗﺘﻄﻠﺐ ﻫﺬﻩ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺗﺴﻬﻴﻼﺕ ﺇﺩﺧﺎﻝ ﻭﻣﺨﺮﺟﺎﺕ ﺃﻛﺜﺮ ﺗﻄﻮﺭﺍ ً‬
‫ﻭﻓﻌﺎﻟﻴﺔ‪.‬ﺑﺪﺃ ﺍﻷﺷﺨﺎﺹ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺤﻠﻴﻞ ﺍﻻﻧﺤﺪﺍﺭ ﻟﺒﻨﺎء ﺃﻧﻈﻤﺔ‬
‫ﻣﻌﻠﻮﻣﺎﺕﺇﺩﺍﺭﻳﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺘﻄﻠﺐ ﺑﻴﺎﻧﺎﺕ ﻭﻣﺼﻔﻮﻓﺎﺕ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﺑﺪﺃ ﻳﺒﺪﻭ ﺃﻥ ﻋﻤﻠﻴﺎﺕ‬
‫ﺗﺜﺒﻴﺖﺍﻟﺤﻮﺳﺒﺔ ﺳﺘﺘﻄﻠﺐ ﻗﺮﻳﺒﺎً ﺟﻬﺎﺯﻱ ﻛﻤﺒﻴﻮﺗﺮ ﻣﻨﻔﺼﻠﻴﻦ ﻭﻓﺮﻳﻖ ﻋﻤﻞ ﻓﻨﻲ ‪ ،‬ﻣﻤﺎ ﻳﺪﻋﻢ‬
‫ﻟﻐﺘﻴﻦﻣﺨﺘﻠﻔﺘﻴﻦ ﺗﻤﺎﻣﺎً ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪8.‬‬

‫ﺃﺩﺕﻫﺬﻩ ﺍﻟﺘﺼﻮﺭﺍﺕ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﻣﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻛﻤﺒﻴﻮﺗﺮ ﻋﺎﻟﻤﻲ ﻭﺍﺣﺪ ﻳﻜﻮﻥ ﻗﺎﺩﺭﺍً‬
‫ﻋﻠﻰﺍﻟﻘﻴﺎﻡ ﺑﺤﺴﺎﺏ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻭﺍﻟﺤﺴﺎﺏ ﺍﻟﻌﺸﺮﻱ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‬
‫ﻭﺍﻟﺘﺠﺎﺭﻳﺔ‪.‬ﻭﻫﻜﺬﺍ ﻭﻟﺪ ﻣﻔﻬﻮﻡ ﺧﻂ ﺍﻟﺤﻮﺍﺳﻴﺐ ‪ .IBM System / 360‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺫﻟﻚ ﺟﺎءﺕ‬
‫ﻓﻜﺮﺓﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻭﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ‬
‫ﻣﻘﻴﺎﺱﺟﻴﺪ ‪ ،‬ﺗﻢ ﻃﺮﺡ ﻣﻴﺰﺍﺕ ﻟﺪﻋﻢ ﺑﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﺠﺪﻳﺪﺓﺗﺤﻞ ﻣﺤﻞ ‪ Fortran‬ﻭ ‪ COBOL‬ﻭ ‪ LISP‬ﻭﺗﻄﺒﻴﻘﺎﺕ ﺃﻧﻈﻤﺔ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪.‬‬

‫‪.8‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﺗﻄﻠﺒﺖ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺜﺒﻴﺖ ﺍﻟﻜﺒﻴﺮﺓ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻛﻼ ًﻣﻦ ﺍﻷﺟﻬﺰﺓ ﺑﺪﻭﺍﻡ ﻛﺎﻣﻞ ﻭﻣﻮﻇﻔﻲ ﺻﻴﺎﻧﺔ‬
‫ﺑﺮﺍﻣﺞﺍﻟﻨﻈﺎﻡ ﺑﺪﻭﺍﻡ ﻛﺎﻣﻞ‪.‬‬
‫‪69‬‬ ‫‪2.8‬ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊ‪PL / I :‬‬

‫‪2.8.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺑﺪﺃﺕﺟﻬﻮﺩ ﺍﻟﺘﺼﻤﻴﻢ ﻋﻨﺪﻣﺎ ﺷﻜﻠﺖ ‪ IBM‬ﻭ ‪ SHARE‬ﻟﺠﻨﺔ ﺗﻄﻮﻳﺮ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺘﻘﺪﻣﺔ ﻟﻤﺸﺮﻭﻉ‬
‫‪ SHARE Fortran‬ﻓﻲ ﺃﻛﺘﻮﺑﺮ ‪ .1963‬ﺍﺟﺘﻤﻌﺖ ﻫﺬﻩ ﺍﻟﻠﺠﻨﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺑﺴﺮﻋﺔ ﻭﺷﻜﻠﺖ ﻟﺠﻨﺔ‬
‫ﻓﺮﻋﻴﺔﺗﺴﻤﻰ ﻟﺠﻨﺔ ‪ ، 3 × 3‬ﺳﻤﻴﺖ ﺑﻬﺬﺍ ﺍﻻﺳﻢ ﻷﻧﻬﺎ ﺗﻀﻢ ﺛﻼﺛﺔ ﺃﻋﻀﺎء ﻣﻦ ‪ IBM‬ﻭﺛﻼﺛﺔ‬
‫ﺃﻋﻀﺎءﻣﻦ ‪ .SHARE‬ﺍﺟﺘﻤﻌﺖ ﻟﺠﻨﺔ ‪ 3 × 3‬ﻟﻤﺪﺓ ﺛﻼﺛﺔ ﺃﻭ ﺃﺭﺑﻌﺔ ﺃﻳﺎﻡ ﻛﻞ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺘﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ‪.‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ﻟـ ‪ ، COBOL‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﻻﻧﺘﻬﺎء ﻣﻦ ﺍﻟﺘﺼﻤﻴﻢ‬


‫ﺍﻷﻭﻟﻲﻓﻲ ﻭﻗﺖ ﻗﺼﻴﺮ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ‪ .‬ﻋﻠﻰ ﻣﺎ ﻳﺒﺪﻭ ‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﻧﻄﺎﻕ ﺟﻬﺪ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﻛﺎﻥ ﺍﻻﻋﺘﻘﺎﺩ ﺍﻟﺴﺎﺉﺪ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﻓﻲ ﻏﻀﻮﻥ ﺛﻼﺛﺔ‬
‫ﺃﺷﻬﺮ‪.‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﺘﻤﻞ ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ‪ ، PL / I‬ﻭﺍﻟﺘﻲ ﺳﻤُﻴﺖ ﺁﻧﺬﺍﻙ ‪VI‬‬
‫‪ ، Fortran‬ﺑﺤﻠﻮﻝ ﺩﻳﺴﻤﺒﺮ ‪ ،‬ﺑﻌﺪ ﺃﻗﻞ ﻣﻦ ﺛﻼﺛﺔ ﺃﺷﻬﺮ ﻣﻦ ﺗﺸﻜﻴﻞ ﺍﻟﻠﺠﻨﺔ‪ .‬ﻭﻗﺪ ﻧﺠﺤﺖ ﺍﻟﻠﺠﻨﺔ‬
‫ﻓﻲﻃﻠﺐ ﺍﻟﺘﻤﺪﻳﺪ ﻓﻲ ﻣﻨﺎﺳﺒﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ ‪ ،‬ﺣﻴﺚ ﺃﺭﺟﺄﺕ ﻣﻮﻋﺪ ﺍﻻﺳﺘﺤﻘﺎﻕ ﺇﻟﻰ ﻳﻨﺎﻳﺮ ﺛﻢ ﺇﻟﻰ‬
‫ﺃﻭﺍﺧﺮﻓﺒﺮﺍﻳﺮ ‪.1964‬‬

‫ﻛﺎﻥﻣﻔﻬﻮﻡ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻫﻮ ﺃﻥ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺳﺘﻜﻮﻥ ﺍﻣﺘﺪﺍﺩﺍً ﻟـ ‪ ، Fortran IV‬ﻣﻊ‬


‫ﺍﻟﺤﻔﺎﻅﻋﻠﻰ ﺍﻟﺘﻮﺍﻓﻖ ‪ ،‬ﻭﻟﻜﻦ ﺗﻢ ﺇﺳﻘﺎﻁ ﻫﺬﺍ ﺍﻟﻬﺪﻑ ﺑﺴﺮﻋﺔ ﻣﻊ ﺍﺳﻢ ‪ .Fortran VI‬ﺣﺘﻰ ﻋﺎﻡ‬
‫‪، 1965‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺗﻌُﺮﻑ ﺑﺎﺳﻢ ‪) NPL‬ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺠﺪﻳﺪﺓ(‪ .‬ﺗﻢ ﺗﻘﺪﻳﻢ ﺃﻭﻝ ﺗﻘﺮﻳﺮ ﻣﻨﺸﻮﺭ ﻋﻦ‬
‫‪ NPL‬ﻓﻲ ﺍﺟﺘﻤﺎﻉ ‪ SHARE‬ﻓﻲ ﻣﺎﺭﺱ ‪ .1964‬ﺗﻢ ﺍﺗﺒﺎﻉ ﻭﺻﻒ ﺃﻛﺜﺮ ﺍﻛﺘﻤﺎﻻ ًﻓﻲ ﺃﺑﺮﻳﻞ ‪ ،‬ﻭﺗﻢ ﻧﺸﺮ‬
‫ﺍﻟﻨﺴﺨﺔﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻌﻠﻴﺎً ﻓﻲ ﺩﻳﺴﻤﺒﺮ ‪ (IBM ، 1964) 1964‬ﻣﻦ ﻗﺒﻞ ﻣﺠﻤﻮﻋﺔ‬
‫ﺍﻟﻤﺘﺮﺟﻤﻴﻦﻓﻲ ‪ IBM Hursley‬ﺍﻟﻤﺨﺘﺒﺮ ﻓﻲ ﺇﻧﺠﻠﺘﺮﺍ ﻭﺍﻟﺬﻱ ﺗﻢ ﺍﺧﺘﻴﺎﺭﻩ ﻟﻠﻘﻴﺎﻡ ﺑﺎﻟﺘﻨﻔﻴﺬ‪ .‬ﻓﻲ ﻋﺎﻡ‬
‫‪، 1965‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﻻﺳﻢ ﺇﻟﻰ ‪ PL / I‬ﻟﺘﺠﻨﺐ ﺍﻟﺨﻠﻂ ﺑﻴﻦ ﺍﺳﻢ ‪ NPL‬ﻭﺍﻟﻤﺨﺘﺒﺮ ﺍﻟﻔﻴﺰﻳﺎﺉﻲ ﺍﻟﻮﻃﻨﻲ‬
‫ﻓﻲﺇﻧﺠﻠﺘﺮﺍ‪ .‬ﺇﺫﺍ ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻟﻤﺘﺮﺟﻢ ﺧﺎﺭﺝ ﺍﻟﻤﻤﻠﻜﺔ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﻓﺮﺑﻤﺎ ﻇﻞ ﺍﻻﺳﻢ ‪.NPL‬‬

‫‪2.8.3‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﺭﺑﻤﺎﻳﻜﻮﻥ ﺃﻓﻀﻞ ﻭﺻﻒ ﺃﺣﺎﺩﻱ ﺍﻟﺠﻤﻠﺔ ﻟـ ‪ PL / I‬ﻫﻮ ﺃﻧﻪ ﺗﻀﻤﻦ ﻣﺎ ﻛﺎﻥ ﻳﻌﺘﺒﺮ ﻓﻴﻤﺎ ﺑﻌﺪ ﺃﻓﻀﻞ‬
‫ﺃﺟﺰﺍء‪) ALGOL 60‬ﺑﻨﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻭﺍﻟﻜﺘﻠﺔ( ‪ ،‬ﻭ ‪) Fortran IV‬ﺗﺠﻤﻴﻊ ﻣﻨﻔﺼﻞ ﻣﻊ ﺍﻻﺗﺼﺎﻝ ﻣﻦ‬
‫ﺧﻼﻝﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻌﺎﻟﻤﻴﺔ( ‪ ،‬ﻭ ‪) COBOL 60‬ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﻣﺮﺍﻓﻖ ﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ‪،‬‬
‫ﻭﺇﻧﺸﺎءﺍﻟﺘﻘﺎﺭﻳﺮ( ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺟﻤﻴﻌﻬﺎ‬
‫ﻣﺮﺻﻮﻓﺔﺑﻄﺮﻳﻘﺔ ﻣﺎ ﻣﻌﺎً‪ .‬ﻧﻈﺮﺍً ﻷﻥ ‪ PL / I‬ﻟﻢ ﺗﻌﺪ ﻟﻐﺔ ﺷﺎﺉﻌﺔ ‪ ،‬ﻓﻠﻦ ﻧﺤﺎﻭﻝ ‪ ،‬ﻭﻟﻮ ﻟﻔﺘﺮﺓ‬
‫ﻭﺟﻴﺰﺓ ‪،‬ﻣﻨﺎﻗﺸﺔ ﺟﻤﻴﻊ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ‪ ،‬ﺃﻭ ﺣﺘﻰ ﺃﻛﺜﺮ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺇﺛﺎﺭﺓ ﻟﻠﺠﺪﻝ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪،‬‬
‫ﺳﻨﺬﻛﺮﺑﻌﺾ ﻣﺴﺎﻫﻤﺎﺕ ﺍﻟﻠﻐﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﻌﺮﻓﺔ ﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻛﺎﻧﺖ‪ PL / I‬ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻟﺪﻳﻬﺎ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬


‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻠﺒﺮﺍﻣﺞ ﺑﺈﻧﺸﺎء ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻣﻨﻔﺬﺓ ﺑﺸﻜﻞ ﻣﺘﺰﺍﻣﻦ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﻩ‬
‫ﻛﺎﻧﺖﻓﻜﺮﺓ ﺟﻴﺪﺓ ‪ ،‬ﻓﻘﺪ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﺑﺸﻜﻞ ﺳﻴﺊ ﻓﻲ ‪.PL / I‬‬
‫• ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﻛﺘﺸﺎﻑ ﻭﻣﻌﺎﻟﺠﺔ ‪ 23‬ﻧﻮﻋﺎً ﻣﺨﺘﻠﻔﺎً ﻣﻦ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺃﻭ ﺃﺧﻄﺎء ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪70‬‬

‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ‪ ،‬ﻭﻟﻜﻦ ﻳﻤﻜﻦ ﺗﻌﻄﻴﻞ ﺍﻟﻘﺪﺭﺓ ‪ ،‬ﻣﻤﺎ‬
‫ﻳﺴﻤﺢﺑﺮﺑﻂ ﺃﻛﺜﺮ ﻛﻔﺎءﺓ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻏﻴﺮ ﺍﻟﺘﻜﺮﺍﺭﻳﺔ‪.‬‬
‫• ﺗﻢ ﺗﻀﻤﻴﻦ ﺍﻟﻤﺆﺷﺮﺍﺕ ﻛﻨﻮﻉ ﺑﻴﺎﻧﺎﺕ‪.‬‬
‫• ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﻘﺎﻃﻊ ﺍﻟﻌﺮﺿﻴﺔ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ‬
‫ﺍﻟﺼﻒﺍﻟﺜﺎﻟﺚ ﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻛﻤﺎ ﻟﻮ ﻛﺎﻥ ﻣﺼﻔﻮﻓﺔ ﺫﺍﺕ ﺑﻌُﺪ ﻭﺍﺣﺪ‪.‬‬

‫‪2.8.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﺠﺐﺃﻥ ﻳﺒﺪﺃ ﺃﻱ ﺗﻘﻴﻴﻢ ﻟـ ‪ PL / I‬ﺑﺎﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻃﻤﻮﺡ ﺟﻬﺪ ﺍﻟﺘﺼﻤﻴﻢ‪ .‬ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻤﺎﺿﻲ ‪،‬‬
‫ﻳﺒﺪﻭﻣﻦ ﺍﻟﺴﺬﺍﺟﺔ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺩﻣﺞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺒﻨﻰ ﺑﻨﺠﺎﺡ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪،‬‬
‫ﻳﺠﺐﺗﺨﻔﻴﻒ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻣﻦ ﺧﻼﻝ ﺍﻻﻋﺘﺮﺍﻑ ﺑﺄﻧﻪ ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﺧﺒﺮﺓ ﻗﻠﻴﻠﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﺑﺸﻜﻞ ﻋﺎﻡ ‪ ،‬ﺍﺳﺘﻨﺪ ﺗﺼﻤﻴﻢ ‪ PL / I‬ﺇﻟﻰ ﻓﺮﺿﻴﺔ ﺃﻥ ﺃﻱ ﺑﻨﻴﺔ ﻣﻔﻴﺪﺓ ﻭﻳﻤﻜﻦ‬
‫ﺗﻨﻔﻴﺬﻫﺎﻳﺠﺐ ﺗﻀﻤﻴﻨﻬﺎ ‪ ،‬ﻣﻊ ﻋﺪﻡ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻜﺎﻓﻲ ﺑﻜﻴﻔﻴﺔ ﻓﻬﻢ ﺍﻟﻤﺒﺮﻣﺞ ﻟﻬﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ‬
‫ﺍﻟﺘﺮﻛﻴﺒﺎﺕﻭﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﺸﻜﻞ ﻓﻌﺎﻝ‪ .‬ﻗﺪﻡ ‪ ، Edsger Dijkstra‬ﻓﻲ ﻣﺤﺎﺿﺮﺓ ﺟﺎﺉﺰﺓ (‬
‫‪ ، Turing )Dijkstra، 1972‬ﺃﺣﺪ ﺃﻗﻮﻯ ﺍﻻﻧﺘﻘﺎﺩﺍﺕ ﻟﺘﻌﻘﻴﺪ ‪:PL / I‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺸﻜﻠﺔ ﺍﻟﺘﻌﻘﻴﺪ ﺑﺴﺒﺐ ﺣﺠﻤﻪ ﺍﻟﻜﺒﻴﺮ ‪ ،‬ﻋﺎﻧﻰ ‪ PL / I‬ﻣﻦ ﻋﺪﺩ ﻣﻤﺎ ﻳﻌﺘﺒﺮ‬
‫ﺍﻵﻥﻫﻴﺎﻛﻞ ﺳﻴﺉﺔ ﺍﻟﺘﺼﻤﻴﻢ‪ .‬ﻣﻦ ﺑﻴﻦ ﻫﺬﻩ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ‪ ،‬ﻭﺍﻟﺘﺰﺍﻣﻦ ‪،‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻨﺎ ﻳﺠﺐ ﺃﻥ ﻧﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻓﻲ ﺟﻤﻴﻊ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻟﻢ ﺗﻈﻬﺮ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻓﻲ ﺃﻱ‬
‫ﻟﻐﺔﺳﺎﺑﻘﺔ‪.‬‬

‫ﻣﻦﺣﻴﺚ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻳﺠﺐ ﺍﻋﺘﺒﺎﺭ ‪ PL / I‬ﻧﺠﺎﺣﺎً ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ‪ .‬ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪،‬‬
‫ﺗﻤﺘﻌﺖﺑﺎﺳﺘﺨﺪﺍﻣﺎﺕ ﻛﺒﻴﺮﺓ ﻓﻲ ﻛﻞ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﻭﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﻛﻤﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ‬
‫ﻧﻄﺎﻕﻭﺍﺳﻊ ﺧﻼﻝ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻛﻮﺳﻴﻠﺔ ﺗﻌﻠﻴﻤﻴﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ‪ ،‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻲ ﻋﺪﺓ ﺃﺷﻜﺎﻝ‬
‫ﻓﺮﻋﻴﺔ ‪،‬ﻣﺜﻞ ‪) PL / C‬ﻛﻮﺭﻧﻴﻞ ‪ (1977 ،‬ﻭ ‪) PL / CS‬ﻛﻮﻧﻮﺍﻱ ﻭﻛﻮﻧﺴﺘﺎﺑﻞ ‪.(1976 ،‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:PL / I‬‬

‫‪/ I PROGRAM EXAMPLE INPUT:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ،‬ﺍﺳﺘﻤﻊ ‪ ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ﺍﻻﺳﺘﻤﺎﻉ ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫‪/ * PL‬‬
‫‪LISTLEN-INTEGER‬‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺃﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ * ‪ :PLIEX /‬ﺧﻴﺎﺭﺍﺕ ﺍﻹﺟﺮﺍء )‬
‫ﺍﻟﺮﺉﻴﺴﻲ( ؛‬
‫ﺍﻹﻋﻼﻥﻋﻦ ﺍﻟﻘﺎﺉﻤﺔ )‪ (1:99‬ﺛﺎﺑﺖ‪.‬‬
‫ﺇﻋﻼﻥ)ﻗﺎﺉﻤﺔ ‪ ،‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ( ﺛﺎﺑﺖ ؛ ‪ SUM = 0‬؛‬

‫ﺍﻟﻨﺘﻴﺠﺔ= ‪، 0‬‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ )‪ (LISTLEN‬؛‬
‫ﺇﺫﺍ)‪ (LISTLEN >100) & (LISTLEN< 0‬ﺛﻢ‬
‫‪71‬‬ ‫‪2.9‬ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ‪ APL :‬ﻭ ‪SNOBOL‬‬

‫ﻳﻔﻌﻞ؛‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻫﻞﺍﻟﻌﺪﺍﺩ = ‪ 1‬ﻟﻼﺳﺘﻤﺎﻉ ؛‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ )(‪ (INTLIST )COUNTER‬؛‬
‫(‪ SUM = SUM + INTLIST )COUNTER‬؛ ﻧﻬﺎﻳﺔ؛‬

‫‪ * /‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬


‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ SUM / LISTLEN‬؛‬
‫‪ * /‬ﻋﺪ ﻋﺪﺩ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻫﻞﺍﻟﻌﺪﺍﺩ = ‪ 1‬ﻟﻼﺳﺘﻤﺎﻉ ؛‬
‫ﺇﺫﺍﻛﺎﻥ (‪ <INTLIST )COUNTER‬ﻣﺘﻮﺳﻂ ﺛﻢ‬
‫ﺍﻟﻨﺘﻴﺠﺔ= ﺍﻟﻨﺘﻴﺠﺔ ‪، 1 +‬‬
‫ﻧﻬﺎﻳﺔ؛‬
‫‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ * ‪/‬‬
‫ﻭﺿﻊﻗﺎﺉﻤﺔ ﺍﻟﺘﺨﻄﻲ )"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪ (":‬؛ ﻗﺎﺉﻤﺔ ‪) PUT‬ﻧﺘﻴﺠﺔ( ‪،‬‬

‫ﻧﻬﺎﻳﺔ؛‬
‫ﺁﺧﺮ‬
‫ﻭﺿﻊﻗﺎﺉﻤﺔ ﺍﻟﺘﺨﻄﻲ )"ﺧﻄﺄ ‪ -‬ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﺍﻟﻄﻮﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ"( ؛ ﻧﻬﺎﻳﺔ ‪ PLIEX‬؛‬

‫‪2.9‬ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ‪ APL :‬ﻭ ‪SNOBOL‬‬


‫ﻳﺨﺘﻠﻒﻫﻴﻜﻞ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﻋﻦ ﻫﻴﻜﻞ ﺍﻷﻗﺴﺎﻡ ﺍﻷﺧﺮﻯ ﻷﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻫﻨﺎ‬
‫ﻣﺨﺘﻠﻔﺔﺟﺪﺍً‪ .‬ﻟﻢ ﻳﻜﻦ ﻟﻜﻞ ﻣﻦ ‪ APL‬ﻭ ‪ SNOBOL‬ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺉﺪﺓ ﻓﻲ ﻭﻗﺖ‬
‫ﻻﺣﻖ‪9.‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻟـ ‪ APL‬ﻻﺣﻘﺎً ﻓﻲ ﺍﻟﻜﺘﺎﺏ‪.‬‬

‫ﻓﻲﺍﻟﻤﻈﻬﺮ ﻭﺍﻟﻐﺮﺽ ‪ ،‬ﺗﺨﺘﻠﻒ ‪ APL‬ﻭ ‪ SNOBOL‬ﺗﻤﺎﻣﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻬﻢ ﻳﺘﺸﺎﺭﻛﻮﻥ ﻓﻲ‬
‫ﺧﺎﺻﻴﺘﻴﻦﺃﺳﺎﺳﻴﺘﻴﻦ‪ :‬ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ‬
‫ﻛﻠﺘﺎﺍﻟﻠﻐﺘﻴﻦ ﻏﻴﺮ ﻣﻄﺒﻌﻴﺔ ﻓﻲ ﺍﻷﺳﺎﺱ‪ .‬ﻳﻜﺘﺴﺐ ﺍﻟﻤﺘﻐﻴﺮ ﻧﻮﻋﺎً ﻋﻨﺪ ﺗﻌﻴﻴﻦ ﻗﻴﻤﺔ ﻟﻪ ‪ ،‬ﻭﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﻳﻔﺘﺮﺽ ﻧﻮﻉ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻌﻴﻨﺔ‪ .‬ﻳﺘﻢ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﻟﻠﻤﺘﻐﻴﺮ ﻓﻘﻂ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻌﻴﻴﻦ‬
‫ﻗﻴﻤﺔﻟﻪ ‪ ،‬ﻷﻧﻪ ﻗﺒﻞ ﺫﻟﻚ ﻻ ﺗﻮﺟﺪ ﻃﺮﻳﻘﺔ ﻟﻤﻌﺮﻓﺔ ﻣﻘﺪﺍﺭ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻤﻄﻠﻮﺏ‪.‬‬

‫‪2.9.1‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪APL‬‬


‫ﺗﻢﺗﺼﻤﻴﻢ (‪ APL )Brown et al. ، 1988‬ﻓﻲ ﺣﻮﺍﻟﻲ ﻋﺎﻡ ‪ 1960‬ﺑﻮﺍﺳﻄﺔ ‪E. Iverson‬‬
‫‪ Kenneth‬ﻓﻲ ﺷﺮﻛﺔ ‪ .IBM‬ﻟﻢ ﻳﺘﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻓﻲ ﺍﻷﺻﻞ ﻟﺘﻜﻮﻥ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻄﺒﻘﺔ ‪ ،‬ﺑﻞ ﻛﺎﻥ‬
‫ﺍﻟﻐﺮﺽﻣﻨﻬﺎ ﺃﻥ ﺗﻜﻮﻥ ﻭﺳﻴﻠﺔ ﻟﻮﺻﻒ ﺑﻨﻴﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬

‫‪.9‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﺪﻳﻬﻢ ﺑﻌﺾ ﺍﻟﺘﺄﺛﻴﺮ ﻋﻠﻰ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻏﻴﺮ ﺍﻟﺮﺉﻴﺴﻴﺔ )‪ J‬ﻳﻌﺘﻤﺪ ﻋﻠﻰ ‪ APL ، ICON‬ﻳﻌﺘﻤﺪ ﻋﻠﻰ‬
‫‪ ، SNOBOL‬ﻭ ‪ AWK‬ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ‪.(SNOBOL‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪72‬‬

‫ﺗﻢﻭﺻﻒ ‪ APL‬ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺍﻟﻜﺘﺎﺏ ﺍﻟﺬﻱ ﺣﺼﻠﺖ ﻣﻨﻪ ﻋﻠﻰ ﺍﺳﻤﻪ ‪،‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ)ﺍﻳﻔﺮﺳﻮﻥ ‪،‬‬
‫‪ .(1962‬ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻟـ ‪ APL‬ﻓﻲ ﺷﺮﻛﺔ ‪.IBM‬‬

‫ﻳﺤﺘﻮﻱ‪ APL‬ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻷﻗﻮﻳﺎء ﺍﻟﻤﺤﺪﺩﻳﻦ ﺑﻌﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ‪ ،‬ﻣﻤﺎ‬
‫ﺧﻠﻖﻣﺸﻜﻠﺔ ﻟﻠﻤﻨﻔﺬﻳﻦ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ APL‬ﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻃﺒﺎﻋﺔ ‪.IBM‬‬
‫ﺗﺤﺘﻮﻱﻫﺬﻩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﻛﺮﺍﺕ ﻃﺒﺎﻋﺔ ﺧﺎﺻﺔ ﺗﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺣﺮﻑ ﺍﻟﻔﺮﺩﻳﺔ ﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﺃﺣﺪ ﺃﺳﺒﺎﺏ ﺍﺣﺘﻮﺍء ‪ APL‬ﻋﻠﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻫﻮ ﺃﻧﻪ ﻳﻮﻓﺮ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻮﺣﺪﺓﻋﻠﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺃﻱ ﻣﺼﻔﻮﻓﺔ ﺑﻌﺎﻣﻞ ﺗﺸﻐﻴﻞ ﻭﺍﺣﺪ‪.‬‬
‫ﺗﻮﻓﺮﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻜﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺗﻌﺒﻴﺮﺍً ﻋﺎﻟﻴﺎً ﺟﺪﺍً ﻭﻟﻜﻨﻬﺎ ﺗﺠﻌﻞ ﻣﻦ ﺍﻟﺼﻌﺐ ﺃﻳﻀﺎً ﻗﺮﺍءﺓ‬
‫ﺑﺮﺍﻣﺞ‪ .APL‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻨﺎﺱ ﺃﻥ ‪ APL‬ﻛﻠﻐﺔ ﺗﺴﺘﺨﺪﻡ ﺑﺸﻜﻞ ﺃﻓﻀﻞ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ "ﺍﻟﻤﻬﻤﻠﺔ"‬
‫‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺴﺮﻋﺔ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﺘﺨﻠﺺ ﻣﻨﻬﺎ ﺑﻌﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻧﻈﺮﺍً‬
‫ﻟﺼﻌﻮﺑﺔﺻﻴﺎﻧﺘﻬﺎ‪.‬‬

‫ﻛﺎﻥ‪ APL‬ﻣﻮﺟﻮﺩﺍً ﻣﻨﺬ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ‪ 50‬ﻋﺎﻣﺎً ﻭﻻ ﻳﺰﺍﻝ ﻳﺴﺘﺨﺪﻡ ﺣﺘﻰ ﺍﻟﻴﻮﻡ ‪ ،‬ﻭﺇﻥ ﻟﻢ ﻳﻜﻦ‬
‫ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻐﻴﺮ ﻛﺜﻴﺮﺍً ﻋﻠﻰ ﻣﺪﺍﺭ ﺣﻴﺎﺗﻪ‪.‬‬

‫‪2.9.2‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺳﻨﻮﺑﻮﻝ‬


‫ﺗﻢﺗﺼﻤﻴﻢ ‪) SNOBOL‬ﻳﻨُﻄﻖ "ﻛﺮﺓ ﺍﻟﺜﻠﺞ" ؛ ‪ (Griswold et al. ، 1971‬ﻓﻲ ﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺴﺘﻴﻨﻴﺎﺕﻣﻦ ﻗﺒﻞ ﺛﻼﺛﺔ ﺃﺷﺨﺎﺹ ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ‪ DJ Farber :‬ﻭ ‪ RE Griswold‬ﻭ (‬
‫‪ .IP Polonsky )Farber et al. ، 1964‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﺧﺼﻴﺼﺎً ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻨﺼﻮﺹ‪ .‬ﻗﻠﺐ‬
‫‪ SNOBOL‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻘﻮﻳﺔ ﻟﻤﻄﺎﺑﻘﺔ ﻧﻤﻂ ﺍﻟﺴﻠﺴﻠﺔ‪ .‬ﻛﺎﻥ ﺃﺣﺪ‬
‫ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻤﺒﻜﺮﺓ ﻟـ ‪ SNOBOL‬ﻫﻮ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺗﺤﺮﻳﺮ ﺍﻟﻨﺼﻮﺹ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻄﺒﻴﻌﺔ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﻟـ ‪ SNOBOL‬ﺗﺠﻌﻠﻪ ﺃﺑﻄﺄ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺒﺪﻳﻠﺔ ‪ ،‬ﻟﻢ ﻳﻌﺪ ﻳﺴُﺘﺨﺪﻡ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻻ ﺗﺰﺍﻝ ‪ SNOBOL‬ﻟﻐﺔ ﺣﻴﺔ ﻭﻣﺪﻋﻮﻣﺔ ﺗﺴُﺘﺨﺪﻡ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﻬﺎﻡ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻨﺼﻮﺹ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫‪2.10‬ﺑﺪﺍﻳﺎﺕ ﺍﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ‪SIMULA 67 :‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ SIMULA 67‬ﻟﻢ ﺗﺤﻘﻖ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﺃﺑﺪﺍً ﻭﻛﺎﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﺿﺉﻴﻞ‬
‫ﻋﻠﻰﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ﻭﻗﺘﻬﺎ ‪ ،‬ﺇﻻ ﺃﻥ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﻗﺪﻣﺘﻬﺎ ﺗﺠﻌﻠﻬﺎ ﻣﻬﻤﺔ ﻣﻦ‬
‫ﺍﻟﻨﺎﺣﻴﺔﺍﻟﺘﺎﺭﻳﺨﻴﺔ‪.‬‬

‫‪2.10.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻃﻮﺭﺍﻟﻨﺮﻭﻳﺠﻴﺎﻥ ﻛﺮﻳﺴﺘﻴﻦ ﻧﻴﺠﺎﺭﺩ ﻭﺃﻭﻟﻲ ﻳﻮﻫﺎﻥ ﺩﺍﻝ ﻟﻐﺔ ‪ SIMULA I‬ﺑﻴﻦ ﻋﺎﻣﻲ ‪ 1962‬ﻭ ‪1964‬‬
‫ﻓﻲﻣﺮﻛﺰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻨﺮﻭﻳﺠﻲ )‪ (NCC‬ﻓﻲ ﺃﻭﺳﻠﻮ‪ .‬ﻛﺎﻧﻮﺍ ﻣﻬﺘﻤﻴﻦ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﻠﻤﺤﺎﻛﺎﺓ ﻭﻟﻜﻨﻬﻢ ﻋﻤﻠﻮﺍ ﺃﻳﻀﺎً ﻓﻲ ﺃﺑﺤﺎﺙ ﺍﻟﻌﻤﻠﻴﺎﺕ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ‪SIMULA I‬‬
‫ﺣﺼﺮﻳﺎًﻟﻤﺤﺎﻛﺎﺓ ﺍﻟﻨﻈﺎﻡ ﻭﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ 1964‬ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪1107‬‬
‫‪.UNIVAC‬‬
‫‪73‬‬ ‫‪2.11‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪ‪ALGOL 68 :‬‬

‫ﺑﻤﺠﺮﺩﺍﻛﺘﻤﺎﻝ ﺗﻨﻔﻴﺬ ‪ ، SIMULA I‬ﺑﺪﺃ ‪ Nygaard‬ﻭ ‪ Dahl‬ﺟﻬﻮﺩﺍً ﻟﺘﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻋﻦ‬


‫ﻃﺮﻳﻖﺇﺿﺎﻓﺔ ﻣﻴﺰﺍﺕ ﺟﺪﻳﺪﺓ ﻭﺗﻌﺪﻳﻞ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ﻟﺠﻌﻞ ﺍﻟﻠﻐﺔ ﻣﻔﻴﺪﺓ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺫﺍﺕﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ‪ .‬ﻛﺎﻧﺖ ﻧﺘﻴﺠﺔ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ‪ ، SIMULA 67‬ﺍﻟﺬﻱ ﺗﻢ ﺗﻘﺪﻳﻢ ﺗﺼﻤﻴﻤﻪ ﻷﻭﻝ‬
‫ﻣﺮﺓﻟﻠﺠﻤﻬﻮﺭ ﻓﻲ ﻣﺎﺭﺱ ‪ .(Dahl and Nygaard ، 1967) 1967‬ﺳﻨﻨﺎﻗﺶ ‪SIMULA 67‬‬
‫ﻓﻘﻂ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ‪ SIMULA 67‬ﻣﻮﺟﻮﺩﺓ ﺃﻳﻀﺎً ﻓﻲ ‪I‬‬
‫‪.SIMULA‬‬

‫‪2.10.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻤﺤﺎﻛﺎﺓ ﻫﻮ ﺗﺼﻤﻴﻢ ﺑﺮﺍﻣﺠﻬﺎ ﺍﻟﻔﺮﻋﻴﺔ‪ .‬ﺗﺘﻄﻠﺐ ﺍﻟﻤﺤﺎﻛﺎﺓ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻳﺴُﻤﺢ ﻟﻬﺎ‬
‫ﺑﺈﻋﺎﺩﺓﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺍﻟﻤﻮﺿﻊ ﺍﻟﺬﻱ ﺗﻮﻗﻔﺖ ﻓﻴﻪ ﺳﺎﺑﻘﺎً‪ .‬ﺗﻌُﺮﻑ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻣﻊ ﻫﺬﺍ ﺍﻟﻨﻮﻉ‬
‫ﻣﻦﺍﻟﺘﺤﻜﻢ ﺑﺎﺳﻢ (ﻭﻟﻐﺎﺕ ﺃﺧﺮﻯ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ) ‪ ALGOL 60‬ﻳﺄﺧﺬ ﻛﻞ ﻣﻦ ﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ‬
‫ﻭﺑﻴﺎﻧﺎﺕﺍﻟﺘﺤﻜﻢ ﻣﻦ ﺗﻠﻚ ﺍﻟﻠﻐﺔ‪ .‬ﻛﺎﻥ ﺍﻟﻨﻘﺺ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ‪ ALGOL 60 ،‬ﻫﻮ ﺍﻣﺘﺪﺍﺩ ﻟـ ‪67‬‬
‫‪SIMULA‬ﻛﻮﺭﻭﺗﻴﻦﻷﻥ ﺍﻟﻤﺘﺼﻞ ﻭﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﺴﻤﺎﺓ ﻟﻬﺎ ﻋﻼﻗﺔ ﻣﺘﺴﺎﻭﻳﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻣﻊ‬
‫ﺑﻌﻀﻬﺎﺍﻟﺒﻌﺾ ‪ ،‬ﺑﺪﻻ ًﻣﻦ ﻋﻼﻗﺔ ﺍﻟﺴﻴﺪ ‪ /‬ﺍﻟﻌﺒﺪ ﺍﻟﺼﺎﺭﻣﺔ ﺍﻟﺘﻲ ﻟﺪﻳﻬﻢ ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ‪.‬‬

‫ﻟﺘﻮﻓﻴﺮﺍﻟﺪﻋﻢ ﻟﻠﻜﻮﺭﻭﺗﻴﻦ ﻓﻲ ‪ ، SIMULA 67‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺑﻨﻴﺔ ﺍﻟﻔﺼﻞ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﺗﻄﻮﺭﺍً ﻣﻬﻤﺎً‬
‫ﻷﻥﻣﻔﻬﻮﻡ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺪﺃ ﺑﻪ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻮﻓﺮ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺳﺎﺱ ﻟﻠﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫ﻣﻦﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻥ ﻧﻼﺣﻆ ﺃﻥ ﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﻤﻬﻢ ﻻﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻢ ﻳﺘﻢ ﺗﻄﻮﻳﺮﻩ‬


‫ﻭﻧﺴُﺐﺇﻟﻰ ﺑﻨﻴﺔ ﺍﻟﻔﺼﻞ ﺣﺘﻰ ﻋﺎﻡ ‪ ، 1972‬ﻋﻨﺪﻣﺎ ﺃﺩﺭﻙ (‪ Hoare )1972‬ﺍﻻﺗﺼﺎﻝ‪.‬‬

‫‪2.11‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪ‪ALGOL 68 :‬‬


‫ﻛﺎﻥ‪ ALGOL 68‬ﻣﺼﺪﺭﺍً ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺍﻷﻓﻜﺎﺭ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺍﻋﺘﻤﺎﺩ‬
‫ﺑﻌﻀﻬﺎﻻﺣﻘﺎً ﻣﻦ ﻗﺒﻞ ﻟﻐﺎﺕ ﺃﺧﺮﻯ‪ .‬ﻧﻘﻮﻡ ﺑﺘﻀﻤﻴﻨﻬﺎ ﻫﻨﺎ ﻟﻬﺬﺍ ﺍﻟﺴﺒﺐ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻟﻢ‬
‫ﺗﺤﻘﻖﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻓﻲ ﺃﻭﺭﻭﺑﺎ ﺃﻭ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪.‬‬

‫‪2.11.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻟﻢﻳﻨﺘﻪ ﺗﻄﻮﻳﺮ ﻋﺎﺉﻠﺔ ‪ ALGOL‬ﻋﻨﺪﻣﺎ ﻇﻬﺮ ﺍﻟﺘﻘﺮﻳﺮ ﺍﻟﻤﻨﻘﺢ ﻋﻦ ‪ ALGOL 60‬ﻓﻲ ﻋﺎﻡ ‪، 1962‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺮﻭﺭ ﺳﺖ ﺳﻨﻮﺍﺕ ﺣﺘﻰ ﺗﻢ ﻧﺸﺮ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺘﺼﻤﻴﻢ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ‪( ،‬‬
‫‪ ، ALGOL 68 )van Wijngaarden et al. ، 1969‬ﻣﺨﺘﻠﻔﺔ ﺗﻤﺎﻣﺎً ﻋﻦ ﺳﺎﺑﻘﺘﻬﺎ‪.‬‬

‫ﻛﺎﻥﺃﺣﺪ ﺃﻛﺜﺮ ﺍﻻﺑﺘﻜﺎﺭﺍﺕ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ‪ ALGOL 68‬ﺃﺣﺪ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ‪:‬‬
‫ﺍﻟﺘﻌﺎﻣﺪ‪.‬ﺗﺬﻛﺮ ﻣﻨﺎﻗﺸﺘﻨﺎ ﺣﻮﻝ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .1‬ﺃﺩﻯ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺍﻟﻤﻴﺰﺍﺕﺍﻟﻤﺒﺘﻜﺮﺓ ﻟـ ‪ ، ALGOL 68‬ﺃﺣﺪﻫﺎ ﻣﻮﺻﻮﻑ ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪74‬‬

‫‪2.11.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﺍﻟﻨﺘﺎﺉﺞ ﺍﻟﻤﻬﻤﺔ ﻟﻠﺘﻌﺎﻣﺪ ﻓﻲ ‪ ALGOL 68‬ﺗﻀﻤﻴﻨﻪ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ‬
‫ﻗﺒﻞﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻀﻤﻨﺖ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻣﺜﻞ ﻓﻮﺭﺗﺮﺍﻥ ‪ ،‬ﻋﺪﺩﺍً ﻗﻠﻴﻼ ًﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻷﺳﺎﺳﻴﺔ‪.‬ﺗﻀﻤﻨﺖ ‪ PL / I‬ﻋﺪﺩﺍً ﺃﻛﺒﺮ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻣﻤﺎ ﺟﻌﻞ ﺍﻟﺘﻌﻠﻢ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ‬
‫ﻭﺻﻌﻮﺑﺔﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻭﻟﻜﻦ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﺃﻥ ﻳﻮﻓﺮ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ ﻣﻨﺎﺳﺒﺔ ﻟﻜﻞ ﺣﺎﺟﺔ‪.‬‬

‫ﻛﺎﻥﻧﻬﺞ ‪ ALGOL 68‬ﻓﻲ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻮ ﺗﻮﻓﻴﺮ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﻬﻴﺎﻛﻞ‬
‫ﺍﻟﺒﺪﺍﺉﻴﺔﻭﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺪﻣﺞ ﺗﻠﻚ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﻓﻲ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ﺗﻢﻧﻘﻞ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺇﻟﻰ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻀﺮﻭﺭﻳﺔﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻤﺼﻤﻤﺔ ﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ‪ .‬ﺗﻌﺘﺒﺮ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﺫﺍﺕ ﻗﻴﻤﺔ ﻷﻧﻬﺎ ﺗﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺘﺼﻤﻴﻢ ﺗﺠﺮﻳﺪﺍﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻨﺎﺳﺐ‬
‫ﻣﺸﺎﻛﻞﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻭﺛﻴﻖ ﻟﻠﻐﺎﻳﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺟﻤﻴﻊ ﺟﻮﺍﻧﺐ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.6‬‬

‫ﻛﺄﻭﻝﻣﺮﺓ ﺃﺧﺮﻯ ﻓﻲ ﻣﺠﺎﻝ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻗﺪﻡ ‪ ALGOL 68‬ﻧﻮﻉ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‬


‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﺴﻤﻴﺘﻬﺎﻛﻮﻣﺔ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﺿﻤﻨﻴﺔﻓﻲ ﺍﻟﻔﺼﻞ ‪ .5‬ﺍﻟﻤﺼﻔﻮﻓﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‬
‫ﻫﻲﺍﻟﺘﻲ ﻻ ﻳﺤﺪﺩ ﻓﻴﻬﺎ ﺍﻹﻋﻼﻥ ﺣﺪﻭﺩﺍً ﻣﻨﺨﻔﻀﺔ‪ .‬ﺗﺆﺩﻱ ﺍﻟﺘﻌﻴﻴﻨﺎﺕ ﺇﻟﻰ ﺻﻔﻴﻒ ﺩﻳﻨﺎﻣﻴﻜﻲ ﺇﻟﻰ‬
‫ﺗﺨﺼﻴﺺﻣﺴﺎﺣﺔ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻤﻄﻠﻮﺑﺔ‪ .‬ﻓﻲ ‪ ، ALGOL 68‬ﺗﺴﻤﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﺛﻨﻲ‬
‫ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪.‬‬

‫‪2.11.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﺘﻀﻤﻦ‪ ALGOL 68‬ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺴﺒﻘﺎً‪ .‬ﻛﺎﻥ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﻟﻠﺘﻌﺎﻣﺪ ‪،‬ﺍﻟﺬﻱ ﻗﺪ ﻳﺠﺎﺩﻝ ﺍﻟﺒﻌﺾ ﺃﻧﻪ ﻣﺒﺎﻟﻎ ﻓﻴﻪ ‪ ،‬ﻣﻊ ﺫﻟﻚ ﺛﻮﺭﻳﺎً‪.‬‬

‫ﻛﺮﺭ‪ ALGOL 68‬ﺇﺣﺪﻯ ﺧﻄﺎﻳﺎ ‪ ، ALGOL 60‬ﻭﻛﺎﻥ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﺷﻌﺒﻴﺘﻪ ﺍﻟﻤﺤﺪﻭﺩﺓ‪ .‬ﺗﻢ‬
‫ﻭﺻﻒﺍﻟﻠﻐﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻣﻌﺪﻧﻴﺔ ﺃﻧﻴﻘﺔ ﻭﻣﺨﺘﺼﺮﺓ ﻭﻟﻜﻦ ﺃﻳﻀﺎً ﻏﻴﺮ ﻣﻌﺮﻭﻓﺔ‪ .‬ﻗﺒﻞ ﺃﻥ ﻳﺘﻤﻜﻦ‬
‫ﺍﻟﻤﺮءﻣﻦ ﻗﺮﺍءﺓ ﻭﺛﻴﻘﺔ ﻭﺻﻒ ﺍﻟﻠﻐﺔ )‪ ، (van Wijngaarden et al. ، 1969‬ﻛﺎﻥ ﻋﻠﻴﻪ ﺃﻥ‬
‫ﻳﺘﻌﻠﻢﺍﻟﻠﻐﺔ ﺍﻟﻤﻌﺪﻧﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ﻗﻮﺍﻋﺪ ﻗﻮﺍﻋﺪ ﻓﺎﻥ ‪ ، Wijngaarden‬ﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻛﺜﺮ‬
‫ﺗﻌﻘﻴﺪﺍًﺑﻜﺜﻴﺮ ﻣﻦ ‪ .BNF‬ﻟﺠﻌﻞ ﺍﻷﻣﻮﺭ ﺃﺳﻮﺃ ‪ ،‬ﺍﺧﺘﺮﻉ ﺍﻟﻤﺼﻤﻤﻮﻥ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﻟﺸﺮﺡ‬
‫ﺍﻟﻘﻮﺍﻋﺪﻭﺍﻟﻠﻐﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔﺍﻟﻤﺆﺷﺮﺍﺕﺗﻢ ﺍﺳﺘﺪﻋﺎء‬
‫ﺍﺳﺘﺨﺮﺍﺝﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﺮﻋﻴﺔﺯﺭﻛﺸﺔ‪،‬ﻭﻛﺎﻧﺖ ﻋﻤﻠﻴﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺗﺴﻤﻰ ﺃﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ‬
‫ﺍﻹﻛﺮﺍﻩ ‪ ،‬ﺍﻟﺬﻱ ﻗﺪ ﻳﻜﻮﻥﻭﺩﻳﻊ ‪ ،‬ﺣﺎﺯﻡ ‪،‬ﺃﻭ ﺃﻱ ﺷﻲء ﺁﺧﺮ‪.‬‬

‫ﻣﻦﺍﻟﻄﺒﻴﻌﻲ ﻣﻘﺎﺭﻧﺔ ﺗﺼﻤﻴﻢ ‪ PL / I‬ﻣﻊ ﺗﺼﻤﻴﻢ ‪ ، ALGOL 68‬ﻷﻧﻬﻤﺎ ﻟﻢ ﻳﺒﺪﻭﺍ ﺳﻮﻯ‬


‫ﺑﻀﻊﺳﻨﻮﺍﺕ‪ .‬ﺣﻘﻖ ‪ ALGOL 68‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻣﻦ ﺧﻼﻝ ﻣﺒﺪﺃ ﺍﻟﺘﻌﺎﻣﺪ‪ :‬ﺑﻌﺾ ﺍﻟﻤﻔﺎﻫﻴﻢ‬
‫ﺍﻟﺒﺪﺍﺉﻴﺔﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﻏﻴﺮ ﺍﻟﻤﻘﻴﺪ ﻟﺒﻌﺾ ﺍﻵﻟﻴﺎﺕ ﺍﻟﻤﺪﻣﺠﺔ‪ .‬ﺣﻘﻖ ‪ PL / I‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻣﻦ‬
‫ﺧﻼﻝﺗﻀﻤﻴﻦ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﻭﺳﻌﺖ ‪ ALGOL 68‬ﺍﻟﺒﺴﺎﻃﺔ ﺍﻷﻧﻴﻘﺔ ﻟـ ‪60‬‬
‫‪ ، ALGOL‬ﻓﻲ ﺣﻴﻦ ﺟﻤﻌﺖ ‪ PL / I‬ﺑﺒﺴﺎﻃﺔ ﻣﻴﺰﺍﺕ ﻋﺪﺓ ﻟﻐﺎﺕ ﻟﺘﺤﻘﻴﻖ ﺃﻫﺪﺍﻓﻬﺎ‪ .‬ﺑﺎﻟﻄﺒﻊ ‪،‬‬
‫ﻳﺠﺐﺃﻥ ﻧﺘﺬﻛﺮ ﺃﻥ ﺍﻟﻬﺪﻑ ﻣﻦ ‪ PL / I‬ﻛﺎﻥ ﺗﻮﻓﻴﺮ ﺃﺩﺍﺓ ﻣﻮﺣﺪﺓ ﻟﻔﺉﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ‪ ،‬ﻓﻲ‬
‫ﺣﻴﻦﺃﻥ ‪ ALGOL 68‬ﻛﺎﻥ ﻣﺴﺘﻬﺪﻓﺎً ﻟﻔﺉﺔ ﻭﺍﺣﺪﺓ‪ :‬ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪.‬‬

‫ﺣﻘﻘﺖ‪ PL / I‬ﻗﺒﻮﻻً ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ‪ ، ALGOL 68‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺟﻬﻮﺩ‬
‫‪ IBM‬ﺍﻟﺘﺮﻭﻳﺠﻴﺔ ﻭﻣﺸﺎﻛﻞ ﺍﻟﻔﻬﻢ ﻭﺍﻟﺘﻨﻔﻴﺬ‬
‫‪75‬‬ ‫‪2.12‬ﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬

‫‪.‬ﺑﻤﺜﻞﻫﺬﺍ ﺍﻟﻤﺘﺒﺮﻉ ‪ ALGOL 68‬ﻟﺘﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ ﺑﻨﺎء ﻣﺘﺮﺟﻢ‪ .‬ﻟﻢ ﻳﺘﻤﺘﻊ ‪ IBM‬ﻛﺎﻥ ﻟﺪﻳﻪ ﻣﻮﺍﺭﺩ ‪/ I‬‬
‫‪ PL‬ﻛﺎﻥ ﺍﻟﺘﻨﻔﻴﺬ ﻣﺸﻜﻠﺔ ﺻﻌﺒﺔ ﻟﻜﻠﻴﻬﻤﺎ ‪ ،‬ﻭﻟﻜﻦ ‪ALGOL 68.‬‬

‫‪2.12‬ﺑﻌﺾ ﺍﻷﺣﻔﺎﺩ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬


‫ﺗﺪﻳﻦﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻹﻟﺰﺍﻣﻴﺔ ﺑﺒﻌﺾ ﺗﺼﻤﻴﻤﻬﺎ ﻟـ ‪ ALGOL 60‬ﻭ ‪ /‬ﺃﻭ ‪ .ALGOL 68‬ﻳﻨﺎﻗﺶ ﻫﺬﺍ‬
‫ﺍﻟﻘﺴﻢﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻟﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ‪.‬‬

‫‪2.12.1‬ﺍﻟﺒﺴﺎﻃﺔ ﺣﺴﺐ ﺍﻟﺘﺼﻤﻴﻢ‪ :‬ﺑﺎﺳﻜﺎﻝ‬

‫‪2.12.1.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻛﺎﻥﻧﻴﻜﻼﻭﺱ ﻭﻳﺮﺙ )ﻳﻄُﻠﻖ ﻋﻠﻰ ﻭﻳﺮﺙ "ﻓﻴﺮﺕ"( ﻋﻀﻮﺍً ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ‪ 2.1‬ﺍﻟﺘﺎﺑﻌﺔ‬
‫ﻟﻼﺗﺤﺎﺩﺍﻟﺪﻭﻟﻲ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ )‪ ، (IFIP‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻟﻤﻮﺍﺻﻠﺔ ﺗﻄﻮﻳﺮ ‪ ALGOL‬ﻓﻲ‬
‫ﻣﻨﺘﺼﻒﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪ .‬ﻓﻲ ﺃﻏﺴﻄﺲ ‪ ، 1965‬ﺳﺎﻫﻢ ‪") Wirth and CAR‬ﺗﻮﻧﻲ"( ‪ Hoare‬ﻓﻲ‬
‫ﻫﺬﺍﺍﻟﺠﻬﺪ ﻣﻦ ﺧﻼﻝ ﺗﻘﺪﻳﻢ ﺍﻗﺘﺮﺍﺡ ﻣﺘﻮﺍﺿﻊ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻹﺿﺎﻓﺎﺕ ﻭﺗﻌﺪﻳﻼﺕ ﻋﻠﻰ‬
‫‪) ALGOL60‬ﻭﻳﺮﺙ ﻭﻫﻮﺭ ‪ .(1966 ،‬ﺭﻓﻀﺖ ﻏﺎﻟﺒﻴﺔ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻻﻗﺘﺮﺍﺡ ﺑﺎﻋﺘﺒﺎﺭﻩ ﺗﺤﺴﻨﺎً ﺿﺉﻴﻼً‬
‫ﻟﻠﻐﺎﻳﺔﻣﻘﺎﺭﻧﺔ ﺑـ ‪ .ALGOL 60‬ﻭﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﻣﺮﺍﺟﻌﺔ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ‬
‫ﻓﻲﺍﻟﻨﻬﺎﻳﺔ ‪ .ALGOL 68‬ﻟﻢ ﻳﻌﺘﻘﺪ ﻭﻳﺮﺙ ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺃﻋﻀﺎء ﺍﻟﻤﺠﻤﻮﻋﺔ‬
‫ﺍﻵﺧﺮﻳﻦ ‪،‬ﺃﻥ ‪ ALGOL‬ﻛﺎﻥ ﻳﺠﺐ ﺇﺻﺪﺍﺭ ﺗﻘﺮﻳﺮ ‪ ، 68‬ﺑﻨﺎء ًﻋﻠﻰ ﺗﻌﻘﻴﺪ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻤﻌﺪﻧﻴﺔﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻮﺻﻔﻪ‪.‬‬

‫ﺗﻢﺗﺴﻤﻴﺔ ﺇﺻﺪﺍﺭ ‪ Wirth and Hoare‬ﻣﻦ ‪ ALGOL 60‬ﺑﺎﺳﻢ ‪ .ALGOL-W‬ﺗﻢ ﺗﻨﻔﻴﺬﻩ‬


‫ﻓﻲﺟﺎﻣﻌﺔ ﺳﺘﺎﻧﻔﻮﺭﺩ ﻭﺍﺳﺘﺨﺪﻡ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﻛﻮﺳﻴﻠﺔ ﺗﻌﻠﻴﻤﻴﺔ ‪ ،‬ﻭﻟﻜﻦ ﻓﻘﻂ ﻓﻲ ﻋﺪﺩ ﻗﻠﻴﻞ‬
‫ﻣﻦﺍﻟﺠﺎﻣﻌﺎﺕ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﺍﻷﻭﻟﻴﺔ ﻟـ ‪ ALGOL-W‬ﻫﻲ ﻃﺮﻳﻘﺔ ﻧﺘﻴﺠﺔ ﺍﻟﻘﻴﻤﺔ ﻟﺘﻤﺮﻳﺮ‬
‫ﺍﻟﻤﻌﻠﻤﺎﺕﻭﻗﻀﻴﺔ‬
‫ﺑﻴﺎﻥﻟﻼﺧﺘﻴﺎﺭ ﻣﻦ ﻣﺘﻌﺪﺩ‪ .‬ﻃﺮﻳﻘﺔ ﺍﻟﻘﻴﻤﺔ ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﺑﺪﻳﻞ ﻟﻄﺮﻳﻘﺔ ﺗﻤﺮﻳﺮ ﺍﻻﺳﻢ ﻣﻦ ‪60‬‬
‫‪ .ALGOL‬ﻛﻼﻫﻤﺎ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﻤﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .9‬ﻭ‬
‫ﻗﻀﻴﺔﺍﻟﺒﻴﺎﻥ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻪ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.8‬‬
‫ﻛﺎﻥﺟﻬﺪ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺮﺉﻴﺴﻲ ﺍﻟﺘﺎﻟﻲ ﻟﻮﻳﺮﺙ ‪ ،‬ﺍﻟﺬﻱ ﺍﻋﺘﻤﺪ ﻣﺮﺓ ﺃﺧﺮﻯ ﻋﻠﻰ ‪، ALGOL 60‬‬
‫ﻫﻮﺍﻷﻛﺜﺮ ﻧﺠﺎﺣﺎً‪ :‬ﺑﺎﺳﻜﺎﻝ‪10.‬ﻇﻬﺮ ﺍﻟﺘﻌﺮﻳﻒ ﺍﻷﺻﻠﻲ ﺍﻟﻤﻨﺸﻮﺭ ﻟﺒﺎﺳﻜﺎﻝ ﻓﻲ ﻋﺎﻡ ‪) 1971‬ﻭﻳﺮﺙ ‪،‬‬
‫‪ .(1971‬ﺗﻢ ﺗﻌﺪﻳﻞ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻭﺗﻢ ﻭﺻﻔﻪ ﻓﻲ (‪.Wirth )1973‬‬
‫ﺍﻟﻤﻴﺰﺍﺕﺍﻟﺘﻲ ﺗﻨُﺴﺐ ﻏﺎﻟﺒﺎً ﺇﻟﻰ ﺑﺎﺳﻜﺎﻝ ﺟﺎءﺕ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻣﻦ ﻟﻐﺎﺕ ﺳﺎﺑﻘﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺗﻢ ﺗﻘﺪﻳﻢ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ‪ ، ALGOL 68‬ﻭﻗﻀﻴﺔﺍﻟﺒﻴﺎﻥ‬
‫ﻓﻲ‪ ، ALGOL-W‬ﻭﺳﺠﻼﺕ ﺑﺎﺳﻜﺎﻝ ﻣﻤﺎﺛﻠﺔ ﻟﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺴﺠﻼﺕ ‪ COBOL‬ﻭ ‪.PL / I‬‬

‫‪.10‬ﺳﻤﻲ ﺑﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺍﺳﻢ ﺑﻠﻴﺰ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﻓﻴﻠﺴﻮﻑ ﻭﻋﺎﻟﻢ ﺭﻳﺎﺿﻴﺎﺕ ﻓﺮﻧﺴﻲ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﺴﺎﺑﻊ ﻋﺸﺮ ﺍﺧﺘﺮﻉ ﺃﻭﻝ ﺁﻟﺔ‬
‫ﺇﺿﺎﻓﺔﻣﻴﻜﺎﻧﻴﻜﻴﺔ ﻋﺎﻡ ‪) 1642‬ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ(‪.‬‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫ﺍﻟﻔﺼﻞ‪2‬‬ ‫‪76‬‬

‫‪2.12.1.2‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﺍﻟﺘﺄﺛﻴﺮ ﺍﻷﻛﺒﺮ ﻟﺒﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺗﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻓﻲ ﻋﺎﻡ ‪ ، 1970‬ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻌﻈﻢ ﻃﻼﺏ ﻋﻠﻮﻡ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻭﺍﻟﻬﻨﺪﺳﺔ ﻭﺍﻟﻌﻠﻮﻡ ﺇﻟﻰ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ‪ ، Fortran‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ‬
‫ﺍﻟﺠﺎﻣﻌﺎﺕﺍﺳﺘﺨﺪﻣﺖ ‪ ، PL / I‬ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ‪ ، PL / I‬ﻭ ‪ .ALGOL-W‬ﺑﺤﻠﻮﻝ‬
‫ﻣﻨﺘﺼﻒﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺃﺻﺒﺤﺖ ﺑﺎﺳﻜﺎﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﻃﺒﻴﻌﻴﺎً‬
‫ﺗﻤﺎﻣﺎً ‪،‬ﻷﻥ ‪ Pascal‬ﺻﻤُﻤﺖ ﺧﺼﻴﺼﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺣﺘﻰ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻟﻢ ﺗﻌﺪ‬
‫ﺑﺎﺳﻜﺎﻝﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﻭﺍﻟﺠﺎﻣﻌﺎﺕ‪.‬‬

‫ﻧﻈﺮﺍًﻟﺘﺼﻤﻴﻢ ﺑﺎﺳﻜﺎﻝ ﻛﻠﻐﺔ ﺗﺪﺭﻳﺲ ‪ ،‬ﻓﺈﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ‬
‫ﻟﻠﻌﺪﻳﺪﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪ .‬ﺃﻓﻀﻞ ﻣﺜﺎﻝ ﻋﻠﻰ ﺫﻟﻚ ﻫﻮ ﺍﺳﺘﺤﺎﻟﺔ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻳﺄﺧﺬ‬
‫ﻛﻤﻌﺎﻣﻞﺻﻔﻴﻒ ﻣﺘﻐﻴﺮ ﺍﻟﻄﻮﻝ‪ .‬ﻣﺜﺎﻝ ﺁﺧﺮ ﻫﻮ ﻋﺪﻡ ﻭﺟﻮﺩ ﺃﻱ ﻗﺪﺭﺓ ﺗﺠﻤﻴﻊ ﻣﻨﻔﺼﻠﺔ‪ .‬ﺃﺩﺕ ﻫﺬﻩ‬
‫ﺍﻟﻌﻴﻮﺏﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻬﺠﺎﺕ ﻏﻴﺮ ﺍﻟﻘﻴﺎﺳﻴﺔ ‪ ،‬ﻣﺜﻞ ‪.Turbo Pascal‬‬

‫ﺍﺳﺘﻨﺪﺕﺷﻌﺒﻴﺔ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﻓﻲ ﻛﻞ ﻣﻦ ﺗﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ ﻭﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﻓﻲ ﺍﻟﻤﻘﺎﻡ‬


‫ﺍﻷﻭﻝﺇﻟﻰ ﻣﺰﻳﺠﻬﺎ ﺍﻟﺮﺍﺉﻊ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺒﻴﺮﻳﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻭﺟﻮﺩ ﺑﻌﺾ ﺃﻭﺟﻪ ﻋﺪﻡ‬
‫ﺍﻷﻣﺎﻥﻓﻲ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﻟﻐﺔ ﺁﻣﻨﺔ ﻧﺴﺒﻴﺎً ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻋﻨﺪ ﻣﻘﺎﺭﻧﺘﻬﺎ ﺑـ ‪ Fortran‬ﺃﻭ ‪.C‬‬
‫ﺑﺤﻠﻮﻝﻣﻨﺘﺼﻒ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻛﺎﻧﺖ ﺷﻌﺒﻴﺔ ﺑﺎﺳﻜﺎﻝ ﻓﻲ ﺗﺮﺍﺟﻊ ‪ ،‬ﺳﻮﺍء ﻓﻲ ﺍﻟﺼﻨﺎﻋﺔ ﺃﻭ ﻓﻲ‬
‫ﺍﻟﺠﺎﻣﻌﺎﺕ ‪،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﻇﻬﻮﺭ ‪ Modula-2‬ﻭ ‪ Ada‬ﻭ ‪ ، ++ C‬ﻭﺍﻟﺘﻲ ﺗﻀﻤﻨﺖ‬
‫ﺟﻤﻴﻌﻬﺎﻣﻴﺰﺍﺕ ﻏﻴﺮ ﻣﺘﻮﻓﺮﺓ ﻓﻲ ﺑﺎﺳﻜﺎﻝ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ﺑﺎﺳﻜﺎﻝ‪:‬‬

‫‪Example Program Input:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬ ‫‪}Pascal‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ{ ﺑﺮﻧﺎﻣﺞ؛ (ﺍﻟﻤﺪﺧﻼﺕ‬
‫ﻭﺍﻟﻤﺨﺮﺟﺎﺕ) ‪pasex‬‬
‫ﻳﻜﺘﺐ= ‪intlisttype‬ﻣﺠﻤﻮﻋﺔ ﻣﺼﻔﻮﻓﺔ]‪[99..1‬ﻝﻋﺪﺩ ﺻﺤﻴﺢ؛ ﻓﺎﺭ‬

‫؛‪intlisttype: intlisttype‬‬
‫ﺍﻟﻌﺪﺍﺩ ‪،‬ﺍﻟﻤﺠﻤﻮﻉ ‪ ،‬ﺍﻟﻤﺘﻮﺳﻂ ‪ ،‬ﺍﻟﻨﺘﻴﺠﺔ‪ :‬ﻋﺪﺩ ﺻﺤﻴﺢ ؛ ‪ listlen ،‬ﻳﺒﺪﺃ‬

‫ﺍﻟﻨﺘﻴﺠﺔ‪ 0 =:‬؛‬
‫ﺍﻟﻤﺠﻤﻮﻉ‪ 0 =:‬؛‬
‫؛ (‪readln )listlen‬‬
‫ﻟﻮ))(‪listlen< 0‬ﻭ)((‪listlen >100‬ﺛﻢ‬
‫ﻳﺒﺪﺃ‬
‫}ﺍﻗﺮﺃ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺍﺣﺴﺐ ﺍﻟﻤﺠﻤﻮﻉ{‬
‫ﻝﺍﻟﻌﺪﺍﺩ‪1 = :‬ﻝ‪listlen‬ﻳﻔﻌﻞ‬
‫ﻳﺒﺪﺃ‬
‫[‪: = sum + intlist ]counter‬؛ ﺍﻟﻤﺠﻤﻮﻉ ([ﻋﺪﺍﺩ‬
‫] ‪ readln )intlist‬ﻧﻬﺎﻳﺔ؛‬
‫‪77‬‬ ‫‪2.12‬ﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬

‫}ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ{‬
‫ﺍﻟﻤﺘﻮﺳﻂ‪ sum / listlen =:‬؛‬
‫}ﺣﺴﺎﺏ ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ{‬
‫ﻝﺍﻟﻌﺪﺍﺩ‪1 = :‬ﻝ‪listlen‬ﻳﻔﻌﻞ‬
‫ﻟﻮ)(ﻣﺘﻮﺳﻂ <[ﻋﺪﺍﺩ] ‪intlist‬ﺛﻢ‬
‫ﺍﻟﻨﺘﻴﺠﺔ‪ =:‬ﻧﺘﻴﺠﺔ ‪ 1 +‬؛ }ﻃﺒﺎﻋﺔ‬
‫ﺍﻟﻨﺘﻴﺠﺔ{‬
‫‪:"،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪writeln‬‬
‫ﻧﺘﻴﺠﺔ(‬
‫ﻧﻬﺎﻳﺔ}ﻣﻦ ﻋﺒﺎﺭﺓ ﺛﻢ ﺇﺫﺍ ))‪ {... listlen< 0‬ﺁﺧﺮ‬

‫("ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ") ‪writeln‬‬


‫ﻧﻬﺎﻳﺔ‪.‬‬

‫‪2.12.2‬ﻟﻐﺔ ﺃﻧﻈﻤﺔ ﻣﺤﻤﻮﻟﺔ‪ :‬ﺝ‬


‫ﻣﺜﻞﺑﺎﺳﻜﺎﻝ ‪ ،‬ﺳﺎﻫﻤﺖ ﻟﻐﺔ ‪ C‬ﻗﻠﻴﻼ ًﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻌﺮﻭﻓﺔ ﺳﺎﺑﻘﺎً ‪ ،‬ﻟﻜﻨﻬﺎ‬
‫ﺍﺳﺘﺨﺪﻣﺖﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻋﻠﻰ ﻣﺪﻯ ﻓﺘﺮﺓ ﻃﻮﻳﻠﺔ ﻣﻦ ﺍﻟﺰﻣﻦ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪C‬‬
‫ﻣﺼﻤﻤﺔﻓﻲ ﺍﻷﺻﻞ ﻟﺒﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻣﻨﺎﺳﺒﺔ ﺗﻤﺎﻣﺎً ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪.‬‬

‫‪2.12.2.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﺃﺳﻼﻑ‪ C‬ﺗﺸﻤﻞ ‪ CPL‬ﻭ ‪ BCPL‬ﻭ ‪ B‬ﻭ ‪ .ALGOL 68‬ﺗﻢ ﺗﻄﻮﻳﺮ ‪ CPL‬ﻓﻲ ﺟﺎﻣﻌﺔ ﻛﺎﻣﺒﺮﻳﺪﺝ ﻓﻲ‬
‫ﺃﻭﺍﺉﻞﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪ BCPL .‬ﻫﻲ ﻟﻐﺔ ﺃﻧﻈﻤﺔ ﺑﺴﻴﻄﺔ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﺃﻳﻀﺎً ﻓﻲ ﻛﺎﻣﺒﺮﻳﺪﺝ ‪ ،‬ﻫﺬﻩ‬
‫ﺍﻟﻤﺮﺓﺑﻮﺍﺳﻄﺔ ‪ Martin Richards‬ﻓﻲ ﻋﺎﻡ ‪.(Richards ، 1969) 1967‬‬

‫ﺗﻢﺗﻨﻔﻴﺬ ﺃﻭﻝ ﻋﻤﻞ ﻋﻠﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ UNIX‬ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﺑﻮﺍﺳﻄﺔ ﻛﻴﻦ‬
‫ﻃﻮﻣﺴﻮﻥﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ‪ .‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﺑﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺃﻭﻝ ﻟﻐﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺗﺤﺖ ‪ UNIX‬ﻛﺎﻧﺖ ‪ ، B‬ﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻣﺒﻨﻴﺔ ﻋﻠﻰ ‪ .BCPL‬ﺗﻢ ﺗﺼﻤﻴﻢ‬
‫ﻭﺗﻨﻔﻴﺬ‪ B‬ﺑﻮﺍﺳﻄﺔ ‪ Thompson‬ﻓﻲ ﻋﺎﻡ ‪.1970‬‬
‫ﻻﺗﻌُﺪ ‪ BCPL‬ﻭﻻ ‪ B‬ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﻏﺮﻳﺐ ﺑﻴﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﻋﻠﻰ‬
‫ﺍﻟﺮﻏﻢﻣﻦ ﺃﻥ ﻛﻼﻫﻤﺎ ﺃﻗﻞ ﻣﺴﺘﻮﻯ ﺑﻜﺜﻴﺮ ﻣﻦ ﻟﻐﺔ ﻣﺜﻞ ‪ .Java‬ﻋﺪﻡ ﺍﻟﻜﺘﺎﺑﺔ ﻳﻌﻨﻲ ﺃﻥ ﺟﻤﻴﻊ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﺗﻌﺘﺒﺮ ﻛﻠﻤﺎﺕ ﺁﻟﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺑﺴﺎﻃﺘﻬﺎ ‪ ،‬ﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺍﻟﺘﻌﻘﻴﺪﺍﺕﻭﻋﺪﻡ ﺍﻷﻣﺎﻥ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻫﻨﺎﻙ ﻣﺸﻜﻠﺔ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﻟﺤﺴﺎﺏﺍﻟﺼﺤﻴﺢ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ‪ .‬ﻓﻲ ﺃﺣﺪ ﺗﻄﺒﻴﻘﺎﺕ ‪ ، BCPL‬ﻛﺎﻧﺖ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻤﺘﻐﻴﺮﺓ ﻟﻌﻤﻠﻴﺔ‬
‫ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ ﻣﺴﺒﻮﻗﺔ ﺑﻔﺘﺮﺍﺕ‪ .‬ﺗﻢ ﺍﻋﺘﺒﺎﺭ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻤﺘﻐﻴﺮﺓ ﺍﻟﺘﻲ ﻻ ﺗﺴﺒﻘﻬﺎ ﻓﺘﺮﺍﺕ‬
‫ﺃﻋﺪﺍﺩﺍًﺻﺤﻴﺤﺔ‪ .‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺒﺪﻳﻞ ﻋﻦ ﺫﻟﻚ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺭﻣﻮﺯ ﻣﺨﺘﻠﻔﺔ‬
‫ﻟﻤﺸﻐﻠﻲﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪.‬‬

‫ﺃﺩﺕﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﺇﻟﻰ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ‬
‫ﺟﺪﻳﺪﺓﺑﻨﺎء ًﻋﻠﻰ ‪ .B‬ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﻓﻲ ﺍﻷﺻﻞ ‪ NB‬ﻭﻟﻜﻦ ﺳﻤﻴﺖ ﻻﺣﻘﺎً ‪ ، C‬ﻭﻗﺪ ﺻﻤﻤﻬﺎ ﻭﻧﻔﺬﻫﺎ‬
‫‪ Dennis Ritchie‬ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ‪ Bell‬ﻓﻲ ﻋﺎﻡ ‪.(Kernighan and Ritchie ، 1978) 1972‬‬
‫ﻓﻲﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ﻣﻦ ﺧﻼﻝ ‪ ، BCPL‬ﻭﻓﻲ ﺣﺎﻻﺕ ﺃﺧﺮﻯ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ‪ ،‬ﺗﺄﺛﺮ ‪ C‬ﺑـ ‪ALGOL 68‬‬
‫‪.‬ﻳﻈﻬﺮ ﻫﺬﺍ ﻓﻲﻝ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪78‬‬

‫ﻭﻳﺤُﻮﻝّﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻓﻲ ﺗﺤﺪﻳﺪ ﻋﻮﺍﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻭﻓﻲ ﻣﻌﺎﻟﺠﺘﻬﺎ ﻟﻠﻤﺆﺷﺮﺍﺕ‪.‬‬

‫ﻛﺎﻥ"ﺍﻟﻤﻌﻴﺎﺭ" ﺍﻟﻮﺣﻴﺪ ﻟﻠﻐﺔ ‪ C‬ﻓﻲ ﺃﻭﻝ ﻋﻘﺪ ﻭﻧﺼﻒ ﻫﻮ ﻛﺘﺎﺏ (‪and Ritchie )1978‬‬
‫‪11.Kernighan‬ﺧﻼﻝ ﺗﻠﻚ ﺍﻟﻔﺘﺮﺓ ﺍﻟﺰﻣﻨﻴﺔ ‪ ،‬ﺗﻄﻮﺭﺕ ﺍﻟﻠﻐﺔ ﺑﺒﻂء ‪ ،‬ﺣﻴﺚ ﺃﺿﺎﻑ ﺍﻟﻤﻨﻔﺬﻭﻥ‬
‫ﺍﻟﻤﺨﺘﻠﻔﻮﻥﻣﻴﺰﺍﺕ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻓﻲ ﻋﺎﻡ ‪ ، 1989‬ﺃﻧﺘﺠﺖ ‪ ANSI‬ﻭﺻﻔﺎً ﺭﺳﻤﻴﺎً ﻟـ (‪C )ANSI ، 1989‬‬
‫‪،‬ﻭﺍﻟﺬﻱ ﺗﻀﻤﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﺃﺩﺭﺟﻬﺎ ﺍﻟﻤﻨﻔﺬﻭﻥ ﺑﺎﻟﻔﻌﻞ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻢ ﺗﺤﺪﻳﺚ ﻫﺬﺍ‬
‫ﺍﻟﻤﻌﻴﺎﺭﻓﻲ ﻋﺎﻡ ‪ .(ISO ، 1999) 1999‬ﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻷﺣﺪﺙ ﺑﻌﺾ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻤﻬﻤﺔ‬
‫ﻓﻲﺍﻟﻠﻐﺔ‪ .‬ﻣﻦ ﺑﻴﻨﻬﺎ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻣﻌﻘﺪ ﻭﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻣﻨﻄﻘﻴﺔ ﻭﺗﻌﻠﻴﻘﺎﺕ ﻧﻤﻂ ‪ .(//) ++ C‬ﺳﻮﻑ‬
‫ﻧﺸﻴﺮﺇﻟﻰ ﺇﺻﺪﺍﺭ ‪ ، 1989‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻄُﻠﻖ ﻋﻠﻴﻪ ﻣﻨﺬ ﻓﺘﺮﺓ ﻃﻮﻳﻠﺔ ‪ ، ANSI C‬ﺑﺎﺳﻢ ‪ C89‬؛‬
‫ﺳﻮﻑﻧﺸﻴﺮ ﺇﻟﻰ ﺇﺻﺪﺍﺭ ‪ 1999‬ﺑﺎﺳﻢ ‪.C99‬‬

‫‪2.12.2.2‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﺤﺘﻮﻱ‪ C‬ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﻛﺎﻓﻴﺔ ﻭﻣﺮﺍﻓﻖ ﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻠﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ‪ .‬ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﻣﺠﻤﻮﻋﺔ ﻏﻨﻴﺔ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻟﺬﻳﻦ ﻳﻮﻓﺮﻭﻥ ﺩﺭﺟﺔ ﻋﺎﻟﻴﺔ‬
‫ﻣﻦﺍﻟﺘﻌﺒﻴﺮﻳﺔ‪.‬‬
‫ﺃﺣﺪﺃﻫﻢ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺘﻲ ﺗﺠﻌﻞ ‪ C‬ﻣﺤﺒﻮﺑﺎً ﻭﻏﻴﺮ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ﻫﻮ ﺍﻓﺘﻘﺎﺭﻩ ﺇﻟﻰ ﺍﻟﺘﺤﻘﻖ ﺍﻟﻜﺎﻣﻞ‬
‫ﻣﻦﺍﻟﻨﻮﻉ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﺍﻹﺻﺪﺍﺭﺍﺕ ﻗﺒﻞ ‪ ، C99‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ‬
‫ﺍﻟﺘﺤﻘﻖﻣﻦ ﻧﻮﻉ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪ .‬ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺤﺒﻮﻥ ‪ C‬ﻳﻘﺪﺭﻭﻥ ﺍﻟﻤﺮﻭﻧﺔ ؛ ﺃﻭﻟﺉﻚ‬
‫ﺍﻟﺬﻳﻦﻻ ﻳﺤﺒﻮﻧﻪ ﻳﺠﺪﻭﻧﻬﺎ ﻏﻴﺮ ﺁﻣﻨﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻛﺎﻥ ﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﺰﻳﺎﺩﺓ ﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ‬
‫ﺷﻌﺒﻴﺘﻬﺎﻓﻲ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻫﻮ ﺃﻥ ﻣﺘﺮﺟﻤﻬﺎ ﻛﺎﻥ ﺟﺰءﺍً ﻣﻦ ﻧﻈﺎﻡ ﺗﺸﻐﻴﻞ ‪ UNIX‬ﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﻠﻰ‬
‫ﻧﻄﺎﻕﻭﺍﺳﻊ‪ .‬ﻗﺪﻡ ﻫﺬﺍ ﺍﻟﺘﻀﻤﻴﻦ ﻓﻲ ‪ UNIX‬ﻣﺘﺮﺟﻤﺎً ﻣﺠﺎﻧﻴﺎً ﻭﺟﻴﺪﺍً ﺟﺪﺍً ﻛﺎﻥ ﻣﺘﺎﺣﺎً ﻟﻠﻤﺒﺮﻣﺠﻴﻦ‬
‫ﻋﻠﻰﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ﺳﻲ‪:‬‬

‫‪:‬ﻣﺜﺎﻝﻋﻠﻰ ﺇﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪/ * C‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ * ‪int /‬ﺭﺉﻴﺴﻲ )(}‬

‫‪int‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ؛ ﺍﻟﻤﺠﻤﻮﻉ = ‪ 0‬؛ ‪intlist ]99[ ، listlen ،‬‬

‫ﺍﻟﻨﺘﻴﺠﺔ= ‪ 0‬؛‬
‫؛ (‪scanf )"٪ d" ، & listlen‬‬
‫ﻟﻮ))} ((‪listlen< 0( && )listlen >100‬‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫؛ [ﻋﺪﺍﺩ] ‪ + = intlist‬؛ ﻣﺠﻤﻮﻉ ([ﻋﺪﺍﺩ] ‪d" ، & intlist‬‬
‫‪scanf )"٪‬‬
‫{‬

‫‪.11‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺸُﺎﺭ ﺇﻟﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺎﺳﻢ "‪".K & R C‬‬


‫‪79‬‬ ‫‪2.13‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻤﻨﻄﻖ‪Prolog :‬‬

‫‪ * /‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬


‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listlen‬؛‬
‫‪ * /‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)‪ * /‬ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ ‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ <[ﻋﺪﺍﺩ] ‪intlist‬‬

‫؛ (ﺍﻟﻨﺘﻴﺠﺔ ‪:٪ d \ n" ،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪printf‬‬


‫{‬
‫ﺁﺧﺮ‬
‫؛ ("‪ \ n‬ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻟﻴﺲ ﻗﺎﻧﻮﻧﻴﺎً") ‪printf‬‬
‫{‬

‫‪2.13‬ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ ﺍﻟﻤﻨﻄﻖ‪ :‬ﺑﺮﻭﻟﻮﺝ‬


‫ﺑﺒﺴﺎﻃﺔ ‪،‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺪﻭﻳﻦ ﻣﻨﻄﻘﻲ ﺭﺳﻤﻲ ﻟﺘﻮﺻﻴﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﻟﺤﺴﺎﺑﻴﺔﺇﻟﻰ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ‪ .‬ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ ﻫﻮ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ‬
‫ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺤﺎﻟﻴﺔ‪.‬‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻏﻴﺮ ﺇﺟﺮﺍﺉﻴﺔ‪ .‬ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ ﻻ ﺗﺬﻛﺮ ﺑﺎﻟﻀﺒﻂ‬
‫ﻛﻴﻒﺍﻟﻨﺘﻴﺠﺔ ﻳﺠﺐ ﺣﺴﺎﺑﻬﺎ ﻭﻟﻜﻦ ﺑﺎﻷﺣﺮﻯ ﺗﺼﻒ ﺍﻟﺸﻜﻞ ﻭ ‪ /‬ﺃﻭ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻀﺮﻭﺭﻳﺔ‬
‫ﻟﻠﻨﺘﻴﺠﺔ‪.‬ﻣﺎ ﻫﻮ ﻣﻄﻠﻮﺏ ﻟﺘﻮﻓﻴﺮ ﻫﺬﻩ ﺍﻹﻣﻜﺎﻧﻴﺔ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻮ ﻭﺳﻴﻠﺔ ﻣﻮﺟﺰﺓ‬
‫ﻟﺘﺰﻭﻳﺪﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﻜﻞ ﻣﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ ﻭﻋﻤﻠﻴﺔ ﺍﻻﺳﺘﻨﺘﺎﺝ ﻟﺤﺴﺎﺏ ﺍﻟﻨﺘﺎﺉﺞ‬
‫ﺍﻟﻤﺮﻏﻮﺑﺔ‪.‬ﻳﻮﻓﺮ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺸﻜﻞ ﺍﻷﺳﺎﺳﻲ ﻟﻼﺗﺼﺎﻝ ﺑﺎﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﻭﺗﻮﻓﺮﻃﺮﻳﻘﺔ ﺍﻹﺛﺒﺎﺕ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ﺍﻟﺪﻗﺔ ‪ ،‬ﺍﻟﺘﻲ ﻃﻮﺭﻫﺎ ﺭﻭﺑﻨﺴﻮﻥ )‪ (1965‬ﺃﻭﻻ ً‪ ،‬ﺗﻘﻨﻴﺔ ﺍﻻﺳﺘﻨﺘﺎﺝ‪.‬‬

‫‪2.13.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺧﻼﻝﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻃﻮﺭ ﺁﻻﻥ ﻛﻮﻟﻤﺮﻭﺭ ﻭﻓﻴﻠﻴﺐ ﺭﻭﺳﻴﻞ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲﺑﺠﺎﻣﻌﺔ ﺇﻳﻜﺲ ﻣﺮﺳﻴﻠﻴﺎ ‪ ،‬ﻣﻊ ﺭﻭﺑﺮﺕ ﻛﻮﺍﻟﺴﻜﻲ ﻣﻦ ﻗﺴﻢ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ‬
‫ﺑﺠﺎﻣﻌﺔﺇﺩﻧﺒﺮﺓ ‪ ،‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻲ ﻟـ ‪ .Prolog‬ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺒﺮﻧﺎﻣﺞ ‪ Prolog‬ﻫﻲ‬
‫ﻃﺮﻳﻘﺔﻟﺘﺤﺪﻳﺪ ﻣﻘﺘﺮﺣﺎﺕ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻴﺔ ﻭﺗﻨﻔﻴﺬ ﺷﻜﻞ ﻣﻘﻴﺪ ﻣﻦ ﺍﻟﺪﻗﺔ‪.‬‬
‫ﺗﻢﻭﺻﻒ ﻛﻞ ﻣﻦ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ ﻭﺍﻟﻘﺮﺍﺭ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .16‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ‬
‫ﻣﺘﺮﺟﻢ‪ Prolog‬ﻓﻲ ﻣﺮﺳﻴﻠﻴﺎ ﻓﻲ ﻋﺎﻡ ‪ .1972‬ﻧﺴﺨﺔ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﺒﻴﻘﻬﺎ ﻣﻮﺻﻮﻓﺔ ﻓﻲ‬
‫ﺭﻭﺳﻴﻞ)‪ .(1975‬ﺍﺳﻢ ‪ Prolog‬ﻣﻦﻃﻠﻴﻌﺔﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔﺳﺠﻞﺟﻴﻢ‪.‬‬

‫‪2.13.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﺗﺘﻜﻮﻥﺑﺮﺍﻣﺞ ‪ Prolog‬ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻳﺤﺘﻮﻱ ‪ Prolog‬ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻗﻠﻴﻠﺔ ﻓﻘﻂ ﻣﻦ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕ ‪،‬ﻟﻜﻨﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﻌﻘﺪﺓ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪80‬‬

‫ﺃﺣﺪﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﺸﺎﺉﻌﺔ ﻟـ ‪ Prolog‬ﻫﻮ ﻛﻨﻮﻉ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺬﻛﻴﺔ‪ .‬ﻳﻮﻓﺮ ﻫﺬﺍ‬


‫ﺍﻟﺘﻄﺒﻴﻖﺇﻃﺎﺭﺍً ﺑﺴﻴﻄﺎً ﻟﻤﻨﺎﻗﺸﺔ ﻟﻐﺔ ‪.Prolog‬‬
‫ﺗﺘﻜﻮﻥﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﺑﺮﻧﺎﻣﺞ ‪ Prolog‬ﻣﻦ ﻧﻮﻋﻴﻦ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﺤﻘﺎﺉﻖ ﻭﺍﻟﻘﻮﺍﻋﺪ‪ .‬ﻓﻴﻤﺎ‬
‫ﻳﻠﻲﺃﻣﺜﻠﺔ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺤﻘﺎﺉﻖ‪:‬‬

‫ﺍﻷﻡ)ﺟﻮﺍﻥ ‪ ،‬ﺟﻴﻚ(‪.‬‬
‫ﺍﻷﺏ)ﻓﻴﺮﻥ ‪ ،‬ﺟﻮﺍﻥ(‪.‬‬

‫ﻫﺬﻩﺗﻨﺺ ﻋﻠﻰ ﺫﻟﻚﺟﻮﺍﻥﻫﻞﺍﻷﻡﻝﺟﻴﻚﻭﻓﻴﺮﻥﻫﻞﺃﺏﻝ‬


‫ﺟﻮﺍﻥ‪.‬‬
‫ﻣﺜﺎﻝﻋﻠﻰ ﺑﻴﺎﻥ ﺍﻟﻘﺎﻋﺪﺓ‬

‫ﺍﻟﺠﺪ)‪ - :(X، Z‬ﺍﻷﺏ )‪ ،(X، Y‬ﺍﻷﺏ )‪.(Y، Z‬‬

‫ﻫﺬﺍﻳﻨﺺ ﻋﻠﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﺳﺘﻨﺘﺎﺝ ﺫﻟﻚ‪X‬ﻫﻞﺍﻟﺠﺪﻝﺽﺇﺫﺍ ﻛﺎﻥ ﻫﺬﺍ ﺻﺤﻴﺤﺎً‪X‬ﻫﻞﺍﻷﺑﻮﻳﻦﻝﺹﻭﺹ‬


‫ﻫﻮﻭﺍﻟﺪ‪Z ،‬ﻟﺒﻌﺾ ﺍﻟﻘﻴﻢ ﺍﻟﻤﺤﺪﺩﺓ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ‪X ، Y ،‬ﻭ‪Z.‬‬

‫ﻳﻤﻜﻦﺍﻻﺳﺘﻌﻼﻡ ﻋﻦ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ‪ Prolog‬ﺑﺸﻜﻞ ﺗﻔﺎﻋﻠﻲ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻬﺪﻑ ‪،‬‬


‫ﻭﻣﺜﺎﻝﻋﻠﻰ ﺫﻟﻚ‬

‫ﺍﻷﺏ)ﺑﻮﺏ ‪ ،‬ﺩﺍﺭﺳﻲ(‪.‬‬

‫ﻫﺬﺍﻳﺴﺄﻝ ﺇﺫﺍﺑﻮﺏﻫﻞﺃﺏﻝﺩﺍﺭﺳﻲ‪.‬ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻣﺜﻞ ﻫﺬﺍ ﺍﻻﺳﺘﻌﻼﻡ ﺃﻭ ﺍﻟﻬﺪﻑ ﺇﻟﻰ ﻧﻈﺎﻡ‬
‫‪ ، Prolog‬ﻓﺈﻧﻪ ﻳﺴﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺣﻠﻪ ﻟﻤﺤﺎﻭﻟﺔ ﺗﺤﺪﻳﺪ ﺣﻘﻴﻘﺔ ﺍﻟﺒﻴﺎﻥ‪ .‬ﺇﺫﺍ ﺍﺳﺘﻨﺘﺞ ﺃﻥ ﺍﻟﻬﺪﻑ‬
‫ﺻﺤﻴﺢ ‪،‬ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺻﺤﻴﺢ"‪ .‬ﺇﺫﺍ ﻟﻢ ﻳﺘﻤﻜﻦ ﻣﻦ ﺇﺛﺒﺎﺕ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺧﻄﺄ"‪.‬‬

‫‪2.13.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻓﻲﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺬﻳﻦ ﺍﻋﺘﻘﺪﻭﺍ ﺃﻥ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻨﻄﻘﻴﺔ ﺗﻮﻓﺮ ﺃﻓﻀﻞ ﺃﻣﻞ ﻟﻠﻬﺮﻭﺏ ﻣﻦ ﺗﻌﻘﻴﺪ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ‪ ،‬ﻭﻛﺬﻟﻚ ﻣﻦ ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﺍﻟﻬﺎﺉﻠﺔﺍﻟﻤﺘﻤﺜﻠﺔ ﻓﻲ ﺇﻧﺘﺎﺝ ﻛﻤﻴﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺛﻮﻗﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺣﺘﻰ ﺍﻵﻥ ‪،‬‬
‫ﻫﻨﺎﻙﺳﺒﺒﺎﻥ ﺭﺉﻴﺴﻴﺎﻥ ﻟﻌﺪﻡ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺃﻭﻻ ً‪ ،‬ﻛﻤﺎ ﻫﻮ‬
‫ﺍﻟﺤﺎﻝﻣﻊ ﺑﻌﺾ ﺍﻟﻤﻨﺎﻫﺞ ﻏﻴﺮ ﺍﻹﺟﺮﺍﺉﻴﺔ ﺍﻷﺧﺮﻯ ‪ ،‬ﺃﺛﺒﺘﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﺍﻟﻤﻨﻄﻖ ﺣﺘﻰ‬
‫ﺍﻵﻥﺃﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺑﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻟﻤﻜﺎﻓﺉﺔ‪ .‬ﺛﺎﻧﻴﺎً ‪ ،‬ﺗﻢ ﺗﺤﺪﻳﺪ ﺃﻧﻪ‬
‫ﻧﻬﺞﻓﻌﺎﻝ ﻟﻌﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺼﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً‪ :‬ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ‬
‫ﻗﻮﺍﻋﺪﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺑﻌﺾ ﻣﺠﺎﻻﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ‪.‬‬

‫ﻫﻨﺎﻙﻟﻬﺠﺔ ﻣﻦ ‪ Prolog‬ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪ .Prolog ++ )Moss ، 1994( -‬ﺗﻢ‬


‫ﻭﺻﻒﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻭ ‪ Prolog‬ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.16‬‬
‫‪81‬‬ ‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬

‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬


‫ﻟﻐﺔ‪ Ada‬ﻫﻲ ﻧﺘﻴﺠﺔ ﺟﻬﻮﺩ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺷﻤﻮﻻ ًﻭﺗﻜﻠﻔﺔ ﻋﻠﻰ ﺍﻹﻃﻼﻕ‪ .‬ﺗﺼﻒ ﺍﻟﻔﻘﺮﺍﺕ‬
‫ﺍﻟﺘﺎﻟﻴﺔﺑﺈﻳﺠﺎﺯ ﺗﻄﻮﺭ ‪.Ada‬‬

‫‪2.14.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﻟﻐﺔ ‪ Ada‬ﻟﻮﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ )‪ ، (DoD‬ﻟﺬﻟﻚ ﻛﺎﻧﺖ ﺣﺎﻟﺔ ﺑﻴﺉﺔ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﻢ ﻣﻔﻴﺪﺓ‬
‫ﻓﻲﺗﺤﺪﻳﺪ ﺷﻜﻠﻬﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻋﺎﻡ ‪ ، 1974‬ﻛﺎﻥ ﺃﻛﺜﺮ ﻣﻦ ﻧﺼﻒ ﺗﻄﺒﻴﻘﺎﺕ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ‬
‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ﺃﻧﻈﻤﺔ ﻣﺪﻣﺠﺔ‪ .‬ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻀﻤﻦ ﻫﻮ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺬﻱ ﻳﺘﻢ ﻓﻴﻪ ﺗﻀﻤﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﻓﻲﺍﻟﺠﻬﺎﺯ ﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ ﻓﻴﻪ ﺃﻭ ﺍﻟﺬﻱ ﻳﻘﺪﻡ ﺧﺪﻣﺎﺕ ﻟﻪ‪ .‬ﻛﺎﻧﺖ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺗﺮﺗﻔﻊ‬
‫ﺑﺴﺮﻋﺔ ‪،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ ﺍﻟﻤﺘﺰﺍﻳﺪ ﻟﻸﻧﻈﻤﺔ‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﻦ‬
‫‪450‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺨﺘﻠﻔﺔ ﻟﻤﺸﺎﺭﻳﻊ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ ،‬ﻭﻟﻢ ﻳﺘﻢ ﺗﻮﺣﻴﺪ ﺃﻱ ﻣﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ‪.‬‬
‫ﻳﻤﻜﻦﻟﻜﻞ ﻣﻘﺎﻭﻝ ﺩﻓﺎﻉ ﺗﺤﺪﻳﺪ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﻭﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻋﻘﺪ‪12.‬ﺑﺴﺒﺐ ﺍﻧﺘﺸﺎﺭ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ‪،‬‬
‫ﻧﺎﺩﺭﺍًﻣﺎ ﻳﺘﻢ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺇﻧﺸﺎء ﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ‬
‫ﺑﺮﻣﺠﻴﺎﺕ)ﻷﻧﻬﺎ ﻋﺎﺩﺓ ﻣﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻠﻐﺔ(‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻭﻟﻜﻦ ﻟﻢ ﻳﻜﻦ ﺃﻱ‬
‫ﻣﻨﻬﺎﻣﻨﺎﺳﺒﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﻀﻤﻨﺔ‪ .‬ﻟﻬﺬﻩ ﺍﻷﺳﺒﺎﺏ ‪ ،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1974‬ﺍﻗﺘﺮﺡ ﻛﻞ ﻣﻦ‬
‫ﺍﻟﺠﻴﺶﻭﺍﻟﺒﺤﺮﻳﺔ ﻭﺍﻟﻘﻮﺍﺕ ﺍﻟﺠﻮﻳﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻸﻧﻈﻤﺔ‬
‫ﺍﻟﻤﺪﻣﺠﺔ‪.‬‬

‫‪2.14.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻣﻊﻣﻼﺣﻈﺔ ﻫﺬﺍ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻮﺍﺳﻊ ‪ ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪ ، 1975‬ﺷﻜﻞ ﻣﺎﻟﻜﻮﻟﻢ ﻛﻮﺭﻱ ‪ ،‬ﻣﺪﻳﺮ ﺃﺑﺤﺎﺙ ﺍﻟﺪﻓﺎﻉ‬
‫ﻭﺍﻟﻬﻨﺪﺳﺔ ‪،‬ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ﺍﻟﻠﻐﻮﻳﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ )‪ ، (HOLWG‬ﺑﺮﺉﺎﺳﺔ ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ‬
‫ﺍﻟﻠﻔﺘﻨﺎﻧﺖﻛﻮﻟﻮﻧﻴﻞ ﻭﻳﻠﻴﺎﻡ ﻭﻳﺘﺎﻛﺮ ﻣﻦ ﺳﻼﺡ ﺍﻟﺠﻮ‪ .‬ﻛﺎﻥ ﻟﺪﻯ ‪ HOLWG‬ﻣﻤﺜﻠﻴﻦ ﻣﻦ ﺟﻤﻴﻊ‬
‫ﺍﻟﺨﺪﻣﺎﺕﺍﻟﻌﺴﻜﺮﻳﺔ ﻭﺍﻟﻌﻼﻗﺎﺕ ﻣﻊ ﺑﺮﻳﻄﺎﻧﻴﺎ ﺍﻟﻌﻈﻤﻰ ﻭﻓﺮﻧﺴﺎ ﻭﻣﺎ ﻛﺎﻥ ﻳﻌﺮﻑ ﺁﻧﺬﺍﻙ ﺑﺄﻟﻤﺎﻧﻴﺎ‬
‫ﺍﻟﻐﺮﺑﻴﺔ‪.‬ﻛﺎﻥ ﻣﻴﺜﺎﻗﻬﺎ ﺍﻷﻭﻟﻲ ﻫﻮ ﺍﻟﻘﻴﺎﻡ ﺑﻤﺎ ﻳﻠﻲ‪:‬‬

‫• ﺗﺤﺪﻳﺪ ﻣﺘﻄﻠﺒﺎﺕ ﻟﻐﺔ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﺍﻟﺠﺪﻳﺪﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬


‫• ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻫﻨﺎﻙ ﻣﺮﺷﺢ ﻗﺎﺑﻞ ﻟﻠﺘﻄﺒﻴﻖ‪.‬‬

‫• ﺍﻟﺘﻮﺻﻴﺔ ﺑﺎﻋﺘﻤﺎﺩ ﺃﻭ ﺗﻨﻔﻴﺬ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻓﻲﺃﺑﺮﻳﻞ ‪ ، 1975‬ﺃﻧﺘﺠﺖ ‪ HOLWG‬ﻭﺛﻴﻘﺔ ﻣﺘﻄﻠﺒﺎﺕ ‪ Strawman‬ﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ )ﻭﺯﺍﺭﺓ‬


‫ﺍﻟﺪﻓﺎﻉ ‪ 1975،‬ﺃ(‪ .‬ﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻋﻠﻰ ﺍﻟﻔﺮﻭﻉ ﺍﻟﻌﺴﻜﺮﻳﺔ ﻭﺍﻟﻮﻛﺎﻻﺕ ﺍﻟﻔﻴﺪﺭﺍﻟﻴﺔ ﻭﻣﻤﺜﻠﻲ ﺍﻟﺼﻨﺎﻋﺔ‬
‫ﻭﺍﻟﺠﺎﻣﻌﺎﺕﺍﻟﻤﺨﺘﺎﺭﻳﻦ ﻭﺍﻷﻃﺮﺍﻑ ﺍﻟﻤﻬﺘﻤﺔ ﻓﻲ ﺃﻭﺭﻭﺑﺎ‪.‬‬

‫‪.12‬ﺗﻌﺰﻯ ﻫﺬﻩ ﺍﻟﻨﺘﻴﺠﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻟﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻟﻸﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ‬
‫ﺣﻘﻴﻘﺔﺃﻥ ﻣﻌﻈﻢ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ﺗﺴﺘﺨﺪﻡ ﻣﻌﺎﻟﺠﺎﺕ ﻣﺘﺨﺼﺼﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪82‬‬

‫ﻭﺛﻴﻘﺔﺳﺘﺮﻭﻣﺎﻥ ﺗﺒﻌﻬﺎ ﻭﻭﺩﻣﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ 1975 ،‬ﺏ( ﻓﻲ ﺃﻏﺴﻄﺲ ‪ ، 1975‬ﺗﻴﻨﻤﺎﻥ )‬


‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ‪ (1976 ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪ ، 1976‬ﺁﻳﺮﻭﻧﻤﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ (1977 ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪، 1977‬‬
‫ﻭﺃﺧﻴﺮﺍ ًﺳﺘﻴﻠﻤﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ (1978 ،‬ﻓﻲ ﻳﻮﻧﻴﻮ ‪.1978‬‬

‫ﺑﻌﺪﻋﻤﻠﻴﺔ ﺷﺎﻗﺔ ‪ ،‬ﺗﻢ ﺗﻘﻠﻴﺺ ﺍﻟﻤﻘﺘﺮﺣﺎﺕ ﺍﻟﻌﺪﻳﺪﺓ ﺍﻟﻤﻘﺪﻣﺔ ﻟﻠﻐﺔ ﺇﻟﻰ ﺃﺭﺑﻌﺔ ﻣﺘﺴﺎﺑﻘﻴﻦ‬
‫ﻧﻬﺎﺉﻴﻴﻦ ‪،‬ﻭﻛﻠﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺑﺎﺳﻜﺎﻝ‪ .‬ﻓﻲ ﻣﺎﻳﻮ ‪ ، 1979‬ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻗﺘﺮﺍﺡ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ‪/ Bull‬‬
‫‪ Cii Honeywell‬ﻣﻦ ﺍﻟﻤﺘﺴﺎﺑﻘﻴﻦ ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ﺍﻷﺭﺑﻌﺔ ﻛﺘﺼﻤﻴﻢ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ‪ .‬ﻛﺎﻥ ﻓﺮﻳﻖ‬
‫ﺗﺼﻤﻴﻢ‪ Cii Honeywell / Bull‬ﻓﻲ ﻓﺮﻧﺴﺎ ‪ ،‬ﺍﻟﻤﻨﺎﻓﺲ ﺍﻷﺟﻨﺒﻲ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺑﻴﻦ ﺍﻷﺭﺑﻌﺔ‬
‫ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ‪،‬ﺑﻘﻴﺎﺩﺓ ﺟﺎﻥ ﺇﺷﺒﻴﺎﻩ‪.‬‬

‫ﻓﻲﺭﺑﻴﻊ ﻋﺎﻡ ‪ ، 1979‬ﺃﻭﺻﻰ ﺟﺎﻙ ﻛﻮﺑﺮ ﻣﻦ ﻗﻴﺎﺩﺓ ﺍﻟﻌﺘﺎﺩ ﺍﻟﺒﺤﺮﻳﺔ ﺑﺎﺳﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪،‬‬
‫‪ ، Ada‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺗﺒﻨﻴﻬﺎ ﺑﻌﺪ ﺫﻟﻚ‪ .‬ﻳﺤﺘﻔﻞ ﺍﻻﺳﻢ ﺑﺬﻛﺮﻯ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ ﺑﺎﻳﺮﻭﻥ )‪، (1851-1815‬‬
‫ﻛﻮﻧﺘﻴﺴﺔﻟﻮﻓﻠﻴﺲ ‪ ،‬ﻋﺎﻟﻢ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ‪ ،‬ﻭﺍﺑﻨﺔ ﺍﻟﺸﺎﻋﺮ ﺍﻟﻠﻮﺭﺩ ﺑﺎﻳﺮﻭﻥ‪ .‬ﻳﺘﻢ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻴﻬﺎ ﻋﻤﻮﻣﺎً‬
‫ﻋﻠﻰﺃﻧﻬﺎ ﺃﻭﻝ ﻣﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻌﺎﻟﻢ‪ .‬ﻋﻤﻠﺖ ﻣﻊ ﺗﺸﺎﺭﻟﺰ ﺑﺎﺑﺎﺝ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻴﻜﺎﻧﻴﻜﻴﺔ‬
‫ﺍﻟﺨﺎﺻﺔﺑﻪ ‪ ،‬ﻣﺤﺮﻛﺎﺕ ﺍﻻﺧﺘﻼﻑ ﻭﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻭﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻌﺪﺩﻳﺔ‪.‬‬

‫ﺗﻢﻧﺸﺮ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺍﻷﺳﺎﺱ ﺍﻟﻤﻨﻄﻘﻲ ﻟـ ‪ Ada‬ﺑﻮﺍﺳﻄﺔ ‪ ACM‬ﻓﻲ ﻣﻠﻔﻬﺎ ﺇﺷﻌﺎﺭﺍﺕ‬


‫‪.)SIGPLAN‬ﻭﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻋﻠﻰ ﺟﻤﻬﻮﺭ ﻣﻦ ﺃﻛﺜﺮ ﻣﻦ ‪ 10000‬ﺷﺨﺺ‪ .‬ﺗﻢ ﻋﻘﺪ ﻣﺆﺗﻤﺮ ﺍﺧﺘﺒﺎﺭ‬
‫ﻭﺗﻘﻴﻴﻢﻋﺎﻡ ﻓﻲ ﺃﻛﺘﻮﺑﺮ ‪ 1979‬ﻓﻲ ﺑﻮﺳﻄﻦ ‪ ،‬ﻣﻊ ﻣﻤﺜﻠﻴﻦ ﻣﻦ ﺃﻛﺜﺮ ﻣﻦ ‪ 100‬ﻣﻨﻈﻤﺔ ﻣﻦ‬
‫ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ ﻭﺃﻭﺭﻭﺑﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻧﻮﻓﻤﺒﺮ ‪ ،‬ﺗﻢ ﺗﻠﻘﻲ ﺃﻛﺜﺮ ﻣﻦ ‪ 500‬ﺗﻘﺮﻳﺮ ﻟﻐﻮﻱ ﻣﻦ ‪ 15‬ﺩﻭﻟﺔ‬
‫ﻣﺨﺘﻠﻔﺔ‪.‬ﺍﻗﺘﺮﺣﺖ ﻣﻌﻈﻢ ﺍﻟﺘﻘﺎﺭﻳﺮ ﺗﻌﺪﻳﻼﺕ ﺻﻐﻴﺮﺓ ﺑﺪﻻ ًﻣﻦ ﺗﻐﻴﻴﺮﺍﺕ ﺟﺬﺭﻳﺔ ﻭﺭﻓﺾ ﻣﻄﻠﻖ‪.‬‬
‫ﺍﺳﺘﻨﺎﺩﺍًﺇﻟﻰ ﺗﻘﺎﺭﻳﺮ ﺍﻟﻠﻐﺔ ‪ ،‬ﺗﻢ ﺇﺻﺪﺍﺭ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻣﻦ ﻣﻮﺍﺻﻔﺎﺕ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ‪ ،‬ﻭﺛﻴﻘﺔ‬
‫ﺳﺘﻮﻧﻤﺎﻥ)ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ 1980 ،‬ﺃ( ‪ ،‬ﻓﻲ ﻓﺒﺮﺍﻳﺮ ‪ACM ، 1979( 1980‬‬

‫ﺗﻢﺍﻻﻧﺘﻬﺎء ﻣﻦ ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﻣﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻳﻮﻟﻴﻮ ‪ 1980‬ﻭﺗﻢ ﻗﺒﻮﻟﻬﺎ ﻛﻤﻌﻴﺎﺭ ‪1815‬‬
‫‪MIL-STD‬ﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ ‪ .Ada‬ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺮﻗﻢ ‪ 1815‬ﻷﻧﻪ ﻛﺎﻥ ﻋﺎﻡ ﻣﻴﻼﺩ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ‬
‫ﺑﺎﻳﺮﻭﻥ‪.‬ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﺃﺧﺮﻯ ﻣﻦﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ ‪ Ada‬ﺗﻢ ﺇﺻﺪﺍﺭﻩ ﻓﻲ ﻳﻮﻟﻴﻮ ‪ .1982‬ﻓﻲ‬
‫ﻋﺎﻡ‪ ، 1983‬ﻗﺎﻡ ﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ ﻟﻠﻤﻌﺎﻳﻴﺮ ﺑﺘﻮﺣﻴﺪ ﻣﻌﺎﻳﻴﺮ ‪ .Ada‬ﺗﻢ ﻭﺻﻒ ﻫﺬﻩ‬
‫ﺍﻟﻨﺴﺨﺔﺍﻟﺮﺳﻤﻴﺔ "ﺍﻟﻨﻬﺎﺉﻴﺔ" ﻓﻲ (‪ .Goos and Hartmanis )1983‬ﺛﻢ ﺗﻢ ﺗﺠﻤﻴﺪ ﺗﺼﻤﻴﻢ‬
‫ﻟﻐﺔ‪ Ada‬ﻟﻤﺪﺓ ﺧﻤﺲ ﺳﻨﻮﺍﺕ ﻋﻠﻰ ﺍﻷﻗﻞ‪.‬‬

‫‪2.14.3‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻳﺼﻒﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻟﻔﺮﻋﻲ ﺑﺈﻳﺠﺎﺯ ﺃﺭﺑﻌﺔ ﻣﻦ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﻐﺔ ‪.Ada‬‬

‫ﺗﻮﻓﺮﺍﻟﺤﺰﻡ ﺑﻠﻐﺔ ‪ Ada‬ﺍﻟﻮﺳﺎﺉﻞ ﻟﺘﻐﻠﻴﻒ ﻛﺎﺉﻨﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻣﻮﺍﺻﻔﺎﺕ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬


‫ﻭﺍﻹﺟﺮﺍءﺍﺕ‪.‬ﻭﻫﺬﺍ ﺑﺪﻭﺭﻩ ﻳﻮﻓﺮ ﺍﻟﺪﻋﻢ ﻻﺳﺘﺨﺪﺍﻡ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻛﻤﺎ ﻫﻮ‬
‫ﻣﻮﺿﺢﻓﻲ ﺍﻟﻔﺼﻞ ‪.11‬‬

‫ﺗﺘﻀﻤﻦﻟﻐﺔ ‪ Ada‬ﺗﺴﻬﻴﻼﺕ ﻭﺍﺳﻌﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﻟﻠﻤﺒﺮﻣﺞ‬


‫ﺑﺎﻟﺘﺤﻜﻢﺑﻌﺪ ﺃﻱ ﻭﺍﺣﺪ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ‬
‫‪83‬‬ ‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬

‫ﻣﻦﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺃﻭ ﺃﺧﻄﺎء ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻓﻲ ﺍﻟﻔﺼﻞ‬


‫‪.14‬‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﻜﻮﻥ ﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﺎﻣﺔ ﻓﻲ ‪ .Ada‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﻛﺘﺎﺑﺔ‬
‫ﺇﺟﺮﺍءﻓﺮﺯ ﻳﺴﺘﺨﺪﻡ ﻧﻮﻋﺎً ﻏﻴﺮ ﻣﺤﺪﺩ ﻟﻠﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﺍﺩ ﻓﺮﺯﻫﺎ‪ .‬ﻳﺠﺐ ﺇﻧﺸﺎء ﻣﺜﻴﻞ ﻟﻤﺜﻞ ﻫﺬﺍ ﺍﻹﺟﺮﺍء‬
‫ﺍﻟﻌﺎﻡﻟﻨﻮﻉ ﻣﺤﺪﺩ ﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ‪ ،‬ﻭﻳﺘﻢ ﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻋﺒﺎﺭﺓ ﺗﺆﺩﻱ ﺇﻟﻰ ﻗﻴﺎﻡ ﺍﻟﻤﺤﻮﻝ ﺍﻟﺒﺮﻣﺠﻲ‬
‫ﺑﺈﻧﺸﺎءﻧﺴﺨﺔ ﻣﻦ ﺍﻹﺟﺮﺍء ﺑﺎﻟﻨﻮﻉ ﺍﻟﻤﺤﺪﺩ‪ .‬ﻳﺰﻳﺪ ﺗﻮﺍﻓﺮ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻌﺎﻣﺔ ﻣﻦ ﻧﻄﺎﻕ‬
‫ﻭﺣﺪﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﺪﻻ ًﻣﻦ ﺗﻜﺮﺍﺭﻫﺎ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻋﻠﻢ‬
‫ﺍﻟﻮﺭﺍﺛﺔﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ ‪ 9‬ﻭ ‪.11‬‬

‫ﺗﻮﻓﺮﻟﻐﺔ ‪ Ada‬ﺃﻳﻀﺎً ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺰﺍﻣﻦ ﻟﻮﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﺍﻟﻤﻬﺎﻡ ﺍﻟﻤﺴﻤﺎﺓ ‪،‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺁﻟﻴﺔ ﺍﻻﻟﺘﻘﺎء‪ Rendezvous .‬ﻫﻮ ﺍﺳﻢ ﻃﺮﻳﻘﺔ ﺍﻻﺗﺼﺎﻝ ﻭﺍﻟﺘﺰﺍﻣﻦ ﺑﻴﻦ ﺍﻟﻤﻬﺎﻡ‪ .‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﺍﻟﺘﺰﺍﻣﻦ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.13‬‬

‫‪2.14.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻟﻌﻞﺃﻫﻢ ﺟﻮﺍﻧﺐ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ‪ Ada‬ﺍﻟﺘﻲ ﻳﺠﺐ ﻣﺮﺍﻋﺎﺗﻬﺎ ﻫﻲ ﻣﺎ ﻳﻠﻲ‪:‬‬

‫• ﻷﻥ ﺍﻟﺘﺼﻤﻴﻢ ﻛﺎﻥ ﺗﻨﺎﻓﺴﻴﺎً ‪ ،‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ ﻗﻴﻮﺩ ﻋﻠﻰ ﺍﻟﻤﺸﺎﺭﻛﺔ‪.‬‬


‫• ﻟﻐﺔ ‪ Ada‬ﺗﺠﺴﺪ ﻣﻌﻈﻢ ﻣﻔﺎﻫﻴﻢ ﻫﻨﺪﺳﺔ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻭﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪.‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺘﺴﺎءﻝ ﻋﻦ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻔﻌﻠﻴﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺪﻣﺞ ﻫﺬﻩ‬
‫ﺍﻟﻤﻴﺰﺍﺕ ‪،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺤﻜﻤﺔ ﻣﻦ ﺗﻀﻤﻴﻦ ﻣﺜﻞ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﻳﺘﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻥ ﺍﻟﻤﻴﺰﺍﺕ ﺫﺍﺕ ﻗﻴﻤﺔ‪.‬‬

‫• ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻣﻌﻈﻢ ﺍﻟﻨﺎﺱ ﻟﻢ ﻳﺘﻮﻗﻌﻮﺍ ﺫﻟﻚ ‪ ،‬ﺇﻻ ﺃﻥ ﺗﻄﻮﻳﺮ ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ‪ Ada‬ﻛﺎﻥ‬
‫ﻣﻬﻤﺔﺻﻌﺒﺔ‪ .‬ﻓﻘﻂ ﻓﻲ ﻋﺎﻡ ‪ ، 1985‬ﺑﻌﺪ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ﺃﺭﺑﻊ ﺳﻨﻮﺍﺕ ﻣﻦ ﺍﻛﺘﻤﺎﻝ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﺑﺪﺃﺕ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ‪ Ada‬ﺍﻟﺼﺎﻟﺤﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺣﻘﺎً ﻓﻲ ﺍﻟﻈﻬﻮﺭ‪.‬‬

‫ﻛﺎﻥﺃﺧﻄﺮ ﺍﻧﺘﻘﺎﺩ ﻟـ ‪ Ada‬ﻓﻲ ﺳﻨﻮﺍﺗﻬﺎ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ﻭﻣﻌﻘﺪﺓ‬
‫ﻟﻠﻐﺎﻳﺔ‪.‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﺫﻛﺮ (‪ Hoare )1981‬ﺃﻧﻪ ﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻷﻱ ﺗﻄﺒﻴﻖ ﺣﻴﺚ‬
‫ﺗﻜﻮﻥﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﺃﻣﺮﺍً ﺑﺎﻟﻎ ﺍﻷﻫﻤﻴﺔ ‪ ،‬ﻭﻫﻮ ﺑﺎﻟﻀﺒﻂ ﻧﻮﻉ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺬﻱ ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻣﻦ ﺃﺟﻠﻪ‪ .‬ﻣﻦ‬
‫ﻧﺎﺣﻴﺔﺃﺧﺮﻯ ‪ ،‬ﺃﺷﺎﺩ ﺁﺧﺮﻭﻥ ﺑﻬﺎ ﺑﺎﻋﺘﺒﺎﺭﻫﺎ ﻣﺜﺎﻻً ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻭﻗﺘﻬﺎ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺣﺘﻰ ﻫﻮﺭ‬
‫ﺧﻔﻒﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻧﻈﺮﺗﻪ ﻟﻠﻐﺔ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:Ada‬‬

‫‪ --‬ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪Ada‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ‪ List_Len‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫‪ --‬ﻣﺪﺧﻞ‪:‬‬
‫‪ -List_Len‬ﻋﺪﺩ ﺻﺤﻴﺢ‬ ‫‪--‬‬
‫‪ --‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ‪، Ada.Integer.Text_IO‬‬ ‫‪--‬‬
‫‪Ada.Text_IO‬؛ ‪ Ada.Text_IO ، Ada.Integer.Text_IO‬؛‬ ‫ﻣﻊ‬
‫ﻳﺴﺘﺨﺪﻡ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪84‬‬

‫ﺇﺟﺮﺍء‪Ada_Ex‬ﻳﻜﻮﻥ‬
‫ﻳﻜﺘﺐ‪Int_List_Type‬ﻫﻲ ﻣﺠﻤﻮﻋﺔ)‪(99..1‬ﻝﻋﺪﺩ ﺻﺤﻴﺢ؛‬
‫‪ Int_List: Int_List_Type‬؛‬
‫ﺍﻟﻤﺠﻤﻮﻉ ‪،‬ﺍﻟﻤﺘﻮﺳﻂ ‪ ،‬ﺍﻟﻨﺘﻴﺠﺔ‪ :‬ﻋﺪﺩ ﺻﺤﻴﺢ ؛ ‪ List_Len ،‬ﻳﺒﺪﺃ‬

‫ﺍﻟﻨﺘﻴﺠﺔ‪ 0 =:‬؛‬
‫ﺍﻟﻤﺠﻤﻮﻉ‪ 0 =:‬؛‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ )‪، (List_Len‬‬
‫ﻟﻮ)(‪List_Len< 0‬ﻭ)(‪List_Len >100‬ﺛﻢ‬
‫‪ --‬ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ ﻝﺍﻟﻌﺪﺍﺩ‪List_Len .. 1 = :‬ﺣﻠﻘﺔ‬

‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ )(‪ (Int_List )Counter‬؛ ﺍﻟﻤﺠﻤﻮﻉ‪= :‬‬


‫‪) Sum + Int_List‬ﻋﺪﺍﺩ( ؛ ﺣﻠﻘﺔ ﺍﻟﻨﻬﺎﻳﺔ‬

‫‪ --‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ﺍﻟﻤﺘﻮﺳﻂ‪/ List_Len = :‬‬


‫‪ Sum‬؛‬
‫‪ --‬ﻋﺪ ﻋﺪﺩ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ ﻝﺍﻟﻌﺪﺍﺩ‪List_Len .. 1 = :‬ﺣﻠﻘﺔ‬

‫ﻟﻮﻣﺘﻮﺳﻂ <(ﻋﺪﺍﺩ) ‪Int_List‬ﺛﻢ‬


‫ﺍﻟﻨﺘﻴﺠﺔ‪ =:‬ﺍﻟﻨﺘﻴﺠﺔ ‪ 1 +‬؛‬
‫ﺇﻧﻬﺎءﺇﺫﺍ؛‬
‫ﺣﻠﻘﺔﺍﻟﻨﻬﺎﻳﺔ‬
‫‪ --‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﺿﻊ)"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪(":‬؛ ﻭﺿﻊ )ﻧﺘﻴﺠﺔ( ؛‬

‫ﺧﻂﺟﺪﻳﺪ؛‬
‫ﺁﺧﺮ‬
‫؛ ("ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ") ‪ Put_Line‬ﺇﻧﻬﺎء ﺇﺫﺍ؛‬

‫ﻧﻬﺎﻳﺔ؛ ‪Ada_Ex‬‬

‫‪2.14.5 Ada 95 and Ada2005‬‬


‫ﻳﺘﻢﻭﺻﻒ ﺍﺛﻨﻴﻦ ﻣﻦ ﺃﻫﻢ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ ‪ Ada 95‬ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻟﻔﻘﺮﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ .‬ﻓﻲ ﺍﻟﺠﺰء‬
‫ﺍﻟﻤﺘﺒﻘﻲﻣﻦ ﺍﻟﻜﺘﺎﺏ ‪ ،‬ﺳﻨﺴﺘﺨﺪﻡ ﺍﺳﻢ ‪ Ada 83‬ﻟﻺﺻﺪﺍﺭ ﺍﻷﺻﻠﻲ ﻭ ‪) Ada 95‬ﺍﺳﻤﻪ ﺍﻟﻔﻌﻠﻲ(‬
‫ﻟﻺﺻﺪﺍﺭﺍﻷﺣﺪﺙ ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻬﻢ ﺍﻟﺘﻤﻴﻴﺰ ﺑﻴﻦ ﺍﻟﻨﺴﺨﺘﻴﻦ‪ .‬ﻓﻲ ﺍﻟﻤﻨﺎﻗﺸﺎﺕ ﺣﻮﻝ ﻣﻴﺰﺍﺕ‬
‫ﺍﻟﻠﻐﺔﺍﻟﻤﺸﺘﺮﻛﺔ ﻟﻜﻼ ﺍﻹﺻﺪﺍﺭﻳﻦ ‪ ،‬ﺳﻨﺴﺘﺨﺪﻡ ﺍﺳﻢ ‪ .Ada‬ﺗﻢ ﺗﻌﺮﻳﻒ ﻟﻐﺔ ‪ Ada 95‬ﺍﻟﻘﻴﺎﺳﻴﺔ ﻓﻲ‬
‫(‪.ARM )1995‬‬

‫ﺗﻢﺗﻤﺪﻳﺪ ﺁﻟﻴﺔ ﺍﺷﺘﻘﺎﻕ ﺍﻟﻨﻮﻉ ﻟـ ‪ Ada 83‬ﻓﻲ ‪ Ada 95‬ﻟﻠﺴﻤﺎﺡ ﺑﺈﺿﺎﻓﺔ ﻣﻜﻮﻧﺎﺕ ﺟﺪﻳﺪﺓ‬
‫ﻟﺘﻠﻚﺍﻟﻤﻮﺭﻭﺛﺔ ﻣﻦ ﻓﺉﺔ ﺃﺳﺎﺳﻴﺔ‪ .‬ﻳﻮﻓﺮ ﻫﺬﺍ ﺍﻟﻤﻴﺮﺍﺙ ‪ ،‬ﻭﻫﻮ ﻣﻜﻮﻥ ﺭﺉﻴﺴﻲ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺸﻴﺉﻴﺔ‪.‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻻﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻟﺘﻌﺮﻳﻔﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻔﺮﻋﻴﺔﻣﻦ ﺧﻼﻝ ﺇﺭﺳﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﻗﻴﻤﺔ ﻋﻼﻣﺔ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻤﺸﺘﻘﺔ‬
‫ﻣﻦﺧﻼﻝ ﺍﻷﻧﻮﺍﻉ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻔﺉﺔ‪ .‬ﺗﻮﻓﺮ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺓ ﺗﻌﺪﺩ ﺍﻷﺷﻜﺎﻝ ‪،‬‬
‫‪85‬‬ ‫‪2.15‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬

‫ﻣﻴﺰﺓﺭﺉﻴﺴﻴﺔ ﺃﺧﺮﻯ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻴﺰﺍﺕ ‪ Ada 95‬ﻫﺬﻩ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.12‬‬

‫ﻟﻢﺗﻮﻓﺮ ﺁﻟﻴﺔ ﺍﻻﻟﺘﻘﺎء ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Ada 83‬ﺳﻮﻯ ﻭﺳﻴﻠﺔ ﻣﺮﻫﻘﺔ ﻭﻏﻴﺮ ﻓﻌﺎﻟﺔ ﻟﻤﺸﺎﺭﻛﺔ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﺑﻴﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺘﺰﺍﻣﻨﺔ‪ .‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺇﺩﺧﺎﻝ ﻣﻬﻤﺔ ﺟﺪﻳﺪﺓ ﻟﻠﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺸﺘﺮﻛﺔ‪ .‬ﺗﻮﻓﺮ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﺤﻤﻴﺔ ﻓﻲ ‪ Ada 95‬ﺑﺪﻳﻼ ًﺟﺬﺍﺑﺎً ﻟﺬﻟﻚ‪ .‬ﻳﺘﻢ ﺗﻐﻠﻴﻒ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺸﺘﺮﻛﺔ ﻓﻲ ﺑﻨﻴﺔ ﻧﺤﻮﻳﺔ ﺗﺘﺤﻜﻢ ﻓﻲ ﻛﻞ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﺇﻣﺎ ﻋﻦ ﻃﺮﻳﻖ ﻣﻮﻋﺪ‬
‫ﺃﻭﻋﻦ ﻃﺮﻳﻖ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻟـ ‪ Ada 95‬ﻟﻠﺘﺰﺍﻣﻦ‬
‫ﻭﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺸﺘﺮﻛﺔ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.13‬‬

‫ﻳﻌُﺘﻘﺪﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺷﻌﺒﻴﺔ ‪ Ada 95‬ﻋﺎﻧﺖ ﻷﻥ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﺗﻮﻗﻔﺖ ﻋﻦ ﻃﻠﺐ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻓﻲ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻌﺴﻜﺮﻳﺔ‪ .‬ﻛﺎﻧﺖ ﻫﻨﺎﻙ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ﺃﻋﺎﻗﺖ ﻧﻤﻮ‬
‫ﺷﻌﺒﻴﺘﻬﺎ‪.‬ﻛﺎﻥ ﺍﻷﻫﻢ ﻣﻦ ﺑﻴﻨﻬﺎ ﻫﻮ ﺍﻟﻘﺒﻮﻝ ﺍﻟﻮﺍﺳﻊ ﻟـ ‪ ++ C‬ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻭﺍﻟﺬﻱ‬
‫ﺣﺪﺙﻗﺒﻞ ﺇﺻﺪﺍﺭ ‪.Ada 95‬‬

‫ﻛﺎﻥﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻹﺿﺎﻓﺎﺕ ﺇﻟﻰ ‪ Ada 95‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ‪ .Ada 2005‬ﻣﻦ ﺑﻴﻨﻬﺎ‬
‫ﻭﺍﺟﻬﺎﺕ ‪،‬ﻣﺸﺎﺑﻬﺔ ﻟﺘﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ ، Java‬ﻭﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺠﺪﻭﻟﺔ ‪،‬‬
‫ﻭﺍﻟﻮﺍﺟﻬﺎﺕﺍﻟﻤﺘﺰﺍﻣﻨﺔ‪.‬‬
‫ﺗﺴﺘﺨﺪﻡ‪ Ada‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻛﻞ ﻣﻦ ﺇﻟﻜﺘﺮﻭﻧﻴﺎﺕ ﺍﻟﻄﻴﺮﺍﻥ ﺍﻟﺘﺠﺎﺭﻳﺔ ﻭﺍﻟﺪﻓﺎﻋﻴﺔ ‪ ،‬ﻭﻣﺮﺍﻗﺒﺔ‬
‫ﺍﻟﺤﺮﻛﺔﺍﻟﺠﻮﻳﺔ ‪ ،‬ﻭﺍﻟﻨﻘﻞ ﺑﺎﻟﺴﻜﻚ ﺍﻟﺤﺪﻳﺪﻳﺔ ‪ ،‬ﻭﻛﺬﻟﻚ ﻓﻲ ﻣﺠﺎﻻﺕ ﺃﺧﺮﻯ‪.‬‬

‫‪2.15‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬


‫ﻛﺎﻧﺖ‪ Smalltalk‬ﻫﻲ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﺑﺸﻜﻞ ﻛﺎﻣﻞ‪ .‬ﻟﺬﻟﻚ ﻓﻬﻮ ﺟﺰء‬
‫ﻣﻬﻢﻣﻦ ﺃﻱ ﻣﻨﺎﻗﺸﺔ ﻟﺘﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪2.15.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻧﺸﺄﺕﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺘﻲ ﺃﺩﺕ ﺇﻟﻰ ﺗﻄﻮﻳﺮ ‪ Smalltalk‬ﻓﻲ ﺭﺳﺎﻟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ‪ .‬ﺃﻃﺮﻭﺣﺔ ﺃﻻﻥ ﻛﺎﻱ ﻓﻲ‬
‫ﺃﻭﺍﺧﺮﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻓﻲ ﺟﺎﻣﻌﺔ ﻳﻮﺗﺎ )ﻛﺎﻱ ‪ .(1969 ،‬ﻛﺎﻥ ﻟﺪﻯ ﻛﺎﻱ ﺍﻟﺒﺼﻴﺮﺓ ﺍﻟﺮﺍﺉﻌﺔ ﻟﻠﺘﻨﺒﺆ ﺑﺎﻟﺘﻮﺍﻓﺮ‬
‫ﺍﻟﻤﺴﺘﻘﺒﻠﻲﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻜﺘﺒﻴﺔ ﺍﻟﻘﻮﻳﺔ‪ .‬ﺗﺬﻛﺮ ﺃﻥ ﺃﻧﻈﻤﺔ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻷﻭﻟﻰ ﻟﻢ‬
‫ﻳﺘﻢﺗﺴﻮﻳﻘﻬﺎ ﺣﺘﻰ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻭﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻣﺮﺗﺒﻄﺔ ﻓﻘﻂ ﻋﻦ ﺑﻌﺪ ﺑﺎﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ‬
‫ﺗﺼﻮﺭﻫﺎﻛﺎﻱ ‪ ،‬ﻭﺍﻟﺘﻲ ﺷﻮﻫﺪﺕ ﺗﻨﻔﺬ ﻣﻠﻴﻮﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺃﻛﺜﺮ ﻓﻲ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺓ ﻣﻴﻐﺎ‬
‫ﺑﺎﻳﺖﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﺃﺻﺒﺤﺖ ﻫﺬﻩ ﺍﻵﻻﺕ ‪ ،‬ﻓﻲ ﺷﻜﻞ ﻣﺤﻄﺎﺕ ﻋﻤﻞ ‪ ،‬ﻣﺘﺎﺣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‬
‫ﻓﻘﻂﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪.‬‬

‫ﺍﻋﺘﻘﺪﻛﺎﻱ ﺃﻥ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻜﺘﺒﻴﺔ ﺳﺘﺴﺘﺨﺪﻡ ﻣﻦ ﻗﺒﻞ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ‬


‫ﺳﺘﺤﺘﺎﺝﺇﻟﻰ ﻗﺪﺭﺍﺕ ﺗﻔﺎﻋﻞ ﺑﺸﺮﻳﺔ ﻗﻮﻳﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻛﺎﻧﺖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‬
‫ﻣﻮﺟﻬﺔﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻭﻛﺎﻧﺖ ﺗﺴﺘﺨﺪﻡ ﺣﺼﺮﻳﺎً ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺍﻟﻌﻠﻤﺎء ﺍﻟﻤﺤﺘﺮﻓﻴﻦ‪ .‬ﻗﺮﺭ‬
‫ﻛﺎﻱﺃﻧﻪ ﻻﺳﺘﺨﺪﺍﻣﻪ ﻣﻦ ﻗﺒﻞ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﻔﺎﻋﻠﻴﺎً ﻟﻠﻐﺎﻳﺔ‬
‫ﻭﻳﺴﺘﺨﺪﻡﺭﺳﻮﻣﺎﺕ ﻣﺘﻄﻮﺭﺓ ﻓﻲ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺨﺎﺻﺔ ﺑﻪ‪ .‬ﺟﺎءﺕ ﺑﻌﺾ ﻣﻔﺎﻫﻴﻢ‬
‫ﺍﻟﺮﺳﻮﻣﺎﺕﻣﻦ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪86‬‬

‫ﺗﺠﺮﺑﺔ‪ LOGO‬ﻟـ ‪ ، Seymour Papert‬ﺣﻴﺚ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﺳﻮﻣﺎﺕ ﻟﻤﺴﺎﻋﺪﺓ ﺍﻷﻃﻔﺎﻝ ﻓﻲ‬


‫ﺍﺳﺘﺨﺪﺍﻡﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ )‪.(Papert ، 1980‬‬
‫ﺗﺼﻮﺭﻛﺎﻱ ﻓﻲ ﺍﻷﺻﻞ ﻧﻈﺎﻣﺎً ﺃﺳﻤﺎﻩ ‪ ، Dynabook‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﻳﻜﻮﻥ‬
‫ﻣﻌﺎﻟﺠﺎًﻋﺎﻣﺎً ﻟﻠﻤﻌﻠﻮﻣﺎﺕ‪ .‬ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﻟﻐﺔ ‪ ، Flex‬ﺍﻟﺘﻲ ﺳﺎﻋﺪ ﻓﻲ ﺗﺼﻤﻴﻤﻬﺎ‪ .‬ﺍﻋﺘﻤﺪ‬
‫‪ Flex‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻋﻠﻰ ‪ .SIMULA 67‬ﺍﺳﺘﺨﺪﻡ ‪ Dynabook‬ﻧﻤﻮﺫﺝ ﺍﻟﻤﻜﺘﺐ ﺍﻟﻨﻤﻮﺫﺟﻲ ‪،‬‬
‫ﺣﻴﺚﻳﻮﺟﺪ ﻋﺪﺩ ﻣﻦ ﺍﻷﻭﺭﺍﻕ ‪ ،‬ﺑﻌﻀﻬﺎ ﻣﻐﻄﻰ ﺟﺰﺉﻴﺎً‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻮﺭﻗﺔ ﺍﻟﻌﻠﻴﺎ ﻫﻲ ﻣﺤﻮﺭ‬
‫ﺍﻻﻫﺘﻤﺎﻡ ‪،‬ﺑﻴﻨﻤﺎ ﻳﻜﻮﻥ ﺍﻵﺧﺮﻭﻥ ﺧﺎﺭﺝ ﻧﻄﺎﻕ ﺍﻟﺘﺮﻛﻴﺰ ﻣﺆﻗﺘﺎً‪ .‬ﺳﻴﻌﺮﺽ ﻋﺮﺽ ‪ Dynabook‬ﻫﺬﺍ‬
‫ﺍﻟﻤﺸﻬﺪ ‪،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻮﺍﻓﺬ ﺍﻟﺸﺎﺷﺔ ﻟﺘﻤﺜﻴﻞ ﺃﻭﺭﺍﻕ ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ ﺳﻄﺢ ﺍﻟﻤﻜﺘﺐ‪ .‬ﻳﺘﻔﺎﻋﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﻣﻊ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺸﺎﺷﺔ ﺳﻮﺍء ﻣﻦ ﺧﻼﻝ ﺿﻐﻄﺎﺕ ﺍﻟﻤﻔﺎﺗﻴﺢ ﺃﻭ ﻋﻦ ﻃﺮﻳﻖ ﻟﻤﺲ‬
‫ﺍﻟﺸﺎﺷﺔﺑﺄﺻﺎﺑﻌﻪ‪ .‬ﺑﻌﺪ ﺃﻥ ﺃﻛﺴﺒﻪ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻟـ ‪ Dynabook‬ﺩﺭﺟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ ‪ ،‬ﺃﺻﺒﺢ‬
‫ﻫﺪﻑﻛﺎﻱ ﻫﻮ ﺇﻧﺸﺎء ﻣﺜﻞ ﻫﺬﻩ ﺍﻵﻟﺔ‪.‬‬

‫ﻭﺟﺪﻛﺎﻱ ﻃﺮﻳﻘﻪ ﺇﻟﻰ ﻣﺮﻛﺰ ﺃﺑﺤﺎﺙ (‪ Xerox Palo Alto )Xerox PARC‬ﻭﻋﺮﺽ ﺃﻓﻜﺎﺭﻩ‬
‫ﻋﻠﻰ‪ .Dynabook‬ﺃﺩﻯ ﺫﻟﻚ ﺇﻟﻰ ﺗﻌﻴﻴﻨﻪ ﻫﻨﺎﻙ ﻭﺍﻟﻮﻻﺩﺓ ﺍﻟﻼﺣﻘﺔ ﻟﻤﺠﻤﻮﻋﺔ ﺃﺑﺤﺎﺙ ﺍﻟﺘﻌﻠﻢ ﻓﻲ‬
‫‪ .Xerox‬ﻛﺎﻧﺖ ﺍﻟﺸﺤﻨﺔ ﺍﻷﻭﻟﻰ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻫﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻟﺪﻋﻢ ﻧﻤﻮﺫﺝ ﺑﺮﻣﺠﺔ ‪ Kay‬ﻭﺗﻨﻔﻴﺬﻩ‬
‫ﻋﻠﻰﺃﻓﻀﻞ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺷﺨﺼﻲ ﻣﺘﺎﺡ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻧﺘﺞ ﻋﻦ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻧﻈﺎﻡ‬
‫‪" Dynabook‬ﻣﺆﻗﺖ" ﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺤﻄﺔ ﻋﻤﻞ ‪ Xerox Alto‬ﻭﺑﺮﻧﺎﻣﺞ ‪ .Smalltalk-72‬ﻣﻌﺎً ‪،‬‬
‫ﺷﻜﻠﻮﺍﺃﺩﺍﺓ ﺑﺤﺚ ﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻄﻮﻳﺮ‪ .‬ﻭﻗﺪ ﺗﻢ ﺗﻨﻔﻴﺬ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺤﺜﻴﺔ ﺑﻬﺬﺍ ﺍﻟﻨﻈﺎﻡ ﻣﻨﻬﺎ‬
‫ﻋﺪﺓﺗﺠﺎﺭﺏ ﻟﺘﻌﻠﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻸﻃﻔﺎﻝ‪ .‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺍﻟﺘﺠﺎﺭﺏ ‪ ،‬ﻇﻬﺮﺕ ﺗﻄﻮﺭﺍﺕ ﺃﺧﺮﻯ ﺃﺩﺕ ﺇﻟﻰ‬
‫ﺳﻠﺴﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻧﺘﻬﺖ ﺑـ ‪ .Smalltalk-80‬ﻣﻊ ﻧﻤﻮ ﺍﻟﻠﻐﺔ ﻭﻛﺬﻟﻚ ﻗﻮﺓ ﺍﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ ﺗﻮﺟﺪ‬
‫ﻋﻠﻴﻬﺎ‪.‬ﺑﺤﻠﻮﻝ ﻋﺎﻡ ‪ ، 1980‬ﻛﺎﻧﺖ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺃﺟﻬﺰﺓ ‪ Xerox‬ﺗﺘﻄﺎﺑﻖ ﺗﻘﺮﻳﺒﺎً ﻣﻊ ﺍﻟﺮﺅﻳﺔ‬
‫ﺍﻟﻤﺒﻜﺮﺓﻟـ ‪.Alan Kay‬‬

‫‪2.15.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻻﻳﺴﻜﻦ ﻋﺎﻟﻢ ‪ Smalltalk‬ﺳﻮﻯ ﺍﻟﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻦ ﺛﻮﺍﺑﺖ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﺇﻟﻰ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻤﻌﻘﺪﺓﺍﻟﻜﺒﻴﺮﺓ‪ .‬ﺗﺘﻢ ﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ‪ Smalltalk‬ﺑﻨﻔﺲ ﺍﻷﺳﻠﻮﺏ ﺍﻟﻤﻮﺣﺪ‪:‬‬
‫ﺇﺭﺳﺎﻝﺭﺳﺎﻟﺔ ﺇﻟﻰ ﻛﺎﺉﻦ ﻻﺳﺘﺪﻋﺎء ﺇﺣﺪﻯ ﻃﺮﻗﻪ‪ .‬ﺍﻟﺮﺩ ﻋﻠﻰ ﺍﻟﺮﺳﺎﻟﺔ ﻫﻮ ﻛﺎﺉﻦ ‪ ،‬ﺇﻣﺎ ﻳﻘﻮﻡ ﺑﺈﺭﺟﺎﻉ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕﺍﻟﻤﻄﻠﻮﺑﺔ ﺃﻭ ﻳﻘﻮﻡ ﺑﺒﺴﺎﻃﺔ ﺑﺈﻋﻼﻡ ﺍﻟﻤﺮﺳﻞ ﺑﺄﻥ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻗﺪ ﺍﻛﺘﻤﻠﺖ‪.‬‬
‫ﻳﺘﻤﺜﻞﺍﻻﺧﺘﻼﻑ ﺍﻷﺳﺎﺳﻲ ﺑﻴﻦ ﺍﻟﺮﺳﺎﻟﺔ ﻭﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻓﻲ ﺍﻟﺘﺎﻟﻲ‪ :‬ﻳﺘﻢ ﺇﺭﺳﺎﻝ‬
‫ﺭﺳﺎﻟﺔﺇﻟﻰ ﻛﺎﺉﻦ ﺑﻴﺎﻧﺎﺕ ‪ ،‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺘﺤﺪﻳﺪ ﺇﻟﻰ ﺇﺣﺪﻯ ﺍﻟﻄﺮﻕ ﺍﻟﻤﺤﺪﺩﺓ ﻟﻠﻜﺎﺉﻦ‪ .‬ﻳﺘﻢ ﺑﻌﺪ ﺫﻟﻚ‬
‫ﺗﻨﻔﻴﺬﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ ‪ ،‬ﻭﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻜﺎﺉﻦ ﺍﻟﺬﻱ ﺗﻢ ﺇﺭﺳﺎﻝ‬
‫ﺍﻟﺮﺳﺎﻟﺔﺇﻟﻴﻪ ؛ ﻣﻜﺎﻟﻤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻫﻲ ﺭﺳﺎﻟﺔ ﺇﻟﻰ ﺭﻣﺰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ‪ .‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺇﺭﺳﺎﻝ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺮﺍﺩ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺇﻟﻴﻬﺎ ﻛﻤﻌﺎﻣﻞ‪13.‬‬

‫ﻓﻲ‪ ، Smalltalk‬ﺗﺠﺮﻳﺪﺍﺕ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻫﻲ ﻓﺉﺎﺕ ﺗﺸﺒﻪ ﺇﻟﻰ ﺣﺪ ﺑﻌﻴﺪ ﻓﺉﺎﺕ ‪67‬‬


‫‪ .SIMULA‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﻣﺜﻴﻼﺕ ﻣﻦ ﺍﻟﻔﺉﺔ ﻭﻣﻦ ﺛﻢ ﺗﺼﺒﺢ ﻛﺎﺉﻨﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬‬

‫ﻳﺨﺘﻠﻒﺑﻨﺎء ﺟﻤﻠﺔ ‪ Smalltalk‬ﻋﻦ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﺧﺮﻯ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺟﺰء‬
‫ﻛﺒﻴﺮﻣﻨﻪ ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﺳﺎﺉﻞ ‪ ،‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻭ‬

‫‪.13‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻳﻤﻜﻦ ﻻﺳﺘﺪﻋﺎء ﺍﻟﻄﺮﻳﻘﺔ ﺃﻳﻀﺎً ﺗﻤﺮﻳﺮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﺘﺘﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ‪.‬‬
‫‪87‬‬ ‫‪2.15‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬

‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﺍﻟﻤﻨﻄﻘﻴﺔ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ‪ .‬ﺗﻢ ﺗﻮﺿﻴﺢ ﺃﺣﺪ ﺑﻨﻴﺎﺕ ﺍﻟﺘﺤﻜﻢ ‪ Smalltalk‬ﻓﻲ‬
‫ﺍﻟﻤﺜﺎﻝﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﻔﺮﻋﻲ ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫‪2.15.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻟﻘﺪﻗﺎﻡ ‪ Smalltalk‬ﺑﻌﻤﻞ ﻛﺒﻴﺮ ﻟﺘﻌﺰﻳﺰ ﺟﺎﻧﺒﻴﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻣﻦ ﺍﻟﺤﻮﺳﺒﺔ‪ :‬ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ‬
‫ﺍﻟﺮﺳﻮﻣﻴﺔﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ .‬ﻧﺸﺄﺕ ﺃﻧﻈﻤﺔ ﺍﻟﻨﻮﺍﻓﺬ ﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﺍﻵﻥ ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺍﻟﺴﺎﺉﺪﺓﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻷﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ ‪ .Smalltalk‬ﺍﻟﻴﻮﻡ ‪ ،‬ﺃﻫﻢ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺃﺻﻞ ﺑﻌﺾ ﺃﻓﻜﺎﺭ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺸﻴﺉﻴﺔﺟﺎء ﻣﻦ ‪ ، SIMULA 67‬ﺇﻻ ﺃﻧﻬﺎ ﻭﺻﻠﺖ ﺇﻟﻰ ﻣﺮﺣﻠﺔ ﺍﻟﻨﻀﺞ ﻓﻲ ‪ .Smalltalk‬ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢﺃﻥ ﺗﺄﺛﻴﺮ ‪ Smalltalk‬ﻋﻠﻰ ﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﺳﻴﺴﺘﻤﺮ ﻃﻮﻳﻼ‪ً.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺗﻌﺮﻳﻒ ﻓﺉﺔ ‪:Smalltalk‬‬

‫"ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪"Smalltalk‬‬


‫"ﺍﻟﺘﺎﻟﻲ ﻫﻮ ﺗﻌﺮﻳﻒ ﻓﺉﺔ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﺘﺸﻜﻴﻼﺕ ﺃﻥ ﺗﺮﺳﻢ ﻣﻀﻠﻌﺎﺕ ﻣﺘﺴﺎﻭﻳﺔ ﺍﻷﺿﻼﻉ ﻣﻦ ﺃﻱ ﻋﺪﺩ‬
‫ﻣﻦﺍﻟﺠﻮﺍﻧﺐ"‬

‫ﻣﻀﻠﻊ‬ ‫ﺍﺳﻢﺍﻟﻔﺼﻞ‬
‫ﻫﺪﻑ‬ ‫ﺍﻟﻄﺒﻘﺔﺍﻟﻌﻠﻴﺎ‬
‫ﻗﻠﻤﻨﺎ‬ ‫ﺃﺳﻤﺎءﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺜﻴﻞ ﻧﻮﻣﺴﻴﺪﻳﺲ‬

‫ﻃﻮﻝﺍﻟﺠﺎﻧﺐ‬
‫"ﻃﺮﻕ ﺍﻟﻔﺼﻞ"‬
‫"ﺇﻧﺸﺎء ﻣﺜﻴﻞ"‬
‫ﺟﺪﻳﺪ‬
‫^ﺳﻮﺑﺮ ﺟﺪﻳﺪ‪getPen‬‬

‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﻠﻢ ﻟﺮﺳﻢ ﺍﻟﻤﻀﻠﻌﺎﺕ ‪getPen‬‬

‫ﺍﻟﻘﻠﻢ‪ourPen >-‬ﺟﺪﻳﺪﺍﻻﻓﺘﺮﺍﺿﻲ‪2 :‬‬

‫"ﻃﺮﻕ ﺍﻟﻤﺜﻴﻞ"‬
‫"ﺍﺭﺳﻢ ﻣﻀﻠﻌﺎً"‬
‫ﻳﺮﺳﻢ‬
‫ﻋﺪﺩﻣﺮﺍﺕ ﺗﻜﺮﺍﺭ‪ourPen go: sideLength] :‬؛‬
‫ﺑﺪﻭﺭﻩ‪[numSides // 360:‬‬

‫ﻃﻮﻝ"ﺿﺒﻂ ﻃﻮﻝ ﺍﻟﺠﻮﺍﻧﺐ"‪ :‬ﻟﻴﻦ‬

‫ﻟﻴﻦ‪sideLength >-‬‬

‫"ﺗﻌﻴﻴﻦ ﻋﺪﺩ ﺍﻟﺠﻮﺍﻧﺐ" ﺟﻮﺍﻧﺐ‪:‬‬


‫ﺍﻷﺳﻄﻮﺍﻧﺎﺕ‬
‫ﻋﺪﺩ‪numSides >-‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪88‬‬

‫‪2.16‬ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪++ C :‬‬


‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ C‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 2.12‬؛ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ Simula 67‬ﻓﻲ ﺍﻟﻘﺴﻢ‬
‫‪ 2.10‬؛ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ Smalltalk‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪ .2.15‬ﺗﺒﻨﻲ ‪ ++ C‬ﺗﺴﻬﻴﻼﺕ ﻟﻐﻮﻳﺔ ‪،‬‬
‫ﻣﺴﺘﻌﺎﺭﺓﻣﻦ ‪ ، Simula 67‬ﻋﻠﻰ ﺭﺃﺱ ‪ C‬ﻟﺪﻋﻢ ﺍﻟﻜﺜﻴﺮ ﻣﻤﺎ ﺍﺑﺘﻜﺮﻩ ‪ .Smalltalk‬ﺗﻄﻮﺭﺕ ‪++ C‬‬
‫ﻣﻦﻟﻐﺔ ‪ C‬ﻣﻦ ﺧﻼﻝ ﺳﻠﺴﻠﺔ ﻣﻦ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻟﺘﺤﺴﻴﻦ ﻣﻴﺰﺍﺗﻬﺎ ﺍﻟﺤﺘﻤﻴﺔ ﻭﻹﺿﺎﻓﺔ ﺑﻨﻴﺎﺕ ﻟﺪﻋﻢ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫‪2.16.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺗﻢﺍﺗﺨﺎﺫ ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻣﻦ ‪ C‬ﻧﺤﻮ ‪ ++ C‬ﺑﻮﺍﺳﻄﺔ ‪ Bjarne Stroustrup‬ﻓﻲ ‪Laboratories‬‬
‫‪ Bell‬ﻓﻲ ﻋﺎﻡ ‪ .1980‬ﺗﻀﻤﻨﺖ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻷﻭﻟﻴﺔ ﻋﻠﻰ ‪ C‬ﺇﺿﺎﻓﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﻣﻌﻠﻤﺔ‬
‫ﺍﻟﻮﻇﻴﻔﺔﻭﺍﻟﺘﺤﻮﻳﻞ ‪ ،‬ﻭﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﺍﻟﻔﺉﺎﺕ ‪ ،‬ﺍﻟﺘﻲ ﺗﺮﺗﺒﻂ ﺑﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ SIMULA 67‬ﻭ‬
‫‪ . Smalltalk‬ﺗﻢ ﺃﻳﻀﺎً ﺗﻀﻤﻴﻦ ﺍﻟﻔﺉﺎﺕ ﺍﻟﻤﺸﺘﻘﺔ ‪ ،‬ﻭﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻌﺎﻡ ‪ /‬ﺍﻟﺨﺎﺹ‬
‫ﻟﻠﻤﻜﻮﻧﺎﺕﺍﻟﻤﻮﺭﻭﺛﺔ ‪ ،‬ﻭﻃﺮﻕ ﺍﻟﻤﻨُﺸﺊ ﻭﺍﻟﺘﺪﻣﻴﺮ ‪ ،‬ﻭﻓﺉﺎﺕ ﺍﻷﺻﺪﻗﺎء‪ .‬ﺧﻼﻝ ﻋﺎﻡ ‪ ، 1981‬ﺗﻤﺖ‬
‫ﺇﺿﺎﻓﺔﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻤﻀﻤﻨﺔ ﻭﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﻭﺍﻟﺤﻤﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻤﺸﻐﻞ ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬
‫ﻛﺎﻧﺖﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﺗﺴﻤﻰ ‪ C‬ﻣﻊ ‪ Classes‬ﻭﺗﻢ ﻭﺻﻔﻬﺎ ﻓﻲ (‪.Stroustrup )1983‬‬

‫ﻣﻦﺍﻟﻤﻔﻴﺪ ﺍﻟﻨﻈﺮ ﻓﻲ ﺑﻌﺾ ﺃﻫﺪﺍﻑ ‪ C‬ﻣﻊ ﺍﻟﻔﺉﺎﺕ‪ .‬ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﻫﻮ ﺗﻮﻓﻴﺮ ﻟﻐﺔ‬
‫ﻳﻤﻜﻦﺗﻨﻈﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺎ ﻛﻤﺎ ﻳﻤﻜﻦ ﺗﻨﻈﻴﻤﻬﺎ ﻓﻲ ‪ - SIMULA 67‬ﺃﻱ ﻣﻊ ﺍﻟﻔﺼﻮﻝ ﻭﺍﻟﻤﻴﺮﺍﺙ‪.‬‬
‫ﺍﻟﻬﺪﻑﺍﻟﺜﺎﻧﻲ ﺍﻟﻤﻬﻢ ﻫﻮ ﺃﻧﻪ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﻋﻘﻮﺑﺔ ﺍﻷﺩﺍء ﺑﺎﻟﻨﺴﺒﺔ ﻟـ ‪ .C‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺍﻋﺘﺒﺎﺭ ﻓﺤﺺ ﻧﻄﺎﻕ ﻓﻬﺮﺱ ﺍﻟﺼﻔﻴﻒ ﺣﺘﻰ ﺑﺴﺒﺐ ﻭﺟﻮﺩ ﻋﻴﺐ ﻛﺒﻴﺮ ﻓﻲ‬
‫ﺍﻷﺩﺍء ‪،‬ﺑﺎﻟﻨﺴﺒﺔ ﻟـ ‪ ، C‬ﻗﺪ ﻳﻨﺘﺞ ﻋﻨﻪ‪ .‬ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﺍﻟﺜﺎﻟﺚ ﻟـ ‪ C with Classes‬ﻫﻮ ﺃﻧﻪ ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻪﻟﻜﻞ ﺗﻄﺒﻴﻖ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ‪ C‬ﻓﻴﻪ ‪ ،‬ﻟﺬﻟﻚ ﻟﻦ ﺗﺘﻢ ﺇﺯﺍﻟﺔ ﺃﻱ ﻣﻦ ﻣﻴﺰﺍﺕ ‪ C‬ﺗﻘﺮﻳﺒﺎً ‪،‬‬
‫ﻭﻻﺣﺘﻰ ﺗﻠﻚ ﺍﻟﺘﻲ ﺗﻌﺘﺒﺮ ﻏﻴﺮ ﺁﻣﻨﺔ‪.‬‬

‫ﺑﺤﻠﻮﻝﻋﺎﻡ ‪ ، 1984‬ﺗﻢ ﺗﻮﺳﻴﻊ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻣﻦ ﺧﻼﻝ ﺗﻀﻤﻴﻦ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﺗﻮﻓﺮﺭﺑﻄﺎً ﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻻﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﺘﻌﺮﻳﻔﺎﺕ ﻃﺮﻳﻘﺔ ﻣﺤﺪﺩﺓ ‪ ،‬ﻭﺍﺳﻢ ﺍﻟﻄﺮﻳﻘﺔ ﻭﺍﻟﺤﻤﻞ‬
‫ﺍﻟﺰﺍﺉﺪﻟﻠﻤﺸﻐﻞ ‪ ،‬ﻭﺃﻧﻮﺍﻉ ﺍﻟﻤﺮﺍﺟﻊ‪ .‬ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﻣﻦ ﺍﻟﻠﻐﺔ ﻛﺎﻥ ﻳﺴﻤﻰ ‪ .++ C‬ﺗﻢ ﻭﺻﻔﻪ ﻓﻲ‬
‫(‪.Stroustrup )1984‬‬
‫ﻓﻲﻋﺎﻡ ‪ ، 1985‬ﻇﻬﺮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻣﺘﺎﺡ‪ :‬ﻧﻈﺎﻡ ﻳﺴﻤﻰ ‪ ، Cfront‬ﻭﺍﻟﺬﻱ ﺗﺮﺟﻢ ﺑﺮﺍﻣﺞ ‪++ C‬‬
‫ﺇﻟﻰﺑﺮﺍﻣﺞ ‪ .C‬ﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﻣﻦ ‪ Cfront‬ﻭﺇﺻﺪﺍﺭ ‪ ++ C‬ﺍﻟﺬﻱ ﺗﻢ ﺗﻨﻔﻴﺬﻩ ﺑﺎﻹﺻﺪﺍﺭ‬
‫‪.1.0‬ﺗﻢ ﻭﺻﻔﻪ ﻓﻲ (‪.Stroustrup )1986‬‬

‫ﺑﻴﻦﻋﺎﻣﻲ ‪ 1985‬ﻭ ‪ ، 1989‬ﺍﺳﺘﻤﺮ ﺗﻄﻮﺭ ‪ ، ++ C‬ﺍﺳﺘﻨﺎﺩﺍً ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻋﻠﻰ ﺭﺩﻭﺩ ﻓﻌﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﻋﻠﻰ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﻮﺯﻉ ﺍﻷﻭﻝ‪ .‬ﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻹﺻﺪﺍﺭ ‪ .2.0‬ﺗﻢ ﺇﺻﺪﺍﺭ‬
‫ﺗﻄﺒﻴﻖ‪ Cfront‬ﺍﻟﺨﺎﺹ ﺑﻪ ﻓﻲ ﻳﻮﻧﻴﻮ ‪ .1989‬ﻛﺎﻧﺖ ﺃﻫﻢ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻀﺎﻓﺔ ﺇﻟﻰ ‪+ Release 2.0‬‬
‫‪ C +‬ﻫﻲ ﺩﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ )ﺍﻟﻔﺉﺎﺕ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻛﺜﺮ ﻣﻦ ﻓﺉﺔ ﺭﺉﻴﺴﻴﺔ ﻭﺍﺣﺪﺓ(‬
‫ﻭﺍﻟﻔﺉﺎﺕﺍﻟﻤﺠﺮﺩﺓ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺑﻌﺾ ﺍﻟﺘﺤﺴﻴﻨﺎﺕ ﺍﻷﺧﺮﻯ‪ .‬ﺗﻢ ﻭﺻﻒ ﻓﺉﺎﺕ ﺍﻟﻤﻠﺨﺼﺎﺕ ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪.12‬‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﺍﻹﺻﺪﺍﺭ ‪ 3.0‬ﻣﻦ ‪ ++ C‬ﺑﻴﻦ ﻋﺎﻣﻲ ‪ 1989‬ﻭ ‪ .1990‬ﻭﻗﺪ ﺃﺿﺎﻑ ﺍﻟﻘﻮﺍﻟﺐ ﺍﻟﺘﻲ‬
‫ﺗﻮﻓﺮﺃﻧﻮﺍﻋﺎً ﺫﺍﺕ ﻣﻌﻠﻤﺎﺕ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ‪ .‬ﺍﻟﻨﺴﺨﺔ ﺍﻟﺤﺎﻟﻴﺔ ﻣﻦ ‪ ، ++ C‬ﻭﺍﻟﺘﻲ ﺗﻢ‬
‫ﺗﻮﺣﻴﺪﻫﺎﻓﻲ ﻋﺎﻡ ‪ ، 1998‬ﻣﻮﺻﻮﻓﺔ ﻓﻲ (‪.ISO )1998‬‬
‫‪89‬‬ ‫‪2.16‬ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪++ C :‬‬

‫ﻓﻲﻋﺎﻡ ‪ ، 2002‬ﺃﺻﺪﺭﺕ ‪ Microsoft‬ﻣﻨﺼﺔ ﺍﻟﺤﻮﺳﺒﺔ ‪ NET.‬ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻭﺍﻟﺘﻲ‬


‫ﺗﻀﻤﻨﺖﺇﺻﺪﺍﺭﺍً ﺟﺪﻳﺪﺍً ﻣﻦ ‪ ، ++ C‬ﻳﺴُﻤﻰ ‪ ، ++ Managed C‬ﺃﻭ ‪ .++ MC‬ﻳﻘﻮﻡ ‪++ MC‬‬
‫ﺑﺘﻮﺳﻴﻊ‪ ++ C‬ﻟﺘﻮﻓﻴﺮ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻭﻇﺎﺉﻒ ‪ .NET Framework.‬ﺗﺸﻤﻞ ﺍﻹﺿﺎﻓﺎﺕ‬
‫ﺍﻟﺨﺼﺎﺉﺺﻭﺍﻟﻤﻔﻮﺿﻴﻦ ﻭﺍﻟﻮﺍﺟﻬﺎﺕ ﻭﻧﻮﻉ ﻣﺮﺟﻌﻲ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺟﻤﻌﻬﺎ ﻣﻦ ‪.Garbag‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺨﺼﺎﺉﺺ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .11‬ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻤﻨﺪﻭﺑﻴﻦ ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﻣﻘﺪﻣﺔ ‪ # C‬ﻓﻲ‬
‫ﺍﻟﻘﺴﻢ‪ .2.19‬ﻷﻥ ‪ NET.‬ﻻ ﻳﻌﺘﻤﺪ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ‪ ،‬ﻭﻻ ‪ ++ MC‬ﺃﻳﻀﺎً‪.‬‬

‫‪2.16.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻧﻈﺮﺍًﻷﻥ ‪ ++ C‬ﻟﻬﺎ ﻭﻇﺎﺉﻒ ﻭﻃﺮﻕ ‪ ،‬ﻓﻬﻲ ﺗﺪﻋﻢ ﻛﻞ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬
‫ﻳﻤﻜﻦﺯﻳﺎﺩﺓ ﺍﻟﺘﺤﻤﻴﻞ ﻋﻠﻰ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻓﻲ ‪ ، ++ C‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺇﻧﺸﺎء‬
‫ﻋﻮﺍﻣﻞﺗﺸﻐﻴﻞ ﻟﻠﻤﺸﻐﻠﻴﻦ ﺍﻟﺤﺎﻟﻴﻴﻦ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﺤﺪﺩﺓ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﺃﻳﻀﺎً‬
‫ﺗﺤﻤﻴﻞﻃﺮﻕ ‪ ++ C‬ﺑﺸﻜﻞ ﺯﺍﺉﺪ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺗﺤﺪﻳﺪ ﺃﻛﺜﺮ ﻣﻦ ﻃﺮﻳﻘﺔ‬
‫ﻭﺍﺣﺪﺓﺑﻨﻔﺲ ﺍﻻﺳﻢ ‪ ،‬ﺑﺸﺮﻁ ﺃﻥ ﺗﻜﻮﻥ ﺃﺭﻗﺎﻡ ﺃﻭ ﺃﻧﻮﺍﻉ ﻣﻌﻠﻤﺎﺗﻬﺎ ﻣﺨﺘﻠﻔﺔ‪.‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻓﻲ ‪ ++ C‬ﺑﺎﻟﻄﺮﻕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﺗﺤﺪﺩ ﻫﺬﻩ ﺍﻟﻄﺮﻕ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻤﻌﺘﻤﺪﺓﻋﻠﻰ ﺍﻟﻨﻮﻉ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻃﺮﻕ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ‪ ،‬ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻔﺉﺎﺕ‬
‫ﺍﻟﻤﺮﺗﺒﻄﺔﺑﺎﻟﻮﺭﺍﺛﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺸﻴﺮ ﺍﻟﻤﺆﺷﺮ ﺇﻟﻰ ﻛﺎﺉﻦ ﻣﻦ ﺍﻟﻔﺉﺔ ‪ A‬ﺃﻳﻀﺎً ﺇﻟﻰ ﻛﺎﺉﻨﺎﺕ ﻣﻦ‬
‫ﺍﻟﻔﺉﺎﺕﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻔﺉﺔ ‪ A‬ﻛﺄﺻﻞ‪ .‬ﻋﻨﺪﻣﺎ ﻳﺸﻴﺮ ﻫﺬﺍ ﺍﻟﻤﺆﺷﺮ ﺇﻟﻰ ﻃﺮﻳﻘﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ‬
‫ﻣﺤﻤﻠﺔﺑﺸﻜﻞ ﺯﺍﺉﺪ ‪ ،‬ﻳﺘﻢ ﺍﺧﺘﻴﺎﺭ ﻃﺮﻳﻘﺔ ﺍﻟﻨﻮﻉ ﺍﻟﺤﺎﻟﻲ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪.‬‬

‫ﻳﻤﻜﻦﻗﻮﻟﺒﺔ ﻛﻞ ﻣﻦ ﺍﻟﻄﺮﻕ ﻭﺍﻟﻔﺉﺎﺕ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﻌﻠﻤﺎﺗﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻃﺮﻳﻘﺔ ﻛﻄﺮﻳﻘﺔ ﻣﻘﻮﻟﺒﺔ ﻟﻠﺴﻤﺎﺡ ﻟﻬﺎ ﺑﺎﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻤﺠﻤﻮﻋﺔ‬
‫ﻣﺘﻨﻮﻋﺔﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﻠﻤﺎﺕ‪ .‬ﺗﺘﻤﺘﻊ ﺍﻟﻔﺼﻮﻝ ﺑﻨﻔﺲ ﺍﻟﻤﺮﻭﻧﺔ‪.‬‬

‫ﻳﺪﻋﻢ‪ ++ C‬ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ‪ .‬ﻳﺘﻀﻤﻦ ﺃﻳﻀﺎً ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺍﺧﺘﻼﻓﺎً‬
‫ﻛﺒﻴﺮﺍًﻋﻦ ﻣﻌﺎﻟﺠﺔ ‪ .Ada‬ﻳﺘﻤﺜﻞ ﺃﺣﺪ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦﺍﻛﺘﺸﺎﻓﻬﺎ ﺑﺸﺪﺓ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻨﻴﺎﺕ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻟﻜﻞ ﻣﻦ ‪ Ada‬ﻭ ‪ ++ C‬ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪.14‬‬

‫‪2.16.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﺳﺮﻋﺎﻥﻣﺎ ﺃﺻﺒﺤﺖ ﻟﻐﺔ ‪ ++ C‬ﻟﻐﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻭﻻ ﺗﺰﺍﻝ ﻛﺬﻟﻚ‪ .‬ﺃﺣﺪ ﺍﻟﻌﻮﺍﻣﻞ‬
‫ﻓﻲﺷﻌﺒﻴﺘﻬﺎ ﻫﻮ ﺗﻮﺍﻓﺮ ﻣﺘﺮﺟﻤﻴﻦ ﺟﻴﺪﻳﻦ ﻭﻏﻴﺮ ﻣﻜﻠﻔﻴﻦ‪ .‬ﻋﺎﻣﻞ ﺁﺧﺮ ﻫﻮ ﺃﻧﻪ ﻣﺘﻮﺍﻓﻖ ﺗﻤﺎﻣﺎً ﺗﻘﺮﻳﺒﺎً‬
‫ﻣﻊ‪) C‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻥ ﺑﺮﺍﻣﺞ ‪ C‬ﻳﻤﻜﻦ ‪ ،‬ﻣﻊ ﺗﻐﻴﻴﺮﺍﺕ ﻗﻠﻴﻠﺔ ‪ ،‬ﺗﺠﻤﻴﻌﻬﺎ ﻛﺒﺮﺍﻣﺞ ‪ ، (++ C‬ﻭﻓﻲ‬
‫ﻣﻌﻈﻢﺍﻟﺘﻄﺒﻴﻘﺎﺕ ‪ ،‬ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺭﺑﻂ ﻛﻮﺩ ‪ ++ C‬ﺑﺮﻣﺰ ‪ - C‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺳﻬﻞ ﻧﺴﺒﻴﺎً ﺑﺎﻟﻨﺴﺒﺔ ﻟـ‬
‫ﺍﻟﻌﺪﻳﺪﻣﻦ ﻣﺒﺮﻣﺠﻲ ‪ C‬ﻟﺘﻌﻠﻢ ‪ .++ C‬ﺃﺧﻴﺮﺍً ‪ ،‬ﻓﻲ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﻇﻬﺮﺕ ﻓﻴﻪ ‪ ++ C‬ﻷﻭﻝ ﻣﺮﺓ ‪،‬‬
‫ﻋﻨﺪﻣﺎﺑﺪﺃﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺗﺤﻈﻰ ﺑﺎﻫﺘﻤﺎﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ‪ ،‬ﻛﺎﻧﺖ ‪ ++ C‬ﻫﻲ‬
‫ﺍﻟﻠﻐﺔﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﺘﺎﺣﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻣﻨﺎﺳﺒﺔ ﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﺍﻟﻜﺒﻴﺮﺓ‪.‬‬

‫ﻋﻠﻰﺍﻟﺠﺎﻧﺐ ﺍﻟﺴﻠﺒﻲ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ ‪ ++ C‬ﻫﻲ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ﺟﺪﺍً ‪ ،‬ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻬﺎ‬
‫ﺗﻌﺎﻧﻲﻣﻦ ﻋﻴﻮﺏ ﻣﻤﺎﺛﻠﺔ ﻟﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ .PL / I‬ﻟﻘﺪ ﻭﺭﺛﺖ ﻣﻌﻈﻢ ﺣﺎﻻﺕ ﻋﺪﻡ ﺍﻷﻣﺎﻥ ﻓﻲ ﻟﻐﺔ‬
‫‪ ، C‬ﻣﻤﺎ ﻳﺠﻌﻠﻬﺎ ﺃﻗﻞ ﺃﻣﺎﻧﺎً ﻣﻦ ﻟﻐﺎﺕ ﻣﺜﻞ ‪ Ada‬ﻭ ‪.Java‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪90‬‬

‫‪2.16.4‬ﻟﻐﺔ ﺫﺍﺕ ﺻﻠﺔ‪ :‬ﺍﻟﻬﺪﻑ‪C -‬‬


‫‪.‬ﻟﻬﺬﺍﺍﻟﺪﻋﻢ ‪ Smalltalk‬ﻫﻮ ﺍﻟﻮﺣﻴﺪ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﺻﻴﻐﺔ ‪ Objective-C‬ﻣﻦ ﺑﻴﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻋﻦ ﻃﺮﻳﻖ ﺇﺿﺎﻓﺔ ﺩﻋﻢ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺇﻟﻰ ﻟﻐﺔ ﺣﺘﻤﻴﺔ ‪،‬‬
‫ﻓﺈﻥ ‪ Smalltalk.‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻔﺉﺎﺕ ﻭﺭﺳﺎﻟﺔ ﺗﻤﺮﻳﺮ ‪ C‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪،‬‬
‫ﻛﺎﻥﻳﺘﺄﻟﻒ ﻣﻦ ‪ Tom Love‬ﻭ ‪ Brad Cox‬ﺑﻮﺍﺳﻄﺔ ‪ Objective-C‬ﻫﻲ ﻟﻐﺔ ﻫﺠﻴﻨﺔ ﺃﺧﺮﻯ ﺑﻬﺎ‬
‫ﻣﻴﺰﺍﺕﺣﺘﻤﻴﺔ ﻭﻣﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ (ﻛﻮﺗﺸﺎﻥ ‪Objective-C )2009 ،‬‬

‫ﺑﻌﺪﺃﻥ ﺗﺮﻙ ﺳﺘﻴﻒ ﺟﻮﺑﺰ ﺷﺮﻛﺔ ‪ Apple‬ﻭﺃﺳﺲ ﺷﺮﻛﺔ ‪ ، NeXT‬ﻗﺎﻡ ﺑﺘﺮﺧﻴﺺ ‪-C‬‬
‫‪ Objective‬ﻭﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ .NeXT‬ﺃﺻﺪﺭﺕ ‪ NeXT‬ﺃﻳﻀ ًﺎ‬
‫ﻣﺘﺮﺟﻤﻬﺎ‪ ، Objective-C‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺑﻴﺉﺔ ﺗﻄﻮﻳﺮ ‪ NeXTstep‬ﻭﻣﻜﺘﺒﺔ ﻣﻦ ﺍﻟﻤﺮﺍﻓﻖ‪.‬‬
‫ﺑﻌﺪﻓﺸﻞ ﻣﺸﺮﻭﻉ ‪ ، NeXT‬ﺍﺷﺘﺮﺕ ‪ Apple NeXT‬ﻭﺍﺳﺘﺨﺪﻣﺖ ‪ Objective-C‬ﻟﻜﺘﺎﺑﺔ ‪-C‬‬
‫‪ MAC OS X. Objective‬ﻫﻲ ﻟﻐﺔ ﺟﻤﻴﻊ ﺑﺮﺍﻣﺞ ‪ ، iPhone‬ﻭﻫﻮ ﻣﺎ ﻳﻔﺴﺮ ﺍﻻﺭﺗﻔﺎﻉ ﺍﻟﺴﺮﻳﻊ ﻓﻲ‬
‫ﺷﻌﺒﻴﺘﻬﺎﺑﻌﺪ ﻇﻬﻮﺭ ‪.iPhone‬‬

‫ﺇﺣﺪﻯﺍﻟﺴﻤﺎﺕ ﺍﻟﺘﻲ ﻭﺭﺛﻬﺎ ‪ Objective-C‬ﻣﻦ ‪ Smalltalk‬ﻫﻲ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬


‫ﻟﻠﺮﺳﺎﺉﻞﺑﺎﻟﻜﺎﺉﻨﺎﺕ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻻ ﻳﻮﺟﺪ ﻓﺤﺺ ﺛﺎﺑﺖ ﻟﻠﺮﺳﺎﺉﻞ‪ .‬ﺇﺫﺍ ﺗﻢ ﺇﺭﺳﺎﻝ ﺭﺳﺎﻟﺔ ﺇﻟﻰ‬
‫ﻛﺎﺉﻦﻭﻻ ﻳﻤﻜﻦ ﻟﻠﻜﺎﺉﻦ ﺍﻻﺳﺘﺠﺎﺑﺔ ﻟﻠﺮﺳﺎﻟﺔ ‪ ،‬ﻓﻠﻦ ﻳﻜﻮﻥ ﻣﻌﺮﻭﻓﺎً ﺣﺘﻰ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻋﻨﺪ‬
‫ﻇﻬﻮﺭﺍﺳﺘﺜﻨﺎء‪.‬‬

‫ﻓﻲﻋﺎﻡ ‪ ، 2006‬ﺃﻋﻠﻨﺖ ﺷﺮﻛﺔ ‪ Apple‬ﻋﻦ ‪ ، Objective-C 2.0‬ﻭﺍﻟﺬﻱ ﺃﺿﺎﻑ ﺷﻜﻼ ًﻣﻦ‬


‫ﺃﺷﻜﺎﻝﺟﻤﻊ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻬﻤﻠﺔ ﻭﺑﻨﺎء ﺟﻤﻠﺔ ﺟﺪﻳﺪ ﻹﻋﻼﻥ ﺍﻟﺨﺼﺎﺉﺺ‪ .‬ﻟﺴﻮء ﺍﻟﺤﻆ ‪ ،‬ﻻ ﻳﺘﻢ ﺩﻋﻢ‬
‫ﺟﻤﻊﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻬﻤﻠﺔ ﺑﻮﺍﺳﻄﺔ ﻧﻈﺎﻡ ﻭﻗﺖ ﺗﺸﻐﻴﻞ ‪.iPhone‬‬
‫‪ Objective-C.‬ﻟﺬﺍ ﻓﺈﻥ ﺟﻤﻴﻊ ﺃﻭﺟﻪ ﻋﺪﻡ ﺍﻷﻣﺎﻥ ﻓﻲ ﺗﻠﻚ ﺍﻟﻠﻐﺔ ﻣﻮﺟﻮﺩﺓ ﻓﻲ ‪ C ،‬ﻫﻲ‬
‫ﻣﺠﻤﻮﻋﺔﺷﺎﻣﻠﺔ ﺻﺎﺭﻣﺔ ﻣﻦ ‪Objective-C‬‬

‫‪2.16.5‬ﻟﻐﺔ ﺃﺧﺮﻯ ﺫﺍﺕ ﺻﻠﺔ‪ :‬ﺩﻟﻔﻲ‬


‫ﺩﻟﻔﻲ)ﻟﻴﺴﻨﺮ ‪ (2000 ،‬ﻫﻲ ﻟﻐﺔ ﻫﺠﻴﻨﺔ ‪ ،‬ﺷﺒﻴﻬﺔ ﺑـ ‪ ++ C‬ﻭ ‪ Objetive-C‬ﺣﻴﺚ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻋﻦ‬
‫ﻃﺮﻳﻖﺇﺿﺎﻓﺔ ﺩﻋﻢ ﻣﻮﺟﻪ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ ‪ ،‬ﺇﻟﻰ ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻮﺩﺓ ‪ ،‬ﻓﻲ ﻫﺬﻩ‬
‫ﺍﻟﺤﺎﻟﺔﺑﺎﺳﻜﺎﻝ‪ .‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻻﺧﺘﻼﻓﺎﺕ ﺑﻴﻦ ‪ ++ C‬ﻭ ‪ Delphi‬ﻫﻲ ﻧﺘﻴﺠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ‬
‫ﻭﺛﻘﺎﻓﺎﺕﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺤﻴﻄﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺷﺘﻘﺎﻗﻬﺎ ﻣﻨﻬﺎ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ‪ C‬ﻟﻐﺔ ﻗﻮﻳﺔ ﻭﻟﻜﻨﻬﺎ ﻗﺪ ﺗﻜﻮﻥ ﻏﻴﺮ‬
‫ﺁﻣﻨﺔ ‪،‬ﻓﺈﻥ ‪ ++ C‬ﺗﻨﺎﺳﺐ ﻫﺬﺍ ﺍﻟﻮﺻﻒ ﺃﻳﻀﺎً ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﻣﺠﺎﻻﺕ ﻓﺤﺺ ﻧﻄﺎﻕ ﺍﻟﺼﻔﻴﻒ‬
‫ﺍﻟﻤﻨﺨﻔﺾ ‪،‬ﻭﺣﺴﺎﺏ ﺍﻟﻤﺆﺷﺮ ‪ ،‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ ﺍﻟﻨﻮﻉ‪ .‬ﻭﺑﺎﻟﻤﺜﻞ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ‬
‫‪ Pascal‬ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﺃﻣﺎﻧﺎً ﻣﻦ ‪ ، C‬ﻓﺈﻥ ‪ Delphi‬ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﺃﻣﺎﻧﺎً ﻣﻦ ‪ .++ C‬ﺩﻟﻔﻲ ﺃﻳﻀﺎً ﺃﻗﻞ‬
‫ﺗﻌﻘﻴﺪﺍًﻣﻦ ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻻ ﺗﺴﻤﺢ ﺩﻟﻔﻲ ﺑﺎﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬‬
‫ﻭﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﺎﻣﺔ ‪ ،‬ﻭﺍﻟﻔﺉﺎﺕ ﺫﺍﺕ ﺍﻟﻤﻌﻠﻤﺎﺕ ‪ ،‬ﻭﻛﻠﻬﺎ ﺟﺰء ﻣﻦ ‪.++ C‬‬

‫ﺗﻮﻓﺮﺩﻟﻔﻲ ‪ ،‬ﻣﺜﻞ ‪ ، ++ Visual C‬ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ )‪ (GUI‬ﻟﻠﻤﻄﻮﺭ ﻭﻃﺮﻕ‬


‫ﺑﺴﻴﻄﺔﻹﻧﺸﺎء ﻭﺍﺟﻬﺎﺕ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻲ ﺩﻟﻔﻲ‪ .‬ﺗﻢ‬
‫ﺗﺼﻤﻴﻢﺩﻟﻔﻲ ﺑﻮﺍﺳﻄﺔ ‪ ، Anders Hejlsberg‬ﺍﻟﺬﻱ ﺳﺒﻖ ﺃﻥ ﻃﻮﺭ ﻧﻈﺎﻡ ‪.Turbo Pascal‬‬
‫ﻛﻼﻫﻤﺎﺗﻢ ﺗﺴﻮﻳﻘﻪ ﻭﺗﻮﺯﻳﻌﻪ ﺑﻮﺍﺳﻄﺔ ‪ .Borland‬ﻛﺎﻥ ‪ Hejlsberg‬ﺃﻳﻀﺎً ﺍﻟﻤﺼﻤﻢ ﺍﻟﺮﺉﻴﺴﻲ ﻟـ ‪C‬‬
‫‪.#‬‬
‫‪91‬‬ ‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬

‫‪2.16.6‬ﻟﻐﺔ ﺫﺍﺕ ﺻﻠﺔ ﻓﻀﻔﺎﺿﺔ‪Go :‬‬


‫ﻻﺗﺮﺗﺒﻂ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ Go‬ﻣﺒﺎﺷﺮﺓ ﺑـ ‪ ، ++ C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ‪ .C‬ﺇﻧﻪ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻘﺴﻢﺟﺰﺉﻴﺎً ﻷﻧﻪ ﻻ ﻳﺴﺘﺤﻖ ﻗﺴﻤﺎً ﺧﺎﺻﺎً ﺑﻪ ﻭﻻ ﻳﻨﺎﺳﺐ ﺃﻱ ﻣﻜﺎﻥ ﺁﺧﺮ‪.‬‬

‫ﺗﻢﺗﺼﻤﻴﻢ ‪ Go‬ﺑﻮﺍﺳﻄﺔ ‪ Rob Pike‬ﻭ ‪ Ken Thompson‬ﻭ ‪ Robert Griesemer‬ﻓﻲ ‪ .Google‬ﻃﻮﻣﺴﻮﻥ ﻫﻮ‬
‫ﻣﺼﻤﻢﺳﻠﻒ ‪ ، C ، B‬ﻭﻛﺬﻟﻚ ﺍﻟﻤﺼﻤﻢ ﻣﻊ ‪ Dennis Ritchie‬ﻣﻦ ‪ .UNIX‬ﻛﺎﻥ ﻫﻮ ﻭﺑﺎﻳﻚ ﻳﻌﻤﻼﻥ ﺳﺎﺑﻘﺎً ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ‬
‫ﺑﻴﻞ‪.‬ﺑﺪﺃ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻓﻲ ﻋﺎﻡ ‪ 2007‬ﻭﺗﻢ ﺇﺻﺪﺍﺭ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﻭﻝ ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ .2009‬ﻛﺎﻥ ﺃﺣﺪ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﻭﻟﻴﺔ ﻟـ ‪Go‬‬
‫ﻫﻮﺑﻂء ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ‪ ++ C‬ﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ ‪ .Google‬ﻭﺍﺣﺪﺓ ﻣﻦ ﺧﺼﺎﺉﺺ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻷﻭﻟﻲ ﻟـ ‪ Go‬ﻫﻲ ﺃﻧﻪ ﺳﺮﻳﻊ ﻟﻠﻐﺎﻳﺔ‪.‬‬
‫ﺗﺴﺘﻌﻴﺮﻟﻐﺔ ‪ Go‬ﺑﻌﻀﺎً ﻣﻦ ﺗﺮﻛﻴﺒﻬﺎ ﻭﺗﺮﻛﻴﺒﺎﺗﻬﺎ ﻣﻦ ‪ .C‬ﺗﺘﻀﻤﻦ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻟـ ‪ Go‬ﻣﺎ ﻳﻠﻲ‪ (1) :‬ﻳﺘﻢ ﻋﻜﺲ‬
‫ﺑﻴﺎﻧﺎﺕﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺸﻜﻞ ﻧﺤﻮﻱ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ‪ C‬؛ )‪ (2‬ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺗﺴﺒﻖ ﺍﺳﻢ ﺍﻟﻨﻮﻉ ؛ )‪ (3‬ﻳﻤﻜﻦ ﺇﻋﻄﺎء‬
‫ﺍﻟﺘﺼﺮﻳﺤﺎﺕﺍﻟﻤﺘﻐﻴﺮﺓ ﻧﻮﻋﺎً ﺑﺎﻻﺳﺘﺪﻻﻝ ﺇﺫﺍ ﺗﻢ ﺇﻋﻄﺎء ﺍﻟﻤﺘﻐﻴﺮ ﻗﻴﻤﺔ ﺃﻭﻟﻴﺔ ؛ ﻭ )‪ (4‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺮﺟﻊ ﺍﻟﺪﺍﻻﺕ ﻗﻴﻤﺎً ﻣﺘﻌﺪﺩﺓ‪ .‬ﻻ‬
‫ﺗﺪﻋﻢ‪ Go‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﺣﻴﺚ ﻻ ﻳﻮﺟﺪ ﻟﻬﺎ ﺷﻜﻞ ﻣﻦ ﺃﺷﻜﺎﻝ ﺍﻟﻮﺭﺍﺛﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ‬
‫ﺍﻷﺳﺎﻟﻴﺐﻷﻱ ﻧﻮﻉ‪ .‬ﻛﻤﺎ ﺃﻧﻪ ﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ‪ .‬ﺗﺘﺸﺎﺑﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Go‬ﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ‬
‫ﺑﺎﻟﻠﻐﺎﺕﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﻟﻐﺔ ‪ ، C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ ﻳﺘﻀﻤﻦ ﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ‪.‬‬
‫ﻳﺘﻀﻤﻦ‪ Go‬ﻋﺒﺎﺭﺓ ‪ ، goto‬ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ‪ ،‬ﻭﺍﻟﻮﺍﺟﻬﺎﺕ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓﻓﻲ ‪ Java‬ﻭ ‪ ، (# C‬ﻭﺩﻋﻢ ﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ ‪ .goroutines‬ﻛﻤﺎ ﺃﻧﻪ ﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ‪ .‬ﺗﺘﺸﺎﺑﻪ‬
‫ﻋﺒﺎﺭﺍﺕﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Go‬ﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﻟﻐﺔ ‪ ، C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ‬
‫ﻳﺘﻀﻤﻦﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻳﺘﻀﻤﻦ ‪ Go‬ﻋﺒﺎﺭﺓ ‪ ، goto‬ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ‪،‬‬
‫ﻭﺍﻟﻮﺍﺟﻬﺎﺕ)ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ Java‬ﻭ ‪ ، (# C‬ﻭﺩﻋﻢ ﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ ‪ .goroutines‬ﻛﻤﺎ‬
‫ﺃﻧﻪﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ‪ .‬ﺗﺘﺸﺎﺑﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Go‬ﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ‬
‫ﺇﻟﻰﻟﻐﺔ ‪ ، C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ ﻳﺘﻀﻤﻦ ﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻳﺘﻀﻤﻦ ‪ Go‬ﻋﺒﺎﺭﺓ ‪، goto‬‬
‫ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ‪،‬ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ‪ ،‬ﻭﺍﻟﻮﺍﺟﻬﺎﺕ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ Java‬ﻭ ‪، (# C‬‬
‫ﻭﺩﻋﻢﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ ‪.goroutines‬‬

‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬


‫ﺑﺪﺃﻣﺼﻤﻤﻮ ‪ Java‬ﺑـ ‪ ، ++ C‬ﻭﺃﺯﺍﻟﻮﺍ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ‪ ،‬ﻭﻏﻴﺮﻭﺍ ﺑﻌﻀﻬﺎ ‪ ،‬ﻭﺃﺿﻔﻮﺍ ﺍﻟﻘﻠﻴﻞ ﻣﻦ‬
‫ﺍﻟﺒﻨﻰﺍﻷﺧﺮﻯ‪ .‬ﺗﻮﻓﺮ ﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻗﻮﺓ ﻭﻣﺮﻭﻧﺔ ‪ ، ++ C‬ﻭﻟﻜﻦ ﺑﻠﻐﺔ ﺃﺻﻐﺮ ﻭﺃﺑﺴﻂ ﻭﺃﻛﺜﺮ‬
‫ﺃﻣﺎﻧﺎً‪.‬‬

‫‪2.17.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺗﻢﺗﺼﻤﻴﻢ ‪ ، Java‬ﻣﺜﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻟﺘﻄﺒﻴﻖ ﻳﺒﺪﻭ ﺃﻧﻪ ﻻ ﺗﻮﺟﺪ ﻟﻪ ﻟﻐﺔ ﺣﺎﻟﻴﺔ‬
‫ﻣﺮﺿﻴﺔ‪.‬ﻓﻲ ﻋﺎﻡ ‪ ، 1990‬ﻗﺮﺭﺕ ﺷﺮﻛﺔ ‪ Sun Microsystems‬ﺃﻥ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‬
‫ﻟﻸﺟﻬﺰﺓﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ ﺍﻟﻤﻀﻤﻨﺔ ‪ ،‬ﻣﺜﻞ ﺍﻟﻤﺤﻤﺼﺎﺕ ﻭﺃﻓﺮﺍﻥ ﺍﻟﻤﻴﻜﺮﻭﻭﻳﻒ ﻭﺃﻧﻈﻤﺔ‬
‫ﺍﻟﺘﻠﻔﺰﻳﻮﻥﺍﻟﺘﻔﺎﻋﻠﻴﺔ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﺃﺣﺪ ﺍﻷﻫﺪﺍﻑ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺔ‪ .‬ﻗﺪ ﻻ ﻳﺒﺪﻭ ﺃﻥ‬
‫ﺍﻟﻤﻮﺛﻮﻗﻴﺔﺳﺘﻜﻮﻥ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻥ ﺍﻟﻤﻴﻜﺮﻭﻭﻳﻒ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻯ ﺍﻟﻔﺮﻥ ﺑﺮﻧﺎﻣﺞ‬
‫ﻣﻌﻄﻞ ‪،‬ﻓﻤﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻻ ﻳﺸﻜﻞ ﺧﻄﺮﺍً ﻛﺒﻴﺮﺍً ﻋﻠﻰ ﺃﻱ ﺷﺨﺺ ‪ ،‬ﻭﻋﻠﻰ ﺍﻷﺭﺟﺢ ﻟﻦ ﻳﺆﺩﻱ ﺇﻟﻰ‬
‫ﺗﺴﻮﻳﺎﺕﻗﺎﻧﻮﻧﻴﺔ ﻛﺒﻴﺮﺓ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺇﺫﺍ ﺗﺒﻴﻦ ﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻧﻤﻮﺫﺝ ﻣﻌﻴﻦ ﺧﺎﻃﺊ ﺑﻌﺪ ﺗﺼﻨﻴﻊ‬
‫ﻣﻠﻴﻮﻥﻭﺣﺪﺓ ﻭﺑﻴﻌﻬﺎ ‪ ،‬ﻓﺈﻥ ﺍﺳﺘﺮﺟﺎﻋﻬﺎ ﺳﻴﺘﺮﺗﺐ ﻋﻠﻴﻪ ﺗﻜﻠﻔﺔ ﻛﺒﻴﺮﺓ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺍﻟﻤﻮﺛﻮﻗﻴﺔﻳﻜﻮﻥﺳﻤﺔ‬
‫ﻣﻬﻤﺔﻟﻠﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺍﻟﻤﻨﺘﺠﺎﺕ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪92‬‬

‫ﺑﻌﺪﺍﻟﻨﻈﺮ ﻓﻲ ‪ C‬ﻭ ‪ ، ++ C‬ﺗﻘﺮﺭ ﻋﺪﻡ ﺇﺭﺿﺎء ﺃﻱ ﻣﻨﻬﻤﺎ ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﺍﻷﺟﻬﺰﺓ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ‬
‫ﺍﻻﺳﺘﻬﻼﻛﻴﺔ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪ C‬ﻛﺎﻧﺖ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻟﻢ ﺗﻘﺪﻡ ﺩﻋﻤﺎً ﻟﻠﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺸﻴﺉﻴﺔ ‪،‬ﻭﺍﻟﺘﻲ ﺍﻋﺘﺒﺮﻭﻫﺎ ﺿﺮﻭﺭﺓ‪ .‬ﺩﻋﻢ ‪ ++ C‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻭﻟﻜﻦ ﺗﻢ ﺍﻟﺤﻜﻢ‬
‫ﻋﻠﻴﻬﺎﺑﺄﻧﻬﺎ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ﻭﻣﻌﻘﺪﺓ ‪ ،‬ﺟﺰﺉﻴﺎً ﻷﻧﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ‪ .‬ﻛﻤﺎ‬
‫ﻛﺎﻥﻣﻦ ﺍﻟﻤﻌﺘﻘﺪ ﺃﻥ ﻻ ‪ C‬ﻭﻻ ‪ ++ C‬ﺗﻮﻓﺮ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻼﺯﻡ ﻣﻦ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺔ‬
‫ﺟﺪﻳﺪﺓ ‪،‬ﺳﻤﻴﺖ ﻓﻴﻤﺎ ﺑﻌﺪ ‪ .Java‬ﺍﺳﺘﺮﺷﺪ ﺗﺼﻤﻴﻤﻪ ﺑﺎﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﺍﻟﻤﺘﻤﺜﻞ ﻓﻲ ﺗﻮﻓﻴﺮ ﻗﺪﺭ‬
‫ﺃﻛﺒﺮﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻣﻤﺎ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻥ ‪ ++ C‬ﺗﻮﻓﺮﻩ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺪﺍﻓﻊ ﺍﻷﻭﻟﻲ ﻟﺠﺎﻓﺎ ﻛﺎﻥ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻟﻢ ﻳﺘﻢ‬
‫ﺗﺴﻮﻳﻖﺃﻱ ﻣﻦ ﺍﻟﻤﻨﺘﺠﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻌﻬﺎ ﻓﻲ ﺳﻨﻮﺍﺗﻬﺎ ﺍﻷﻭﻟﻰ‪ .‬ﺑﺪءﺍً ﻣﻦ ﻋﺎﻡ ‪، 1993‬‬
‫ﻋﻨﺪﻣﺎﺃﺻﺒﺤﺖ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ ،‬ﻭﺑﺴﺒﺐ ﺍﻟﻤﺘﺼﻔﺤﺎﺕ‬
‫ﺍﻟﺮﺳﻮﻣﻴﺔﺍﻟﺠﺪﻳﺪﺓ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ‪ Java‬ﻛﺄﺩﺍﺓ ﻣﻔﻴﺪﺓ ﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻳﺐ‪ .‬ﻋﻠﻰ ﻭﺟﻪ‬
‫ﺍﻟﺨﺼﻮﺹ ‪،‬ﺃﺻﺒﺤﺖ ﺗﻄﺒﻴﻘﺎﺕ ‪ Java‬ﺍﻟﺼﻐﻴﺮﺓ ‪ ،‬ﻭﻫﻲ ﺑﺮﺍﻣﺞ ‪ Java‬ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻳﺘﻢ ﺗﻔﺴﻴﺮﻫﺎ‬
‫ﻓﻲﻣﺘﺼﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ ﻭﻳﻤﻜﻦ ﺇﺩﺭﺍﺝ ﻣﺨﺮﺟﺎﺗﻬﺎ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ ﺍﻟﻤﻌﺮﻭﺿﺔ ‪ ،‬ﺷﺎﺉﻌﺔ‬
‫ﺟﺪﺍًﻓﻲ ﻣﻨﺘﺼﻒ ﺇﻟﻰ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪ .‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ ﻟﺸﻌﺒﻴﺔ ‪ ، Java‬ﻛﺎﻥ‬
‫ﺍﻟﻮﻳﺐﻫﻮ ﺃﻛﺜﺮ ﺗﻄﺒﻴﻘﺎﺗﻬﺎ ﺷﻴﻮﻋﺎً‪.‬‬

‫ﺗﺮﺃﺱﻓﺮﻳﻖ ﺗﺼﻤﻴﻢ ‪ Java‬ﺟﻴﻤﺲ ﺟﻮﺳﻠﻴﻨﺞ ‪ ،‬ﺍﻟﺬﻱ ﺻﻤﻢ ﺳﺎﺑﻘﺎً ﻣﺤﺮﺭ ‪UNIX emacs‬‬
‫ﻭﻧﻈﺎﻡﺍﻟﻨﻮﺍﻓﺬ ‪.NeWS‬‬

‫‪2.17.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﺗﻌﺘﻤﺪ ‪ Java‬ﻋﻠﻰ ‪ ++ C‬ﻭﻟﻜﻦ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﺧﺼﻴﺼﺎً ﻟﺘﻜﻮﻥ ﺃﺻﻐﺮ ﻭﺃﺑﺴﻂ‬
‫ﻭﺃﻛﺜﺮﻣﻮﺛﻮﻗﻴﺔ‪ .‬ﻣﺜﻞ ‪ ، ++ C‬ﺗﺤﺘﻮﻱ ‪ Java‬ﻋﻠﻰ ﻓﺉﺎﺕ ﻭﺃﻧﻮﺍﻉ ﺑﺪﺍﺉﻴﺔ‪ .‬ﻣﺼﻔﻮﻓﺎﺕ ‪ Java‬ﻫﻲ‬
‫ﺃﻣﺜﻠﺔﻟﻔﺉﺔ ﻣﺤﺪﺩﺓ ﻣﺴﺒﻘﺎً ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ‪ ++ C‬ﻟﻴﺴﺖ ﻛﺬﻟﻚ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﻣﺴﺘﺨﺪﻣﻲ‪ ++ C‬ﻳﻨﺸﺉﻮﻥ ﻓﺉﺎﺕ ﻣﺠﻤﻌﺔ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ﻹﺿﺎﻓﺔ ﻣﻴﺰﺍﺕ ﻣﺜﻞ ﻓﺤﺺ ﻧﻄﺎﻕ‬
‫ﺍﻟﻔﻬﺮﺱ ‪،‬ﻭﻫﻮ ﺃﻣﺮ ﺿﻤﻨﻲ ﻓﻲ ‪.Java‬‬
‫ﻻﺗﺤﺘﻮﻱ ‪ Java‬ﻋﻠﻰ ﻣﺆﺷﺮﺍﺕ ‪ ،‬ﻟﻜﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻤﺮﺍﺟﻊ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﺗﻮﻓﺮ ﺑﻌﺾ ﺇﻣﻜﺎﻧﻴﺎﺕ‬
‫ﺍﻟﻤﺆﺷﺮﺍﺕ‪.‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻤﺮﺍﺟﻊ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺣﺎﻻﺕ ﺍﻟﻔﺼﻞ ﺍﻟﺪﺭﺍﺳﻲ‪ .‬ﻳﺘﻢ ﺗﺨﺼﻴﺺ‬
‫ﻛﺎﻓﺔﺍﻟﻜﺎﺉﻨﺎﺕ ﻓﻲ ﺍﻟﻜﻮﻣﺔ‪ .‬ﻳﺘﻢ ﺩﺍﺉﻤﺎً ﺇﻟﻐﺎء ﺍﻹﺷﺎﺭﺓ ﺑﺸﻜﻞ ﺿﻤﻨﻲ ‪ ،‬ﻋﻨﺪ ﺍﻟﻀﺮﻭﺭﺓ‪ .‬ﻟﺬﺍ ﻓﻬﻢ‬
‫ﻳﺘﺼﺮﻓﻮﻥﻣﺜﻞ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻌﺪﺩﻳﺔ ﺍﻟﻌﺎﺩﻳﺔ‪.‬‬
‫ﺗﺤﺘﻮﻱ‪ Java‬ﻋﻠﻰ ﻧﻮﻉ ‪ Boolean‬ﺑﺪﺍﺉﻲ ﻣﺴﻤﻰﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ‪ ،‬ﺗﺴﺘﺨﺪﻡ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ‬
‫ﻟﺘﻌﺒﻴﺮﺍﺕﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ )ﻣﺜﻞﻟﻮﻭﺑﻴﻨﻤﺎ(‪ .‬ﻋﻠﻰ ﻋﻜﺲ ‪ C‬ﻭ ‪ ، ++ C‬ﻻ‬
‫ﻳﻤﻜﻦﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺘﺤﻜﻢ‪.‬‬
‫ﺃﺣﺪﺍﻻﺧﺘﻼﻓﺎﺕ ﺍﻟﻤﻬﻤﺔ ﺑﻴﻦ ‪ Java‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺳﺎﺑﻘﺎﺗﻬﺎ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ ‪،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ‪ ، ++ C‬ﻫﻮ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻗﺎﺉﻤﺔ ﺑﺬﺍﺗﻬﺎ ﻓﻲ ‪.Java‬‬
‫ﺟﻤﻴﻊﺑﺮﺍﻣﺞ ‪ Java‬ﺍﻟﻔﺮﻋﻴﺔ ﻫﻲ ﻃﺮﻕ ﻭﻳﺘﻢ ﺗﻌﺮﻳﻔﻬﺎ ﻓﻲ ﻓﺉﺎﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺪﻋﺎءﺍﻷﺳﺎﻟﻴﺐ ﻣﻦ ﺧﻼﻝ ﻓﺉﺔ ﺃﻭ ﻛﺎﺉﻦ ﻓﻘﻂ‪ .‬ﺗﺘﻤﺜﻞ ﺇﺣﺪﻯ ﻧﺘﺎﺉﺞ ﺫﻟﻚ ﻓﻲ ﺃﻧﻪ ﺑﻴﻨﻤﺎ‬
‫ﻳﺪﻋﻢ‪ ++ C‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻓﺈﻥ ‪ Java‬ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕﻓﻘﻂ‪.‬‬

‫ﻫﻨﺎﻙﺍﺧﺘﻼﻑ ﻣﻬﻢ ﺁﺧﺮ ﺑﻴﻦ ‪ ++ C‬ﻭ ‪ Java‬ﻭﻫﻮ ﺃﻥ ‪ ++ C‬ﺗﺪﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ﻣﺒﺎﺷﺮﺓ‬
‫ﻓﻲﺗﻌﺮﻳﻔﺎﺕ ﻓﺉﺘﻬﺎ‪ .‬ﺗﺪﻋﻢ ‪ Java‬ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻓﻘﻂ‬
‫‪93‬‬ ‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬

‫ﺗﻮﺭﻳﺚﺍﻟﻔﺉﺎﺕ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺑﻌﺾ ﻓﻮﺍﺉﺪ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺑﻨﻴﺔ ﺍﻟﻮﺍﺟﻬﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪.‬‬
‫ﻣﻦﺑﻴﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ‪ ++ C‬ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﻧﺴﺨﻬﺎ ﺇﻟﻰ ‪ Java‬ﻫﻲ ﺍﻟﺒﻨﻰ ﻭﺍﻟﻨﻘﺎﺑﺎﺕ‪.‬‬

‫ﺗﺘﻀﻤﻦ‪ Java‬ﺷﻜﻼ ًﺑﺴﻴﻄﺎً ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺰﺍﻣﻦ ﻣﻦ ﺧﻼﻝ‬


‫ﻣﺘﺰﺍﻣﻦﺍﻟﻤﻌﺪﻝ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻤﻜﻦ ﺃﻥ ﻳﻈﻬﺮ ﻓﻲ ﺍﻷﺳﺎﻟﻴﺐ ﻭﺍﻟﻜﺘﻞ‪ .‬ﻓﻲ ﻛﻠﺘﺎ ﺍﻟﺤﺎﻟﺘﻴﻦ ‪ ،‬ﻳﺘﺴﺒﺐ‬
‫ﻓﻲﺇﺭﻓﺎﻕ ﻗﻔﻞ‪ .‬ﻳﻀﻤﻦ ﺍﻟﻘﻔﻞ ﺍﻟﻮﺻﻮﻝ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺤﺼﺮﻱ ﻟﻠﻄﺮﻓﻴﻦ‪ .‬ﻓﻲ ‪ ، Java‬ﻣﻦ ﺍﻟﺴﻬﻞ‬
‫ﻧﺴﺒﻴﺎًﺇﻧﺸﺎء ﻋﻤﻠﻴﺎﺕ ﻣﺘﺰﺍﻣﻨﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻓﻲ ‪Java‬ﺍﻟﺨﻴﻮﻁ‪.‬‬

‫ﺗﺴﺘﺨﺪﻡ‪ Java‬ﺇﻟﻐﺎء ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻀﻤﻨﻲ ﻟﻜﺎﺉﻨﺎﺗﻬﺎ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻏﺎﻟﺒﺎًﺟﻤﻊ‬


‫ﺍﻟﻘﻤﺎﻣﺔ‪ .‬ﻫﺬﺍ ﻳﺤﺮﺭ ﺍﻟﻤﺒﺮﻣﺞ ﻣﻦ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺣﺬﻑ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺑﺸﻜﻞ ﺻﺮﻳﺢ ﻋﻨﺪﻣﺎ ﻟﻢ ﺗﻌﺪ‬
‫ﻫﻨﺎﻙﺣﺎﺟﺔ ﺇﻟﻴﻬﺎ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺧﺪﻣﺔ ﺟﻤﻊ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻤﻬﻤﻠﺔﻣﻤﺎ ﻳﺴﻤﻰ ﺃﺣﻴﺎﻧﺎً ﺗﺴﺮﺏ ﺍﻟﺬﺍﻛﺮﺓ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﺘﺨﺰﻳﻦ ﻣﺨﺼﺺ ﻭﻟﻜﻦ ﻻ ﻳﺘﻢ ﺇﻟﻐﺎء‬
‫ﺗﺨﺼﻴﺼﻪﻣﻄﻠﻘﺎً‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺍﺳﺘﻨﻔﺎﺩ ﻛﻞ ﻣﺴﺎﺣﺔ ﺍﻟﺘﺨﺰﻳﻦ‬
‫ﺍﻟﻤﺘﺎﺣﺔﻓﻲ ﻧﻬﺎﻳﺔ ﺍﻟﻤﻄﺎﻑ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺇﻟﻐﺎء ﺗﺨﺼﻴﺺ ﺍﻟﻜﺎﺉﻦ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.6‬‬

‫ﺑﺨﻼﻑ‪ C‬ﻭ ‪ ، ++ C‬ﺗﺘﻀﻤﻦ ‪ Java‬ﻋﻤﻠﻴﺎﺕ ﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ ﻧﻮﻉ ﺍﻟﻤﻬﻤﺔ )ﺗﺤﻮﻳﻼﺕ ﺍﻟﻨﻮﻉ‬
‫ﺍﻟﻀﻤﻨﻲ( ﻓﻘﻂ ﺇﺫﺍ ﻛﺎﻧﺖ ﺗﺘﺴﻊ )ﻣﻦ ﻧﻮﻉ "ﺃﺻﻐﺮ" ﺇﻟﻰ ﻧﻮﻉ "ﺃﻛﺒﺮ"(‪ .‬ﻟﺬﺍ‪int‬ﻝﻳﻄﻔﻮﻳﺘﻢ ﺍﻹﻛﺮﺍﻩ ﻋﺒﺮ‬
‫ﻋﺎﻣﻞﺍﻟﺘﻌﻴﻴﻦ ‪ ،‬ﻭﻟﻜﻦﻳﻄﻔﻮ‬
‫ﻝ‪int‬ﺍﻹﻛﺮﺍﻩ ﻟﻴﺲ ﻛﺬﻟﻚ‪.‬‬

‫‪2.17.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻗﺎﻡﻣﺼﻤﻤﻮ ‪ Java‬ﺑﻌﻤﻞ ﺟﻴﺪ ﻓﻲ ﺗﻘﻠﻴﺺ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺰﺍﺉﺪﺓ ﻭ ‪ /‬ﺃﻭ ﻏﻴﺮ ﺍﻵﻣﻨﺔ ﻟـ ‪ .++ C‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻟﺘﺨﻠﺺ ﻣﻦ ﻧﺼﻒ ﺍﻹﻛﺮﺍﻫﺎﺕ ﻋﻠﻰ ﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺘﻲ ﺗﺘﻢ ﻓﻲ‬
‫‪ ++ C‬ﻛﺎﻥ ﺧﻄﻮﺓ ﻧﺤﻮ ﻣﻮﺛﻮﻗﻴﺔ ﺃﻋﻠﻰ‪ .‬ﻛﻤﺎ ﺃﻥ ﻓﺤﺺ ﻧﻄﺎﻕ ﺍﻟﻔﻬﺮﺱ ﻟﻮﺻﻮﻝ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻳﺠﻌﻞ‬
‫ﺍﻟﻠﻐﺔﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً‪ .‬ﺗﻌﻤﻞ ﺇﺿﺎﻓﺔ ﺍﻟﺘﺰﺍﻣﻦ ﻋﻠﻰ ﺗﺤﺴﻴﻦ ﻧﻄﺎﻕ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺘﻬﺎ‬
‫ﺑﺎﻟﻠﻐﺔ ‪،‬ﻛﻤﺎ ﺗﻔﻌﻞ ﻣﻜﺘﺒﺎﺕ ﺍﻟﻔﺉﺎﺕ ﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻗﺎﻋﺪﺓ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻭﺍﻟﺸﺒﻜﺎﺕ‪.‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻌُﺰﻯ ﻗﺎﺑﻠﻴﺔ ﺗﻨﻘﻞ ‪ ، Java‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﺍﻟﺸﻜﻞ ﺍﻟﻤﺘﻮﺳﻂ ‪ ،‬ﺇﻟﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪،‬‬
‫ﻟﻜﻨﻬﺎﻟﻴﺴﺖ ﻛﺬﻟﻚ‪ .‬ﻳﻤﻜﻦ ﺗﺮﺟﻤﺔ ﺃﻱ ﻟﻐﺔ ﺇﻟﻰ ﺻﻴﻐﺔ ﻭﺳﻴﻄﺔ ﻭ "ﺗﺸﻐﻴﻞ" ﻋﻠﻰ ﺃﻱ ﻧﻈﺎﻡ‬
‫ﺃﺳﺎﺳﻲﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻬﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻮﺳﻴﻂ‪ .‬ﺳﻌﺮ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ ﻫﻮ‬
‫ﺗﻜﻠﻔﺔﺍﻟﺘﻔﺴﻴﺮ ‪ ،‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﺗﻘﻠﻴﺪﻳﺎً ﻳﺘﻌﻠﻖ ﺑﺘﺮﺗﻴﺐ ﻣﻦ ﺣﻴﺚ ﺍﻟﺤﺠﻢ ﺃﻛﺜﺮ ﻣﻦ ﺗﻨﻔﻴﺬ ﻛﻮﺩ ﺍﻵﻟﺔ‪.‬‬
‫ﺍﻹﺻﺪﺍﺭﺍﻷﻭﻟﻲ ﻣﻦ ﻣﺘﺮﺟﻢ ‪ ، Java‬ﺍﻟﻤﺴﻤﻰ (‪ ، Java Virtual Machine )JVM‬ﻛﺎﻥ ﻓﻲ ﺍﻟﻮﺍﻗﻊ‬
‫ﺃﺑﻄﺄ‪ 10‬ﻣﺮﺍﺕ ﻋﻠﻰ ﺍﻷﻗﻞ ﻣﻦ ﺑﺮﺍﻣﺞ ‪ C‬ﺍﻟﻤﺘﺮﺟﻤﺔ ﺍﻟﻤﻜﺎﻓﺉﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺍﻵﻥ ﺗﺮﺟﻤﺔ‬
‫ﺍﻟﻌﺪﻳﺪﻣﻦ ﺑﺮﺍﻣﺞ ‪ Java‬ﺇﻟﻰ ﻛﻮﺩ ﺍﻟﺠﻬﺎﺯ ﻗﺒﻞ ﺗﻨﻔﻴﺬﻫﺎ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻤﻲ (‪Just-in-Time )JIT‬‬
‫‪.‬ﻫﺬﺍ ﻳﺠﻌﻞ ﻛﻔﺎءﺓ ﺑﺮﺍﻣﺞ ‪ Java‬ﻣﻨﺎﻓﺴﺔ ﻟﺒﺮﺍﻣﺞ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺘﺮﺟﻤﺔ ﺗﻘﻠﻴﺪﻳﺎً ﻣﺜﻞ ‪.++ C‬‬

‫ﺯﺍﺩﺍﺳﺘﺨﺪﺍﻡ ‪ Java‬ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﻛﺎﻥ ﻫﺬﺍ ﺑﺴﺒﺐ‬
‫ﻗﻴﻤﺘﻬﺎﻓﻲ ﺑﺮﻣﺠﺔ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺃﺣﺪ ﺃﺳﺒﺎﺏ ﺻﻌﻮﺩ ‪Java‬‬
‫ﺍﻟﺴﺮﻳﻊﺇﻟﻰ ﺍﻟﺼﺪﺍﺭﺓ ﻫﻮ ﺑﺒﺴﺎﻃﺔ ﺃﻥ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻳﺤﺒﻮﻥ ﺗﺼﻤﻴﻤﻬﺎ‪ .‬ﻳﻌﺘﻘﺪ ﺑﻌﺾ ﺍﻟﻤﻄﻮﺭﻳﻦ ﺃﻥ‬
‫‪ ++ C‬ﻛﺎﻧﺖ ﺑﺒﺴﺎﻃﺔ ﺃﻳﻀﺎً‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪94‬‬

‫ﻛﺒﻴﺮﺓﻭﻣﻌﻘﺪﺓ ﻟﺘﻜﻮﻥ ﻋﻤﻠﻴﺔ ﻭﺁﻣﻨﺔ‪ .‬ﻗﺪﻣﺖ ﻟﻬﻢ ‪ Java‬ﺑﺪﻳﻼ ًﻳﺘﻤﺘﻊ ﺑﺎﻟﻜﺜﻴﺮ ﻣﻦ ﻗﻮﺓ ‪ ، ++ C‬ﻭﻟﻜﻦ‬
‫ﺑﻠﻐﺔﺃﺑﺴﻂ ﻭﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً‪ .‬ﺳﺒﺐ ﺁﺧﺮ ﻫﻮ ﺃﻥ ﻧﻈﺎﻡ ﺍﻟﻤﺘﺮﺟﻢ ‪ /‬ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ ﻟﺠﺎﻓﺎ ﻣﺠﺎﻧﻲ ﻭﻳﻤﻜﻦ‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻴﻪ ﺑﺴﻬﻮﻟﺔ ﻋﻠﻰ ﺍﻟﻮﻳﺐ‪ .‬ﺗﺴﺘﺨﺪﻡ ‪ Java‬ﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ‬
‫ﻣﻦﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ﻇﻬﺮﺃﺣﺪﺙ ﺇﺻﺪﺍﺭ ﻣﻦ ‪ ، Java ، Java 7‬ﻓﻲ ﻋﺎﻡ ‪ .2011‬ﻣﻨﺬ ﺑﺪﺍﻳﺘﻪ ‪ ،‬ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦﺍﻟﻤﻴﺰﺍﺕ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﻓﺉﺔ ﺍﻟﺘﻌﺪﺍﺩ ‪ ،‬ﻭﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻌﺎﻣﺔ ‪ ،‬ﻭﺑﻨﺎء ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺠﺪﻳﺪ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:Java‬‬

‫‪ //‬ﺑﺮﻧﺎﻣﺞ ‪ Java‬ﻣﺜﺎﻝ ‪//‬‬


‫ﺍﻹﺩﺧﺎﻝ‪:‬ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ‬
‫ﻣﻦ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ﻋﺪﺩ ﺻﺤﻴﺢ ﻟﻠﻄﻮﻝ‬ ‫‪//‬‬
‫‪ //‬ﺍﻟﻤﺨﺮﺟﺎﺕ‪ :‬ﻋﺪﺩ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﺃﻛﺒﺮ ﻣﻦ ‪//‬‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ‪ * .java.io‬؛‬
‫ﻳﺴﺘﻮﺭﺩ‬
‫ﻓﺼﻞ } ‪IntSort‬‬
‫ﺍﻟﻔﺮﺍﻍﺍﻟﻌﺎﻡ ﺍﻟﺜﺎﺑﺖﺭﺉﻴﺴﻲ )ﺳﻼﺳﻞ ﺍﻟﺴﻠﺴﻠﺔ ][(ﺭﻣﻴﺎﺕﺍﺳﺘﺜﻨﺎء ‪} IO‬‬
‫= ﻓﻲ ‪DataInputStream‬ﺟﺪﻳﺪ‪int DataInputStream )System.in( ،‬‬
‫‪listlen،‬‬
‫ﻋﺪﺍﺩ‪،‬‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪، 0‬‬
‫ﻣﺘﻮﺳﻂ‪،‬‬
‫ﺍﻟﻨﺘﻴﺠﺔ= ‪ 0‬؛‬
‫‪][ intlist =int‬ﻛﺜﺎﻓﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ]‪ [99‬؛‬
‫‪ listlen = Integer.parseInt )in.readLine )(( ،‬ﻟﻮ))} ((‪>100‬‬
‫‪listlen< 0( && )listlen‬‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫= [ﻋﺪﺍﺩ] ‪intlist‬‬
‫؛ [ﻋﺪﺍﺩ] ‪ + = intlist‬؛ ﻣﺠﻤﻮﻉ () ‪((. intValue‬‬
‫) ‪Integer.valueOf )in.readLine‬‬
‫{‬
‫‪ * /‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listlen‬؛‬
‫‪ * /‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)‪ * /‬ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ ‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ <[ﻋﺪﺍﺩ] ‪intlist‬‬

‫) ‪System.out.println‬‬
‫‪ { // ** end of then clause of if ))listlen< 0( ...‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ<‬
‫ﺍﻟﻤﺘﻮﺳﻂﻫﻮ‪ + ":‬ﻧﺘﻴﺠﺔ( ؛ ‪ "\ n‬ﺁﺧﺮ) ‪System.out.println‬‬

‫"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ \ ‪ ("n‬؛‬


‫‪main{ // ** end of class IntSort‬‬
‫‪{ // ** end of method‬‬
‫‪95‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺗﻄﻮﺭﺕﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﺔ ﻭﻋﺸﺮﻳﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻨﺼﻴﺔ ﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ﺧﻼﻝ ﻭﺿﻊ ﻗﺎﺉﻤﺔ ﺑﺎﻷﻭﺍﻣﺮ ‪ ،‬ﺗﺴﻤﻰ ﺃﺍﻟﻨﺼﻲ‪ ،‬ﻓﻲ ﻣﻠﻒ ﻟﻴﺘﻢ‬
‫ﺗﻔﺴﻴﺮﻩ‪.‬ﺍﺳﻢ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕﺵ )ﻛﻤﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﺍﻟﺘﻲ ﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ‬
‫ﺍﺳﺘﺪﻋﺎءﺍﺕﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻟﻠﻨﻈﺎﻡ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻭﻇﺎﺉﻒ ﺍﻷﺩﺍﺓ ﺍﻟﻤﺴﺎﻋﺪﺓ ‪ ،‬ﻣﺜﻞ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ‬
‫ﻭﺗﺼﻔﻴﺔﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ‪ .‬ﺗﻢ ﺇﺿﺎﻓﺔ ﻣﺘﻐﻴﺮﺍﺕ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻭﺑﻴﺎﻧﺎﺕ ﺗﺪﻓﻖ ﺍﻟﺘﺤﻜﻢ ‪،‬‬
‫ﻭﺍﻟﻮﻇﺎﺉﻒ ‪،‬ﻭﻣﺨﺘﻠﻒ ﺍﻟﻘﺪﺭﺍﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ‪ .‬ﻭﺍﺣﺪ ﻣﻦ ﺃﻗﻮﻯ ﻫﺬﻩ‬
‫ﻭﺃﻛﺜﺮﻫﺎﺷﻬﺮﺓ ﻫﻮ ‪.ksh )for shell( ،‬ﺍﻟﺬﻱ ﻃﻮﺭﻩ ﺩﻳﻔﻴﺪ ﻛﻮﺭﻥ ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ ‪، 1995( ،‬‬
‫‪Bolsky and Korn‬‬

‫ﻟﻐﺔﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ﻫﻲ‪awk‬ﺗﻢ ﺗﻄﻮﻳﺮﻩ ﺑﻮﺍﺳﻄﺔ ‪ Al Aho‬ﻭ ‪ Brian Kernighan‬ﻭ‬


‫‪ Peter Weinberger‬ﻓﻲ (‪awk.Bell Laboratories )Aho et al. ، 1988‬ﺑﺪﺃﺕ ﻛﻠﻐﺔ‬
‫ﻟﺘﻮﻟﻴﺪﺍﻟﺘﻘﺎﺭﻳﺮ ﻭﻟﻜﻨﻬﺎ ﺃﺻﺒﺤﺖ ﻓﻴﻤﺎ ﺑﻌﺪ ﻟﻐﺔ ﺫﺍﺕ ﺃﻏﺮﺍﺽ ﻋﺎﻣﺔ‪.‬‬

‫‪2.18.1‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﻟﻐﺔ ‪Perl‬‬


‫ﻟﻐﺔﺑﻴﺮﻝ ‪ ،‬ﺍﻟﺘﻲ ﻃﻮﺭﻫﺎ ﻻﺭﻱ ﻭﻭﻝ ‪ ،‬ﻛﺎﻧﺖ ﻓﻲ ﺍﻷﺻﻞ ﻣﺰﻳﺠﺎً ﻣﻦﺵﻭ‪awk.‬ﻧﻤﺖ ﻟﻐﺔ ‪Perl‬‬
‫ﺑﺸﻜﻞﻣﻠﺤﻮﻅ ﻣﻨﺬ ﺑﺪﺍﻳﺎﺗﻬﺎ ﻭﺃﺻﺒﺤﺖ ﺍﻵﻥ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻗﻮﻳﺔ ‪ ،‬ﺭﻏﻢ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﺑﺪﺍﺉﻴﺔ ﺇﻟﻰ ﺣﺪ‬
‫ﻣﺎ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﺗﺴﻤﻰ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﺗﺸﺒﻪ ﻟﻐﺔ ﺍﻷﻣﺮ‬
‫ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ‪،‬ﺣﻴﺚ ﻳﺘﻢ ﺗﺠﻤﻴﻌﻬﺎ ﺩﺍﺉﻤﺎً ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺇﻟﻰ ﻟﻐﺔ ﻭﺳﻴﻄﺔ ‪ ،‬ﻗﺒﻞ ﺗﻨﻔﻴﺬﻫﺎ‪ .‬ﻋﻼﻭﺓ‬
‫ﻋﻠﻰﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻪ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻟﺠﻌﻠﻪ ﻗﺎﺑﻼ ًﻟﻠﺘﻄﺒﻴﻖ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ‬
‫ﻣﺠﺎﻻﺕﺍﻟﻤﺸﻜﻼﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‪.‬‬

‫ﺗﺤﺘﻮﻱﻟﻐﺔ ‪ Perl‬ﻋﻠﻰ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺫﻛﺮ ﺍﻟﻘﻠﻴﻞ ﻣﻨﻬﺎ‬
‫ﻓﻘﻂﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻻﺣﻘﺎً ﻓﻲ ﺍﻟﻜﺘﺎﺏ‪.‬‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﻓﻲ ‪ Perl‬ﻣﻜﺘﻮﺑﺔ ﺑﺸﻜﻞ ﺛﺎﺑﺖ ﻭﻣﻌﻠﻨﺔ ﺿﻤﻨﻴﺎً‪ .‬ﻫﻨﺎﻙ ﺛﻼﺙ ﻣﺴﺎﺣﺎﺕ ﺃﺳﻤﺎء‬
‫ﻣﻤﻴﺰﺓﻟﻠﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﻳﺸُﺎﺭ ﺇﻟﻴﻬﺎ ﺑﺎﻟﺤﺮﻑ ﺍﻷﻭﻝ ﻣﻦ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‪ .‬ﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﻌﺪﺩﻳﺔ ﺑﻌﻼﻣﺎﺕ ﺍﻟﺪﻭﻻﺭ )‪ ، ($‬ﻭﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺑﻌﻼﻣﺎﺕ )@( ‪،‬‬
‫ﻭﺗﺒﺪﺃﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﺘﺠﺰﺉﺔ )ﻳﺘﻢ ﻭﺻﻒ ﺍﻟﺘﺠﺰﺉﺔ ﺃﺩﻧﺎﻩ( ﺑﻌﻼﻣﺎﺕ ﺍﻟﻨﺴﺒﺔ ﺍﻟﻤﺉﻮﻳﺔ )‪ .(٪‬ﻳﺠﻌﻞ‬
‫ﻫﺬﺍﺍﻻﺻﻄﻼﺡ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺃﻛﺜﺮ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ‪.‬‬

‫ﺗﺘﻀﻤﻦ‪ Perl‬ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺑﻌﻀﻬﺎ ﻟﺘﺨﺰﻳﻦ‬


‫ﻣﻌﺎﻣﻼﺕ‪ ، Perl‬ﻣﺜﻞ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﻴﻦ ﻟﺤﺮﻑ ﺍﻟﺴﻄﺮ ﺍﻟﺠﺪﻳﺪ ﺃﻭ ﺍﻷﺣﺮﻑ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ‬
‫ﺍﻟﺘﻨﻔﻴﺬ‪.‬ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻛﻤﻌﻠﻤﺎﺕ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﻮﻇﺎﺉﻒ‬
‫ﺍﻟﻤﻀﻤﻨﺔﻭﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﻟﺒﻌﺾ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ﻣﻤﻴﺰﺓ ‪ -‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺍﻷﺳﻤﺎء ﺍﻟﻤﺸﻔﺮﺓ ‪ ،‬ﻣﺜﻞ ‪ !$‬ﻭ @_‪ .‬ﺗﺴﺘﺨﺪﻡ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ‪ ،‬ﻣﺜﻞ ﺃﺳﻤﺎء‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻣﺴﺎﺣﺎﺕ ﺍﻷﺳﻤﺎء ﺍﻟﺜﻼﺛﺔ ‪ ،‬ﻟﺬﺍ ‪ !$‬ﻫﻮ ﻋﺪﺩ‪.‬‬

‫ﺗﺘﻤﺘﻊﻣﺼﻔﻮﻓﺎﺕ ‪ Perl‬ﺑﺨﺎﺻﻴﺘﻴﻦ ﺗﻤﻴﺰﻫﻤﺎ ﻋﻦ ﻣﺼﻔﻮﻓﺎﺕ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ﺍﻟﺸﺎﺉﻌﺔ‪ .‬ﺃﻭﻻ ً‪،‬‬


‫ﻟﻬﺎﻃﻮﻝ ﺩﻳﻨﺎﻣﻴﻜﻲ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﻤﻮ ﻭﺗﺘﻘﻠﺺ ﺣﺴﺐ ﺍﻟﺤﺎﺟﺔ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪.‬‬
‫ﺛﺎﻧﻴﺎً ‪،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻣﺘﻔﺮﻗﺔ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻫﻨﺎﻙ ﻓﺠﻮﺍﺕ ﺑﻴﻦ‬
‫ﺍﻟﻌﻨﺎﺻﺮ‪.‬ﻫﺆﻻء‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪96‬‬

‫ﺍﻟﻔﺠﻮﺍﺕﻻ ﺗﺄﺧﺬ ﻣﺴﺎﺣﺔ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ‪ ،‬ﻭﺑﻴﺎﻥ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ‪،‬‬


‫‪ ،foreach‬ﻳﺘﻜﺮﺭ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﻔﻘﻮﺩﺓ‪.‬‬
‫ﺗﺘﻀﻤﻦ‪ Perl‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰﺗﺠﺰﺉﺎﺕ‪ .‬ﺗﺘﻢ ﻓﻬﺮﺳﺔ ﻫﻴﺎﻛﻞ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻫﺬﻩ ﺑﻮﺍﺳﻄﺔ ﺳﻼﺳﻞ ﻭﻫﻲ ﺟﺪﺍﻭﻝ ﺗﺠﺰﺉﺔ ﻳﺘﻢ ﺍﻟﺘﺤﻜﻢ ﻓﻴﻬﺎ ﺑﺸﻜﻞ ﺿﻤﻨﻲ‪ .‬ﻳﻮﻓﺮ ﻧﻈﺎﻡ‬
‫‪ Perl‬ﻭﻇﻴﻔﺔ ﺍﻟﺘﺠﺰﺉﺔ ﻭﻳﺰﻳﺪ ﻣﻦ ﺣﺠﻢ ﺍﻟﻬﻴﻜﻞ ﻋﻨﺪ ﺍﻟﻀﺮﻭﺭﺓ‪.‬‬

‫ﻟﻐﺔ‪ Perl‬ﻟﻐﺔ ﻗﻮﻳﺔ ﻭﻟﻜﻨﻬﺎ ﺧﻄﻴﺮﺓ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪ .‬ﻳﺨﺰﻥ ﺍﻟﻨﻮﻉ ﺍﻟﻘﻴﺎﺳﻲ ﺍﻟﺨﺎﺹ ﺑﻪ ﻛﻼ ًﻣﻦ‬
‫ﺍﻟﺴﻼﺳﻞﻭﺍﻷﺭﻗﺎﻡ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻋﺎﺩﺓ ًﻓﻲ ﺷﻜﻞ ﻧﻘﻄﺔ ﻋﺎﺉﻤﺔ ﻣﺰﺩﻭﺟﺔ ﺍﻟﺪﻗﺔ‪ .‬ﺍﻋﺘﻤﺎﺩ ًﺍ‬
‫ﻋﻠﻰﺍﻟﺴﻴﺎﻕ ‪ ،‬ﻗﺪ ﻳﺘﻢ ﺇﺟﺒﺎﺭ ﺍﻷﺭﻗﺎﻡ ﻋﻠﻰ ﺍﻟﺴﻼﺳﻞ ﻭﺍﻟﻌﻜﺲ ﺻﺤﻴﺢ‪ .‬ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺳﻠﺴﻠﺔ‬
‫ﻓﻲﺳﻴﺎﻕ ﺭﻗﻤﻲ ﻭﻻ ﻳﻤﻜﻦ ﺗﺤﻮﻳﻞ ﺍﻟﺴﻠﺴﻠﺔ ﺇﻟﻰ ﺭﻗﻢ ‪ ،‬ﻓﺴﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺼﻔﺮ ﻭﻻ ﻳﺘﻢ ﺗﻮﻓﻴﺮ‬
‫ﺭﺳﺎﻟﺔﺗﺤﺬﻳﺮ ﺃﻭ ﺧﻄﺄ ﻟﻠﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﺘﺄﺛﻴﺮ ﺇﻟﻰ ﺃﺧﻄﺎء ﻟﻢ ﻳﺘﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ‬
‫ﺑﻮﺍﺳﻄﺔﺍﻟﻤﺘﺮﺟﻢ ﺃﻭ ﻧﻈﺎﻡ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻻ ﻳﻤﻜﻦ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻓﻬﺮﺳﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻷﻧﻪ ﻻ‬
‫ﻳﻮﺟﺪﻧﻄﺎﻕ ﻣﻨﺨﻔﺾ ﻣﻌﻴﻦ ﻷﻱ ﺻﻔﻴﻒ‪ .‬ﺗﻌﻮﺩ ﺍﻹﺷﺎﺭﺍﺕ ﺇﻟﻰ ﺍﻟﻌﻨﺎﺻﺮ ﻏﻴﺮ ﺍﻟﻤﻮﺟﻮﺩﺓﺃﻭﻧﺪﻳﻒ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ ﺃﻧﻪ ﺻﻔﺮ ﻓﻲ ﺳﻴﺎﻕ ﺭﻗﻤﻲ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻻ ﻳﻮﺟﺪ ﺃﻳﻀﺎً ﺍﻛﺘﺸﺎﻑ ﺧﻄﺄ ﻓﻲ‬
‫ﺍﻟﻮﺻﻮﻝﺇﻟﻰ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ‪.‬‬

‫ﻛﺎﻥﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﻭﻟﻲ ﻟـ ‪ Perl‬ﺑﻤﺜﺎﺑﺔ ﺃﺩﺍﺓ ﻣﺴﺎﻋﺪﺓ ﻟـ ‪ UNIX‬ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻨﺼﻴﺔ‪.‬‬


‫ﻛﺎﻥﻭﻻ ﻳﺰﺍﻝ ﻳﺴﺘﺨﺪﻡ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻛﺄﺩﺍﺓ ﻹﺩﺍﺭﺓ ﻧﻈﺎﻡ ‪ .UNIX‬ﻋﻨﺪﻣﺎ ﻇﻬﺮﺕ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ‬
‫ﺍﻟﻌﺎﻟﻤﻴﺔ ‪،‬ﺣﻘﻘﺖ ‪ Perl‬ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻛﻠﻐﺔ ﻭﺍﺟﻬﺔ ﺑﻮﺍﺑﺔ ﻋﺎﻣﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﻣﻊ‬
‫ﺍﻟﻮﻳﺐ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻧﺎﺩﺭﺍ ًﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺍﻵﻥ ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ‪ .‬ﺗﺴُﺘﺨﺪﻡ ﻟﻐﺔ ‪ Perl‬ﻛﻠﻐﺔ‬
‫ﻟﻸﻏﺮﺍﺽﺍﻟﻌﺎﻣﺔ ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ‪ ،‬ﻣﺜﻞ ﻋﻠﻢ ﺍﻷﺣﻴﺎء ﺍﻟﺤﺴﺎﺑﻲ ﻭﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:Perl‬‬

‫‪ #‬ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪Perl‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، $ listlen ،‬ﺣﻴﺚ ‪ listlen $‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻉ ﺑﻘﻴﻢ ‪$‬‬ ‫‪ #‬ﻣﺪﺧﻞ‪:‬‬
‫‪-listlen‬ﺻﺤﻴﺤﺔ‪.‬‬ ‫‪#‬‬
‫‪ #‬ﺍﻟﻤﺨﺮﺟﺎﺕ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻟﻤﺪﺧﻼﺕ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‪0) = (sum، $ result $) .‬‬ ‫‪#‬‬
‫‪(0،‬؛‬
‫؛<‪listlen $ = >STDIN‬‬
‫ﻟﻮ))‪listlen< 0( && )$ listlen >100(( }$‬‬
‫‪ #‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ‬
‫ﻝ)ﺩﻭﻻﺭﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ ‪listlen $> $‬؛ ﻋﺪﺍﺩ ‪} (++ $‬‬
‫‪ ...‬؛ { ‪ - #‬ﻧﻬﺎﻳﺔ ﻟـ )ﻋﺪﺍﺩ <‪ $[ = >STDIN‬ﻋﺪﺍﺩ‬
‫] ‪$ intlist‬‬
‫‪ #‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ‪ sum / $ listlen $ = $‬؛‬

‫‪ #‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ‪num )intlist( }$foreach‬‬

‫ﻟﻮ)ﺩﻭﻻﺭ‪ foreach $ num ...‬ﻧﻬﺎﻳﺔ ‪ {{ # -‬؛ ‪( }$ result ++‬‬


‫‪ $‬ﻣﺘﻮﺳﻂ <‪num‬‬
‫‪ #‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﻣﻄﺒﻌﺔ"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪" result \ n $ :‬؛{ ‪ - #‬ﻧﻬﺎﻳﺔ ‪... $ if ))listlen‬‬
‫‪97‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺁﺧﺮ}‬
‫ﻣﻄﺒﻌﺔ"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ \ ‪" n‬؛‬
‫{‬

‫‪2.18.2‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪JavaScript‬‬


‫ﺍﻧﺘﺸﺮﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﻳﺐ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﺑﻌﺪ ﻇﻬﻮﺭ ﺃﻭﻝ ﻣﺘﺼﻔﺤﺎﺕ ﺭﺳﻮﻣﻴﺔ‪.‬‬
‫ﺃﺻﺒﺤﺖﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﺤﺴﺎﺏ ﺍﻟﻤﺮﺗﺒﻂ ﺑﻤﺴﺘﻨﺪﺍﺕ ‪ ، HTML‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﺣﺪ ﺫﺍﺗﻬﺎ ﺛﺎﺑﺘﺔ‬
‫ﺗﻤﺎﻣﺎً ‪،‬ﺃﻣﺮﺍً ﺑﺎﻟﻎ ﺍﻷﻫﻤﻴﺔ‪ .‬ﺃﺻﺒﺢ ﺍﻟﺤﺴﺎﺏ ﻋﻠﻰ ﺟﺎﻧﺐ ﺍﻟﺨﺎﺩﻡ ﻣﻤﻜﻨﺎً ﺑﺎﺳﺘﺨﺪﺍﻡ ﻭﺍﺟﻬﺔ ﺍﻟﺒﻮﺍﺑﺔ‬
‫ﺍﻟﻤﺸﺘﺮﻛﺔ)‪ ، (CGI‬ﻭﺍﻟﺘﻲ ﺳﻤﺤﺖ ﻟﻮﺛﺎﺉﻖ ‪ HTML‬ﺑﻄﻠﺐ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﺍﻟﺨﺎﺩﻡ ‪ ،‬ﻣﻊ‬
‫ﺇﺭﺟﺎﻉﻧﺘﺎﺉﺞ ﻫﺬﻩ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺇﻟﻰ ﺍﻟﻤﺘﺼﻔﺢ ﻓﻲ ﺷﻜﻞ ﻣﺴﺘﻨﺪﺍﺕ ‪ .HTML‬ﺃﺻﺒﺢ ﺍﻟﺤﺴﺎﺏ ﻓﻲ‬
‫ﻧﻬﺎﻳﺔﺍﻟﻤﺘﺼﻔﺢ ﻣﺘﺎﺣﺎً ﻣﻊ ﻇﻬﻮﺭ ﺗﻄﺒﻴﻘﺎﺕ ‪ Java‬ﺍﻟﺼﻐﻴﺮﺓ‪ .‬ﺗﻢ ﺍﻵﻥ ﺍﺳﺘﺒﺪﺍﻝ ﻛﻞ ﻣﻦ ﻫﺬﻩ‬
‫ﺍﻷﺳﺎﻟﻴﺐﻓﻲ ﻣﻌﻈﻤﻬﺎ ﺑﺎﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﺤﺪﻳﺜﺔ ‪ ،‬ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ (‪ JavaScript )Flanagan ، 2002‬ﻓﻲ ﺍﻷﺻﻞ ﺑﻮﺍﺳﻄﺔ ‪ Brendan Eich‬ﻓﻲ‬


‫‪ .Netscape‬ﻛﺎﻥ ﺍﺳﻤﻬﺎ ﺍﻷﺻﻠﻲ ﻣﻮﻛﺎ‪ .‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﺳﻤﻬﺎ ﻻﺣﻘﺎً ﺇﻟﻰ ‪ .LiveScript‬ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ‬
‫‪، 1995‬ﺃﺻﺒﺢ ‪ LiveScript‬ﻣﺸﺮﻭﻋﺎً ﻣﺸﺘﺮﻛﺎً ﺑﻴﻦ ‪ Netscape‬ﻭ ‪ Sun Microsystems‬ﻭﺗﻢ‬
‫ﺗﻐﻴﻴﺮﺍﺳﻤﻪ ﺇﻟﻰ ‪ .JavaScript‬ﺷﻬﺪﺕ ‪ JavaScript‬ﺗﻄﻮﺭﺍً ﻭﺍﺳﻌﺎً ‪ ،‬ﺣﻴﺚ ﺍﻧﺘﻘﻠﺖ ﻣﻦ ﺍﻹﺻﺪﺍﺭ‬
‫‪1.0‬ﺇﻟﻰ ﺍﻹﺻﺪﺍﺭ ‪ 1.5‬ﻣﻦ ﺧﻼﻝ ﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﺗﻢ ﺗﻄﻮﻳﺮ‬
‫ﻣﻌﻴﺎﺭﻟﻐﻮﻱ ﻟﺠﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻟﺮﺍﺑﻄﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ ﻟﻤﺼﻨﻌﻲ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮ)‪ (ECMA‬ﺑﺎﺳﻢ ‪ .ECMA-262‬ﺗﻤﺖ ﺍﻟﻤﻮﺍﻓﻘﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻤﻌﻴﺎﺭ ﺃﻳﻀﺎً ﻣﻦ ﻗﺒﻞ‬
‫ﻣﻨﻈﻤﺔﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺪﻭﻟﻴﺔ )‪ (ISO‬ﻛـ ‪ .ISO-16262‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺇﺻﺪﺍﺭ ‪ Microsoft‬ﻣﻦ‬
‫‪ JavaScript‬ﺍﺳﻢ ‪.JScript .NET‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﺗﻀﻤﻴﻦ ﻣﺘﺮﺟﻢ ﺟﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‬


‫ﺍﻟﻤﺨﺘﻠﻔﺔ ‪،‬ﺇﻻ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻣﻪ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻳﻜﻮﻥ ﻣﻀﻤﻨﺎً ﻓﻲ ﻣﺘﺼﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ‪ .‬ﻳﺘﻢ ﺗﻀﻤﻴﻦ‬
‫ﺗﻌﻠﻴﻤﺎﺕ‪ JavaScript‬ﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﻭﻳﺘﻢ ﺗﻔﺴﻴﺮﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺴﺘﻌﺮﺽ‬
‫ﻋﻨﺪﻋﺮﺽ ﺍﻟﻤﺴﺘﻨﺪﺍﺕ‪ .‬ﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺠﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺑﺮﻣﺠﺔ ﺍﻟﻮﻳﺐ ﻫﻲ‬
‫ﺍﻟﺘﺤﻘﻖﻣﻦ ﺻﺤﺔ ﺑﻴﺎﻧﺎﺕ ﺇﺩﺧﺎﻝ ﺍﻟﻨﻤﻮﺫﺝ ﻭﺇﻧﺸﺎء ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ‬
‫‪ JavaScript‬ﺃﻳﻀﺎً ﻣﻊ ﺇﻃﺎﺭ ﻋﻤﻞ ﺗﻄﻮﻳﺮ ﺍﻟﻮﻳﺐ ‪.Rails‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺳﻤﻬﺎ ‪ ،‬ﻓﺈﻥ ‪ JavaScript‬ﻣﺮﺗﺒﻂ ﺑﺠﺎﻓﺎ ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﺳﺘﺨﺪﺍﻡ ﻧﻔﺲ‬
‫ﺍﻟﺼﻴﻐﺔ‪.‬ﻳﺘﻢ ﻛﺘﺎﺑﺔ ‪ Java‬ﺑﺸﻜﻞ ﻗﻮﻱ ‪ ،‬ﻭﻟﻜﻦ ﻳﺘﻢ ﻛﺘﺎﺑﺔ ‪ JavaScript‬ﺩﻳﻨﺎﻣﻴﻜﻴﺎً )ﺍﻧﻈﺮ ﺍﻟﻔﺼﻞ ‪(5‬‬
‫‪.‬ﺳﻼﺳﻞ ﺃﺣﺮﻑ ‪ JavaScript‬ﻭﻣﺼﻔﻮﻓﺎﺗﻬﺎ ﻟﻬﺎ ﻃﻮﻝ ﺩﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﻟﻬﺬﺍ ﺍﻟﺴﺒﺐ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺤﻘﻖ‬
‫ﻣﻦﺻﺤﺔ ﻓﻬﺎﺭﺱ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻣﻄﻠﻮﺏ ﻓﻲ ‪ .Java‬ﺗﺪﻋﻢ ‪ Java‬ﺗﻤﺎﻣﺎً‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻟﻜﻦ ‪ JavaScript‬ﻻ ﻳﺪﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﻭﻻ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬
‫ﻻﺳﺘﺪﻋﺎءﺍﺕﺍﻟﻄﺮﻳﻘﺔ ﺑﺎﻟﻄﺮﻕ‪.‬‬

‫ﺃﺣﺪﺃﻫﻢ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ‪ JavaScript‬ﻫﻮ ﺇﻧﺸﺎء ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﻭﺗﻌﺪﻳﻠﻬﺎ ﺑﺸﻜﻞ‬


‫ﺩﻳﻨﺎﻣﻴﻜﻲ‪.‬ﺗﻌﺮﻑ ‪ JavaScript‬ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﻬﺮﻣﻲ ﻟﻠﻜﺎﺉﻦ ﺍﻟﺬﻱ ﻳﻄﺎﺑﻖ ﻧﻤﻮﺫﺟﺎً ﻫﺮﻣﻴﺎً ﻟﻤﺴﺘﻨﺪ‬
‫‪ ، HTML‬ﻭﺍﻟﺬﻱ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻩ ﺑﻮﺍﺳﻄﺔ ‪ .Document Object Model‬ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﻋﻨﺎﺻﺮﻣﺴﺘﻨﺪ ‪ HTML‬ﻣﻦ ﺧﻼﻝ ﻫﺬﻩ ﺍﻟﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻤﺎ ﻳﻮﻓﺮ ﺍﻷﺳﺎﺱ ﻟﻠﺘﺤﻜﻢ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻓﻲ‬
‫ﻋﻨﺎﺻﺮﺍﻟﻤﺴﺘﻨﺪﺍﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪98‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻧﺺ ‪ JavaScript‬ﻟﻠﻤﺸﻜﻠﺔ ﺍﻟﺘﻲ ﺗﻢ ﺣﻠﻬﺎ ﻣﺴﺒﻘﺎً ﺑﻌﺪﺓ ﻟﻐﺎﺕ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ‪.‬‬


‫ﻻﺣﻆﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎء ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻨﺼﻲ ﻣﻦ ﻣﺴﺘﻨﺪ ‪ HTML‬ﻭﻳﺘﻢ‬
‫ﺗﻔﺴﻴﺮﻩﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﻭﻳﺐ‪.‬‬

‫‪// example.js‬‬
‫ﺍﻹﺩﺧﺎﻝ‪:‬ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ، listLen ،‬ﺣﻴﺚ ‪ listLen‬ﺃﻗﻞ‬ ‫‪//‬‬
‫ﻣﻦ‪ ، 100‬ﺗﻠﻴﻬﺎ ‪ :listLen-numeric value Output‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫‪//‬‬
‫ﺍﻷﻛﺒﺮ‬ ‫‪//‬‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫‪//‬‬

‫ﻓﺎﺭ= ‪intList‬ﺟﺪﻳﺪﺻﻔﻴﻒ )‪ (99‬؛‬


‫ﻓﺎﺭﺍﻟﻨﺘﻴﺠﺔ = ‪ 0‬؛ ‪listLen ، counter ، sum = 0 ،‬‬

‫) ﻣﻮﺟﻪ = ‪listLen‬‬
‫"ﺍﻟﺮﺟﺎء ﻛﺘﺎﺑﺔ ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ" ‪ ("" ،‬؛ ﻟﻮ))} ((‪0( && )listLen >100‬‬
‫<‪listLen‬‬

‫‪ //‬ﺍﺣﺼﻞ ﻋﻠﻰ ﺍﻟﻤﺪﺧﻼﺕ ﻭﺍﺣﺴﺐ ﻣﺠﻤﻮﻋﻬﺎ‬


‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listLen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫) ﻣﻮﺟﻪ = [ﺍﻟﻌﺪﺍﺩ] ‪intList‬‬
‫"ﺍﻟﺮﺟﺎء ﻛﺘﺎﺑﺔ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺎﻟﻲ" ‪ ("" ،‬؛‬
‫؛ ([‪sum + = parseInt )intList ]counter‬‬
‫{‬

‫‪ //‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listLen‬؛‬

‫‪ //‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ‬


‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listLen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ <[ﻋﺪﺍﺩ] ‪intList‬‬

‫‪ //‬ﻋﺮﺽ ﺍﻟﻨﺘﺎﺉﺞ‬
‫‪:"،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪document.write‬‬
‫ﺍﻟﻨﺘﻴﺠﺔ ‪ ("</ br>"،‬؛‬
‫{ﺁﺧﺮ‬
‫) ‪document.write‬‬
‫"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ >‪ ("</ br‬؛‬

‫‪2.18.3‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪PHP‬‬


‫ﺗﻢﺗﻄﻮﻳﺮ (‪ PHP )Converse and Park، 2000‬ﺑﻮﺍﺳﻄﺔ ‪ ، Rasmus Lerdorf‬ﻭﻫﻮ ﻋﻀﻮ‬
‫ﻓﻲﻣﺠﻤﻮﻋﺔ ‪ ، Apache‬ﻓﻲ ﻋﺎﻡ ‪ .1994‬ﻛﺎﻥ ﺩﺍﻓﻌﻪ ﺍﻷﻭﻟﻲ ﻫﻮ ﺗﻮﻓﻴﺮ ﺃﺩﺍﺓ ﻟﻠﻤﺴﺎﻋﺪﺓ ﻓﻲ ﺗﺘﺒﻊ‬
‫ﺯﻭﺍﺭﻣﻮﻗﻊ ﺍﻟﻮﻳﺐ ﺍﻟﺸﺨﺼﻲ ﺍﻟﺨﺎﺹ ﺑﻪ‪ .‬ﻓﻲ ﻋﺎﻡ ‪ ، 1995‬ﻃﻮﺭ ﺣﺰﻣﺔ ﺗﺴﻤﻰ ﺃﺩﻭﺍﺕ ﺍﻟﺼﻔﺤﺔ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔﺍﻟﺸﺨﺼﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﺃﻭﻝ ﺇﺻﺪﺍﺭ ﻳﺘﻢ ﺗﻮﺯﻳﻌﻪ ﻋﻠﻨﺎً ﻣﻦ ‪ .PHP‬ﻓﻲ ﺍﻷﺻﻞ ‪،‬‬
‫ﻛﺎﻧﺖ‪ PHP‬ﺍﺧﺘﺼﺎﺭﺍً ﻟﻠﺼﻔﺤﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺸﺨﺼﻴﺔ‪ .‬ﻓﻲ ﻭﻗﺖ ﻻﺣﻖ ‪ ،‬ﺑﺪﺃ ﻣﺠﺘﻤﻊ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻻﺳﻢ ﺍﻟﻤﺘﻜﺮﺭ ‪PHP: Hypertext‬‬
‫‪99‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ‪ ،‬ﻭﺍﻟﺬﻱ ﺃﺩﻯ ﻻﺣﻘﺎً ﺇﻟﻰ ﻏﻤﻮﺽ ﺍﻻﺳﻢ ﺍﻷﺻﻠﻲ‪ .‬ﺗﻢ ﺗﻄﻮﻳﺮ ‪ PHP‬ﺍﻵﻥ ﻭﺗﻮﺯﻳﻌﻪ‬
‫ﻭﺩﻋﻤﻪﻛﻤﻨﺘﺞ ﻣﻔﺘﻮﺡ ﺍﻟﻤﺼﺪﺭ‪ .‬ﺗﻮﺟﺪ ﻣﻌﺎﻟﺠﺎﺕ ‪ PHP‬ﻓﻲ ﻣﻌﻈﻢ ﺧﻮﺍﺩﻡ ﺍﻟﻮﻳﺐ‪.‬‬

‫‪.‬ﺃﺑﺪﺍً‪ PHP‬ﻟﺬﻟﻚ ‪ ،‬ﻻ ﻳﺮﻯ ﻣﺴﺘﻌﺮﺽ ﺍﻟﻮﻳﺐ ﻛﻮﺩ ‪ HTML.‬ﻓﻲ ﻣﺴﺘﻨﺪ ‪ PHP‬ﻛﻤﺨﺮﺝ ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺤﻞ ﻣﺤﻞ ﻛﻮﺩ ‪ HTML‬ﻛﻮﺩ ‪ PHP‬ﺍﻟﺬﻱ ﺗﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻴﻪ‪ .‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﻨﺘﺞ ﻋﻦ ﻛﻮﺩ ‪HTML‬‬
‫ﻋﻠﻰﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ﻋﻨﺪﻣﺎ ﻳﻄﻠﺐ ﺍﻟﻤﺴﺘﻌﺮﺽ ﻣﺴﺘﻨﺪ ‪ PHP‬ﻭﻣﺼﻤﻤﺔ ﺧﺼﻴﺼﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻟﻮﻳﺐ‪.‬ﻳﺘﻢ ﺗﻔﺴﻴﺮ ﻛﻮﺩ ‪ HTML‬ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ﻣﻦ ﺟﺎﻧﺐ ﺍﻟﺨﺎﺩﻡ ﻣﻀﻤﻨﺔ ﻓﻲ ‪PHP‬‬

‫ﻳﺸﺒﻪ‪ ، PHP JavaScript‬ﻓﻲ ﻣﻈﻬﺮﻩ ﺍﻟﻨﺤﻮﻱ ‪ ،‬ﻭﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻟﺴﻼﺳﻠﻪ‬


‫ﻭﻣﺼﻔﻮﻓﺎﺗﻪ ‪،‬ﻭﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻠﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻣﺼﻔﻮﻓﺎﺕ ‪ PHP‬ﻫﻲ ﻣﺰﻳﺞ ﻣﻦ ﻣﺼﻔﻮﻓﺎﺕ‬
‫‪ JavaScript‬ﻭﺗﺠﺰﺉﺎﺕ ‪.Perl‬‬
‫ﺍﻟﻨﺴﺨﺔﺍﻷﺻﻠﻴﺔ ﻣﻦ ‪ PHP‬ﻟﻢ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﺍﻟﺪﻋﻢ ﺃﺿُﻴﻒ ﻓﻲ‬
‫ﺍﻹﺻﺪﺍﺭﺍﻟﺜﺎﻧﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻻ ﺗﺪﻋﻢ ‪ PHP‬ﺍﻟﻔﺉﺎﺕ ﺃﻭ ﺍﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺠﺮﺩﺓ ﺃﻭ ﺃﺩﻭﺍﺕ ﺍﻟﺘﺪﻣﻴﺮ ﺃﻭ‬
‫ﻋﻨﺎﺻﺮﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﻷﻋﻀﺎء ﺍﻟﻔﺼﻞ‪.‬‬

‫ﻳﺘﻴﺢ‪ PHP‬ﻭﺻﻮﻻ ًﺑﺴﻴﻄﺎً ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﻧﻤﻮﺫﺝ ‪ ، HTML‬ﻟﺬﺍ ﻓﺈﻥ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﺳﻬﻠﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‪ .PHP‬ﻳﻮﻓﺮ ‪ PHP‬ﺍﻟﺪﻋﻢ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ‪ .‬ﻫﺬﺍ‬
‫ﻳﺠﻌﻠﻬﺎﻟﻐﺔ ﻣﻔﻴﺪﺓ ﻟﺒﻨﺎء ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺘﻲ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﻭﺻﻮﻝ ﺍﻟﻮﻳﺐ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫‪2.18.4‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺑﺎﻳﺜﻮﻥ‬


‫ﻋﻠﻰ‪ Python‬ﻫﻮ ﻧﻈﺎﻡ ﻣﻔﺘﻮﺡ ﺍﻟﻤﺼﺪﺭ ﻭﻣﺘﺎﺡ ﻟﻤﻌﻈﻢ ﻣﻨﺼﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺸﺎﺉﻌﺔ‪ .‬ﻳﺘﻮﻓﺮ‬
‫ﺗﻄﺒﻴﻖ‪. Python‬ﻭﻣﻬﺎﻡ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺼﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﺍﻷﺧﺮﻯ ‪ CGI‬ﺇﺩﺍﺭﺓ ﺍﻟﻨﻈﺎﻡ ﻭﺑﺮﻣﺠﺔ ‪Perl:‬‬
‫ﻟﻨﻔﺲﺃﻧﻮﺍﻉ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻣﺜﻞ ‪ Python‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ Python Software Foundation.‬ﻓﻲ‬
‫ﻫﻮﻟﻨﺪﺍﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪ .‬ﻳﺘﻢ ﺗﻄﻮﻳﺮﻩ ﺍﻵﻥ ﺑﻮﺍﺳﻄﺔ ‪Mathematisch Centrum‬‬
‫‪ Stichting‬ﻓﻲ ‪ Guido van Rossum‬ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ﻣﻔﺴﺮﺓ ﺣﺪﻳﺜﺔ ﻧﺴﺒﻴﺎً ﻣﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﺍﻷﻭﻟﻲ ﺑﻮﺍﺳﻄﺔ (‪،Python )Lutz and Ascher، 2004‬‬
‫‪www.python.org‬ﺍﻟﺬﻱ ﻳﺤﺘﻮﻱ ﺃﻳﻀﺎً ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺷﺎﻣﻠﺔ ﺑﺨﺼﻮﺹ ‪.Python‬‬

‫ﻻﻳﻌﺘﻤﺪ ﺑﻨﺎء ﺟﻤﻠﺔ ﺑﺎﻳﺜﻮﻥ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺃﻱ ﻟﻐﺔ ﺷﺎﺉﻌﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ‪ .‬ﻳﺘﻢ ﻓﺤﺼﻪ ﻣﻦ‬
‫ﺍﻟﻨﻮﻉ ‪،‬ﻭﻟﻜﻦ ﻳﺘﻢ ﻛﺘﺎﺑﺘﻪ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ‪ ،‬ﺗﺘﻀﻤﻦ ‪ Python‬ﺛﻼﺛﺔ ﺃﻧﻮﺍﻉ ﻣﻦ‬
‫ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﻘﻮﺍﺉﻢ ؛ ﻏﻴﺮ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻐﻴﻴﺮ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰﻣﺠﻤﻮﻋﺎﺕ؛ ﻭﺍﻟﺘﺠﺰﺉﺔ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﻳﺘﻢﺍﺳﺘﺪﻋﺎﺅﻫﺎﻗﻮﺍﻣﻴﺲ‪ .‬ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻃﺮﻕ ﺍﻟﻘﺎﺉﻤﺔ ‪ ،‬ﻣﺜﻞﺇﻟﺤﺎﻕ ‪ ،‬ﺇﺩﺭﺍﺝ ‪ ،‬ﺇﺯﺍﻟﺔ ‪،‬ﻭﻧﻮﻉ‪،‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻘﻮﺍﻣﻴﺲ ‪ ،‬ﻣﺜﻞﻣﻔﺎﺗﻴﺢ ‪ ،‬ﻗﻴﻢ ‪ ،‬ﻧﺴﺦ ‪،‬ﻭ‪has_key.‬ﺗﺪﻋﻢ‬
‫‪ Python‬ﺃﻳﻀﺎً ﻗﻮﺍﺉﻢ ﺍﻟﻔﻬﻢ ‪ ،‬ﺍﻟﺘﻲ ﻧﺸﺄﺕ ﻣﻊ ﻟﻐﺔ ‪ .Haskell‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺍﺳﺘﻴﻌﺎﺏ‬
‫ﺍﻟﻘﺎﺉﻤﺔﻓﻲ ﺍﻟﻘﺴﻢ ‪.15.8‬‬

‫‪.‬ﻭﻟﺪﻳﻬﺎﻣﻌﺎﻟﺠﺔ ﺍﺳﺘﺜﻨﺎﺉﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺟﻤﻊ ﺍﻟﻘﻤﺎﻣﺔ ﻻﺳﺘﻌﺎﺩﺓ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻋﻨﺪﻣﺎ ﻟﻢ‬
‫ﺗﻌﺪﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻴﻬﺎ ‪ Perl ،‬ﻫﻲ ﻟﻐﺔ ﻛﺎﺉﻨﻴﺔ ﺍﻟﺘﻮﺟﻪ ‪ ،‬ﻭﺗﺘﻀﻤﻦ ﺇﻣﻜﺎﻧﻴﺎﺕ ﻣﻄﺎﺑﻘﺔ ﺍﻷﻧﻤﺎﻁ‬
‫ﻓﻲ‪Python‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮ ﺍﻟﺪﻋﻢ ﻟﺒﺮﻣﺠﺔ ‪ ، CGI‬ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﺑﻮﺍﺳﻄﺔ‪CGI‬‬
‫ﻭﺣﺪﺓ‪.‬ﺗﺘﻮﻓﺮ ﺃﻳﻀﺎً ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﻣﻠﻔﺎﺕ ﺗﻌﺮﻳﻒ ﺍﻻﺭﺗﺒﺎﻁ ﻭﺍﻟﺸﺒﻜﺎﺕ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﻗﺎﻋﺪﺓﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪100‬‬

‫ﺗﺘﻀﻤﻦ‪ Python‬ﺩﻋﻤﺎً ﻟﻠﺘﺰﺍﻣﻦ ﻣﻊ ﻣﺆﺷﺮﺍﺕ ﺍﻟﺘﺮﺍﺑﻂ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻓﻀﻼ ًﻋﻦ ﺩﻋﻢ ﺑﺮﻣﺠﺔ‬
‫ﺍﻟﺸﺒﻜﺔﺑﻤﻘﺎﺑﺴﻬﺎ‪ .‬ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺩﻋﻤﺎً ﺃﻛﺒﺮ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻛﺜﺮ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻏﻴﺮ‬
‫ﺍﻟﻮﻇﻴﻔﻴﺔﺍﻷﺧﺮﻯ‪.‬‬
‫ﺇﺣﺪﻯﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﻛﺜﺮ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ‪ Python‬ﻫﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﻮﺳﻴﻌﻬﺎ ﺑﺴﻬﻮﻟﺔ‬
‫ﺑﻮﺍﺳﻄﺔﺃﻱ ﻣﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺑﺄﻱ ﻟﻐﺔ ﻣﺘﺮﺟﻤﺔ‪ .‬ﻳﻤﻜﻦ‬
‫ﺃﻥﺗﻀﻴﻒ ﺍﻹﺿﺎﻓﺎﺕ ﻭﻇﺎﺉﻒ ﻭﻣﺘﻐﻴﺮﺍﺕ ﻭﺃﻧﻮﺍﻉ ﻛﺎﺉﻨﺎﺕ‪ .‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ‬
‫ﻛﺈﺿﺎﻓﺎﺕﻟﻤﺘﺮﺟﻢ ﺑﺎﻳﺜﻮﻥ‪.‬‬

‫‪2.18.5‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺍﻟﻴﺎﻗﻮﺕ‬


‫ﺗﻢﺗﺼﻤﻴﻢ (‪ Ruby )Thomas et al. ، 2005‬ﺑﻮﺍﺳﻄﺔ ‪) Yukihiro Matsumoto‬ﺍﻟﻤﻌﺮﻭﻑ‬
‫ﺃﻳﻀﺎًﺑﺎﺳﻢ ‪ (Matz‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻭﺗﻢ ﺇﺻﺪﺍﺭﻩ ﻓﻲ ﻋﺎﻡ ‪ .1996‬ﻭﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ ‪،‬‬
‫ﺗﻄﻮﺭﺕﺑﺎﺳﺘﻤﺮﺍﺭ‪ .‬ﻛﺎﻥ ﺍﻟﺪﺍﻓﻊ ﻭﺭﺍء ﺭﻭﺑﻲ ﻫﻮ ﻋﺪﻡ ﺭﺿﺎ ﻣﺼﻤﻤﻬﺎ ﻋﻦ ﺑﻴﺮﻝ ﻭﺑﺎﻳﺜﻮﻥ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺃﻥ ﻛﻼ ًﻣﻦ ‪ Perl‬ﻭ ‪ Python‬ﻳﺪﻋﻤﺎﻥ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪14،‬ﻟﻴﺴﺖ ﺃﻱ ﻣﻨﻬﻤﺎ ﻟﻐﺔ ﻣﻮﺿﻮﻋﻴﺔ‬
‫ﻣﺤﻀﺔ ‪،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺑﻤﻌﻨﻰ ﺃﻥ ﻟﻜﻞ ﻣﻨﻬﺎ ﺃﻧﻮﺍﻉ ﺑﺪﺍﺉﻴﺔ )ﻏﻴﺮ ﻛﺎﺉﻦ( ﻭﻛﻞ ﻣﻨﻬﺎ ﻳﺪﻋﻢ ﻭﻇﺎﺉﻒ‪.‬‬

‫ﺍﻟﻤﻴﺰﺓﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﻤﻤﻴﺰﺓ ﻟﺮﻭﺑﻲ ﻫﻲ ﺃﻧﻬﺎ ﻟﻐﺔ ﻣﻮﺟﻬﺔ ﺑﺤﺘﺔ ‪ ،‬ﺗﻤﺎﻣﺎً ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ‬
‫‪ .Smalltalk‬ﻛﻞ ﻗﻴﻤﺔ ﺑﻴﺎﻧﺎﺕ ﻫﻲ ﻛﺎﺉﻦ ﻭﻛﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺗﺘﻢ ﻋﺒﺮ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ‪.‬‬
‫ﺍﻟﻌﻮﺍﻣﻞﻓﻲ ‪ Ruby‬ﻫﻲ ﺁﻟﻴﺎﺕ ﻧﺤﻮﻳﺔ ﻓﻘﻂ ﻟﺘﺤﺪﻳﺪ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻘﺎﺑﻠﺔ‪.‬‬
‫ﻷﻧﻬﺎﻃﺮﻕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻋﺎﺩﺓ ﺗﻌﺮﻳﻔﻬﺎ‪ .‬ﻳﻤﻜﻦ ﺗﺼﻨﻴﻒ ﺟﻤﻴﻊ ﺍﻟﻔﺉﺎﺕ ‪ ،‬ﺍﻟﻤﺤﺪﺩﺓ ﻣﺴﺒﻘﺎً ﺃﻭ ﺍﻟﻤﺤﺪﺩﺓ‬
‫ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻋﻠﻰ ﺃﻧﻬﺎ ﻓﺮﻋﻴﺔ‪.‬‬

‫ﺗﻌﺘﺒﺮﻛﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ ﻓﻲ ‪ Ruby‬ﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﺑﻤﻌﻨﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ‬


‫ﺍﻷﺳﺎﻟﻴﺐﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﺇﻟﻰ ﺃﻱ ﻣﻨﻬﻤﺎ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻜﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﻣﺠﻤﻮﻋﺎﺕﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻷﺳﺎﻟﻴﺐ ﻓﻲ ﺃﻭﻗﺎﺕ ﻣﺨﺘﻠﻔﺔ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﺼﺮﻑ‬
‫ﺃﺷﻜﺎﻝﻣﺨﺘﻠﻔﺔ ﻣﻦ ﻧﻔﺲ ﺍﻟﻔﺉﺔ ﺑﺸﻜﻞ ﻣﺨﺘﻠﻒ‪ .‬ﻳﻤﻜﻦ ﺗﻀﻤﻴﻦ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻷﺳﺎﻟﻴﺐ‬
‫ﻭﺍﻟﺒﻴﺎﻧﺎﺕﻭﺍﻟﺜﻮﺍﺑﺖ ﻓﻲ ﺗﻌﺮﻳﻒ ﺍﻟﻔﺉﺔ‪.‬‬
‫ﻳﺮﺗﺒﻂﺑﻨﺎء ﺟﻤﻠﺔ ﺭﻭﺑﻲ ﺑﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻣﻦ ﺇﻳﻔﻞ ﻭﺁﺩﺍ‪ .‬ﻟﻴﺴﺖ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﻟﻺﻋﻼﻥ ﻋﻦ‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ‪،‬ﻷﻧﻪ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻧﻄﺎﻕ ﺍﻟﻤﺘﻐﻴﺮ ﻣﺤﺪﺩ ﻓﻲ ﺍﺳﻤﻪ‪ :‬ﺍﻟﻤﺘﻐﻴﺮ‬
‫ﺍﻟﺬﻱﻳﺒﺪﺃ ﺍﺳﻤﻪ ﺑﺤﺮﻑ ﻟﻪ ﻧﻄﺎﻕ ﻣﺤﻠﻲ ؛ ﻭﺍﺣﺪ ﻳﺒﺪﺃ ﺑـ @ ﻫﻮ ﻣﺘﻐﻴﺮ ﺣﺎﻟﺔ ؛ ﺍﻟﺬﻱ ﻳﺒﺪﺃ ﺑـ ‪ $‬ﻟﻪ‬
‫ﻧﻄﺎﻕﻋﺎﻟﻤﻲ‪ .‬ﻳﻮﺟﺪ ﻋﺪﺩ ﻣﻦ ﻣﻴﺰﺍﺕ ‪ Perl‬ﻓﻲ ‪ ، Ruby‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ‬
‫ﺑﺄﺳﻤﺎءﺳﺨﻴﻔﺔ ‪ ،‬ﻣﺜﻞ ‪._ $‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ‪ ، Python‬ﻳﻤﻜﻦ ﻷﻱ ﻣﺴﺘﺨﺪﻡ ﺗﻤﺪﻳﺪ ﻭ ‪ /‬ﺃﻭ ﺗﻌﺪﻳﻞ ‪ .Ruby‬ﺗﻌﺘﺒﺮ ﻟﻐﺔ‬


‫‪ Ruby‬ﻣﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ﺛﻘﺎﻓﻴﺎً ﻷﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺼﻤﻤﺔ ﻓﻲ ﺍﻟﻴﺎﺑﺎﻥ ﻭﺍﻟﺘﻲ ﺣﻘﻘﺖ‬
‫ﺍﺳﺘﺨﺪﺍﻣﺎًﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻧﺴﺒﻴﺎً ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪.‬‬

‫‪2.18.6‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﻟﻮﺍ‬


‫ﻟﻮﺍ‪15‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺭﻭﺑﺮﺗﻮ ﺇﻳﺮﻭﺳﺎﻟﻤﺴﻜﻲ ‪ ،‬ﻭﻭﺍﻟﺪﻳﻤﺎﺭ‬
‫ﺳﻴﻠﻴﺲ ‪،‬ﻭﻟﻮﻳﺲ ﺇﻧﺮﻳﻜﻲ ﺩﻱ ﻓﻴﻐﻴﺮﻳﺪﻭ ﻓﻲ ﺍﻟﺠﺎﻣﻌﺔ ﺍﻟﺒﺎﺑﻮﻳﺔ ﻓﻲ ﺭﻳﻮ ﺩﻱ ﺟﺎﻧﻴﺮﻭ ﻓﻲ ﺍﻟﺒﺮﺍﺯﻳﻞ‪.‬‬
‫ﺇﻧﻬﺎﻟﻐﺔ ﻧﺼﻴﺔ ﺗﺪﻋﻢ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭ‬

‫‪.14‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺩﻋﻢ ﺑﺎﻳﺜﻮﻥ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺟﺰﺉﻲ‪.‬‬

‫‪.15‬ﺍﺳﻢ ﻟﻮﺍ ﻣﺸﺘﻖ ﻣﻦ ﺍﻟﻜﻠﻤﺔ ﺍﻟﺒﺮﺗﻐﺎﻟﻴﺔ ﻟﻠﻘﻤﺮ‪.‬‬

You might also like