C6
Menu

Legatinės programavimo kalbos: jų tęstinis poveikis

Technologijų pasaulis nuolat keičiasi, ir programavimo kalbos nėra išimtis. Laikui bėgant kai kurios iš jų nugrimzta į užmarštį, palikdamos tik pamokas ir prisiminimus. Tačiau tam tikros kalbos pademonstravo nepaprastą atsparumą ir tebedaro įtaką moderniam kompiuteriniam pasauliui praėjus dešimtmečiams po jų sukūrimo. Šiame straipsnyje nagrinėjame kai kurias iš šių ilgai išliekančių kalbų, jų kilmę, reikšmę ir priežastis, dėl kurių jos išliko.

Legatinis kodas reiškia programinės įrangos kodą, kuris vis dar atlieka savo paskirtį, tačiau buvo sukurtas naudojant pasenusias technologijas. Tai apima kodą, paveldėtą iš kitos komandos ar senesnės programinės įrangos versijos, ir šaltinio kodą, kuris nebėra aktyviai palaikomas ar prižiūrimas. Jis taip pat apima kodą, parašytą naudojant pasenusią aparatinę įrangą ar operacines sistemas, nebenaudojamus kompiliatorius ar programavimo sąsajas (API), arba pasenusias programavimo kalbas ar programinės įrangos kūrimo aplinkas.

Michael Feathersas savo 2004 m. knygoje „Working Effectively with Legacy Code“ pateikė kitą apibrėžimą - „kodas be testų“. Šis legatinio kodo apibrėžimas reiškia, kad programuotojai neturi galimybės patikrinti, ar kodas veikia ir veikia taip, kaip tikėtasi.

Kas yra legatinė programavimo kalba?

Legatinė programavimo kalba gali būti apibrėžiama kaip pasenusi arba nebenaudojama kalba. Tai paprasčiausias apibrėžimas. Tačiau apibrėžimas tampa sudėtingesnis, kai atsižvelgiama į tai, kad terminai „pasenęs“ ir „plačiai naudojamas“ yra subjektyvūs. Kalba, kurią vienas programuotojas laiko pasenusia, kitam gali likti mėgstamiausia.

Užuot bandžius apibrėžti legatines kalbas remiantis vienu ar dviem subjektyviais kriterijais, geriau atsižvelgti į plačią veiksnių, kurie gali lemti, ar kalba yra legatinė, ar ne, visumą. Štai keletas pagrindinių charakteristikų, kurios gali skirti legatines programavimo kalbas nuo modernių:

1. Amžius

Paprastas, bet grubus būdas apibrėžti legatines kalbas yra remtis jų amžiumi. Kalbos, sukurtos prieš kelis dešimtmečius, kartais laikomos legatinėmis vien dėl to, kad jos yra senos. Problema ta, kad daugelis dešimtmečius gyvuojančių kalbų vis dar plačiai naudojamos. C kalba, atsiradusi 1970-ųjų pradžioje, vis dar turi daugybę priežasčių būti mokomasi ir naudojama praėjus pusę amžiaus po jos debiuto. C++, kita populiari kalba, kurią nedaugelis vadintų legatine, yra tik šiek tiek jaunesnė nei C. O Python, pagal daugelį rodiklių populiariausia pasaulyje programavimo kalba, netrukus švęs 35-ąjį gimtadienį, todėl ji yra senesnė už daugelį kitų plačiai naudojamų kalbų, tokių kaip Java ir Go. Kita vertus, kai kurios kalbos, kurias dauguma programuotojų tikriausiai priskirtų legatinėms, pavyzdžiui, FORTRAN ir COBOL, yra vienos iš pirmųjų sukurtų kalbų - taigi, šiais atvejais amžius koreliuoja su legatiniu statusu (nors svarbu pažymėti, kad kalbos, tokios kaip FORTRAN ir COBOL, vis dar naudojamos).

2. Kūrimo būklė

Kalbos gali būti laikomos legatinėmis, kai niekas jų aktyviai nebekuria - tai reiškia, kad kalbos standartai nebegauna atnaujinimų, dažnai kartu su papildomais ištekliais, tokiais kaip bibliotekos ir kompiliatoriai. Tai atrodo pagrįsta, nes kai kalba nebėra aktyviai prižiūrima, ji gali nustoti veikti su moderniomis aparatūros platformomis. Tačiau ir čia ne visos kalbos dingsta iš žemėlapio, kai nustoja aktyvi jų kūrimo veikla. Pavyzdžiui, Lisp, kurios naujausia standartinė versija išleista 1994 m., vis dar yra 21-a pagal populiarumą kalba pagal TIOBE indeksą. (TIOBE atskirai nurodo LISP tipo kalbas, tokias kaip Clojure, taigi tai, kad LISP dialektai vis dar kuriami, nepaaiškina paties LISP tęstinio naudojimo.) Kalbos gali tapti mažiau populiarios, kai sustoja aktyvus jų kūrimas, tačiau jas laikyti „legatinėmis“ vien remiantis kūrimo būkle gali būti trumparegiška.

