EntwurfundImplementierungeinerfunktionalenC-Variante mitspeziellerunterstutzungshape-invarianter SingleAssignmentC Array-Operationen

Größe: px
Ab Seite anzeigen:

Download "EntwurfundImplementierungeinerfunktionalenC-Variante mitspeziellerunterstutzungshape-invarianter SingleAssignmentC Array-Operationen"

Transkript

1 EntwurfundImplementierungeinerfunktionalenC-Variante mitspeziellerunterstutzungshape-invarianter SingleAssignmentC Array-Operationen derchristian-albrechts-universitat zurerlangungdesdoktorgrades dertechnischenfakultat Dissertation Sven-BodoScholz vorgelegtvon zukiel imoktober1996 Kiel,

2 Berichterstatter: TagdermundlichenPrufung::::::::::::::::::::::::::::::::::::::::::::: Prof.Dr.WernerKluge ZumDruckgenehmigt: Kiel,den:::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::: (Dekan)

3 1Einleitung Inhaltsverzeichnis 3DasSprachdesignvonSac 2FunktionaleSprachenundnumerischeAnwendungen 2.2IntegrationvonI/O-Operationen DarstellungvonArraysundArray-Operationen WiederverwendbarkeitbereitserstellterImplementierungen DimensionsunabhangigesProgrammiereninSac DasTypsystemvonSac EinefunktionaleSemantikfurC Schleifenkonstrukte if-then-else-Konstrukte EineeinfachefunktionaleSpracheFun Typinferenzaufn-dimensionalenArrays DieDarstellungvonArraysinSac MehrfacheZuweisungen DerSprachkernvonSac ZustandeundZustandsmodikationeninSac DasModulsystemvonSac I/OinSac KlassenundObjekteinSac DieModikationvonObjekten GlobaleObjekte Diewith-Konstrukte{ArrayComprehensionsinSac PrimitiveOperationenaufArrays CompilationvonSacnachC 3.6DieSchnittstellezuanderenProgrammiersprachen DerSprachkernvonSac EinBeispiel

4 Inhaltsverzeichnis 4.3ArraysundArray-Operationen DasTypsystemvonSac CompilationvonZuweisungen CompilationvonFunktionsdenitionen Compilationderif-then-else-Konstrukte MaschinenunabhangigeOptimierungen DasModulsystem KlassenundObjekte GlobaleObjekte call-by-reference-Parameter Compilationderwith-Konstrukte CompilationderSchleifenkonstrukte AllgemeineOptimierungen CompilationderprimitivenArray-Operationen EineFallstudie:Multigrid-Relaxation 4.6.2OptimierungvonArray-Ausdrucken LaufzeitverhaltendesMultigrid-Algorithmus Multigrid-Relaxation SpezikationvonMultigrid-Algorithmen VerfeinerungdesGitters Relaxation VergroberungdesGitters ADievollstandigeSac-Syntax 6Zusammenfassung A.1Modul-/Klassen-Deklarationen A.2Typen A.3Programme A.3.1Zuweisungen A.3.2Ausdrucke BDieTypinferenzregeln A.3.3Array-Operationen B.2Array-Operationen B.1AllgemeineRegeln B.1.4Schleifenkonstrukte B.2.1ForminspizierendeOperationen B.1.3if-then-else-Konstrukte B.1.1AusdruckbasierteRegeln B.1.2ProgrammsegmentbasierteRegeln

5 Inhaltsverzeichnis B.2.4WertveranderndeOperationen B.2.3FormveranderndeOperationen B.2.2Selektion B.2.5with-Konstrukte CDieIntermediate-Code-Macros DDieCompilations-Regeln C.1Icm-BefehlefurFunktionsaufrufe C.2Icm-BefehlezurIntegrationvonArrays C.3Icm-BefehlefurArray-Operationen C.4Icm-Befehlefurwith-Konstrukte C.5Icm-BefehlefurArraysohneReferenzzahler D.1CompilationvonProgrammen D.4if-then-else-Konstrukte D.2CompilationvonFunktionen D.3CompilationvonZuweisungen D.6CompilationvonArray-Operationen D.5Schleifenkonstrukte D.7with-Konstrukte D.8Objekt-Konvertierung...183

6 Abbildungsverzeichnis 3.8DieSyntaxderwith-KonstrukteinSac ErweiterteArray-Typen-HierarchieinSac Array-SyntaxinSac HierarchievonArray-TypeninSac ErweiterungderSyntaxvonSacumTypen Array-DarstellungmittelsShape-undDatenvektor DieKernsyntaxvonSac EineeinfachefunktionaleSprache DieSyntaxvonModuldeklarationeninSac DieSyntaxvonKlasseninSac DasTransformationsschemafurcall-by-reference-Parameter DieSyntaxvonModulimplementierungeninSac DieSyntaxvonglobalenObjekteninSac DasTransformationsschemafurglobaleObjekte InferenzderMengederzuimportierendenSymbole ErganzungenderSac-SyntaxumPragmas Beispiel-CompilationeinesFunktionsrumpfes Hello-WorldProgrammnachderAnwendungvonFR Hello-WorldProgrammnachderAnwendungvonFO ErweitertesHello-WorldProgramminSac AuszugederIntegrationvonstdioinSac AlgorithmuszurIndex-Vector-Elimination Laufzeit-undSpeicherbedarfeiner2D/4DMultigrid-Relaxation AlgorithmuszurArray-Elimination VergroberungundVerfeinerungdesGitters Laufzeit-undSpeicherbedarfeiner3DMultigrid-Relaxation Beispiel-Compilationmitcall-by-reference-Parameter

7 Kapitel1 Ken84,BvEG+90].DieBedeutungvoninfunktionalenSprachenspeziziertenPro- [HS86,CF58,Tur79]oderspeziellenTerm-bzw.Graph-Ersetzungssystemen[Sta80, denenvariantendes-kalkuls[bar81,plo74,hs86,cf58],kombinator-kalkulen Einleitung denmaschine.darausergebensichmehrereinderliteratur[fh88,bw88,bac78, zungsregelnundabstrahiertsomitvollstandigvonderarchitekturderausfuhren- GHT84,Hen80,Bur75,Klu92,Rea89,PvE93,Hug89,Hud89]hauggenannteVorteile: VariablenreprasentierenWerteanstellevonzustandsbehaftetenSpeicherberei- FunktionaleSprachenbasierenaufkontextfreienErsetzungssystemenwieverschiegrammenergibtsichausschlielichauseinerwiederholtenAnwendungderErset- ZwischenFunktionenundDatenwirdkonzeptuellnichtunterschieden.Daraus verandern.dieshatinsbesonderebeiderverwendunggroerdatenstrukturen wiez.b.arraysdenvorteil,dasievomprogrammierergenausogehandhabt chen.entsprechendkonsumierenalleprimitivenoperationenihreargumen- tevollstandigunderzeugeneinenresultatwert,anstattspeicherinhaltezu nenhohererordnung),funktionenschrittweisemitargumentenzuversorgen sowiefunktionenalsergebnissevonberechnungenzugenerieren. ergibtsichdiemoglichkeit,funktionenalsargumentezuubergeben(funktioturenerleichtertwird. werdenkonnenwieskalarewerte,sodaderumgangmitderartigenstruk- DurchdieVerwendungungetypterKalkulealsBasisistesmoglich,benutzerdenierteFunktionenaufArgumenteunabhangigvonderenTypanzuwenden. WiederverwendbarkeitvonProgrammspezikationenbei. genargumentenzufunktionsdenitionenundtragtsomitzueinererhohten DieserlaubteineAbstraktiongleichartigerOperationenaufverschiedenarti- 7

8 Kapitel1.Einleitung DiekontextfreienErsetzungenerlaubeneinenUmgangmitProgrammspezikationenwiemitmathematischenGleichungen.Dieserleichtertnichtnurdie 8 AbleitungfunktionalerProgrammeausmathematischenSpezikationen,sondernauchdenformalenNachweisderenAquivalenz. DieunterliegendenKalkuleweisendiesog.Church-Rosser-Eigenschaft[Bar81, miniert,istunabhangigvonderreihenfolgedereinzelnenersetzungen.da- HS86,CF58,Ros84]auf,d.h.dasErgebniseinerBerechnung,fallsdieseterhersindfunktionaleSprachenbesondersfurdienebenlaugeBerechnungunabhangigerProgrammteilegeeignet. SprachenwieFortranoderC.AlsentscheidenderGrunddafurwerdenzumeist VerwendungfunktionalerSprachenbegunstigen,dominiertderEinsatzimperativer besonderedievorteileimumgangmitkomplexendatenstrukturensowiedievor- teileinbezugaufdieidentizierungnebenlaugausfuhrbarerprogrammteiledie insog.real-world-anwendungen.selbstbeinumerischenanwendungen,woins- TrotzdieserVorteilendenfunktionaleSprachenbishernurwenigVerwendung EzienzproblemederfunktionalenSprachenangefuhrt[Can92,MKM84].DieUrsachendieserProblemeliegendarin,dadasimVergleichzuimperativenSprachen hoheabstraktionsniveaufunktionalersprachenkomplexemechanismenzuderen vollstandigerrealisierungerforderlichmacht: Berechnungsfolgegibt,einesolchezunden,istesbeieinigenFunktionsanwendungenerforderlich,dadieArgumenteunausgewertetindenRumpfderFunktion UmfuralleProgrammeeinerfunktionalenSprache,furdieeseineterminierende Reduktionen[Jon87,Joh87,Aug87,JS89,PvE93,FW87,Tur79]vermeiden(Lazy- eingesetztwerden.ihreauswertungdarferstdannvorgenommenwerden,wennsi- chergestelltist,dasiezumergebnisdergesamtenberechnungbeitragen(normal- Order-Reduction). tionaufjedenfallbeiderberechnungeinerfunktionsanwendungbenotigtwerden. Evaluation),jedocherfordertdasEinsetzenunausgewerteterArgumente,fallsdiese InvielenFallenistdiesjedochnichtmoglich. wickeltworden.sieversuchen,statischzuinferieren,welcheparametereinerfunk- lichenmehraufwand.deshalbsindsog.striktheitsanalysen[cj85,hy86,noc93]ent- imverlaufweitererberechnungenohnehinausgewertetwerdenmussen,einenerheb- EinemehrfacheBerechnungvonArgumentenlatsichzwardurchsog.Graphberuhen,werdendurchdieEinfuhrungvonOperationenaufKonstantenTypuberprufungenzurLaufzeiterforderlich.UmdiesenMehraufwandzuvermeiden,verwendendiemeistenfunktionalenSprachenstatischepolymorpheTypsysteme[CW85lenProgrammeaufdieMengederwohlgetyptenProgrammeunddamitzuEinschrankungeninbezugaufdieWiederverwendbarkeitvonProgrammen.Sokonnestem[Mil87,HS86]basieren.DiesfuhrtjedochzueinerBeschrankungderlega- Myc84,HHJW92,Tur85,PvE95,HAB+95],dieaufdemsog.Hindley-MilnerTypsy- BeiderImplementierungfunktionalerSprachen,dieaufeinemungetyptenKalkul

9 primitiverfunktionen.dieverwendungdieserkonstruktefuhrtjedochwiederzu modernentypsystemesog.typklassen[wb89,blo91,hhjw92]zumuberladen gengibt.umdieseeinschrankungenmoglichstgeringzuhalten,bietendiemeisten Programme,diez.B.SelbstapplikationenoderListenmitElementenunterschiedli- Kapitel1.Einleitung chentypsenthalten,nichtberechnetwerden,obwohlesdafursinnvolleanwendun- 9 zusatzlichemlaufzeitaufwandfurdieverwaltungunddereferenzierungvonfunktionstabellen,densog.dictionarieswendetwurden.eineexpliziteberechnungpartiellangewandterfunktionenerfor- sichdabeiumabschlussevonfunktionenmitargumenten,aufdiesiebereitsangedertdaruberhinausmechanismenzumkorrektenumgangmitrelativfreienvariablen[ber75,ber76]. UmdieChurch-Rosser-EigenschaftfureinenebenlaugeAusfuhrungnutzenzu UmFunktionenschrittweiseaufArgumenteanwendenzukonnen,bedarfeseines MechanismuszurVerwaltungvonsog.Closures[Lan64,Jon87,Joh87].Eshandelt konnen,istinfunktionalensprachendiereihenfolgederberechnungvonprogrammennichtvorgegeben.dieintegrationvonmechanismen,dieaufeinersequentiellen AbfolgevonZustandsmodikationenberuhen,wiez.B.I/O-OperationenoderMe- imperativensprachenunterliegendeausfuhrungsmodellaufzustandstransformationenberuht. Ansatzenmoglichist,auchI/O-intensiveAnwendungenwiez.B.EditorenoderTa- Ansatzebietenhier[Gor92,HS89,JW93,Nob95,Ach96].Obwohlesmitdiesen bellenkalkulationsprogrammefunktionalzuspezizieren[dhrve95],erlaubenimpe- rativesprachenfurdiesesanwendungsgebietintuitiverespezikationen,dadasden nerprogrammteilegarantiertwerdenkonnen.einenuberblickuberdiewichtigsten mittel,mitdenenstatischpartielleabhangigkeitenbeiderberechnungverschiede- thodenaufrufeimobjektorientiertenprogrammiermodell,erforderndeshalbhilfs- haftetedatenstruktureneinzufuhren[lau93,lj94,vg96].modikationeneinzelner (z.b.arrays),zuproblemen.beiarray-operationen,dienureinenteilderelementeeinesarraysmodizieren,mukonzeptuelleinekopiedesgesamtenarrays MoglichkeitzurVermeidungdiesesAufwandesbestehtdarin,Arraysalszustandsbe- vollstandigkonsumiertundeinresultatproduziert,fuhrtbeiderimplementierung primitiveroperationenaufdatenstrukturen,dieausvielenkomponentenbestehen erstelltwerden,dieandenentsprechendenelementpositionenverandertist.eine DieEigenschaftderfunktionalenSprachen,dajedeFunktionalleArgumente straktionsniveausfunktionalersprachenimumgangmitsolchenstrukturenverloren geht.wieinimperativensprachenobliegtesdemprogrammierer,explizitdarauf bestehtdarin,dieanzahlderreferenzenaufeinarraywahrendderprogramm- nicht.eineanderemoglichkeit,denkopieraufwandbeiarray-operationenzuminimieren,ohnedabeizueinschrankungenbeiderverwendungvonarrayszufuhren, zuachten,obbeidermodikationeinesarrayseinekopieerstelltwerdenmuoder ElementesolcherArraysstellendannZustandsanderungendarundkonnensomit destruktivimplementiertwerden.diesbedeutetjedoch,daeinteildeshohenab-

10 berechungdurchsog.referenzzahler[can89,coh81]nachzuhalten.modizierende Kapitel1.Einleitung Array-OperationenkonnenindiesemFallgenaudanndestruktivvorgenommenwerden,wennderReferenzzahlerdenWert1hat.DieVerwaltungsolcherReferenzzahler AufgrunddervielenEzienzproblemekommendiemeistenfunktionalenSpra- 10 erfordertjedochzusatzlichenaufwandzurlaufzeit. tetaufpolymorphismus,funktionenhohererordnung,partielleanwendungenund chenderfortran-programme[can92,oca86].trotzdesgutenlaufzeitverhaltens weistdiesesprachejedochnocheinigeschwacheninbezugaufnumerischeanwendungenauf: spieltebisherihreeignungfursolcheanwendungenbeimdesigndiesersprachennur Lazy-EvaluationunderreichtAusfuhrungszeitenvergleichbarmitdenenentspre- eineuntergeordneterolle. chenfureineverwendunginnumerischenanwendungennurbedingtinfrage.daher DurchdenVerzichtaufeinigederwesentlichen,aberinderImplementierung DiefunktionaleSpracheSisal[BCOF91]bildethiereineAusnahme.Sieverzich- ObwohldasSprachdesignvonSisalaufnumerischeAnwendungenausgerichtetist,unterstutztSisalnursehrelementareArray-Operationen.Komplexe aufwendigenmerkmalefunktionalersprachenistdasabstraktionsniveauvon Sisal-Programmenvergleichsweisegering.DennocherfordertdieSpezikati- diedaserlerneneinervollkommenneuensyntaxbeinhaltet. oderc-gewohntenprogrammiererbedeutetdieseineerheblicheumstellung, onvonsisal-programmen,wiebeiallenanderendemautorbekanntenfunk- tionalensprachen,eineausdrucksorientiertedenkweise.fureinenfortran- DieMoglichkeitendesI/OinSisalbeschrankensichdarauf,daSisal-ProgrammenderInhaltvonDateienalsParameterubergebenunddieErgebnissdertprinzipielleineModikationihrerSpezikation. diesamtlicheelementederargument-arraystraversieren.dieanpassungsolcherarray-operationenanargument-arraysandererdimensionalitaterfor- Array-OperationenmussenmittelsSchleifenkonstruktenspeziziertwerden, DieWiederverwendbarkeitinanderenSprachenspezizierterProgrammeist berechneterprogrammein(andere)dateiengeschriebenwerdenkonnen.ein allgemeinermechanismuszurintegrationvonzustandenundzustandsmodi- derberechnungvonprogrammenfehlt. kationensowiezurausfuhrungvoninteraktiveni/o-operationenwahrend nurineingeschranktemmaegegeben.funktionen,dieseiteneekteverursa- alsquelltextvor,sodaeineeinbindunggarnichtodernuraufdiegefahreinesnicht-deterministischenprogrammverhaltenshinmoglichist.selbstwenn kationdesquellprogrammesbenutztwerden(vergl.[bcof91]).vielepro- chen,konneninsisalnichtohneeinebesonderere-compilationbzw.modigramm-bibliotheken,insbesonderekommerziellangebotene,liegenjedochnicht

11 Kapitel1.Einleitung beisisallosenlassen.dieserfordertnichtnurdenentwurfneuersprachkonstrukte, ZieldieserArbeitisteszuuntersuchen,inwieweitsichdiegenanntenProbleme derquelltextverfugbarist,gestaltetsichbeigroerenbibliothekeneinere- Compilationmeistsehraufwendig. 11 bedarfeseinervolligandersartigensyntax,sodaanstelleeinersisal-erweiterung schlagenwird.obwohlihresyntaxweitestgehendaufderderimperativensprache ermoglichen. eineneuefunktionaleprogrammiersprachesingleassignmentc,kurzsac,vorgeenabstraktionsniveausgelingt,einecompilationinezientausfuhrbarencodezmenhangmitdenarray-operationendaraufzuachten,daestrotzeineshoher- sondernaucheinkonzeptfurderenrealisierung.dabeiistinsbesondereimzusam- Cbasiert,gelingtes,diesesoeinzuschranken,daeinefunktionaleSemantikfur Sacdeniertwerdenkann.DadurchkannsichderProgrammiererfreizwischeneioderFortran-gewohntenProgrammiererbedeutetdieseineerheblicheErleichterungbeieinemWechselzuSac. deneninapl[ive62]undnial[jj93].zusammenmitdermoglichkeit,komplexe Array-Operationendimensionsunabhangigzuspezizieren,wirddadurcheinhohes alsauchdiearray-operationeninsacsindsodeniert,dasiedirektaufdenvon AbstraktionsniveauimUmgangmitArrayserreicht.SowohldieArray-Darstellung, L.Mullinentwickelten DieArray-DarstellungsowiedievonSacunterstutztenArray-Operationenahneln nerausdrucks-undeineranweisungsorientiertendenkweiseentscheiden.furdenc- UmdasProblemderausdrucksorientiertenSchreibweiseumgehenzukonnen, timierungen.umtrotzdeshohenabstraktionsniveauseinecompilationinezient ausfuhrbarencodezuermoglichen,wirdeintypsystementwickelt,daseinehierarchievonarray-typenunterstutzt;esinferiertfureineentscheidbareteilmengealler improgrammvorkommendenarray-ausdruckederenformbzw.dimensionalitat. DieAhnlichkeitvonSaczuClegtesnahe,eineIntegrationvonZustandenbzw. -Kalkul[Mul88,Mul91,MJ91]abgebildetwerdenkonnen.Er OperationenzurVerfugungundeignetsichdaheralsGrundlagefurkomplexeOp- stellteinenformalismusfurkontextfreietransformationenkompositionierterarraysenspeziellenmoduleninstanzengebildetwerden,wasdereinfuhrungvonentsprechendenzustandenentspricht.dadiesermechanismusdemderklassen/objekttenstrukturalszustands-reprasentantversehensind.zurlaufzeitkonnenvondie- objekt-orientiertersprachenwiec++[str91]odersmalltalk[gk76]entspricht, I/Osozugestalten,dasiesichnotationellmoglichstwenigvondenMoglichkeitenin Moduleeingefuhrt,diemiteinerausgezeichneten,nachauenhinverborgenenDa- Objekte. heiendiese"speziellenmodule\insacklassenunddie"instanzen\derklassen Cunterscheidet.BasierendaufUniqueness-Typen[SBvEP93,BS95]werdenspezielle ence-mechanismussowieglobaleobjektekannfurdiespezikationvonzustanden DurchdieErweiterungdiesesKlassen-Konzeptesumeinensog.call-by-refer-

12 funktionalensemantikvonsackommt. undzustands-modikationeneinenotationverwendetwerden,diederimperativer Kapitel1.Einleitung ohnedaesdabeizukoniktenmitderaufkontextfreienersetzungenberuhenden I/O-BibliothekausCinSacmiteinerzuCidentischenNotationaufgerufenwerden, Sprachenfastvollstandigentspricht.SokonnensamtlicheFunktionenderStandard- 12 Funktionen,dieSeiteneekteverursachen,inSacintegriertwerden,ohnedaeine reichendereintegrationvoninanderenprogrammiersprachenspeziziertenpro- grammteileninsac,alsdiesbeispielsweiseinsisalmoglichist.sokonnenauch AnpassungderzuimportierendenFunktionerforderlichist. DieBereitstellungdieserMechanismeninSacerlaubtdaruberhinauseineweit- AlgorithmensolleinUberblickdarubergebenwerden,inwieweitexistierendefunktionaleSprachendiesenAnforderungengerechtwerden.Ausdendabeigewonnenen ErkenntnissenergibtsichdasSprachdesignfurSac. renderfunktionalersprachenfurdiespezikationnumerischeralgorithmenausfuhr- lichuntersucht.nacheineridentikationderentscheidendenanforderungensolcher DieArbeitgliedertsichwiefolgt:ImnachstenKapitelwirddieEignungexistie- kontextfreiesubstitutionerklartist.anschlieendwirdeintransformationsschema entwickelt,dasdieabbildungvonsac-programmeninfun-programmeerlaubt. einfache,ungetyptefunktionalesprachefundeniert,derensemantikubereine ZusammenmitdeminAbschnitt3.2eingefuhrtenTypsystemkannschlielichdie nalensemantikfurdenc-kernvonsac.dazuwirdinabschnitt3.1zunachsteine tralesthemadererstenabschnittedieseskapitelsistdiedenitioneinerfunktio- funktionalesemantikdeskernesvonsacvollstandigdeniertwerden. EineausfuhrlicheBeschreibungdesSprachdesignsvonSacbietetKapitel3.Zen- SacumArray-Konstrukte.DiesumfatnichtnureineBeschreibungderArray- DarstellungsowiederaufArraysverfugbarenOperationeninSac,sondernauch eineerweiterungdesbisdahinvorgestelltentypsystemsumspeziellearray-typen undtypinferenzregeln.dieeinfuhrungeinerhierarchievonarray-typenermoglicht derdimensionalitatodersogardergenauenformvonarrays. nichtnurdieinferenzdestypsderelementevonarrays,sondernauchdieinferenz GegenstanddesAbschnittes3.3sinddieErweiterungendesSprachkernsvon bzw.speicherezientemcodefuhrenkann.nachdenbetrachtungenzurcompila- tiondessprachkerns(abschnitt4.1)sowiezurrealisierungdestypsystems(ab- schnitt4.2)befatsichderabschnitt4.3mitderumsetzungdesarray-konzeptes. keitendassprachdesignoenlatundinwieweiteinesolcheubersetzungzulaufzeit- entwickelt.dabeigehtesvorallemumdiefragestellung,welcheubersetzungsmoglichstemvonsacsowiediedarauserwachsendenmoglichkeitenzureinbindungnicht insacgeschriebenerprogrammevor. InKapitel4wirdeinCompilerfurdieUbersetzungvonSac-ProgrammennachC DieletztendreiAbschnittevonKapitel3stellendasModul-unddasKlassensy- HierstehtdieIntegrationeinesReferenzzahlermechanismusimVordergrund,derdie

13 Sacein.DabeiwirdeinebesondereImplementierungstechnikvorgeschlagen,diees ModulesdemCompilerzuganglichzumachen.DadurchkonnenVerschlechterungen MinimierungderzurLaufzeitdurchArraysbelegtenSpeicherbereicheermoglicht. ermoglicht,demprogrammiererverborgeneinformationenuberdieinternaeines Kapitel1.Einleitung Abschnitt4.4gehtaufdieProblemebeiderRealisierungdesModulsystemesvon 13 deslaufzeitverhaltensdurchprogramm-modularisierungenvermiedenwerden. gelingtes,einencompilations-mechanismuszuentwickeln,dereinelaufzeitezi- enteabbildungdieserkonstrukteerlaubt.sokonnendercall-by-reference- Mechanismusdirektaufdensog.AdressoperatorundglobaleObjekteaufglobale VariableninCabgebildetwerden. DieIntegrationdesKlassen-KonzepteswirdinAbschnitt4.5vorgestellt.Dabei mensionsunabhangigspeziziertenarray-operationenezientausfuhrbarercode erzeugtwerdenkann. zunachstdieerweiterungsmoglichkeitenallgemeinbekannteroptimierungenvorund TypsystemsinddieseOptimierungenmageblichdafurverantwortlich,daausdi- C-ProgrammenerweiterteOptimierungsmoglichkeiten.Abschnitt4.6stelltdeshalb gehtdannaufspeziellfursacentwickeltearray-optimierungenein.nebendem AusderfunktionalenSemantikvonSacergebensichgegenuberaquivalenten TragfahigkeitdesSprachdesignsvonSac.AlsBeispielproblemdientdabeidiein [Wol95,Sie95,Gre96]beschriebensind,untersuchteineFallstudieinKapitel5die Abschnitt5.1vorgestellteMultigrid-RelaxationzurApproximationderLosungvon partiellendierentialgleichungen.wahrendinabschnitt5.2dieausdruckskraftder 5.3einigeLaufzeitmessungenimVergleichzuaquivalentenSisal-undFortran- SprachelementevonSacinbezugaufeinedimensionsunabhangigeSpezikation desmultigrid-relaxations-algorithmusimvordergrundsteht,diskutiertabschnitt BasierendaufeinerkonkretenImplementierungdesCompilers,derenDetailsin undgibteinenausblickaufmoglicheansatzpunkteweitereruntersuchungen. Programmen. Kapitel6bietetschlielicheineZusammenfassungderErgebnissedieserArbeit

14 numerischeanwendungen FunktionaleSprachenund Kapitel2 beistehenzweifragestellungenimvordergrund: Sprachenbzw.SprachkonzeptefurnumerischeAnwendungendiskutiertwerden.Da- IndiesemKapitelsolldieTragfahigkeitverschiedenerexistierenderfunktionaler BeiderUntersuchungdieserFragestellungenstehenwenigersyntaktischeoderse- WelchessinddiewesentlichenAnforderungen/Wunsche,dieeinAnwendungsmantischeDetailfragenimMittelpunktalsdasdeneinzelnenSprachenzugrundeliegendenSprachdesign.FurdieseAufgabelassensichdreiverschiedeneSchwerpunkte identizieren: VielenumerischeAnwendungenwiez.B.solcheausdenBereichendersog. DieinnumerischenAnwendungenmeistbenotigtenDatenstrukturensindein- StrukturensowiedieSprachkonstruktezurBeschreibungkomplexerOperatioodermehrdimensionaleArraysvonGleitkommazahlen.DieDarstellungsolcher WelchedieserAnforderungenwerdenvonexistierendenfunktionalenSprachen miersprachestellt? erfullt? programmiererbeiderspezikationnumerischeralgorithmenandieprogram- fabarwerden.dieintegrationeinesumfangreicheni/o-systemsistdeshalb nenaufihnengehorendaherzudenwichtigstensprachelementen. furnumerischeanwendungenebenfallsessentiell. ComputationalFluidDynamics[BW91,War93,Bec87],alsoderSimulationvonStromungsprozessen,derBiochemie[KKS92]oderderFiniteElement mehrdimensionaleergebnis-arrays,dieerstdurcheinevisuelledarstellunger- Methoden[BE76,GZO+78]berechnennichteinzelneErgebniswerte,sondern 14

15 Kapitel2.FunktionaleSprachenundnumerischeAnwendungen GeradeimBereichdernumerischenAnwendungenexistierenbereitsvielehanddarfeseinesModulsystems,daseineIntegrationvoninanderenProgrammiersprachenspeziziertenFunktionenzulat,selbstwenndieseviaReferenzparameterubergebeneDatenstrukturenmodizierenoptimierteProgrammbibliotheken.UmihreVerwendungzuermoglichen,be- 15 EinArrayisteineDatenstrukturbestehendausElementengleichenTyps,aufdie mittelssog.indizeszugegrienwerdenkann.einindexkannauseinodermehreren 2.1DarstellungvonArraysundArray-Operationen ImfolgendensollaufjedendieserSchwerpunktegesonderteingegangenwerden. xeroperationenaufsolchenstrukturengestaltetsichsehraufwendig,dasieeine alsgeschachteltelistenodertupeldargestelltwerden.diespezikationkomple- bietenkeinerleiunterstutzungfurarrays.indiesensprachenkonnenarraysnur Vektor. gegebenenbereichkjijljmitkj;lj2nfurj2f1;:::;ngvariieren.dieanzahl nderkomponentenheitdimensiondesarrays.eineindimensionalesarrayheit Komponenteni1;:::;in2Nbestehen.JededieserKomponentenkannineinemvorfugungstellen,werdendiesealsSchachtelungeneindimensionalerStrukturendargestellt.DieseArtderArray-DarstellungunterstutzenunteranderemStandard dereindimensionalenoperationendargestelltwerden.nebenprimitivenoperatiogediesersprachenauchsog.array-comprehension-konstrukte.mithilfederarray- Comprehension-Konstrukteistesmoglich,einefureinArray-Elementspezizierte nenwiesubarray-selektion,rotationoderarithmetischenoperationenbieteneini- BerechnungsvorschriftaufeinedurcheineMengevonIndizescharakterisierteMengevonArray-Elementenanzuwenden.DiedabeiverwendeteNotationistinden StrukturennachdereigentlichenOperationerfordert. ZerlegunginelementareListen/TupelvorundeineRekombinationderelementaren IndenmeistenSprachen,dieArraysalseigenstandigeDatenstrukturenzurVer- EinigefunktionaleSprachenwiez.B.Miranda[Tur85]oderErlang[AWWV96] DadiemeistendieserSprachenausschlielicheindimensionaleArray-Operationen ML[MTH90],Clean[PvE95],Nesl[Ble94],ID[AGP78]undSisal[MSA+85]1. bieten,mussenoperationenaufmehrdimensionalenarraysdurchschachtelungen tuellencompiler-versionwerdendiesenochnichtunterstutzt. [PvE95]),lehntsichjedochandieinderMathematikublicheMengennotationan. einzelnensprachensehrunterschiedlich(for-loopsinsisal[msa+85],applyto-each-constructsinnesl[ble94]oderarray-comprehensionsinclean AusrichtungderSpracheaufeinbestimmtesAnwendungsgebietsehrstark.Wahrend 1InSisal2.0[BCOF91]sollesauch"echte\mehrdimensionaleArraysgeben;jedochinderak- DerUmfangderzurVerfugungstehendenOperationenvariiertdabeijenach

16 toren,insbesondereauchdiefor-loopsdirektaufn-dimensionalearray-strukturen angewendetwerdenkonnen,waszukonziserenspezikationenkomplexeroperationenfuhrt. Arrays.SisalsetztsichinsofernvondiesenSprachenab,alsdadiemeistenOpera- z.b.incleanauerdenarray-comprehension-konstruktenkaumarray-operationenvorhandensind,bietetneslsehrvieleverschiedeneprimitiveoperationenauf Kapitel2.FunktionaleSprachenundnumerischeAnwendungen 16 verfolgt.inhaskellwirdeinarrayalsabbildungvonindizesaufelementwerte verstanden.dadurchergibtsichzwaraufdirekteweise,daarray-comprehension- aufarraysverschiedenerdimensionalitatanwendbarsind,istdahernichtmoglich. Array-Darstellungenistjedochgemein,daZugrieaufdieArray-Elementeimmer KonstrukteaufmehrdimensionaleArraysanwendbarsind,jedochistesleiderauch ubereinefesteanzahlvonindizeserfolgen.einespezikationvonoperationen,die EinandererAnsatzzurDarstellungvonArrayswirdinHaskell[HAB+95] AllendiesenaufderSchachtelungvoneindimensionalenStrukturenbasierenden inhaskellnichtmoglich,dimensionsunabhangigearray-modikationenzuspezizieren.diesliegtindernotwendugkeitbegrundet,indizesalszahlenbzw.tupelvonzahlenspezizierenzumussen,dieinhaskellgrundsatzlicheinefeste Comprehension-KonstruktennursehrwenigeprimitiveArray-Operationenverfugbar. Stelligkeithaben.AhnlichwieinCleansindauchinHaskellauerdenArrayallej2f1;:::;nggilt:0ij<sj. einzulassigerindexvektorineinarrayamitdemshape-vektor[s1;:::;sn],wennfur Apl[Ive62]oderNial[JJ93]verfolgt.IndiesenSprachenwerdenArraysdurchzwei naturlichenzahlengroernullundbeschreibtdiemengederzulassigenindizes Vektorenreprasentiert:durchdensog.Datenvektor,dersamtlicheArray-Elemente enthalt,unddurchdensog.shape-vektor.einshape-vektoristeinvektorvon einesarrays.einvektor[i1;:::;in]mitij2nfurallej2f1;:::;ngistgenaudann EindritterAnsatzzurDarstellungvonArrayswirdschlielichinSprachenwie Comprehension-Konstrukte,umeinekonziseSpezikationvonkomplexenArray- ben.obwohlapleinefulleprimitiverarray-operationenbietet,fehlenarray- lich,array-operationenunabhangigvonderdimensiondesarrayszubeschrei- Operationenzuerreichen.ImGegensatzdazundensichinNialwenigerprimitive Konstrukte,diesog.Transformer.DerwichtigsteprimitiveTransformeristdersog. Array-Operationen,dafurjedochdenArray-Comprehension-Konstruktenahnelnde each-transformer(siehe[jg89]).erermoglichtdieanwendungeinerfureineinzelnesarray-elementbeschriebenenoperationaufsamtlicheelementedesarrays. EineEinschrankungdeseach-transformeraufTeilmengenvonIndizesistjedoch VektorbietetdiegroteFlexibilitat,jedochfehltinbeidenSpracheneinevollstandige FazitDerinAplundNialgewahlteAnsatzderTrennungvonDaten-undShape- DurchdieseTrennungvonElement-undIndexmengenspezikationwirdesmog- nichtmoglich.

17 aufderschachtelungeindimensionalerstrukturenberuhendenansatzehabenjedoch bensichsisaldurchdiemoglichkeitenderdirektenmanipulationmehrfachge- schachtelterstrukturenundnesldurchdiefulleprimitiveroperationenab.alle Kapitel2.FunktionaleSprachenundnumerischeAnwendungen VondenAnsatzenmitArraysalsSchachtelungeindimensionalerStrukturenhe- 17 UnterstutzungvonArray-Comprehension-Konstrukten. nalitatderarrays,aufdiesieangewendetwerden,zuspezizieren. gemein,daesnichtmoglichist,array-operationenunabhangigvonderdimensiostellungbasierendaufdertrennungvondaten-undshape-vektorenkombiniertmit DimensionalitatderArgument-Arrayszuermoglichen,bedarfeseinerArray-Dar- machtigenarray-operationenundarray-comprehension-konstrukten. 2.2IntegrationvonI/O-Operationen UmkonziseSpezikationenkomplexerArray-Operationenunabhangigvonder EntwurfsphasevonProgrammenundzumanderenbeidereigentlichenApplikation nachtraglichi/o-operationeneinfugenzukonnen. selbstzurausgabevonergebnissen.inbezugaufdiefehlersucheistesvorallem DerBedarfanI/O-OperationenentstehtzumeinenbeiderFehlersuchewahrendder wichtig,ohnevielspezikationsaufwandineinebereitsvorhandeneimplementierung derkonkretenanwendungab.soistz.b.beiproblemenderlinearenoptimierung [BM87,HH89]einegraphischeDarstellungnichtunbedingterforderlich.EinenumerischeAusgabederberechnetenWerteistfurdieseArtvonAnwendungenimewiesieimBereichderAnalysevonMeergebnissenanfallen,soreichenzumeist zweidimensionale,funktionsartigedarstellungenaus.furdengroenbereichdersimulationvonnaturvorgangenwiedemstromungsverhaltenvonflussigkeitenoder DieAnforderungenandieAusgabemoglichkeitenvonErgebnisdatenhangtvon denmeistenfallenvollkommenausreichend.betrachtetmaninterpolationsproblehaltenvongegenstandensindjedochaufwendigedreidimensionaledarstellungen erforderlich.dabeireichtinderregeleinefestvorgegebenedarstellungnichtaus; Gasen,derAnordnungderElementeingroenMolekulenoderdemTorsionsver- eswerdenvielmehrmoglichkeitenderinteraktivenmanipulationderdarstellungwie Drehungen,VergroerungenoderSchnittbilderbenotigt. mantik,dieaufkontextfreiensubstitutionenberuht.einederwesentlichenstarken tionvoni/o-systemen,istschonseitgeraumerzeiteingebietaktiverforschung [HS89,Per91,Hud92,Gor92,JW93,Ach96].DieUrsachefurdieProblemebeider Graphik-Operationenunterstutzt. IntegrationvonI/O-SystemeninfunktionaleSprachenliegtinderfunktionalenSe- I/O-System,dasnebeneinfachenFile-undTerminal-Operationenauchkomplexere DerUmgangmitZustandeninfunktionalenSprachen,insbesonderedieIntegra- DieImplementierungderartigerDarstellungssystemeerforderteinvollstandiges diesersemantikliegtdarin,dadiereihenfolgederausfuhrungeinzelnersubsti-

18 DaesjedochbeiI/O-Operationenwichtigist,ihreAusfuhrungsreihenfolgebeider beidercompilationodersogarerstbeidereigentlichenberechnungstattnden. gevonsubstitutionenineinemvorgegebenenprogrammkanndeshalbdynamisch tutionenaufgrundderchurch-rosser-eigenschaftkeineneinuaufdasergebnis einerberechnunghat,solangedieseterminiert.diewahleinerkonkretenreihenfol- Kapitel2.FunktionaleSprachenundnumerischeAnwendungen 18 terstutzungfuri/o.alswichtigstesbeispielimkontextnumerischeranwendungen isthiersisalzunennen.jeglichevisualisierungvonergebnissenkanndahernicht direktinsisal,sondernmuineineranderenspracheimplementiertwerden.ausgabenvonteilergebnissenzumzweckderfehlersuchesindgarnichtmoglich. Programmspezikationzumindestpartiellvorzugeben,mussenfurdieI/O-Systeme AnsatzezurIntegrationvonI/O-Systemenentwickeltworden.Imwesentlichenkann funktionalersprachenmechanismenzursequentialisierungbereitgestelltwerden. manzwischendreigrund-ansatzenunterscheiden:side-eecting-i/o,stream-based- FurdiefunktionalenSprachenmitI/O-Unterstutzungsindvieleverschiedene AufgrunddieserProblemebietenmanchefunktionaleSprachenkeinerleiUn- Side-Eecting-I/ODiemeistenImplementierungenfunktionalerSprachenauf I/OundEnvironment-Based-I/O. ren,dazu,dadiereihenfolgedersubstitutionenbeiderberechnungvonprogram- Mono-Prozessor-Systemenlegeneindeutigfest,welcheSubstitutionbeieinemvorgegebenenProgrammalsnachstesauszufuhrenist.DiesfuhrtinsbesonderebeidegeBerechnungderArgumentevorderBerechnungdesFunktionsrumpfesgarantiemenfurdenProgrammiererleichtvorhersagbarwird.DeshalbbieteneinigefunktionaleSprachenwiez.B.StandardML,Nesl,oderNial,I/O-Operationenohne Eecting-I/O\[Gor92]bezeichneteIntegrationvonI/O-Operationenfuhrtzwarzu dieverteiltenberechnungengeradeimkontextnumerischeranwendungeneinezen- Determinismusbemerkbar,wennmehrereArgumente,dieineinerverteiltenImple- MechanismenzurSequentialisierungbereitzustellen.Einederargtige,auchals"Side- mentierungnebenlaugberechnetwerden,i/o-operationenvornehmen.dajedoch Ansatzerechnen.SieallebasierenaufderIdee,dieFIFO-EigenschaftvonStreams Stream-Based-I/OZudieserArtvonI/O-Integrationlassensichverschiedene dungenausgerichtetespracheungeeignet. funktionaleprogrammeinenstream,dersamtlicheeingabenenthalt,alsargument tralerollespielen,istdieseartderintegrationvoni/ofureineaufsolcheanwen- zursequentialisierungvoni/o-operationenzuverwenden.dazubekommtjedes undliefertalsergebniseinenstreamvonausgaben. BasisdesI/OinHaskell-1.2[HJW+92].KonzeptuellwerdendieeigentlichenI/O- sog.eager-evaluation-sprachen,diebeiallenfunktionsanwendungeneinevollstandi- einernicht-eindeutigensemantik,diesemachtsichinderpraxiserstdannalsnicht- EinedirekteUmsetzungdiesesPrinzipsndetsichindensog.Dialogues,der

19 sponses).aufdieseweisesindnichtnurdieausgabeoperationenbzw.dieeinga- beoperationenuntereinander,sondernsamtlichei/o-operationensequentialisiert. DurchdieKorrespondenzderResponseszudenRequestswirddieserAnsatzauch sichtlichsind. SpezikationenzurKonstruktionbzw.KonsumierungsolcherStreamssehrunuber- liegendarin,dazumeinendievomprogrammiererzugewahrleistendesynchroni- alssynchronized-stream-i/o[gor92]bezeichnet.diehauptproblemediesesansatzes kell-programmumgebendebetriebssystemausgefuhrt;dashaskell-programm Verarbeitungderzugehorigen,vomBetriebssystemerzeugtenResultate(sog.Re- dientlediglichdererzeugungvoni/o-anforderungen,densog.requests,undder OperationennichtvondemHaskell-Programmselbst,sondernvondemdasHas- Kapitel2.FunktionaleSprachenundnumerischeAnwendungen 19 DazuwerdendieI/O-OperationenalsspezielleFunktionendeniert,dienebenihrennormalenParameterneinesog.ContinuationsowiedenStreamvonResponses erhalten.jededieserprimitiveni/o-funktionenerzeugtgenaueinenderrequests, konsumiertdasersteelementderresponsesundwendetanschlieenddiecontinua- AusgehendvondenDialogueslatsichaufeinfacheWeisedassog.Continuation-Passing-I/Oeinfuhren,dasebenfallsinHaskell-1.2enthaltenist.Beidiesem AnsatzwirddemProgrammiererdieAufgabeabgenommen,aufdassynchroneErzeugenvonRequestsunddasKonsumierenvondazugehorigenResponseszuachtensationvonRequestsundResponsessehrfehleranfalligistunddazumanderendie ennachinnenergibt.durchdiespezikationderi/o-operationenmittelsfunktionenbleibendemprogrammiererzwardiesynchronisationsproblemederbeiden undhallgrenindenchalmers-haskell-compilerintegriertensog.fudgets[ch93]. diesenansatzfureineverwendungzurvisualisierungvonergebnissennumerischer DerNamestehtabkurzendfur"functionalwidgets\.DerBegriWidgetwiederum stammtvonderxwindows[jon85]graphik-oberache;erbezeichnetdiegraphi- sondernjedemgraphischenobjekt(widget)einfunktionalesobjekt(fudget)miteigeneminput-undoutput-streamzuzuordnen.mithilfevonspeziellenfunktionen nichteineninput-undeinenoutput-streamfurdasgesamteprogrammzuhaben, schengrundelementediesessystems.diewesentlicheideederfudgetsbestehtdarin, Einanderer,ebenfallsaufStreamsbasierenderAnsatzsinddievonCarlsson tionaufdieseselementsowieaufdieubrigenresponsesan.aufdieseweiselassen Streamserspart,jedochistdieNotationalsSchachtelungvonFunktionsanwendungensehrvielumstandlicheralsvergleichsweisedieNotationvonI/Oinimperativen sichi/o-operationenalsschachtelungenvonfunktionsanwendungenspezizieren, wobeidurchdiekonstruktionderstreamssicheineausfuhrungsreihenfolgevonau- Sprachen.DaruberhinausbietetHaskell1.2keinerleiGraphikprimitiva,wasauch Anwendungenunbrauchbarerscheinenlat. lassensichdannmehrerefudgetszueinemkomplexengraphikobjektkombinieren. DurchdieStreamszwischendeneinzelnenFudgetswirddieSequentialitatderI/O- OperationeninnerhalbderFudgetssichergestellt. DieserAnsatzistsehrvielexibleralsdiebishergeschilderten.Erbietetnichtnur

20 machtigekonstruktezurerzeugunggraphischerelemente,sonderngestattetauch dienebenlaugeausfuhrungverschiedenerfudgets.geradedurchdiemachtigkeit Kapitel2.FunktionaleSprachenundnumerischeAnwendungen dereinzelneni/o-konstrukeentstehtjedochdasproblem,dasichdaseinfugen voni/o-operationenineinexistierendesprogrammzumzweckderfehlersuche sehraufwendiggestaltet. 20 samtenprogrammesreprasentiert,zubenutzen,umeinesequentielleabfolgeder Environment-Based-I/ODieBezeichnung"Environment-Based-I/O\reektiert undliefertsiein-zumindestkonzeptuell-modizierterformzuruck.unterdiesenvoraussetzungenisteinesequentielleabfolgederoperationengarantiert,wenn zwischenallendiesenoperationeneinedatenabhangigkeitbezuglichderdenzutionenperdenitionemstriktbezuglichworld-struktursind,istdanneineausstandreprasentierendenworld-strukturbesteht;einesolchedatenabhangigkeitisdenenhaskell-compiler-versionenenthalten.derbegri"monaden\entstammt BestandteilvonHaskell-1.3[HAB+95]undinerweiterterFormbereitsinverschie- derkategorientheorie[bw85,ls86].dadieseaberfureinverstandnisderfunk- Zusammenhangndetsichin[Wad92a]. theorienichtnahereingegangenwerden.einedetailliertebeschreibunguberdiesen tionsweisediesansatzesnichterforderlichist,sollaufdenbezugzurkategorien- EinmoglicherAnsatzsinddiesog.Monaden[Wad92b,JW93,Wad92a].Siesind I/O-Operationensicherzustellen.JedeI/O-Operationverlangtdieseimweiteren dieidee,eineabstraktedatenstruktur,diedenzustandderumgebungdesge- mitworld-strukturbezeichnetedatenstrukturalszusatzlichenstriktenparameter namlichgleichbedeutendmiteinerschachtelungderoperationen.daalleoperawertungvoninnennachauengarantiert.esgibtverschiedeneansatze,umdiese Datenabhangigkeitenzugewahrleisten. OperationenwieauchdasgesamteProgrammliefernkeineworld-Strukturselbst, Funktionbind.SiebekommtzweiI/O-OperationenalsArgumente,extrahiertaus sonderndenabstraktendatentypzuruck.dieeinzigefunktion,diedieworld- wirdeinabstrakterdatentypeingefuhrt,derdieworld-strukturenthalt.allei/o- demergebnisdererstendiemodizierteworld-strukturundwendetdiezweitei/o-operationdaraufan.aufdieseweiselassensichmithilfevonbindalle StrukturausdemabstraktenDatentypwiederextrahierenkann,isteineprimitive DieprinzipielleVorgehensweiseimMonaden-Ansatzistdiefolgende:Zunachst wirddieseransatzinderliteraturauchalsimplicit-environment-passing[ap95] I/O-OperationenaufdiesefurdenAnwendungsprogrammierertransparentbleibt, telsbindzwischenalleni/o-operationendatenabhangigkeitenexistieren. OperationimganzenProgrammenthaltenistoderaberdurchSchachtelungenmit- I/O-Operationenschachteln.DadurchdadasgesamteProgrammdenabstrakten Datentypliefert,stelltschlielichdasTypsystemsicher,daentwedernureineI/O- DasowohldasExtrahierenderworld-StrukturalsauchdieAnwendungder

21 bezeichnet. Kapitel2.FunktionaleSprachenundnumerischeAnwendungen I/O-OperationenkonnenwieinimperativenSprachenspeziziertwerden,d.h.es demlassensichmittelseinerinx-notationvonbindimplementierungenspezizie- ren,andenensichdieausfuhrungsreihenfolgedereinzelneni/o-operationengut sindkeinezusatzlichenargumentewiez.b.einecontinuationerforderlich.auer- DieStarkendiesMonaden-AnsatzesliegenvorallemaufnotationellerEbene. 21 DadieswiederumAnderungenderSignaturenandererFunktionennachsichziehen typ,undalleanwendungendieserfunktionmussenentsprechendangepatwerden. zuproblemen.sollenineinebereitsexistierendespezikationeinerfunktion,die keinei/o-operationenenthalt,solcheeingefugtwerden,soandertsichderresultat- allepotentiellenaufrufhierarchienangepatsind.dasolchespeziellfurdiefehlersucheeingefugtenausgabennachdemaundenderfehlerwiederentferntwerden DieVerwendungdesMonaden-AnsatzeszuZweckenderFehlersuchefuhrtjedoch kann,handeltessichumeinenrekursivenprozess,derwiederholtwerdenmu,bis erkennenlat. tenabhangigkeitenzwischenalleni/o-operationen,obwohldiezumodizierenden Teilzustandevoneinanderunabhangigsind.MansprichtdeshalbauchvonmonolithischemI/O[AP95].EsgibtzwarAnsatzezurLosungdiesesProblems[JD93,KP92, EinanderesProblemdiesesAnsatzesentstehtdadurch,dadieworld-Struktur einzelneni/o-operationenzugefuhrtwerden,soerzeugtderbind-mechanismusdalenmehrerevoneinanderunabhangigereprasentationenvon(teil-)zustandenden implizitdurchdiefunktionbinddeneinzelneni/o-operationenzugefuhrtwird.sol- mussen,istauchdermonaden-ansatzfurdiesezweckeungeeignet. LJ94],jedochistnachWissendesAutorsnochkeineuniverselleLosungbekannt. naudannalsunqattributiertwerden,wenn denglasgow-haskell-compileristjedochbereitsvorhanden[fj96]. Das(die)angewandte(n)VorkommeneinesFunktionsparameterskann(konnen)gegrisfunktionbindbereitzustellen,wirdinCleaneinTypattributunqeingefuhrt. SBvEP93,AP95,Ach96].AnstatteinenabstraktenDatentypmiteinereigenenZufunktionenistzwarnochnichtinHaskell-1.3enthalten,eineUnterstutzungdurch EinandererAnsatzschlielichsinddiesog.Uniqueness-TypeninClean[AP93, EineEinbindungvonGraphik-Operationenwiez.B.denXWindows-Bibliotheks- EineFunktionsanwendungfunarg1...argnistnurdannkorrekttypbar,wenn furalleunqattributiertenformalenparameterpjderfunktionfunmitj2f1;:::;ng 1.derFunktionsparameterselbstalsunqannotiertistund gilt:argjistebenfallsunqattributierbar.annotiertmanbeialleni/o-operationen 2.esimRumpfderFunktionentwedernurgenaueinVorkommengibtoderaber, Fallunterscheidunggibt. imfalleeinerfallunterscheidung,esmaximaleinvorkommenprozweigder

22 tendatenabhangigkeiten. gebnisdergesamtenberechnungbeitragen.diesgarantiertdieexistenzderbenotig- denworld-struktur-parameteralsunq,soistsichergestellt,daeineworld- Kapitel2.FunktionaleSprachenundnumerischeAnwendungen StrukturniemalsArgumentvonzweiFunktionsanwendungenist,diebeidezumEr- DurchdieexpliziteUbergabederworld-StrukturwirdderUmgangmitdisjunktenTeilzustandenmoglich,ohnedieSequentialisierungallerI/O-Operationendabei 22 alsargumentbekommenundandereabstraktedatenstrukturenalsresultatliefern. DieseStrukturenreprasentierenjeweilsnureinenTeildesZustandesderProgramm- zuerzwingen.cleanbietetdafurprimitivefunktionen,diedieworld-struktur undunterstuztdamitnichtnureinvollstandigesgraphiksystem[ap93,ach96], Strukturrekombinierenlassen. sprechendefunktionen,mitdenensichdiedatenstrukturenwiederzueinerworld- sondernauchmoglichkeitenzurprogrammgesteuertenprozessverwaltung[ap95, aufdeneinzelnenteilzustandensicherzustellen.komplementardazugibtesent- Auchsiesindalsunqattributiert,umeinesequentielleAbfolgederOperationen Umgebungwiez.B.dasFilesystem,dasTerminaloderEventsdesGraphiksystems. Ach96]. DasI/O-SystemvonCleanbieteteineganzeHierarchiesolcherTeilzustande update).umsolcheoptimierungenauchbeidatenstrukturenzuermoglichen,die tespeicherbereichvonderoperationdirektverandertwerdenkann(destructive nichtvomprogrammierermitdemunq-attributgekennzeichnetsind,gibtesbereitsansatze,dieannotationdesunq-attributeszuinferieren[bs95]aus.samtlichefunktionsaufrufeallerpotentiellenaufrufhierarchienmussenggf.um zusatzlicheparameterundruckgabewerteerganztwerden. DasnachtraglicheEinfugenvonI/O-OperationenzuFehlersuche-Zweckenstellt barkeitdesunq-attributesfuralledatenstrukturen,furdieeine"sequentielle\ver- wendunggarantiertwerdenkann.insbesonderebeideranwendungvonprimitiven OperationenaufgroeDatenstrukturenwiez.B.Arrayslatdieseineezientere Compilationzu,dadervoneineralsunqgekennzeichnetenDatenstrukturbenotig- EinandererVorteildesUniqueness-Typen-AnsatzesliegtinderdirektenNutz- sichincleanalsgenausoaufwendigwiebeimmonaden-ansatzinhaskellher- world-strukturumzubenennen,waszuerheblichenverwirrungenfuhrenkann. teile.zumeinenistbeijedemangewandtenvorkommeneineri/o-operationso- wohldieubergabealsauchdieruckgabederworld-strukturvoneinemprag- matischenstandpunktausvollkommenuberussig;zumanderenistesdurchde- nitionenderformmyownworld=iofunarg1...argnworldmoglich,die AuerdemhatdieexpliziteUbergabederworld-StrukturnotationelleNachsucheeinzufugen.Diesfuhrtjedochevtl.zuNichtdeterminismenbeieinernicht- dar,miteinemvertretbarenspezikationsaufwandi/o-operationenzurfehler- FazitAusSichtdesAnwendersstelltSide-Eecting-I/OdieeinzigeMoglichkeit

23 deruniversellste;erunterstutztnichtnurnicht-monolithischesi/o,sondernkann sequentiellenausfuhrungsolcherprogramme. Kapitel2.FunktionaleSprachenundnumerischeAnwendungen auchdazugenutztwerden,operationenaufgroendatenstrukturenezienterzu implementieren.daruberhinausbietetcleaneinevollstandigeeinbindungderx- VomkonzeptuellenStandpunktheristderUniqueness-Typen-AnsatzinClean 23 men,ohnezunicht-determinismenbeieinernebenlaugenberechnungzufuhren. nicht-monolithisches-i/ounduberschreibendeoperationenaufgroendatenstrukturengegebensein.zumanderensollteesdemprogrammiererauchermoglichen, Windows-Oberache. einensolltendiemoglichkeitendesuniqueness-types-ansatzincleaninbezugauf einedemside-eecting-i/oahnlichespezikationvoni/o-operationenvorzuneh- EineIntegrationvonI/O-OperationensolltedaherzweiZieleverfolgen:Zum 2.3WiederverwendbarkeitbereitserstellterImplementierungen auchfunktionalersprachendientmodula[wir85].esbietet furverschiedeneproblememehrfachnutzenzukonnen,hatzuderentwicklungvon Modulsystemengefuhrt.AlsPrototypvielerModulsysteme,sowohlimperativerals DasBedurfnisvonAnwendungsprogrammierern,ProgrammeundProgrammteile sog.information-hiding,d.h.diemoglichkeit,teilederimplementierungeines diemoglichkeit,ganzemodul-hierarchienzukonstruieren,diegegenseitigvoneinanderimportieren. Mechanismen,umgezieltnureinzelneSymboleeinesModulszuimportieren eineseparatecompilationallermodule,wodurcheinewiederholtecompilation bzw.zuexportierensowie beimehrfacherverwendungvonmodulenvermiedenwerdenkann, ModulsvoreinempotentiellenBenutzerzuverbergen, schaftenmodernermodulsystemehinausspieltbeinumerischenanwendungenein weitereraspektderwiederverwendbarkeitvonprogrammeneinewesentlicherolle. AufdenmeistenPlattformenexistierenbereitsumfangreiche,oftmalsvomHerstellerentwickelte,BibliothekenfurnumerischeStandardalgorithmen.Siesindzumeist hardware-nahcodiertundenthaltendahersehrezientausfuhrbarencode.um UberdiesedurchUberlegungendesSoftware-EngineeringmotiviertenEigen- speziziertenfunktionen,sondernauchdiemoglichkeit,datenstrukturenzwischen denzukonnen.dieserfordertnichtnurdieanwendbarkeitvoninanderensprachen solchebibliothekennutzenzukonnen,isteswichtig,auchinanderen,ggf.nichtfunktionalensprachengeschriebeneprogrammteileuberdasmodulsystemeinbin-

24 denverschiedenensprachenaustauschenzukonnen.beiderverwendungnichtfunktionalerprogrammteilemudaruberhinaussichergestelltwerden,daeventuelle SeiteneektekorrektvonderSemantikderimportierendenfunktionalenSpracheerfatoderaberausgeschlossenwerden. EinigefunktionaleSprachenwieNesloderNialbietenkeinModulsystembzw. 24 Kapitel2.FunktionaleSprachenundnumerischeAnwendungen oderahneltihnenzumindest.alswichtigstebeispielesindhiersisal,cleanund SprachenmitModulsystembasiertdiesesaufdenModulkonzeptenvonModula nurrudimentaremoglichkeitenzurmodularisierung.beimgrosderfunktionalen zudemvonmodulaliegtdarin,dasieesermoglichen,modulezuparametrisierenundsogarmodulezurlaufzeitzumodizieren.danachmeinungdesautorkonzepteinfunktionalensprachengibt,soz.b.structuresinstandardml imwesentlichenaufdiekonzeptevonmodulabeschranken,bietetsisalexplizite Haskellzunennen.WahrenddieModulsystemevonCleanundHaskellsich UnterstutzungfurdieEinbindungvonbzw.inFortran-bzw.C-Programme(n). dieseeigenschaftenbeinumerischenanwendungeneineeheruntergeordneterolle spielen,sollhieraufdiesesystemenichtnahereingeangenwerden. [MTH90]oderframesinKir[Rei95].EinwesentlicherUnterschieddieserKonzepte EssollandieserStellenichtubergangenwerden,daesnochandereModul-

25 DasSprachdesignvonSac Kapitel3 SprachdesignvonSac: Anwendungenangepatist,sondernfuhrenauchzumehrerenVorgabenfurdas derexistierendenfunktionalensprachenoptimalandiebedurfnissenumerischer DieBetrachtungendervorangegangenenAbschnittezeigennichtnurauf,dakeine DieSprachesollsoweitwiemoglichinSyntaxundSemantikeinerderbekannterenimperativenSprachengleichen,umeinenmoglichsthohenGradan EinerderVorteilederfunktionalengegenuberdenimperativenAnsatzenist demkonventionellenprogrammiererdasverstandnis,sondernermoglichtzugleicheineeinfacherecompilation.dashauptproblemdabeiliegtdarin,der Akzeptanzzuerreichen.DieWahleinersolchenSpracheerleichtertnichtnur SprachemoglichstwenigeRestriktionenerfordert. rativensemantikubereinstimmtundtrotzdemimvergleichzurimperativen imperativensyntaxeinefunktionalesemantikzuunterlegen,diemitderimpe- ahnlichwieinaplodernialdargestelltwerden(vergl.abschnitt2.1).dies insacdurchzweivektoren,namlichdendatenvektorunddenshape-vektor dasihneninharente,hohereabstraktionsniveau.imkontextvonarraysbedeutetdies,vommodelleinesunterliegendenspeichersabstrahierenzukonnen erlaubtdiespezikationbenutzerdenierterfunktionen,diearraysohnevor- hoheresabstraktionsniveauimumgangmitarrayszuermoglichen,sollenarrays chendielokalitatvonarray-operationen.umdemprogrammierereinnoch machen.daruberhinausgarantiertdieseiteneektfreiheitfunktionalerspragabenuberderendimensionalitatalsformaleparameterzulassen.dieprimitivenarray-operationenbasierenaufeinemarray-kalkul,demsog. [Mul88,Mul91,MJ91].ErbietetnebenderAnwendbarkeitallerOperationen chunggeschachtelteroperationengestattet[mul88,mt94].daruberhinaus aufarraysjederdimensionalitateinenreduktions-kalkul,derdievereinfa- 25 unddamitspeicherverwaltungaufderebenederhochspracheuberussigzu

26 Kapitel3.DasSprachdesignvonSac ZustandeundZustandsmanipulationensollenderartintegriertwerden,dadie "Eleganz\derimperativenSprachenimUmgangmitZustandensowohlinbezugaufdieSpezikationalsauchinbezugaufdieezienteCompilierbarkeit sollenarray-comprehension-konstrukteintegriertwerden,dieebenfallsauf n-dimensionalearraysangewandtwerdenkonnen. 26 ZustandeninimperativenSprachenaufderMoglichkeitberuht,Seiteneekte zuerzeugen.dadieseabergeradeindemsacunterliegendenfunktionalen leverbindet.alsgrundlagedazudientderaufuniqueness-typenbasierende Modellnichtvorhandensind,bedarfeshiereinesKonzeptes,dasbeideModel- AnsatzvonClean,daernicht-monolithischesI/OunddestruktivesUberschreibenvonDatenstrukturendirektunterstutzt. kommt.dashauptproblemdieseraufgabeliegtdarin,daderumgangmit erreichtwird,ohnedaesdabeizuproblemenmitderfunktionalensemantik GeradeimBereichdernumerischenAnwendungengibtesvielewiederverwendbareProgrammkomponentenwiez.B.FunktionenzumLosenvonGleichungssystemen,Eigenwertberechnungen,ApproxomationderLosungenpartiellerDierentialgleichungenetc.,dievonverschiedenenProgrammiersystemen bereitsalsbibliotheksfunktionenangebotenwerden.esbedarfdahereines Modulsystems,dasnebendeninmodernenModulsystemenublichenMoglichkeitenwie"informationhiding\oder"separatecompilation\eineuniverselle insbesondereauchseiteneektbehaftetefunktionenaufdiesedirekteweiseinderenprogrammiersprachengeschriebenwurden,vonsacausverwendenzu zumeineneinemoglichstgroekompatibilitatderverwendetendatenstruk- SchnittstellezuanderenProgrammiersprachenbereitstellt.Wichtigsindhierbei turensowiezumanderendiemoglichkeit,bibliotheksfunktionen,dieinan- konnen,ohnedaderentwurfvoninterface-funktionennotwendigwird.da rung,wasinsbesonderebeidercompilationvonvorteilist.daruberhinaussind Compilervorhanden,andererseitserlaubtCeinesehrmaschinennaheProgrammie- GrundlagefurSac.EinerseitsistfurdiemeistenHardware-PlattformeneinC- AusmehrerenGrundeneldieEntscheidungfurdieimperativeSpracheCals funktionalensemantikvonsaczubeeintrachtigen. dereektesolcherfunktionenermoglicht,ohnediekonuenzeigenschaftder tegriertwerdensollen,bedarfeseinesmechanismus,derdieberucksichtigung dies,ohnedabeiwiderspruchezumverhaltenderentsprechendenc-programmezu ren,dersichaufeinfacheweiseeinefunktionalesemantikunterlegenlat.gelingt Zustandenentwickeltwird,gilteszunachst,eineTeilsprachevonCzuidentizie- erzeugen,soergebensichdarausmehrerevorteile: tenstrukturenerleichtertwird. vielec-bibliothekenverfugbar,derenintegrationdurchdiekompatibilitatderda- BevordieIntegrationvonArray-Konstrukten,einesModulsystemsodervon