Mastodon Mastodon in English
Odpiralni čas: četrtek in petek 16:00-20:00, sobota 10:00-16:00. Muzej je zaprt ob nedeljah in vseh praznikih.
Back to all Post

Prvi računalniki v Sloveniji, dodatek D – druga generacija programskih jezikov

Nadaljujemo s serijo objav iz zgodovine računalništva v Sloveniji, ki je rezultat izvirnih raziskav kustodiata Računalniškega muzeja.

Pregled vsebine:

  • Zgodnji razvoj programskih jezikov
  • Simbolični strojni jeziki.. SOAP, SAP
  • Assembler ali Zbirnik
  • Prvi poskusi višjih jezikov.. Short code, Speedcoding
  • Interpreter ali Tolmač
  • Prvi višji programski jeziki.. Fortran, Cobol, Algol
  • Compiler ali Optimizacijski prevajalnik

V tokratni objavi bomo še naprej sledili razvoju programskih zmogljivosti prvih elektronskih računalnikov. V začetku petdesetih je namreč v razponu ene same generacije računalnikov, predvsem v letih od 1952 do 1958, prišlo do razvoja več dodatnih programskih plasti nad samim strojnim jezikom računalnika, od simboličnih strojnih in višjih jezikov do prvih bolj kompleksnih programov in zametkov operacijskih sistemov. Osredotočili se bomo predvsem na simbolične strojne jezike in na razmere, ki so spodbudile razvoj višjih programskih jezikov. Z obravnavo prvih višjih jezikov pa se bomo ob koncu objave tu že navezali na eno najbolj pomembnih tem začetka računalništva pri nas, to je prihod prvega elektronskega računalnika Zuse Z-23 leta 1962 in delo Računskega centra IMFM v Ljubljani, kjer je bil ta nameščen. O tem bomo zelo podrobno poročali v naslednji objavi.

Razvoj programskih jezikov

Poleg IBM je bilo v petdesetih edino podjetje, ki je v razvoj programskih jezikov in programske opreme vlagalo dovolj velike napore Remington Rand. Kratek čas, pred prihodom IBM serije 700 in uspehom modela 650, je Remington Rand celo prednjačil s svojim zelo inovativnim sistemom UNIVAC 1, ki je imel menda precej dodelan in uporaben programski/programerski paket. Do leta 1956 pa je IBM s svojimi zmogljivejšimi in bolj nišno usmerjenimi sistemi, že nadvladal sektor elektronskih računalnikov. Večinoma na podlagi močne in jasne vizije, ki je vključevala tudi intenziven razvoj vse boljših programskih orodij, delno pa zaradi nespretnosti tekmecev in sporov med njimi. Uporabniki prvih IBM sistemov so v drugi polovici petdesetih oblikovali uporabniško skupino SHARE, v okviru katere je prišlo do velike izmenjave znanja in programske opreme. (W/05, W/09, WIKI/12)

En izmed prvih komercialnih elektronskih računalnikov UNIVAC 1. U.S. Census Bureau (CC Public domain)

Simbolični strojni jeziki.. Assembly

Že zelo kmalu po pojavu prvih elektronskih računalnikov so se pojavile tudi prve različice simboličnih strojnih jezikov, ki so v človeku nekoliko bližji, berljivi obliki podajale osnovna programska navodila. Programska navodila so bila v tem primeru različne simbolične reprezentacije strojnih binarnih ali decimalnih navodil. Obstaja mnogo različic/implementacij imenovanih simbolični strojni jezik, oziroma jezik Assembly.

Prvi simbolični strojni jezik, ki ga je sicer razvila Kathleen Booth za računalnik ARC v Angliji, je bil najprej uporabljen že leta 1947 na računalniku ENIAC in je imel nabor 50 navodil s katerimi je bilo mogoče izvesti skoraj vse operacije. Simbolične kode, ki so jih vnašali v računalnik prek teleprinterja, je ta običajno prek zbirnika avtomatično prevedel v strojni jezik in ga naluknjal na trak. Princip je bil takrat še zelo enostaven. Vsaka posamezna črka ali znak je bil namreč preveden po vnaprej določenem ključu v binarno strojno kodo. Prevod je bil nato ponovno vstavljen v računalnik in neposredno izveden.

