b'\n_START_ARTICLE_\nCLU\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nCLU kehitettiin yhdysvaltalaisessa MIT-yliopistossa 1974 professori Barbara Liskovin johdolla. Tarkoituksena oli tutkia abstrakteja tietotyyppej\xc3\xa4._NEWLINE_CLU-ohjelmointikielell\xc3\xa4 on toteutettu muutamia t\xc3\xa4ysin toimivia tutkimusprojekteja (tekstintoimitin, k\xc3\xa4ytt\xc3\xb6j\xc3\xa4rjestelm\xc3\xa4), mutta varsinaisessa tuotanto-ohjelmoinnissa sit\xc3\xa4 ei ole k\xc3\xa4ytetty._NEWLINE_Suomessa on kehitetty CLU:n pohjalta tutkimusprojektissa uusi ohjelmointikieli nimelt\xc3\xa4 XE vuonna 1989.\n_START_SECTION_\nOminaisuuksia\n_START_PARAGRAPH_\nVaikka CLU:ssa on stattinen k\xc3\xa4\xc3\xa4nn\xc3\xb6saikainen tyypitys, CLU:n tietotyypit ovat melko joustavia ja niille on roskankeruu.\n_START_SECTION_\nAbstraktit tietotyypit\n_START_PARAGRAPH_\nCLU-ohjelmointikieless\xc3\xa4 voidaan totetuttaa abstrakteja tietotyyppej\xc3\xa4. N\xc3\xa4it\xc3\xa4 kutsutaan klustereiksi. Klusteri vastaa oliokielten luokkia, mutta CLU ei ole varsinainen olio-ohjelmointikieli vaikka siihen on otettu vaikutteita my\xc3\xb6s ensimm\xc3\xa4isesti olio-ohjelmointikielest\xc3\xa4, Simula 67:st\xc3\xa4._NEWLINE_Esimerkiksi kompleksiluvut m\xc3\xa4\xc3\xa4rittelev\xc3\xa4 klusteri n\xc3\xa4ytt\xc3\xa4isi CLU-ohjelmointikielell\xc3\xa4 seuraavalta:_NEWLINE__NEWLINE_     complex_number = cluster is add, subtract, multiply, ...._NEWLINE_          rep = record [ real_part: real, imag_part: real ]_NEWLINE_          add = proc ... end add;_NEWLINE_          subtract = proc ... end subtract;_NEWLINE_          multiply = proc ... end multiply;_NEWLINE_          ..._NEWLINE_     end complex_number;_NEWLINE_rep m\xc3\xa4\xc3\xa4rittelee tietotyypin sis\xc3\xa4isen esitysmuodon eik\xc3\xa4 siihen ole p\xc3\xa4\xc3\xa4sy\xc3\xa4 klusterin ulkopuolelta._NEWLINE_C++-ohjelmointikielen mallit (templates) ovat saaneet vaikutteita CLU:n abstraktien tietotyyppien k\xc3\xa4sittelyst\xc3\xa4._NEWLINE_CLU:ssa ei ole tietotyyppien perint\xc3\xa4\xc3\xa4.\n_START_SECTION_\nIteraattorit\n_START_PARAGRAPH_\nCLUssa on ensimm\xc3\xa4isen\xc3\xa4 toteutettu iteraattorit. Nykyisist\xc3\xa4 ohjelmointikielist\xc3\xa4 iteraattorit ovat keskeinen Ruby-ohjelmointikielen rakenne. My\xc3\xb6s uusissa Python-ohjelmointikielen toteutuksissa voi k\xc3\xa4ytt\xc3\xa4\xc3\xa4 helposti iteraattoreita._NEWLINE_Iteraattori on mekanismi, jolla silmukkarakenteella voidaan k\xc3\xa4yd\xc3\xa4 l\xc3\xa4pi abstraktin tietotyypin arvoja.\n_START_SECTION_\nSyntaktinen sokerointi\n_START_PARAGRAPH_\nCLU-ohjelmointikieless\xc3\xa4 on esimm\xc3\xa4isen\xc3\xa4 otettu k\xc3\xa4ytt\xc3\xb6\xc3\xb6n termi syntaktinen sokerointi. Se tarkoittaa sit\xc3\xa4, ett\xc3\xa4 esimerkiksi "1+1" on vain merkint\xc3\xa4, joka tulkitaan abstraktin tietotyypin "kokonaisluku" operaatioksi "add". "1+1" tulkitaan jo syntaktisella tasolla samanlaiseksi operaatioksi kuin esimerkiksi nykyaikaisen ohjelmointikielen metodikutsut._NEWLINE_Syntaktinen sokerointi on k\xc3\xa4yt\xc3\xb6ss\xc3\xa4 sek\xc3\xa4 Rubyss\xc3\xa4 ett\xc3\xa4 jossain m\xc3\xa4\xc3\xa4rin Pythonissa.\n_START_SECTION_\nMuuttamattomat tietotyypit\n_START_PARAGRAPH_\nCLU:ssa on yleisimmist\xc3\xa4 tietotyypeist\xc3\xa4 sek\xc3\xa4 muutettavissa olevat ett\xc3\xa4 muuttamattomat (immutable) tietotyypit. Nykyaikaisista ohjelmointikielist\xc3\xa4 t\xc3\xa4m\xc3\xa4 on otettu k\xc3\xa4ytt\xc3\xb6\xc3\xb6n Pythonissa.\n_START_SECTION_\nMonisijoitus\n_START_PARAGRAPH_\nCLU oli ensimm\xc3\xa4inen ohjelmointikieli miss\xc3\xa4 sijoituksen voi tehd\xc3\xa4 rinnakkain, esimerkiksi_NEWLINE_   x,y = y,x_NEWLINE_vaihtaa muuttujien x ja y arvot kesken\xc3\xa4\xc3\xa4n._NEWLINE_My\xc3\xb6s funktion paluuarvon voi olla useampi arvo, jotka sijoitetaan useampaan muuttujaan (vrt. Pythonissa tuple funktion paluuarvona).\n_START_SECTION_\nPoikkeukset\n_START_PARAGRAPH_\nCLU tukee poikkeuksia.'