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