SuperPascal - SuperPascal - Wikipedia

SuperPascal
Парадигмақатарлас, императивті, құрылымдалған
ОтбасыВирт Паскаль
ЖобалағанПер Бринч Хансен
Бірінші пайда болды1993; 27 жыл бұрын (1993)
Тұрақты шығарылым
1 / 1993; 27 жыл бұрын (1993)
Пәнді теруКүшті
Веб-сайтбринч-хансен.желі
Әсер еткен
Бірізді процестерді байланыстыру, Паскаль, Бір уақытта Паскаль, Джойс, оксам

SuperPascal императивті, бір уақытта есептеу бағдарламалау тілі әзірлеген Пер Бринч Хансен.[1] Ол ретінде жобаланған басылым тілі: параллель бағдарламалау кезінде ұғымдарды нақты және нақты көрсетуге мүмкіндік беретін ойлау құралы. Бұл керісінше іске асыру тілдері олар машиналық бөлшектермен және тарихи конвенциялармен күрделі. Ол параллель басылым тіліне деген қажеттілікті шешу үшін жасалған. Қазіргі кезде аз тілдер мәнерлі және қысқа, ойлау құралы ретінде қолданыла алады.

Тарих және даму

SuperPascal негізделген Никлаус Вирт тізбекті тіл Паскаль, оны қауіпсіз және тиімді сәйкестіктің мүмкіндіктерімен кеңейту. Паскальдың өзі 1970 жылдары басылым тілі ретінде қатты қолданылды. Бұл сабақ беру үшін қолданылған құрылымдық бағдарламалау практика және оқулықтарда, мысалы, құрастырушылар[2] және бағдарламалау тілдері.[3] Хансен бұл тілді ертерек дамытты Бір уақытта Паскаль,[4] дизайны үшін ең алғашқы тілдердің бірі операциялық жүйелер және шынайы уақыт басқару жүйелері.

СуперПаскальдың талаптары Хансеннің үш жыл ішінде параллельді бағдарламалар жиынтығын құру тәжірибесінде негізделді, ол жалпы мәселелерге арналған әдістерді іске асырды есептеу техникасы.[5] Бұл эксперимент оған ғылыми болашақ туралы келесі тұжырымдар жасауға мүмкіндік берді параллель есептеу:

  • Болашақ параллель компьютерлер болады жалпы мақсат, бағдарламашыларға ойлануға мүмкіндік береді проблемаға бағытталған процестің конфигурациясы. Бұл оның бағдарламалау желілерінің тәжірибесіне негізделген таратқыштар жалпы мақсаттағы процессорлар қосылу мүмкіндігі бар массивтер, ағаштар немесе гиперкубалар.
  • Есептеу ғылымындағы жүйелі мәселелер тек қажет детерминистік параллелизм, яғни белгілі бір қатынасты күту арна, бірнеше емес.
  • Параллельді ғылыми алгоритмдерді an талғампаз басылым тілі және а дәйекті компьютер. Ол құрылған кезде алгоритм жұмыс істейді, оны параллель енгізу тілінде оңай жүзеге асыруға болады.

Бұдан кейін параллель басылым тіліне қойылатын келесі талаптар туындады:

  • Тіл кеңінен қолданылатын стандартты тілді кеңейтуі керек детерминистік параллелизм және хабарлама байланысы. Кеңейтімдер стандартты тілдің рухында болуы керек.
  • Тіл бағдарламалауға мүмкіндік беруі керек ерікті конфигурациялар байланыс каналдары арқылы байланысқан параллель процестер. Бұл конфигурациялар қайталанатын немесе рекурсивті түрде анықталып, динамикалық түрде жасалуы мүмкін.
  • Тіл а бір реттік компилятор параллель процестердің уақытқа тәуелді болмауын тексеру.

Ерекшеліктер

SuperPascal дизайнындағы негізгі идеялар a қауіпсіз параллелизмге арналған дерексіз ұғымдармен бағдарламалау.[6][7]

Қауіпсіздік