3. Populiarumas

Skirtumas tarp legatinių ir modernių kalbų pagal jų populiarumą taip pat gali atrodyti pagrįstas. Juk jei nedaugelis programuotojų vis dar naudoja kalbą, ar tai nepadaro jos legatinės? Galbūt, tačiau yra keletas sudėtingų aspektų, kuriuos reikia apsvarstyti. Viena iš jų yra tai, kad programavimo kalbų populiarumo matavimas labai tiksliai yra neįmanomas - taigi, vien tai, kad viena institucija laiko kalbą nepopuliaria, nebūtinai reiškia, kad programuotojai jos nekenčia. Kitas iššūkis yra tai, kad kai kalba tampa nepopuliari, tai paprastai reiškia, kad programuotojai nebenori jos naudoti naujoms programoms rašyti. Bet tai nereiškia, kad esamos programos, parašytos ta kalba, dingsta. Jei PHP yra legatinė kalba, to nesakė programuotojai, kurie prižiūri šias platformas.

4. Asocijacija su legatinėmis technologijomis

Legatinė technologija yra bendras terminas, galintis reikšti bet kokią platformą ar įrankį (įskaitant, bet neapsiribojant programavimo kalbomis), kurio informacinių technologijų specialistai nebevagia kaip optimalaus ar pageidautino. Vietiniai serveriai ir monolitinės programos yra pavyzdžiai to, ką bent jau kai kurie žmonės vadintų legatinėmis technologijomis. Programavimo kalbos kartais patenka į „legatinį“ stalčių, kai jos yra susijusios su kitomis legatinės technologijos formomis - arba kai joms trūksta ryšių su „modernesnėmis“ technologijomis. Pavyzdžiui, Go, kurios lygiagretumo funkcijos daro ją tinkama mikropaslaugų kūrimui, dažnai laikoma „modernia“ (padeda tai, kad kalbai mažiau nei 20 metų). Tačiau C, kuri šiandienos žiniatinklio pasaulyje vaidina mažiau svarbų vaidmenį nei tuomet, kai dauguma programinės įrangos veikė vietinėse sistemose, yra lengviau atmesti kaip legatinė kalba, nors ji išlieka labai populiari.

Legatinių programavimo kalbų pradininkai

Nors daugelis naujų programavimo kalbų atsiranda ir greitai išnyksta, kelios senesnės kalbos išliko ir tebedaro didelę įtaką.

FORTRAN (Formula Translation)

Sukurtas IBM 1950-aisiais, FORTRAN (Formula Translation) yra pirmoji aukšto lygio programavimo kalba. Sukurta moksliniams ir inžineriniams skaičiavimams, ji suteikė naują abstrakcijos lygį, leidžiantį programuotojams rašyti instrukcijas labiau suprantama žmonėms forma. Nepaisant savo amžiaus, FORTRAN vis dar naudojama šiandien, ypač didelio našumo skaičiavimo srityje.

FORTRAN programavimo kalbos pavyzdys

COBOL (Common Business-Oriented Language)

COBOL, pristatytas 1959 m., buvo sukurtas siekiant patenkinti standartizuotos verslo skaičiavimo kalbos poreikį. Jo į anglų kalbą panaši sintaksė padarė ją prieinamą, ir ji greitai tapo verslo programų visame pasaulyje pagrindu. Stebėtina, kad daugelis finansų įstaigų ir vyriausybės agentūrų vis dar remiasi COBOL pagrindu veikiančiomis sistemomis, pabrėždamos jos patvarumą.

LISP (List Processor)

LISP, sukurtas 1958 m. Johno McCarthy, yra viena seniausių aukšto lygio programavimo kalbų. Žinoma dėl savo unikalios skliaustelių sintaksės ir galingų funkcijų, LISP buvo instrumentali dirbtinio intelekto tyrimų plėtrai ir vis dar daro įtaką įvairioms dirbtinio intelekto programoms šiandien.

Kas palaiko programinę įrangą gyvą?