Tudi na računalnikih IBM serije 700 in računalnikih UNIVAC so bili razviti eni izmed prvih simboličnih strojnih jezikov. Ti so uporabljali dvo, štiri ali več mestne številčne, hexadecimalne in alfanumerične kode za sklicevanje na interna navodila računalnika, za naslavljanje spominskih lokacij, naslavljanje centralnih registrov in podobno. (W/10ca, WIKI/11, WIKI/12, WIKI/48)

Programiranje v simboličnih strojnih jezikih

Vsaka vrstica programa v simboličnem strojnem jeziku je predstavljala eno strojno navodilo. Programi so bili veliko bolj pregledni in strukturirani kot programi v strojnem jeziku, elementi programa pa med sabo očitno razločeni. Program v simboličnem strojnem jeziku SAP za računalnik IBM 704 je v drugi polovici petdesetih izgledal že zelo podobno današnji obliki:

ORG 2048 LXD P6, J+1 SXD P2, K CLA A+1, J TXI P6, J, -1 TNX P5, K, 1 LRS 35 FMP X..

Zelo preprost program za računalnik IBM 650 v nekoliko bolj primitivnem simboličnem strojnem jeziku SOAP, pa je izgledal nekako tako:

BLR 1951 1960, REG P0027 0028, RAU ONE STX, STU P0001, MPY A, ALO B, RAU 8002, MPY P0001, ALO C, STL P0002, PCH P0001, RAU P0001, SUP XMAX 9999, AUP 101 STX..

Sprva so programe sestavljene v simboličnem jeziku v strojni jezik prevajali celo ljudje na roke in luknjali na trakove ali kartice, že zelo zgodaj pa so bili za ta namen programirani prvi zbirni programi imenovani Assembler, ki so to seveda počeli veliko bolj učinkovito in natančno. Prek vgrajenega zbirnika je računalnik program avtomatično prevedel in na kartice ali trakove naluknjal prevod v obliki strojnega jezika.

Programiranje, preizkušanje in popravljanje programov je bilo na ta način zelo olajšano. Vendar pa programi v simboličnem strojnem jeziku še vedno niso bili prenosljivi med računalniki, zato se je v tem času že iskalo nove bolj praktične alternative, ki bi omogočale večjo prenosljivost med različnimi sistemi in bi programiranje še bolj približale naravnim jezikom in človeškemu načinu razmišljanja. To je bil začetek obrata v odnosu med računalnikom in človekom. Delovanje računalnika se je vse bolj prilagajalo človeku in ne več obratno. (W/10ca, W/10cb, W/10cc, WIKI/48)

En izmed najbolj uspešnih računalnikov prve generacije IBM 650. Texas A&M University. (CC BY-SA 2.0)
$> V muzeju večkrat organiziramo srečanja in raznovrstne tečaje programiranja, na katerih se lahko naučite uporabiti osnovne programerske koncepte in sestaviti svoj računalniški program.

Programiranje na IBM 650

En izmed prvih splošno dostopnih računalnikov z notranjim programom, ki je v tem času doživel tudi izjemen uspeh, je bil IBM-ov sistem 650. Izdelan leta 1953 je v sebi združeval vse pomembne inovacije, tako tehnološke kot konceptualne, ki so omogočile razvoj računalništva in programiranja. To je bil prvi množično proizvedeni računalnik namenjen za splošno uporabo, torej tako za poslovne in administrativne, kot tudi za znanstvene namene. Izdelanih je bilo več kot 2000 enot.

