лекции (2008) (by Kravets), страница 5
Описание файла
PDF-файл из архива "лекции (2008) (by Kravets)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 5 страницы из PDF
Ïîíÿòèå áëîêà ñòàòè÷åñêàÿ îáëàñòü äåéñòâèÿ.var i;proc p;var i;beginP1;end p;proc P1;begini:=1;end P1;beginP;P1;end;Òàêàÿ ñòðóêòóðà ïîÿâèëàñü âïåðâûå â ÀËÃÎË 60 è ïåðåøëà ïîòîìâî âñå îñòàëüíûå ßÏ.  ÿçûêàõ ñ äèíàìè÷åñêîé îáëàñòüþ äåéñòâèÿ ïîèñêîñóùåñòâëÿåòñÿ ñ ïîìîùüþ ñòåêà ( òî åñòü â ïðè âûçîâå ïðîöåäóðû P1èç P áóäåò èçìåíåíî çíà÷åíèå ëîêàëüíîé i(òîé ÷òî îïðåäåëåíà â P)). Ñ++ åñòü ïðèìåð äèíàìè÷åñêîé îáëàñòè äåéñòâèÿ - ïîèñê ëîâóøåêïðè îáðàáîòêå èñêëþ÷åíèé. Íî â îñíîâíîì â ñîâðåìåííûõ ßÏ èñïîëüçóþòñÿ ñòàòè÷åñêèå îáëàñòè äåéñòâèÿ.
Ïåðâàÿ ïðè÷èíà ýòîìó ïðîñòîòàîòëàäêè ïðîãðàìì, âòîðàÿ ýôôåêòèâíîñòü ðåàëèçàöèè ( àäðåñ ïåðåìåííîé îïðåäåëåí è íå òðåáóåòñÿ åå ïîèñê ïî ñòåêó).Ïóíêò 3. Êîíöåïòóàëüíàÿ ñõåìà ðàññìîòðåíèÿ.20Ãëàâíàÿ ïðîáëåìà ïðåæäå âñåãî ñëîæíîñòü. Âïåðâûå ëþäè ñòîëêíóëèñü ñ ïðîáëåìàìè ïðè ïðîãðàììèðîâàíèè â íà÷àëå 60-õ ïðè ïðîãðàììèðîâàíèè íà OS360.
Ðàçðàáîòêà ýòîé ÎÑ øëà òðè ãîäà è êîãäà îíàâûøëà, ñîäåðæàëà îãðîìíîå êîëè÷åñòâî íåýôôåêòèâíîñòåé, ïðè ýòîì ñàìûì ãëàâíûì íåäîñòàòêîì áûëà íåãîòîâíîñòü ñàìîé ñèñòåìû. Áàçèñ êîìïüþòåðîâ, äëÿ êîòîðûõ ïèøóòñÿ ïðîãðàììû î÷åíü âåëèê.
Ïðè ýòîì ðàçðûâ ìåæäó êîìïüþòåðàìè è ðåàëüíûì ìèðîì, êîòîðûé íóæíî îïèñàòü âïðîãðàììå êðàéíå âåëèê. Äëÿ ïðåîäîëåíèè ýòîãî ïðèäóìàí ìåõàíèçì àáñòðàêöèè. Ïðè ýòîì ïî÷òè äëÿ êàæäîé ïðîáëåìíîé îáëàñòè ïðèõîäèòñÿñîçäàâàòü ñâîé íàáîð ìîäåëåé. Ïðîñòåéøèì ñðåäñòâîì àáñòðàêöèè ÿâëÿåòñÿ ïîäïðîãðàììà (åäèíñòâåííîå ñðåäñòâî àáñòðàêöèè â ÔÎÐÒÐÀÍÅ).Ñ òî÷êè çðåíèÿ áàçèñà ßÏ ðàçëè÷àþòñÿ íå ñèëüíî, íî ñ òî÷êè çðåíèÿàáñòðàêöèé ðàçëè÷èå âåëèêî.Ñõåìà ðàññìîòðåíèÿ:1.Áàçèñ (òå êîíñòðóêöèè è àáñòðàêöèè êîòîðûå âñòðîåíû  ßÏ)1.1.Ñêàëÿðíûé (íåðàçëîæèìûé íà áîëåå ïðîñòûå îïåðàöèè (òèïû äàííûõ(áàçîâûå)) è íåêîòîðûå îïåðàòîðû)1.2.Ñîñòàâíîé (ìàññèâû è íåêîòîðûå îïåðàòîðû)2.Ñðåäñòâà àáñòðàêöèè ( ìåõàíèçì ñîçäàíèÿ íîâûõ òèïîâ äàííûõ,êëàññîâ è ïîäïðîãðàìì ).ÂÒÄ ìíîæåñòâî îïåðàöèé à íå ìíîæåñòâî çíà÷åíèé. àáñòðàêòíûõ òèïàõ äàííûõ - ïîíÿòèå èíòåðôåéñà.Ïðèìåì àáñòðàêöèè â ÿçûêå Ñ ôàéë stdin stdout.
Íî â Ñ íåò çàùèòûââåäåííûõ àáñòðàêöèé, ÷òî äåëàåò åãî íåíàäåæíûì ßÏ.3.Ñðåäñòâà çàùèòû ââåäåííûõ àáñòðàêöèé. Ñðåäñòâà çàùèòû õîðîøîðàçâèòû â ÿçûêå àäà. Íàäåæíîñòü ßÏ åñëè ïðîãðàììà êîìïèëèðóåòñÿ, òî îíà ñåìàíòè÷åñêè âåðíà. Òðåòüå ñâîéñòâî î÷åíü èíòåðåñíîå è íåî÷åâèäíîå. 50'% ðàçðàáîòîê ïðîãðàìì øëî íà ñîïðîâîæäåíèå, 25% íàòåñòèðîâàíèå. Òî åñòü òðåòèé ïðèîðèòåò ÷èòàáåëüíîñòü êîäà ( îí ïèøåòñÿ îäèí ðàç è ÷èòàåòñÿ ìíîãî ðàç, ïðèòîì íå òîëüêî åå àâòîðîì).Ñýòîé ñòîðîíû ÀÄÀ ÿâëÿåòñÿ õîðîøèì ßÏ ìíîãî äëèííûõ êëþ÷åâûõñëîâ....×àñòü 2.
Ñîâðåìåííûå ßÏÑåé÷àñ áîëüøèíñòâî ßÏ îñíîâàíû íà ÎÎÏ ïàðàäèãìå, íî ïðè ýòîìèñïîëüçóþò ïîíÿòèÿ èç òðàäèöèîííûõ ßÏ.1.Áàçèñ òðàäèöèîííûõ ßÏ. Íàïðèìåð äëÿ ÿçûêà Ñ è Ñ++ áàçèñ ïî÷òèíå ðàçëè÷àåòñÿ (â ÿçûêå Ñ++ ïîÿâèëñÿ òîëüêî ññûëî÷íûé òèï, êîòîðûéòåì íå ìåíåå íå èìååò íèêàêîãî îòíîøåíèÿ ê ÎÎßÏ).1.1.Ñêàëÿðíûé áàçèñ. Ïðîñòûå òèïû äàííûõ.Êëàññèôèêàöèÿ:211. ÷èñëîâûå òèïû äàííûõ (îñíîâíûå òèïû äàííûõ)1.öåëî÷èñëåííûå2.âåùåñòâåííûå (ñ ïëàâàþùåé òî÷êîé)-ïëàâàþùàÿ òî÷êà-ôèêñèðîâàííàÿ òî÷êàÒàêîå ðàçäåëåíèå ÷èñëîâûõ òèïîâ äàííûõ ( â ìàòåìàòèêå òàêîãî íåò) ýòî óæå íåêîòîðîå óñëîæíåíèå. Åñòü ñêðèïòîâûé ßÏ lua â êîòîðîì íåòöåëûõ è âåùåñòâåííûõ òèïîâ äàííûõ. Åñòü ÒÄ Number êîòîðûé óíèâåðñàëåí (íî çà ýòî íóæíî ïëàòèòü ñêîðîñòüþ).
 ÿçûêàõ òèïà Ìàòëàáåñòü òèïû äàííûõ äëÿ âû÷èñëåíèé ñ ïðîèçâîëüíîé òî÷íîñòüþ.2.Ëîãè÷åñêèé òèï äàííûõ (bool)3.Ñèìâîëüíûé4.ïîðÿäêîâûé òèï äàííûõ ( íà åãî áàçå âîçìîæíû ïåðå÷èñëåíèÿ è äèàïàçîíû).5.Ññûëêè è óêàçàòåëè6.Ôóíêöèîíàëüíûå òèïû äàííûõ (åãî åäèíèöàìè ÿâëÿþòñÿ ïðîöåäóðû èôóíêöèè, êîòîðûå óæå ÿâëÿþòñÿ ÷àñòüþ àáñòðàêöèè)1.Öåëî÷èñëåííûå òèïû äàííûõ.Ïðîáëåìû1.1 Ôèêñàöèÿ ïðåäñòàâëåíèÿ è ñâÿçàííûé ñ íèì íàáîð ïðîáëåì.1.2.Áåç çíàêîâûå öåëûå ÷èñëà.
