Kalejdoskop (programmeringsspråk)
Programmeringsspråket Kaleidoscope är ett begränsningsprogrammeringsspråk som bäddar in begränsningar i ett imperativt objektorienterat språk. Den lägger till nyckelord alltid , en gång , och hävda .. under (tidigare medan .. hävda ) för att göra uttalanden om relationella invarianter. Objekt har begränsningskonstruktorer, som inte är metoder, för att framtvinga betydelsen av användardefinierade datatyper.
Det finns tre versioner av Kalejdoskop som visar en utveckling från deklarativ till en alltmer imperativ stil. Skillnaderna mellan dem är följande.
Kalejdoskop'90 | Kalejdoskop'91 | Kalejdoskop'93 | |
---|---|---|---|
Begränsningsutvärdering | Lat | Ivrig | Ivrig |
Variabler | Håll strömmar | Håll strömmar | Nödvändigt |
Samtidiga begränsningar | Sträng | Sträng | Icke-strikt |
Syntax | Smalltalk-liknande | Algol-liknande | Algol-liknande |
Begränsningsmodell | Förfining | Förfining | Störning |
Metodutskick | Enda | Flera olika | Flera olika |
Uppdrag | Som en begränsning | Som en begränsning | Destruktiv |
Exempel
Jämför de två kodsegmenten, som båda tillåter en användare att dra kvicksilvernivån i en enkel grafisk termometer med musen.
Utan begränsningar:
medan mouse.button = ner gör gamla <- mercury.top; mercury.top <- mouse.location.y; temperatur <- kvicksilver.höjd / skala; display_number( temperatur ); om gammal < kvicksilver.top då delta_grey( gammal, kvicksilver.top); elseif old > mercury.top then delta_white( mercury.top, old ); sluta om; avsluta medan;
Med begränsningar:
alltid: temperatur = kvicksilver.höjd / skala; alltid: vit rektangel( termometer ); alltid: grå rektangel( kvicksilver ); alltid: visa nummer( temperatur ); medan mouse.button = ner gör mercury.top = mouse.location.y; avsluta medan;
- Lopez, Gus; Björn Freeman-Benson; Alan Borning (1994). "Kaleidoscope: A Constraint Imperative Programming Language". Begränsningsprogrammering . Springer-Verlag. s. 313–329.
- Marriott, Kim; Peter J. Stuckey (1998). Programmering med begränsningar: En introduktion . MIT Press. ISBN 0-262-13341-5