Računalnik IBM 650 je bil, tako kot večina drugih računalnikov v prvi polovici petdesetih, še vedno programiran predvsem v strojnem jeziku. Postopno pa je bilo za računalnik razvitih več različic simboličnega strojnega jezika SOAP-Symbolic Optimum Assembly Program. Ta je uvedel splošno pravilo 3-mestnih operacijskih kod in je avtomatiziral naslavljanje ukazov na optimalna mesta magnetnega bobna za najhitrejše možno izvajanje programa.

Do leta 1957 je bil za IBM 650 razvit tudi prevajalnik za prvi višji jezik Fortran. Računalnik sicer ni imel interaktivnega operacijskega sistema, zato je operater potem, ko je bil program sestavljen in nared za izvajanje, sprožil izvajanje prek nadzorne plošče. Prav zaradi lažjega programiranja je bilo računalnik mogoče uporabiti na različnih področjih in je postal zelo priljubljen tudi na univerzah, kjer je takrat pomembno pomagal vzgojiti prvo generacijo programerjev. (W/10c, W/10ca, WIKI/12)

Problem zanesljivosti prvih računalnikov

Odlika IBM-ovih prvih računalnikov, kot sta bila modela 650 in 704 je bila njuna za tiste čase nadpovprečna zanesljivost. Računalnik IBM 650 je imel na primer avtomatične mehanizme za ravnanje v primeru napak v procesiranju. Ko je prišlo do naključne napake, je računalnik lahko brez posredovanja operaterja ponovil dele programa in v primeru, da se napaka ni ponovila, nadaljeval z izvajanjem.

Računalnik IBM 704 pa je običajno lahko brez napake deloval tudi osem ur ali več. To je bil v tem času dober čas, je pa to predstavljalo resno omejitev v kateri je moral biti program izveden ali na primer preveden iz višjega jezika v strojni jezik. To je predstavljalo resno omejitev predvsem pri uporabi optimizacijskih prevajalnikov za višje programske jezike, ki so morali celoten prevod programa izvesti v enem kosu. (W/05, W/10ca, W/10cb, WIKI/12)

Programer vnaša podatke ali program na luknjanih karticah v računalnik IBM 704. Berkeley Lab Computing Sciences. (CC BY-SA 2.0)

IBM 704

Če je bila revolucionarnost modela 650 v tem, da je z dostopnostjo in primerno kombinacijo tehnoloških inovacij približal nov način delovanja in splošno uporabnost univerzalnih računalniških sistemov raznovrstnim deležnikom, je revolucionarnost modela 704 iz tega časa predvsem v njegovih strojnih in programskih zmogljivostih, ki so omogočile vsestranske in kompleksne aplikacije na različnih znanstvenih in inženirskih področjih.

Računalnik IBM 704 je bil 36-bitni binarni sistem, ki je prvi nudil tudi strojno podporo za izračune s plavajočo vejico(Floating point) in je uporabljal hiter spomin z magnetnim jedrom. Ta je občutno zmanjšal ozko grlo, ki so ga predstavljale spominske kapacitete v prvih modelih serije 700 kot tudi na splošno v računalnikih tega časa. Model 704 je imel med prvimi tudi register spominskih mest in programski števec implementiran v kontrolni enoti, kar je omogočilo veliko bolj preprosto naslavljanje spominskih mest.

Zmogljivost sistemov serije 700, predvsem modela 704 je omogočila precejšen razvoj na področju programiranja in programske opreme. Na njih so bili razviti prvi uporabni višji jeziki kot na primer Fortran in LISP, programirani pa so bili tudi prvi zagonski operacijski sistemi za te računalnike, ki so postopno odprli povsem nove razsežnosti v polju interakcije med računalnikom in uporabnikom. Začel se je razvoj vsestranske programske opreme, znanstvene in inženirske na računalnikih 701, 704 in 709, poslovne na računalnikih 702 in 705, kot smo ga imeli v Zveznem zavodu za statistiko v Beogradu. (W/10c, W/10cb, W/10cd, WIKI/12)

Programiranje na IBM 704