SuperPascal болып табылады қауіпсіз оның компиляторын және жұмыс уақыты жүйесі тілдік ұғымдар ыдырайтын және мағынасыз нәтиже беретін жағдайларды мүмкіндігінше көбірек анықтау.[8] SuperPascal айнымалыларды пайдалануға шектеулер қояды, бұл бір реттік компиляторға параллель процестердің біріктірілгендігін тексеруге мүмкіндік береді, тіпті процестер глобальды айнымалылармен процедураларды қолданса да, уақытқа тәуелді қателерді жояды. Паскальдағы бірнеше функция екі мағыналы немесе сенімсіз болды және SuperPascal-ден алынып тасталды, мысалы жапсырмалар және бару мәлімдемелер, нұсқаулар және тікелей декларациялар.[6]

Параллелизм

SuperPascal-дің параллель ерекшеліктері - бұл ішкі жиын оксам 2, динамикалық процесс массивтері мен рекурсивті параллель процестердің жалпы жалпылығымен.[7]

A параллель оператор оның құрамындағы операторлардың белгіленген саны параллель орындалуы керек екенін білдіреді. Мысалға:

параллель көзі () | раковина () соңы

A барлығына оператор оператордың динамикалық санымен параллель орындалуын білдіреді, мысалы:

барлығы i: = 0-ден 10-ға дейін ()

Арналар және байланыс

Параллельді процестер динамикалық түрде құрылған арналар арқылы терілген хабарламаларды жіберу арқылы байланысады. Арналар өздігінен айнымалы емес, дегенмен белгілі бір мәнмен анықталады арна анықтамасы, олар өткізеді арнаның айнымалылары. Арна, мысалы, декларация арқылы жарияланады

түрі арна = *(логикалық, бүтін);var c: арна;

атты жаңа (аралас) түрін анықтайтын арна және аталған түрдегі айнымалы c. Аралас типтегі арна тек көрсетілген типтерді, тек логикалық және бүтін мәндерді жіберуге шектелген. Арна c инициализацияланған ашық мәлімдеме:

ашық (с)

Хабарламалық байланыс кейін қол жетімді жіберу (арна, мән) және қабылдау (арна, айнымалы) мәлімдемелер. Мәнін беретін өрнек немесе айнымалы жіберу, және айнымалы алу, екеуі де бірінші арна аргументімен бірдей болуы керек. Келесі мысал осы функцияларды -дан мән алатын процесте қолдануды көрсетеді сол арнаны қосады және оны дұрыс бір.

var сол, дұрыс: арна; а: нөмір;алу(сол, а);жіберу(дұрыс, а)

Функциялар жіберу және алу екеуі де сәйкесінше бірнеше кіріс және шығыс аргументтерін қабылдай алады:

жіберу (арна, e1, e2, ..., en); қабылдау (арна, v1, v2, ..., vn)

Келесісі жұмыс уақыты байланыс қателері орын алуы мүмкін:

  • Арна дауы екі параллель процесс бір уақытта бір арнаға жіберуге немесе алуға тырысқанда пайда болады.
  • A хабарлама түріндегі қате екі параллель процестер бір канал арқылы байланысуға тырысқанда пайда болады және шығыс өрнегі мен кіріс айнымалысы әр түрлі болады.
  • Тығырық жіберу немесе қабылдау операциясының аяқталуын шексіз күткен кезде пайда болады.

Параллельді рекурсия

Рекурсивті процедураларын біріктіруге болады параллель және барлығына параллельді рекурсивті процестерді құруға арналған операторлар. Келесі мысалда а құбыр процедураларын a көмегімен рекурсивті түрде анықтауға болады параллель мәлімдеме.

рәсім құбыр(мин, макс: бүтін; сол, дұрыс: арна);var ортаңғы: арна;баста  егер мин < макс содан кейін    баста      ашық(ортаңғы);      параллель        түйін(мин, сол, ортаңғы) |        құбыр(мин + 1, макс, ортаңғы, дұрыс)      Соңы    Соңы  басқа түйін(мин, сол, дұрыс)Соңы;

Тағы бір мысал - процестің рекурсивті анықтамасы ағаш:

рәсім ағаш(тереңдік: бүтін, төменгі: арна);var сол, дұрыс: арна;баста  егер тереңдік > 0 содан кейін    баста      ашық(сол, дұрыс);      параллель        ағаш(тереңдік - 1, сол) |        ағаш(тереңдік - 1, дұрыс) |        тамыр(төменгі, сол, дұрыс)      Соңы    Соңы  басқа жапырақ(төменгі)

