Przejdź do zawartości

PL/M

Z Wikipedii, wolnej encyklopedii

PL/M (akronim od ang. Programming Language for Microprocessors lub Programming Language for Microcomputers) – kompilowany, strukturalny język programowania wysokiego poziomu stworzony przez Gary'ego Kildalla w 1973 roku.[1] Jest klasyfikowany zwykle jako asemblerowy język wysokiego poziomu ze względu na wysoki współczynnik przełożenia na język asemblera.

Został stworzony jako język mający ułatwić tworzenie oprogramowania systemowego[2]. Stosowany był do tworzenia m.in. systemów operacyjnych (CP/M[1]) i kompilatorów.

Ważną implementacją była wersja opracowana przez firmę Intel dla procesorów serii 8080/8085, stosowana m.in. w systemie ISIS-II oraz PL/M-86 opracowana głównie dla potrzeb programowania procesów w systemach czasu rzeczywistego iRMX.

Składnia języka jest wzorowana na języku PL/I.

Historia

[edytuj | edytuj kod]

Pierwsza wersja języka powstała mikroprocesora Intel 8008 w 1973 roku. Jej autorem był Gary Kildall, który pracował wówczas (dodatkowo) dla Intela jako konsultant. Kompilator PL/M został zaimplementowany w języku FORTRAN IV na komputerze PDP-10.[1][2]

W kolejnych latach powstały wersje kompilatorów języka dla innych procesorów (w szczególności dla Intel 8080), które wykorzystywane były w implementacji systemowych programów narzędziowych, kompilatorów oraz systemów operacyjnych.

Najbardziej znanym systemem, który powstał w PL/M, był CP/M[a], pierwszy szeroko wykorzystywany system operacyjny dla mikrokomputerów, którego pierwsza wersja powstała w 1974 roku.[1]

Przykład

[edytuj | edytuj kod]
 Zobacz też: Hello world.
/* HELLO WORLD dla systemów operacyjnych ISIS-II i CP/M */
HELLO: DO;
  DECLARE REP ADDRESS;
  WRITE: PROCEDURE (A,B,C,D) EXTERNAL;
    DECLARE (A,B,C,D) ADDRESS; END;
  CALL WRITE(0,.('Hello, world!'),13,.REP);
END HELLO;

Język PL/M jest językiem umożliwiającym programowanie modularne, przy czym ważną cechą była możliwość tworzenia przemieszczalnych modułów i możliwość programowania hybrydowego (PL/M + asembler).

Język PL/M (jego implementacja PL/M-80) jest tak zaprojektowany, że istnieje bezpośrednie odwzorowanie konstrukcji tego języka na język maszynowy procesora Intel 8080/8085. Kompilator ten posiada opcję umożliwiającą translację programu źródłowego w PL/M na program w asemblerze.

Program w języku PL/M składa się z niezależnie kompilowanych modułów. Moduł źródłowy (najmniejsza kompilowalna jednostka) jest instrukcją strukturalną o postaci:

nazwa: DO;
     deklaracje i definicje
     [instrukcje]
  END nazwa;

Jeżeli moduł zawiera co najmniej jedną instrukcję, to stanowi moduł główny i od niego rozpoczyna się wykonywanie programu; przy kilku takich modułach wyróżnienie modułu głównego następuje na etapie konsolidacji. Pozostałe moduły mogą zawierać jedynie deklaracje i definicje.

W języku PL/M zmienne posiadają określane w deklaracjach atrybuty:

  • zmienne proste:
    • BYTE – bajtowe,
    • ADDRESS – dwubajtowe, zmienne te mogą oprócz liczb całkowitych przechowywać dane wskaźnikowe (należy raczej powiedzieć, że dane całkowite przechowywane w tych zmiennych mogą być traktowane jako wskaźniki),
    • BASE – bazowe;
  • tablicowe – tablice mogą być w PL/M jednowymiarowe o ustalonym wymiarze indeksowane od zera,
  • strukturowe,
  • literały – LITERALLY 'tekst'.

Późniejsze wersje języka, jak PL/M 386 dla systemu iRMX, wprowadziły nowe typy, znane z innych języków programowania, takie jak całkowity, rzeczywisty, znakowy, umożliwiające programowanie na wyższym poziomie abstrakcji, choć oczywiście nadal jest możliwe programowanie bliskie sprzętowi, w tym korzystanie z ww. danych bajtowych i słowowych.

Pozostałe atrybuty określają inne cechy zmiennych:

  • AT(adres) – określa położenie zmiennej w pamięci,
  • INITIAL(wartość) – nadanie początkowej wartości zmiennej,
  • PUBLIC – udostępnienie zmiennej dla innych modułów,
  • EXTERNAL – zmienna z innego modułu.

W deklaracjach (podobnie jak w PL/I) można grupować identyfikatory:

DECLARE (A,B) (3) ADDRESS;

Deklaracja i definicja procedury ma postać:

 nazwa: PROCEDURE(parametry) [typ_wartości] [atrybuty];
              DECLARE deklaracje parametrów,
                      deklaracje zmiennych;
              instrukcje
        END nazwa;

W przypadku procedur zewnętrznych stosować należy deklarację o postaci jak wyżej z pominięciem deklaracji zmiennych i instrukcji, ale z dodatkowym atrybutem EXTERNAL. Inne atrybuty to PUBLIC dla procedur udostępnianych dla innych modułów i REENTRANT dla procedur rekurencyjnych.

Główne instrukcje języka PL/M:

Język posiada także wbudowane procedury i predefiniowane zmienne.

Przykład:

PR1: DO;
  DECLARE LICZ BYTE,
          TAB(5) BYTE,
          SUM ADRESS INITAL(0);
  READTAB: PROCEDURE;
    DECLARE I BYTE;
    DO I=1 TO 5 BY 1;
      TAB(I)=INPUT(1);
    END;
  END READTAB;
  CALL READTAB;
  LICZ=1;
  DO WHILE LICZ<6;
    SUM=SUM+TAB(LICZ);
    LICZ=LICZ+1;
  END;
  OUTPUT(1)=SUM;
END PR1;
  1. którego autorem był również Gary Kildall

Przypisy

[edytuj | edytuj kod]
  1. a b c d Liam Proven: 50 years ago, CP/M started the microcomputer revolution. The Register, 2024-09-02. [dostęp 2026-01-11]. (ang.).
  2. a b MCS-8 Micropcomputer Set - 8008 8-bit parallel Central Processor Unit - User's Manual. Intel, 1973, s. okładka 2. [dostęp 2026-01-11]. (ang.).

Bibliografia

[edytuj | edytuj kod]

Zobacz też

[edytuj | edytuj kod]