Za sistem 704 je bilo razvitih več različic simboličnih strojnih jezikov in zbirnikov, med njimi najbolj znan in uporabljan SAP(Symbolic/Share assembly program), ki je močno vplival na vse kasnejše različice simboličnih strojnih jezikov in je vpeljal določeno formalno strukturo, ki se uporablja še danes. Programi napisani v SAP so se v tem času predvsem luknjali na kartice od koder so se včasih prehodno prenašali na magnetne trakove.

Pred izvedbo programa so se navodila prenesla v spomin računalnika, podatke za obdelavo pa je računalnik običajno sproti prebiral iz kartic ali magnetnih trakov. Operater je lahko predhodno ali med izvajanjem določene ukaze posredoval tudi prek nadzorne plošče računalnika. Rezultate so pogosto izpisali na magnetne trakove saj jih je tiskalnik nato lahko natisnil tudi direktno iz traku brez dodatne obremenitve računalnika.

Uporabniki IBM sistemov so prek skupne organizacije SHARE v tem času že začeli medsebojno izmenjevati programe in podrutine, še vedno večinoma programirane ravno v simboličnem strojnem jeziku SAP. Organizacija SHARE predstavlja eno izmed prvih oblik odprtega sodelovanja, kot se je kasneje z velikim uspehom uveljavilo tudi v odprtokodnih skupnostih. (W/10cb, W/10cd, WIKI/12)

Računalnik IBM 704, programer in računarka Virginia Layden Tucker. NASA, 1959. (CC Public domain)
$> V muzeju organiziramo tudi računalniške tečaje, kjer se lahko naučite več o sestavi in delovanju računalnikov. Spoznate pa lahko tudi vrsto zanimivih uporab računalniške tehnologije.

Prvi višji programski jeziki

Do leta 1954 se je programiranje še vedno skoraj izključno izvajalo v strojnem in simboličnem strojnem jeziku. Razviti so bili nekateri poskusi višjih programskih jezikov kot na primer Autocode na računalniku Manchester Mark 1 ali pa Laning Zierler system na računalniku Whirlwind. Tudi na prvih komercialnih računalnikih Univac 1 in IBM 701 sta bila po letu 1952 razvita prva višja programska jezika Shortcode in Speedcoding.

Ti jeziki so sicer olajšali določena opravila, vendar je bila njihova uporabnost zelo omejena, predvsem pa se je čas izvajanja na račun dodatnih operacij računalnika podaljšal tudi do več desetkrat. To je bil v tem času tudi glavni ugovor proti višjim jezikom. Prevladovalo je mnenje, da ni mogoče ustvarit dovolj učinkovit prevajalnik za višji jezik. (W/10cd, WIKI/14, WIKI/47, WIKI/48)

Short code in Speedcoding

UNIVAC 1 je uporabljal enostaven programski jezik imenovan Short code. To je bil en izmed prvih višjih jezikov, ki se je izvajal prek interpreterja oziroma tolmača. Prek interpreterja so se navodila programa prevajala in izvajala v strojni jezik tako kot pri zbirniku, sproti, vrstico za vrstico. Shortcode je na primer omogočal enostaven izpis algebraičnih enačb po vzorcu dvo-mestnih kod v obliki: S0 03 S1 07 S2, kar je predstavljalo enačbo: a=b+c.

Za računalnik IBM 701 pa je bil leta 1953 razvit programski jezik Speedcoding, ki je pravtako deloval prek interpreterja. Ta je bil predvsem namenjen kot pomagalo za avtomatizacijo izračunov z lebdečo vejico, ki na tem sistemu še niso bila strojno omogočena. Glavna skrb višjih jezikov pred prihodom računalnika IBM 704 je bila ravno v avtomatizaciji zahtevnih podrutin potrebnih pri izračunih z lebdečo vejico in v avtomatizaciji naslavljanja spominskih mest. S strojno podporo za te operacije pa je računalnik IBM 704 v veliki meri odpravil te probleme in tako posledično omogočil bolj intenziven razvoj programiranja na drugih področjih. (WIKI/14, WIKI/47)