Ñàìûé ïðîñòîé â ýòîì ïëàíå ÿçûê ïàñêàëü.Íî íåò ðàçíèöû ìåæäó 2-õ áàéòîâûì, 4-õ áàéòîâûì è 8-è áàéòîâûìè ÷èñëàìè. Èç ñîîáðàæåíèé ýôôåêòèâíîñòè ïðèõîäèòñÿ ââîäèòü öåëûéíàáîð öåëî÷èñëåííûõ òèïîâ äàííûõ. Ïåðâàÿ âåðñèÿ ÿçûêà Ñ ïîÿâèëñÿäëÿ ìèíè ÝÂÌ. Ïîòîì áûë ïîðòèðîâàí è íà äðóãèå àðõèòåêòóðû.Åäèíñòâåííûé ðàçìåð òèïà êîòîðûé ôèêñèðîâàí â ñòàíäàðòå òèï charçàíèìàë ðîâíî 1 áàéò.
Äàëåå short int, int, long int, long long. Ïðè ýòîìïðåäñòàâëåíèå â ÿçûêå Ñ íå ôèêñèðóåòñÿ. Åñëè òðåáóåòñÿ ôèêñèðîâàííîåïðåäñòàâëåíèå òî ñëåäóåò îïðåäåëèòü typedef íîâûé òèï äàííûõ. Ýòà ñèñòåìà áûëà óíàñëåäîâàíà è ÿçûêîì Ñ++. Íîâûå ßÏ - Ñ# è Java ïðåäíàçíà÷àëèñü äëÿ íåñêîëüêî äðóãèõ öåëåé. Ñ# - àðõèòåêòóðà CLI â êîòîðîéñóùåñòâóåò CommonTypeSystem.×òîáû ñäåëàòü ÿçûê óíèâåðñàëüíûì, ñîçäàòåëè ðåàëèçîâàëè ïîëíóþìàòðèöó òèïîâ äàííûõ ( âñå 8 òèïîâ äàííûõ 1 2 4 8 çíàêîâûå è áåç çíàêîâûå).1 sbyte byte2 short ushort4 int uint8 long ulong22Ñ ðàçâèòèåì 64 áèòíûõ àðõèòåêòóð, ëþäè íå çàõîòåëè ïåðåïèñûâàòüâñå ïðîãðàììû íà Ñ íà íîâóþ 64-áèòíóþ àðõèòåêòóðó. Îñíîâíàÿ ïðîáëåìà 32 áèòíûõ àðõèòåêòóð àäðåñàöèÿ ïàìÿòè.
Ïîýòîìó ñåé÷àñ â îñíîâíîì èñïîëüçóþòñÿ 64õ32 âñÿ áàçèñíàÿ àðèôìåòèêà 32 áèòíàÿ, íîàäðåñàöèÿ 64 áèòíàÿ. Ñ ÿçûêîì java íåñêîëüêî äðóãàÿ ñèòóàöèÿ âñÿ ïåðåíîñèìîñòü ðåàëèçóåòñÿ êîíöåïöèåé Java ìàøèíû òî åñòü äîñòàòî÷íîðåàëèçîâàòü íà äàííîé àðõèòåêòóðå JRE ìàøèíó.  Java åñòü 4 îñíîâíûõ òèïà ñ ôèêñèðîâàííûì ïðåäñòàâëåíèåì (byte, short, int, long). Ýòîïîçâîëÿåò òî÷íî äåòåðìåíèðîâàòü ñåìàíòèêó âûïîëíåíèÿ ïðîãðàììû íàëþáîé ïëàòôîðìå.Ïðîáëåìà ñðàâíåíèå çíàêîâûé è áåç çíàêîâûé ÷èñåë. Ñìåøèâàòüèõ îïàñíî òàê êàê ìîæåò ïîñòðàäàòü ëîãèêà ïðîãðàììû è òàêóþ îøèáêóòÿæåëî îòëîâèòü. Ïðèìåð ÿçûê Ìîäóëà-2. Òàì áûë ââåäåí òèï äàííûõ INTEGER è CARDINAL. Ïðåîáðàçîâàíèå ìåæäó íèìè ìîãëî áûòüòîëüêî ÿâíûì.
 Ñ++ íåò îãðàíè÷åíèÿ íà òàêèå ïðåîáðàçîâàíèÿ.Çà÷åì íóæåí áåç çíàêîâûé òèï äàííûõ äëÿ 32 áèòíûõ àðõèòåêòóð ðàáîòà ñî ñäâèãàìè (áåç çíàêîâûé ñäâèã), àäðåñíàÿ àðèôìåòèêà. Îáåðîíå åñòü ñëåäóþùèå òèïû äàííûõ byte (0 255), short, integer, longint.Ýòà ñèñòåìà ïîòîì ïåðåøëà â java òóò íåò áåç çíàêîâûõ ÷èñåë è ñîîòâåòñòâåííî íåò ïðîáëåì ñ èõ ïðåäñòàâëåíèåì. C# ïîçâîëÿåò âûïîëíÿòüÑ êîä â unsafe().  Java âìåñòî áåç çíàêîâûõ ÷èñåë åñòü áåç çíàêîâûéñäâèã ¿>.23Ëåêöèÿ 7.Äâà ïîäõîäà ê ðåàëèçàöèè ÷èñëîâûõ òèïîâ äàííûõ.1.Ôèêñèðîâàííûé áàçèñ (ïðèìåðû ßÏ - ñì ïðîøëóþ ëåêöèþ)Ôèêñèðóåòñÿ íîìåíêëàòóðà ÷èñëîâûõ òèïîâ (ÿçûêè Ñ,Ñ++, Ñ#, Delphi,java, Modula -2, Oberon).