Keletas veiksnių prisideda prie šių legatinių sistemų ilgaamžiškumo:

  • Patikimumas: Legatinė programinė įranga dažnai palaiko kritinės svarbos sistemas, kuriose nėra vietos klaidoms.
  • Pakeitimo kaina: Šių sistemų perrašymas ar pakeitimas dažnai yra per brangus, todėl įmonės ir vyriausybės nenori rizikuoti sutrikimais.
  • Ekspertizės trūkumas: Kadangi pradiniai kūrėjai išeina į pensiją, nauji programuotojai susiduria su sunkia užduotimi prižiūrėti nepažįstamus kodus.

Šie veiksniai kartu sukuria aplinką, kurioje senesnė programinė įranga yra pataisoma ir išsaugoma, o ne pakeičiama, todėl sistemos tyliai formuoja mūsų pasaulį dešimtmečius.

Legatinių kalbų tęstinis aktualumas

Nepaisant naujų programavimo kalbų atsiradimo, šios legatinės sistemos ir toliau atlieka svarbų vaidmenį šiuolaikiniame technologijų kraštovaizdyje. Jų nuolatinis naudojimas liudija jų tvirtumą ir pamatinį vaidmenį kritinėse programose įvairiose pramonės šakose.

Legatinis kodas prisideda prie techninės skolos, kurią laikui bėgant reikia „apmokėti“ atliekant nuolatinę kodo priežiūrą. Dėl savo pasenusios prigimties legatinis kodas gali būti nesuderinamas arba sunkiai integruojamas su modernesnėmis sistemomis. Legatines sistemas gali būti brangu prižiūrėti. Šios eksploatavimo ir priežiūros išlaidos gali didėti, nes trečiųjų šalių palaikymo mokesčiai už senesnes programinės ir techninės įrangos versijas auga. Sunkios, monolitinės architektūros lemia didelę delsą, lėtą reagavimo laiką ir dažnus gedimus. Šis lėtas veikimas gali neigiamai paveikti vartotojo patirtį, sumažinant klientų pasitenkinimą.

Pasenusios sistemos gali kentėti nuo augančios vartotojų apkrovos. Jos sunkiai patenkina staigaus paklausos padidėjimo poreikius ir negali atitinkamai didinti ar mažinti pajėgumus. Senas kodas gali nebūti aktyviai atnaujinamas saugos pataisomis ir nesilaikyti naujausių saugos standartų, todėl jis tampa pažeidžiamas kibernetinių atakų ir pažeidimų.

Supaprastinta legatinio kodo modernizavimo schema

Legatinio kodo modernizavimas

Modernizuoti legatines programas reikia kruopštaus planavimo. Pirmasis žingsnis - suprasti kodų bazę, ir tai paprastai yra sunkiausia dalis. Kai dokumentacija yra nepakankama, pabandykite naudoti statinės kodo analizės įrankius, kurie automatiškai tiria kodą jo neveikiant. Kai programinės įrangos kūrimo komandos pakankamai supras legatinę sistemą, jos gali pradėti ją spręsti. Paprastai rašomi testai, siekiant patvirtinti kodo teisingumą ir numatytą elgesį. Tačiau charakteristikos testai kuriami siekiant suprasti, ką kodas daro ir kaip jis veikia.

Įmonės paprastai turi 3 galimybes modernizuojant legatinį kodą: refaktorizuoti, migruoti arba perrašyti. Jos taip pat gali derinti bet kurį iš šių metodų.

  • Refaktorizavimas keičia šaltinio kodo vidinę struktūrą, nekeičiant jo išorinio elgesio ar neįtakojant jo funkcionalumo. Legatiniam kodui komandos gali pradėti nuo nedidelių pakeitimų kiekvienam moduliui, įskaitant kintamųjų pervardijimą, pasikartojančių ar nenaudojamų metodų pašalinimą ir formatavimo standartizavimą.
  • Migracija yra kitas kelias modernizuojant legatinį kodą. Tai apima viso kodo ar jo dalių perkėlimą į naujesnes platformas ar technologijų rinkinius, pavyzdžiui, pereinant nuo monolitinės architektūros prie mikropaslaugų arba nuo vietinių sistemų prie debesų.
  • Perrašymas legatinio kodo dažnai yra paskutinė išeitis, nes tai apima visiškai naujo kodo kūrimą, pakeičiant seną kodą. Kalbant apie legatines sistemas, komandos gali laipsniškai migruoti arba perrašyti nedidelius kodo fragmentus, kol visa kodų bazė bus perjungta į modernų karkasą arba sukurta dabartinėje programavimo kalboje. Tačiau komandos turi sukurti pereinamąją architektūrą, kad esamas kodas ir naujas kodas galėtų egzistuoti kartu.

Būtina kruopščiai išbandyti refaktorizuotą, migruotą ar perrašytą kodą, kad būtų užtikrinta, jog neatsiras klaidų.