Tipična luknjana kartica prilagojena za programe v višjem jeziku Fortran. Fotografiral Arnold Reinhold. (CC BY-SA 2.5)

Fortran

Zaradi nesprejemljivih in vedno bolj naraščajočih stroškov programiranja in preizkušanja strojnih in simboličnih strojnih programov se je majhna ekipa pri IBM leta 1954 resno lotila razvoja višjega jezika, ki bi omogočil celovito znanstveno uporabo novega sistema IBM 704, predvsem pa učinkovitega prevajalnika zanj.

Ta naj bi po eni strani močno skrajšal uvajanje uporabnikov v programiranje, olajšal samo programiranje, preizkušanje in popravljanje kode, ki je v tem času zavzemalo tudi do tri četrtine in več vsega delovnega časa računalnikov. Po drugi strani naj bi programi napisani v novem višjem jeziku morali ohraniti hitrost in učinkovitost izvajanja na ravni vsaj podobni nižjim jezikom. Programski jezik bi služil predvsem pri načrtovanju rešitev za kompleksnejše matematične probleme na vsestranskih znanstvenih in inženirskih področjih.

Projekt je bil takrat relativno uspešen in nastal je Fortran ali Formula Translating System, prvi uporabni in komercialno dostopni višji programski jezik, ter Fortran optimizacijski prevajalnik za računalnik IBM 704, ki je za razliko od interpreterja programsko kodo prevajal v celoti in jo obenem tudi optimiziral. To je omogočilo, da so se programi napisani v Fortran-u izvajali relativno hitro in učinkovito.

Fortran ni programski jezik za splošno uporabo, temveč je specializiran jezik za visoko zmogljivo računanje. Njegov bogat nabor splošnih aritmetičnih funkcij omogoča reševanje vseh vrst numeričnih problemov in vključuje tudi računanje z imaginarnimi števili in neomejenimi matrikami. Do začetka šestdesetih let se je predvsem zaradi zaledja IBM postopno uspel razširiti in je postal standard na področju znanstvenega računalništva, ki se uporablja še danes. (W/10ca, W/10cb, WIKI/14, WIKI/46)

Cobol

Več proizvajalcev je v drugi polovici petdesetih začelo razvijati tudi višje programske jezike za uporabo v poslovne namene. Ti so bili za razliko od jezika Fortran prilagojeni podatkovnim operacijam, evidenčnim opravilom in reševanju tako običajnih knjigovodskih problemov kot tudi problemov z izredno veliko količino vhodnih podatkov. Za Univac sisteme se je razvijal Flow-matic, za IBM sisteme Comtran, ki naj bi bil poslovni ekvivalent Fortrana, in za Honeywell sisteme Fact, vendar pa se noben izmed teh ni obdržal dalj časa.

Pod okriljem Pentagona je leta 1958 prišlo do splošnega sporazuma med vsemi glavnimi proizvajalci, državnimi ustanovami in drugimi poslovnimi deležniki o razvoju enotnega programskega jezika za uporabo v poslovni obdelavi podatkov, ki so ga poimenovali Cobol(Common Business-Oriented Language).

Cobol naj bi služil pri razvoju programskih orodij za splošno poslovodstvo od bančništva in davčnih opravil do inventarnih in evidenčnih poslovnih storitev in naj bi predvsem olajšal obdelavo podatkov v večjih povezanih organizacijah. Uporabljene so bile določene rešitve iz prej omenjenih jezikov, od proizvajalcev pa se je takrat zahtevalo, da razvijejo Cobol prevajalnike za svoje sisteme, zato se je jezik uspešno razširil in se predvsem v bančništvu uporablja še danes. Cobol je bil tudi prvi višji jezik implementiran na računalnikih različnih proizvajalcev. (W/10cd, WIKI/14)