Òî åñòü ñêàçàíî ÷òî ê öåëî÷èñëåííûì òèïàìäàííûõ îòíîñÿòñÿ îïðåäåëåííûå òèïû äëÿ êîòîðûõ ìíîãèå ïàðàìåòðûôèêñèðîâàíû.  C#, M-2, Oberon, Java, Delphi ðàçìåðíîñòü òàêèõòèïîâ ôèêñèðîâàíà. Òàê æå çàôèêñèðîâàíà ñåìàíòèêà Âî âñåõ êðîìåjava ýòî áûëî ïðîñòî, òàê êàê îíè îðèåíòèðîâàëèñü íà îïðåäåëåííóþ ñèñòåìó. Äëÿ java ýòî áûëî ñëîæíåå, òàê êàê âñÿ ðàáîòà ïî ðåàëèçàöèèñåìàíòèêè ëîæèòñÿ íà èíòåðïðåòàòîð. Ôèêñàöèÿ áàçèñà îðèåíòèðîâàííà íà ìàêñèìàëüíóþ ýôôåêòèâíîñòü. Ôèêñàöèÿ íîìåíêëàòóðû, íî áåçôèêñàöèè ïðåäñòàâëåíèÿ ñîçäàåò òðóäíîñòè äëÿ ïåðåíîñèìîñòè (ÿçûêÑ).Ñîçäàòåëè java íå ìîãëè æåðòâîâàòü ïåðåíîñèìîñòüþ, ïîýòîìó îíèïîæåðòâîâàëè ýôôåêòèâíîñòüþ.2.Îáîáùåííûå ÷èñëîâûå òèïû.Ðàññìîòðèì íà ïðèìåðå ÿçûêà ÀÄÀ.
Ïðîãðàììû íà ýòîì ÿçûêå äîëæíûáûëè ôóíêöèîíèðîâàòü íà ðàçëè÷íûõ àðõèòåêòóðàõ (êàê íà ñóùåñòâóþùèõ, êàê è íà òåõ ÷òî åùå ìîãëè ïîÿâèòüñÿ), ïîýòîìó áûëî íåâîçìîæíîôèêñèðîâàòü áàçèñ ïðåäñòàâëåíèÿ ÷èñëîâûõ òèïîâ.Ïåðåä ïðîãðàììàìè íà ÿçûêå àäà ñòàâèëèñü íåñêîëüêî òðåáîâàíèé.-Ýôôåêòèâíîñòü.-Íàäåæíîñòü.-×èòàáåëüíîñòü.Äëÿ âûïîëíåíèÿ ýòèõ òðåáîâàíèé â ÿçûêå àäà áûë ââåäåíû îáîáùåííûå íå èìåíîâàííûå ÷èñëîâûå òèïû, à âñå îñòàëüíûå ÷èñëîâûå òèïûáûëè åãî ïîòîìêàìè. Âòîðîé êîíöåïöèåé ÿçûêà àäà áûëà îñîáàÿ êîíöåïöèÿ òèïà.
Îáúåêòû ðàçíûõ òèïîâ áûëè íåñîâìåñòèìû íè ïî êàêîìóìíîæåñòâó îïåðàöèé, íî áûëè ñîâìåñòèìû îáúåêòû ïîä-òèïîâ. Òî åñòüðàçíûå ïîä-òèïû ñîâìåñòèìû ìåæäó ñîáîé è ñî ñâîèì ïðåäêîì. Íàïðèìåð, ðàññìîòðèì ñëåäóþùåå îáúÿâëåíèå íà ÿçûêå àäà.type NewInt is new integer; - Adatype NewInt = integer;Ïàñêàëütypedef int NewInt// ÑÂ ÿçûêå Ñ typedef íå îïðåäåëÿåò íîâûé òèï, à îïðåäåëÿåò íîâûé ñèíîíèì òèïà, êîãäà êàê â àäà è ïàñêàëå îí îïðåäåëÿåò íîâûé òèï.
Òî åñòüâ ÿçûêå àäà íåëüçÿ ïðèñâàèâàòü îáúåêòû òèïà NewInt è integer.Íàïðèìåð type Length is new integer range 0..MaxLen. Òåïåðü ýòî íîâûé òèï äàííûõ ñ ñîîòâåòñòâóþùèìè îãðàíè÷åíèÿìè íà çíà÷åíèå. Ïðè24÷åì ýòî íîâûé òèï (new) òî åñòü îí íå ñîâìåñòèì ñ äðóãèìè òèïàìè.Type int16 is new integer range -32768..32767type uint16 in new integer range 0..65535Ýòî äâà íîâûõ òèïà, òî åñòü èõ íåëüçÿ ñìåøèâàòü.Òî åñòüi16 : int16;ui16 : uint16;i16 := ui16 ; îøèáêài16 := Int16(ui16) íå îøèáêà òàê êàê åñòü îáùàÿ áàçà (int).Âñå ïðåîáðàçîâàíèÿ áåçîïàñíû, òî åñòü â ñëó÷àå îøèáêè âûäàåòñÿèñêëþ÷èòåëüíàÿ ñèòóàöèÿ.
Åñëè òðåáóþòñÿ íåÿâíûå ïðåîáðàçîâàíèÿ, òîíåîáõîäèìî èñïîëüçîâàòü êîíöåïöèþ ïîä-òèïà:subtype POSINT is integer range 1..MAXsubtype naturale is integer range 0..MAX1;Äàëåå èñõîäÿ èç àðõèòåêòóðû êîìïèëÿòîð âûáèðàåò îïòèìàëüíîå ïðåäñòàâëåíèå äëÿ òàêèõ ÷èñåë. Òî åñòü äëÿ ïåðåíîñèìîñòè íåîáõîäèìî ÿâíîçàäàòü äèàïàçîí çíà÷åíèé (à íå ïðåäñòàâëåíèå). Òî åñòü ïðîáëåìà ïðåäñòàâëåíèÿ ëîæèòñÿ íà êîìïèëÿòîð. Òåïåðü âîçìîæíà òàêàÿ çàïèñü.n: NATURAL;p:POSINT;äëÿ ïðèñâàèâàíèÿ p=n íåîáõîäèì êîíòðîëü çíà÷åíèÿ n, òî åñòü êîìïèëÿòîð ëèáî ïðîâåðÿåò çíà÷åíèå n íà ýòàïå òðàíñëÿöèè, åñëè ýòî âîçìîæíî,ëèáî âñòàâëÿåò êîä ïî ïðîâåðêå ïåðåä ïðèñâàèâàíèåì. Òàêîé êîíòðîëüíàçûâàåòñÿ êâàçèñòàòè÷åñêèì. Òî åñòü åñëè âñÿ èíôîðìàöèÿ åñòü íà ýòàïå òðàíñëÿöèè òî îñóùåñòâëÿåòñÿ ñòàòè÷åñêèé êîíòðîëü, èíà÷å êâàçèñòàòè÷åñêèé. Òàêîé æå êîíòðîëü åñòü â ÿçûêå Ïàñêàëü, C# è java.
ÂÑ# òàêîå îãðàíè÷åíèå ìîæíî îáîéòè ñ ïîìîùüþ ïîìåòêè ¾íåáåçîïàñíîãîêîäà¿. àäå â ñëó÷àå îøèáêè âûõîäà çà ãðàíèöó âîçáóæäàåòñÿ èñêëþ÷èòåëüíàÿ ñèòóàöèÿ (range error). Áåçîïàñíûìè âñåãäà ÿâëÿþòñÿ îïåðàöèèðàñøèðåíèÿ òèïà. íà÷àëå âñå òèïû äàííûõ èìåëè ôèêñèðîâàííûé áàçèñ. Äàëåå ñ ðàçâèòèåì ßÏ ñòàëè ïîÿâëÿòüñÿ ßÏ ñ îáîáùåííûìè òèïàìè äàííûõ. Äàëåå C# è òàê äàëåå âîçâðàò ê ôèêñèðîâàííîìó áàçèñó. Íî ñåé÷àñ íà÷èíàåò ðàçâèâàòüñÿ ñíîâà ïîäõîä ñ îáîáùåííûìè òèïàìè òàê êàê íàíèõ ïðîùå ïðîãðàììèðîâàòü.