Кедергілерді бақылау

Параллельді бағдарламалаудың ең күрделі аспектісі болып табылады күтпеген немесе қайталанбайтын туындаған мінез-құлық уақытқа байланысты қателер. Уақытқа байланысты қателіктер туындаған кедергі параллель процестер арасында, ауыспалы жаңартуларға немесе арналардың қайшылықтарына байланысты. Егер айнымалыны бөлісу процестері болса, оны күтпеген уақытта жаңартыңыз, нәтижесінде бағдарламаның әрекеті уақытқа тәуелді болады. Дәл сол сияқты, егер екі процесс бір уақытта ортақ арнаға жіберуге немесе қабылдауға тырысса, нәтиже уақытқа тәуелді болады.

SuperPascal уақытқа тәуелді қателіктерді азайту немесе жою үшін айнымалыларды пайдалануға және байланысқа белгілі шектеулер енгізеді. Айнымалылармен қарапайым ереже қажет: параллель процестер тек айнымалылардың дисконтталған жиынтықтарын жаңарта алады.[1] Мысалы, а параллель мәлімдеме а мақсат айнымалысын бір ғана процесстен артық жаңарту мүмкін емес, бірақ өрнек айнымалы (оны жаңарту мүмкін емес) бірнеше процестерде қолданылуы мүмкін. Кейбір жағдайларда, мысалы, массив сияқты айнымалы мақсат параллельді бірнеше процестерді, және бағдарламалаушы оның элементтерді пайдалану әдісін біледі бөлу, содан кейін дисгюиттіліктің шектелуі алдыңғы нұсқамен жойылуы мүмкін [sic] мәлімдеме.

Құрылымы және синтаксисі

SuperPascal - а блок құрылымдалған Паскаль сияқты негізгі синтаксисі бар тіл. Бағдарлама а тақырып, жаһандық айнымалы анықтамалар, функциясы немесе рәсім анықтамалар және а негізгі рәсім. Функциялар мен процедуралар тұрады блоктар, мұндағы блок жиынтығы мәлімдемелер. Мәлімдемелер бөлінген сияқты тілдерге қарағанда нүктелі үтір арқылы C немесе Java, олар қайда тоқтатылды нүктелі үтір арқылы.

Төменде а-ны құратын толық SuperPascal бағдарламасының мысалы келтірілген құбыр 100 түйіннен тұратын байланыс құрылымы. Негізгі түйін бүтін таңбалауышты бірінші түйінге жібереді, содан кейін ол құбыр бойымен жіберіледі және әр қадам сайын ұлғаяды, ақыр соңында басты түйін қабылдап, басып шығарады.

бағдарлама құбыр;const    лен = 100;түрі    арна = *(бүтін);var    сол, дұрыс: арна;    мәні: бүтін;рәсім түйін(мен: бүтін; сол, дұрыс: арна);var мәні: бүтін;баста    алу(сол, мәні);    жіберу(дұрыс, мәні+1)Соңы;рәсім жасау(сол, дұрыс: арна);түрі қатар = массив [0..лен] туралы арна;var c: қатар; мен: бүтін;баста    c[0] := сол;    c[лен] := дұрыс;    үшін мен := 1 дейін лен-1 істеу        ашық(c[мен]);    барлығына мен := 1 дейін лен істеу        түйін(мен, c[мен-1], c[мен])Соңы;баста    ашық(сол, дұрыс);    параллель        жіберу(сол, 0) |        жасау(сол, дұрыс) |        алу(дұрыс, мәні)    Соңы;    жазба('Алынған мән', мәні)Соңы.

Іске асыру

SuperPascal бағдарламалық жасақтамасына Brinch Hansen архивінен еркін қол жеткізуге болады.[9] Ол әрқайсысы қалыпты, дәйекті Паскаль тілінде жазылған компилятордан және интерпретатордан тұрады (ISO 1 деңгей Паскаль тілі). Мұны GNU Pascal компиляторы және жаңа нұсқалары қолдайды Тегін Паскаль компилятор (2.7.1+) -Мисо кодты келесі тиісті өзгертулермен ауыстырыңыз.