COBOL poročilo konference CODASYL o dogovorjeni specifikaciji jezika. US Department od Defense, 1960. (CC Public domain)
$> V muzeju lahko najdete tudi nekaj publikacij naših strokovnjakov iz šestdesetih, med njimi priročnik za programiranje v jeziku Algol, ki ga je takrat napisal Egon Zakrajšek.

Algol

Podobno kot Cobol, je tudi Algol nastal v dogovoru različnih deležnikov z namenom, da se postavi nek standard v programiranju računalniških algoritmov. Svojo prvo implementacijo je doživel še na računalnikih prve generacije, saj je bil zanj prvi prevajalnik implementiran leta 1958 na računalniku Zuse Z-22, ki je bil zadnji Zuse-jev računalnik na principu vakuumskih elektronk.

Algol razvojna linija programskih jezikov je močno vplivala na današnje programiranje. Pri nas se je Algol v letih od 1962 do 1967 precej uporabljal na tranzistorskem računalniku Zuse Z-23 v Računskem centru IMFM. Pogosto se je uporabljal tudi Fortran. V okviru centra so takrat nastali številni programi in splošne študije računalnika in njegove uporabe. Za raziskovalno nalogo ‘Prispevek k zbirki osnovnih podprogramov za elektronski računalnik Z-23’ so takrat Egon Zakrajšek, Marija Vencelj in Jože Vrabec prejeli tudi Prešernovo nagrado. Za programski jezik Algol pa sta predvsem Egon Zakrajšek in Tomislav Skubic v tem času napisala več priročnikov in študij. (P63/02, P66/01, W/10cd, WIKI/14)

.. zbral in sestavil Miha Urh

Sledi

Z naslednjo objavo se vračamo k obravnavi prvih računalnikov v Sloveniji s prispevkom o prvem elektronskem računalniku Zuse Z-23 pri nas. Ta je bil nameščen jeseni leta 1962 v Računskem centru IMFM v Ljubljani in z vsemi aktivnostmi centra za razvoj računalniške znanosti in širjenje računalniške kulture vsekakor predstavlja začetek računalniške dobe pri nas. Pišemo tudi o pionirskem znanstveno-raziskovalnem delu naših strokovnjakov na Fakulteti za elektrotehniko in prvi licenčni proizvodnji računalnikov, ki je bila vzpostavljena v Iskri leta 1964.

Viri

P63/02: Egon Zakrajšek, Marija Vencelj in Jože Vrabec – Prispevek k zbirki osnovnih podprogramov za elektronski računalnik ZUSE Z-23 | P66/01 : Egon Zakrajšek – Programiranje v ALGOLu | W/05 : The Computer museum reports 1975-1988 (LINK) | W/09 : Bit by bit (LINK) | W/10c : IBM 704, IBM 650, Univac 1 | W/10ca :W/10cb : Frank Helwig Coding for the MIT’s IBM 704, Fortran Automatic coding system for IBM 704, Fortran II General information manual, The Fortran automatic coding system, John Backus The history of Fortran I,II,III | W/10cc : Robert Ledley Digital computer and control engineering, IBM Introduction to engineering analysis for computers, Course on Computer Architecture and Engineering, IBM Principles of digital computers, O.L.MacSorley Highspeed arithmetic in binary computers, Paul McJones Elements of programing, Douglas Ross Gestalt programming: A new concept in automatic programming | W/10cd : IBM Cobol General information, IBM Fortran General information manual, Algol Bulletin 1959- | W/10d : IBM 705 | WIKI/11 : Vacuum tube, ENIAC | WIKI/12 : Vacuum-tube computers, History of computing hardware, IBM 701, UNIVAC 1, IBM 650, IBM 704 | WIKI/14 : Programing language, Fortran, Cobol, Algol | WIKI/46 : Computer programming, Programmer, Computer program | WIKI/47 : Programming language, Programming language generations, Machine code | WIKI/48 : Assembly language, Low-level programming language, High-level programming language

Add Your Comment