鲁迅文学院第十届网络文学作家高级研修班结业
A számítógépes program azon tárolható utasítások sorozata[1], amelyeket a számítógépnek egymás után végre kell hajtania valamely feladat elvégzése céljából, jellemz? módon azt, hogy az adatokkal milyen m?veleteket végezzen. A számítástechnikai és számítógéptudományi zsargonban a ?programokat” és az ?adatokat” általában kül?nb?z? fogalomként kezeljük, habár az informatikai alapismeretek szerint mindkétféle bithalmaz, tágabb értelemben, adatnak számít. A legjellemz?bb programozáselméleti alapparadigma szerint a számítógépes program egy programnyelven írt algoritmus, azaz bizonyos egzakt feltételeket, k?vetelményeket (el?re definiáltság, egyértelm? végrehajthatóság stb.) kielégít? utasítássorozat.[2]
Program futtatása
[szerkesztés]Ahhoz, hogy egy számítógép egy programot végrehajtson, a számítógépet olyan alapállapotba kell hozni a program és gyakran az adatok számítógépbe juttatásával, hogy azok végrehajthatóak legyenek, majd egy indító eljárást kell a számítógépen aktivizálni. A legalacsonyabb szinten ez a hidegindítás (boot eljárás) folyamatával kezd?dik, amikor a számítógép els? indításakor az indítóprogramját futtatja le, ami a kés?bbi m?k?désre készíti el?.
Napjainkban a legt?bb számítógép m?k?dési alapállapotának eléréséhez szükséges az operációs rendszer "program" (programok rendszere) elindítása. Ez a program végzi el a kés?bbi futtatandó programok bet?ltését és futtatását. Ebben a m?k?dési k?rnyezetben a számítógépes program csak az épp vizsgált egyéni futtatható programot jelenti, és nem az ?sszes programot (beleértve az operációs rendszert), amik a számítógépen az adott pillanatban futnak.
A Neumann-architektúra
[szerkesztés]Az architektúrák a számítógép m?k?désének, felépítésének fajtáit jelentik.
A processzorokat m?k?désük szempontjából két kül?n kategóriába sorolhatjuk. Az egyik a Neumann-architektúra a másik Harvard-architektúra szerint m?k?dik. A két architektúra abban kül?nb?zik, hogy a Neumann-elv? esetében megegyezik az adat- és a programmemória, míg a Harvard-architektúrájú számítógép esetén a program- és adatmemória kül?nb?zik. A gép a programot és annak adatait egy küls? adattároló eszk?zr?l t?lti be, leggyakrabban merevlemezr?l. Ezután a program és az adatok a k?zponti memóriába kerülnek, majd a program végrehajtása megindul, és a gép egyenként sorban végrehajtja a gépi kódú utasításokat, adatokat változtat, az ugró utasítások (illetve néhány bels? folyamat, mint amilyenek a megszakítások) hatására a végrehajtást a memória más pontján folytatja. Az éppen végrehajtandó programutasítás helyét a memóriában a programszámláló (program counter) mutatja, mely az utasítások végrehajtása után n?vekszik, és amit az ugrások megváltoztathatnak.
A gépi kód olyan program, ami a gép által megértett utasításokból áll. A Neumann-architektúrán alapuló gépek program nélkül egyáltalán semmit sem tudnak csinálni.
A gépi kódú programokat – az egyedülieket, melyeket egy ilyen számítógép megért – általában magasabb szint? programozási nyelveken készítik, és azt fordítóprogramokkal (compiler) alakítják át gépi kódra.
Szoftver
[szerkesztés]A program szót gyakran a ?számítógépes szoftver” kifejezés szinonimájaként használják. Bár a szoftverek f? részét programok képezik, maga a szoftver gyakran tartalmaz er?forrás-állományokat, melyek mindenféle adatot hordoznak, és amik valójában nem a programhoz, hanem az annak m?k?déséhez szükséges k?rnyezet részei.
Neurális hálózatok
[szerkesztés]A neurális hálózatokon alapuló számítógépek esetében számos végrehajtó egység van, melyek egymással bizonyos fajta kapcsolatban vannak, és a feladatokat egyszerre, egymással k?zrem?k?dve hajtják végre. Ezt az elvet számos architektúra k?veti, és ezen számítógépek programozása valójában az egységek k?z?tti kapcsolatok szabályozásából áll (például a kapcsolatok súlyozásával illetve az egységeken belüli küsz?bértékek meghatározásával). Ahogy a számítógép "tanul", a kapcsolatok módjai (a súlyozások és küsz?b-értékek) változnak. A legt?bb neurális hálózat esetén ez a megtanult állapot elmenthet? és kés?bb visszat?lthet?, programszer?en.
Néhány neurális hálózat minden egyes indításkor újrakezdi a tanulást, és ebben az esetben azok egyáltalán nem rendelkeznek programmal.
Virtuális számítógép
[szerkesztés]Napjainkban számos program virtuális számítógépen fut. A programot futtató számítógépen belül egy idealizált utasításkészlettel rendelkez? k?rnyezetet hozunk létre, melyben a programot futtatjuk. Ennek az idealizált utasításkészletnek általában valamilyen el?nye van a gép által k?zvetlenül megértett gépi kóddal szemben, mely el?ny változatos lehet: lehetséges, hogy ez az utasításkészlet k?nnyebben programozható assembly nyelvet vagy egy másik gépi kóddal rendelkez?, elterjedtebb végrehajtó egységet szimulál.
Napjainkban nagyon sok Neumann-architektúrán alapuló számítógépi k?rnyezet valójában csak egy virtuális gépen létez? szimuláció eredménye, és az azon futó "gépi kód" nem azonos a k?zponti egység által legalacsonyabb szinten végrehajtható lépésekkel.
Analóg számítógépek
[szerkesztés]Az analóg számítógépek – szemben a digitális számítógépekkel – az állapotaikat nem diszkrét értékekkel ábrázolják, mint az elterjedt számítógépeink, hanem végtelen sok analóg értékkel. Ilyen például a Water integrator (vízegyesít?[?]), aminek az alapállapotát a csapok áramlásának nagyságával és a gép tartályaiban szerepl? vízmennyiségekkel adjuk meg.
Számos rovarszer? autonóm robot mutat példát a program nélküli analóg számítógépekre. Ezek a neutrális hálózatokhoz hasonlóan k?rnyezetük hatásaiból tanulnak.
Adat
[szerkesztés]A számítógépes programok általános felfogás szerint a számítógép állapotának azon részei, melyek nem adatok. Míg ez a megkül?nb?ztetés általában egyértelm? a digitális Neumann-architektúrájú gépek esetében a probléma nehezedik más architektúrákat szemlélve. A neurális hálózatok súlyozása adat vagy program? A hálózat m?k?désekor nyilvánvalóan adatként kezeljük, de ezek valójában k?zvetlenül meghatározzák a hálózat m?k?dését. Még bonyolultabb a helyzetünk az analóg számítógépek esetében: a Water integratornál a víz program vagy adat?
Algoritmusok
[szerkesztés]Az absztrakt programokat gyakran algoritmusoknak nevezzük. Ezek valamilyen módon általánosan leírják, hogy egy adott problémát hogyan lehet megoldani. Az algoritmusok absztrakt programjai alapján lehetséges egy konkrét programozási nyelven egy konkrét, az adott problémát megoldó programot írni.
A matematika el?készíti a programozást
[szerkesztés]A számítógépes programok elméleti lehet?ségével és hátterével foglalkozott a matematika már mintegy két évtizeddel azt megel?z?en, hogy 1948. június 21-én megszületett az els?, m?k?dés k?zben átprogramozható számítógép, az úgynevezett Manchester Small-Scale Experimental Machine.
Akkor pontosan húszéves volt az óvatosságra int? Ackermann-függvény 1928-ból. Klasszikus intelem mai mesterséges intelligencia programozóknak 1930-ból a G?del els? nemteljességi tétele és a G?del második nemteljességi tétele. Az igen szerteágazó matematikai kutatást emblematikusan jellemzi a Church–Turing-tézis a korai 30-as évekb?l, és a Turing-gép 1936-ból.
Magyar vonatkozás a korai 30-as évekb?l t?bbek k?z?tt, a parciálisan rekurzív függvény fogalma, valamint Péter Rózsa és Kalmár László kutatásai. Kés?bbi magyar vonatkozás Neumann János diplomás vegyészmérn?k és matematikus, aki két leend? Nobel-díjas társával együtt a legendás Rátz László matematika tanítványa volt a fasori ágostai Hitvallású Evangélikus F?gimnáziumban, és 1930-tól haláláig az Egyesült államokban számos tudományt?rténetileg jelent?s kutatásban vett részt, számítógépes programok vonatkozásában fontosak a Neumann-elvek, és az általa 1944-ben útt?r?ként megtervezett és 1946. február 14-én üzembehelyezett ENIAC, amely egy program vezérlés?, de m?k?dés k?zben nem átprogramozható számítógép volt.
A kül?nféle programozási paradigmák rendre fellelhet?k az azt megel?z? matematikai gondolkodásban. A funkcionális programozás paradigmája, hogy egy függvény értékének kiszámolása nem rontja el a t?bbi, már meglév? számolási részeredményeket, ez a csillagászok, fizikusok és matematikusok t?bb évszázada meglév? természetes paradigmája. Objektumorientált programozás paradigmája, hogy a számolás objektumától függ az, hogy a megnevezett m?velet gyanánt ténylegesen mi is a számolási teend?, ez pedig a 19. század óta dinamikusan fejl?d? absztrakt algebra természetes sajátja, amely szemlélet a matematika alapjainak tisztázását k?vet?en, a 20. század elején átterjedt az egész absztrakt matematikára. Logikai programozás paradigmája esetén pedig maga az elnevezés mutatja a matematikai logika t?rténelmi els?ségét.
A mai matematika számtalan témak?r?n keresztül támogatja a számítógépes programok írását, ilyenek például a kiterjedt programhelyesség bizonyítási kutatások, az egyre fontosabb logikai programozás háttereként a matematikai logika és az algoritmuselmélet vonatkozó fejezeteinek intenzív kutatása. A valószín?ségszámítás is kiveszi részét: az algoritmikus információelmélet idealizált számítógépek viselkedését vizsgálja véletlenszer?en el?állított programok esetén.
Kapcsolódó szócikkek
[szerkesztés]- szoftver
- firmware
- operációs rendszer
- polyglot program
- programozási nyelv
- programozási paradigma
- programozó
- script programozási nyelv
- Turing-gép
Jegyzetek
[szerkesztés]- ↑ Neumann: First Draft of a Report on the EDVAC, 1945 – archive.org
- ↑ Gregorics Tibor: Programozás visszavezetéssel (egyetemi jegyzet, pdf). 1-11. o. Hiv. beill.: 2025-08-05.