GPC үшін файл түсіндіру б стандартты емес қолданады сағат функциясы (1786-жол), ол жүйелік уақытты алу үшін қолданылады. Оның орнына кеңейтілген Паскаль getTimeStamp функциясын типті айнымалыны жариялау арқылы пайдалануға болады (оны GNU Pascal компиляторы қолдайды) TimeStamp, оны қолданыстағы уақытпен бірге орнатыңыз getTimeStamp және тағайындау Екінші өрісі TimeStamp айнымалыға т.

GPC туралы 64 бит операциялық жүйелер; GNU Pascal компиляторы компиляцияланып орнатылуы керек бастапқы код.[10]

Тегін Паскаль тіліне жоғарыда аталған «сағат» мәселесін шешу қажет (терезелерде gettickcount-ты сыртқы ретінде «сағат» деп жариялаңыз). Сонымен, бастапқы кодта стандартты емес деп белгіленген қалпына келтіру / қайта жазу жұптарды тағайындау / қалпына келтіру (немесе қайта жазу) үшін өзгертілуі керек. (Қатаң жалаушаларды қосқан кезде GPC қателіктер жіберуі мүмкін) және C препроцессорының #include 'xx' командалары {$ include 'xx'} болып өзгертілуі керек.

{Freepascal-да оқуға арналған уақыт коды unix жүйелерінде}Функция  FpTime(var tloc : бүтін): бүтін; сыртқы аты 'FPC_SYSC_TIME'; рәсім оқу уақыты( var т:  бүтін);баста  {Стандартты емес функция оқылады    процессордың уақыты ms}  т:=fptime(т);Соңы;

Әдебиеттер тізімі

  1. ^ а б Хансен, Пер Бринч (1993), SuperPascal: параллель ғылыми есептеу үшін басылым тілі
  2. ^ Уэльс, Джим (1980). Құрылымдық жүйелік бағдарламалау. Жоғарғы Седл өзені, АҚШ, Нж.: Прентис-Холл. ISBN  0-13-854562-6.
  3. ^ Tennent, R. D. (1981). Бағдарламалау тілдерінің принциптері. Жоғарғы Седл өзені, АҚШ, Нж.: Прентис-Холл. ISBN  0-13-709873-1.
  4. ^ Хансен, Бринч (1977). Параллельді бағдарламалардың сәулеті. Prentice-Hall. ISBN  978-0130446282.
  5. ^ Хансен, Бринч (Мамыр 1993 ж.), «Есептеу ғылымының типтік бағдарламалары: мультикомпьютерлерге арналған бағдарламалау әдістемесі», Параллелизм: тәжірибе және тәжірибе, 407-423 бб
  6. ^ а б Хансен, Бринч (1994). «SuperPascal бағдарламалау тілі». Бағдарламалық жасақтама - тәжірибе және тәжірибе. 24, 5: 399–406.
  7. ^ а б Хансен, Бринч (1977). Параллельді бағдарламалаудың өнертабысы. Нью-Йорк: Спрингер-Верлаг. ISBN  0-387-95401-5.
  8. ^ Хоаре, C. A. R. (1974). «Бағдарламалау тілін жобалау туралы кеңестер». Компьютерлік жүйенің сенімділігі: 505–534.
  9. ^ Хейден, Колумбия округу (2008-06-11). «Пер Бринч Хансен мұрағаты». Алынған 2020-03-03.
  10. ^ «4.3 GPC құрастыру». GNU Pascal. 1996–2005. Алынған 2020-03-03.

Сыртқы сілтемелер

  • Ресми сайт, Бринч Хансен мұрағаты, оның құжаттар жиынтығы және қысылған файлға жүктеуге болатын SuperPascal бағдарламалық жасақтамасы; толық тілдік спецификация мен пайдалы құжаттаманы қамтиды.
  • суперпаскаль қосулы GitHub, Кристофер Лонгтың түпнұсқа SuperPascal бағдарламасының өзгертілген нұсқасы; заманауи Free Pascal тілінде құрастырады және іске қосады; бағдарламаның орындалуы Perl 5 немесе 6-ға қарағанда тезірек, Python 3 сияқты жылдам