Įrankiai ir technologijos legatinio kodo modernizavimui

Dokumentacija yra dar viena kritinė modernizavimo darbo eigos dalis. Keletas įrankių gali padėti pagreitinti ir automatizuoti legatinio kodo modernizavimo procesą.

  • Statiniai analizatoriai gali padėti ieškant programavimo klaidų, kokybės problemų ir net saugos pažeidžiamumų legatiniame kode. Daugelis statinės kodo analizės įrankių palaiko legatines programavimo kalbas, tokias kaip C, COBOL, PL/I ir RPG.
  • Kodo vizualizatoriai grafiškai vaizduoja šaltinio kodą, kad būtų geriau suprantama, kaip jis veikia, ypač didelėms ar sudėtingoms kodų bazėms. Šie grafiniai vaizdai pateikiami įvairiais formatais, tokiais kaip kodo žemėlapiai, schemos ir UML (Unified Modeling Language) diagramos.
  • Šie karkasai kuria ir vykdo automatizuotus testus bei pateikia ataskaitas apie šiuos testus.
  • Šios platformos ir įrankių rinkiniai padeda supaprastinti ir automatizuoti legatinių sistemų migracijos darbo eigas.
  • Šie įrankiai automatiškai generuoja dokumentaciją iš šaltinio kodo ir kitų įvesties failų.

Dirbtinio intelekto (DI) vaidmuo

Dirbtinis intelektas (DI) gali padėti modernizuojant legatinį kodą. Generatyvusis DI gali suprasti legatinių kodų bazės kontekstą ir semantiką. DI pagrįsti įrankiai gali pasiūlyti refaktorizavimo rekomendacijas realiu laiku. Pavyzdžiui, IBM® Bob naudoja IBM Granite® modelius, kad nustatytų klaidas ir optimizavimus. DI sistemos gali pasiūlyti būdus, kaip įgyvendinti šaltinio kodą iš legatinės programavimo kalbos į modernesnę. Pavyzdžiui, IBM watsonx Code Assistant for Z sujungia automatizavimą ir generatyvųjį DI, kad padėtų programuotojams modernizuoti pagrindines sistemas. Kaip ir testavimo automatizavimo karkasai, DI kodavimo asistentai taip pat gali automatiškai generuoti testus. Kaip ir naudojant bet kokią DI pagrįstą programą, programuotojai vis tiek turi būti atsargūs naudodami DI modernizuojant legatinį kodą.

Dirbtinio intelekto įtaka legatinio kodo modernizavimui

Dažniausiai naudojamos legatinės programavimo kalbos

Nors technologijos sparčiai vystosi, tam tikros senesnės programavimo kalbos vis dar plačiai naudojamos ir yra paklausios.

  • COBOL: Sukurtas 1959 m., COBOL vis dar naudojamas daugelyje finansų įstaigų ir vyriausybės agentūrų, palaikant kritines verslo sistemas.
  • Fortran: Sukurtas 1957 m. moksliniams ir inžineriniams skaičiavimams, Fortran vis dar naudojamas aukšto našumo skaičiavimo srityje.
  • C: Sukurtas 1972 m., C yra universali kalba, naudojama operacinėms sistemoms, įterptoms sistemoms ir kitoms žemo lygio programoms.
  • Assembly language: Žemo lygio kalba, kuri vis dar naudojama specifinėms aparatūros reikmėms.
  • Perl: Sukurtas 1987 m., Perl vis dar naudojamas sistemų administravimui ir žiniatinklio programavimui.
  • Delphi ir Object Pascal: Nors ir mažiau populiarūs, jie vis dar naudojami kuriant Windows programas.
  • REXX: Sukurtas IBM 1979-1982 m., REXX naudojamas kaip scenarijų ir makro kalba.
  • Pascal: Sukurtas 1960-ųjų pabaigoje, Pascal vis dar naudojamas mokymo tikslais.
  • SQL: Nors ir ne tradicinė programavimo kalba, SQL yra esminė duomenų bazių valdymo kalba, kuri išliko nepaprastai svarbi.

Išvada

Legatinės programavimo kalbos, nors ir senesnės, išlieka svarbios dėl savo patikimumo, plačiai paplitusių kodų bazių ir kritinių sistemų palaikymo. Modernizavimo strategijos, įskaitant refaktorizavimą, migraciją ir perrašymą, kartu su pažangiomis technologijomis, tokiomis kaip DI, padeda įmonėms valdyti ir atnaujinti šias sistemas, užtikrinant jų tęstinumą ateityje.

tags: #legacy #angl #programine