516:. Unlike most other languages with exception handling, exceptions are not implicitly resignaled up the calling chain. Also unlike most other languages that provide exception handling, exceptions in CLU are considered part of ordinary execution flow and are considered a "normal" and efficient type-safe way to break out of loops or to return from functions; this allows for direct assignment of return values "except when" other conditions apply. Exceptions that are neither caught nor resignaled explicitly are immediately converted into a special failure exception that typically terminates the program.
22:
440:
A cluster is a module that encapsulates all of its components except for those explicitly named in the "is" clause. These correspond to the public components of a class in recent OO languages. A cluster also defines a type that can be named outside the cluster (in this case, "complex_number"), but
860:
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the
436:
complex_number = cluster is add, subtract, multiply, ... rep = record add = proc ... end add; subtract = proc ... end subtract; multiply = proc ... end multiply; ... end complex_number;
429:, CLU's type extension system and the root of the language's name (CLUster). Clusters correspond generally to the concept of a "class" in an OO language. For instance, here is the CLU syntax for a cluster that implements
580:
to express constraints on actual type arguments. Unlike in languages with template-based generics, a use of such a data abstraction can be type-checked without access to the implementation of the abstraction.
501:
statement. Iterators like those in CLU are now a common feature of many modern languages, such as C#, Ruby, and Python, though recently they are often referred to as generators.
366:
and her students starting in 1973. While it did not find extensive use, it introduced many features that are used widely now, and is seen as a step in the development of
835:
replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model.
1219:
861:
experiences hard-won by many other languages in the field, drawing ideas from
Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
1072:
Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'...
1234:
444:
Cluster names are global, and no namespace mechanism was provided to group clusters or allow them to be created "locally" inside other clusters.
1229:
1122:
497:
s. A distinctive feature of CLU iterators is that they are implemented as coroutines, with each value being provided to the caller via a
39:
1214:
455:
change between the abstract type and the representation; implicit conversions between these types are signified using the special type
86:
1224:
406:
402:
58:
1056:
1209:
1204:
65:
1033:
359:
162:
736:
566:, but CLU popularized it and is often credited as the direct influence leading to parallel assignment in later languages.
72:
467:, and a procedure force to check that an object is a certain type. Objects may be mutable or immutable, the latter being
274:
129:
814:
1177:
486:
105:
54:
875:
Liskov, Barbara (1992). "A history of CLU". The second ACM SIGPLAN conference on
History of programming languages.
576:
user-defined data abstractions. It was the first language to offer type-safe bounded parameterized types, using
618:
303:
43:
1039:
638:
614:
539:
331:
398:
343:
319:
642:
604:
367:
335:
295:
191:
133:
632:
590:
559:
327:
315:
79:
931:
528:
898:
1143:
945:
485:, which return objects from a collection serially, one after another. Iterators offer an identical
460:
1160:
Liskov, B.; Atkinson, R.; Bloom, T.; Moss, E.; Schaffert, J.C.; Scheifler, R.; Snyder, A. (1981).
1129:
32:
940:
893:
425:, then the starting point for most new language designs. The key addition was the concept of a
137:
1018:
Proceedings of the third ACM SIGPLAN conference on
History of programming languages โ HOPL III
1148:
538:(multiple assignment), where more than one variable can appear on the left hand side of an
355:
124:
929:; Snyder, A.; Atkinson, R.; Schaffert, C. (August 1977). "Abstraction mechanisms in CLU".
489:(API) no matter what data they are being used with. Thus the iterator for a collection of
8:
573:
535:
386:
1183:
958:
505:
390:
374:
157:
1153:
708:
Programming
Methodology Group, Computer Science and Artificial Intelligence Laboratory
703:
679:
Programming
Methodology Group, Computer Science and Artificial Intelligence Laboratory
1173:
1029:
558:. Parallel assignment (though not multiple return values) predates CLU, appearing in
1187:
962:
1165:
1021:
989:
950:
903:
788:
597:
569:
All objects in a CLU program live in the heap, and memory management is automatic.
1084:
646:
378:
144:
735:. Department of Distinctive Collections, Massachusetts Institute of Technology.
926:
885:
430:
363:
149:
976:
Barron, D. W.; Buxton, J. N.; Hartley, D. F.; Nixon, E.; Strachey, C. (1963).
1198:
994:
977:
244:
1025:
822:
787:. New York, NY, USA: Association for Computing Machinery. pp. 699โ769.
635:
took multiple assignment and multiple returns from function calls from CLU.
603:
CLU's exception handling mechanisms influenced later languages like C++ and
508:, based on various attempts in other languages; exceptions are raised using
792:
520:
394:
954:
907:
728:
782:
674:
239:
1169:
1156:
comparison at '99 bottles of beer' multi-language demo algorithm site
890:
Proceedings of the ACM SIGPLAN symposium on Very high level languages
1113:
255:
21:
622:
481:
382:
291:
1010:
888:; Zilles, Stephen (1974). "Programming with abstract data types".
1139:
751:
519:
CLU is often credited as being the first language with type-safe
1008:
610:
554:. In the same way, functions could return several values, like
441:
its representation type (rep) is hidden from external clients.
418:
339:
299:
1164:. Lecture Notes in Computer Science. Vol. 114. Springer.
925:
594:
422:
323:
198:
1085:"Functional Programming HOWTO โ Python 3.8.3 documentation"
1009:
Ierusalimschy, R.; De
Figueiredo, L. H.; Celes, W. (2007).
848:
628:
202:
975:
493:
s can be used interchangeably with that for an array of
1159:
806:
471:
such as integers, booleans, characters and strings.
46:. Unsourced material may be challenged and removed.
737:swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0
1196:
776:
774:
772:
733:Tapes of Tech Square (ToTS) collection, MC-0741
479:Another key feature of the CLU type system are
1220:Massachusetts Institute of Technology software
921:
919:
917:
769:
884:
447:In a cluster, the explicit type conversions
281:PDP-10 CLU, Native CLU, Portable CLU, clu2c
914:
840:
780:
697:
695:
993:
944:
897:
871:
869:
106:Learn how and when to remove this message
1049:
668:
666:
846:
710:. Massachusetts Institute of Technology
692:
681:. Massachusetts Institute of Technology
1235:Programming languages created by women
1197:
1120:
866:
701:
672:
534:A final distinctive feature in CLU is
1230:Programming languages created in 1975
663:
360:Massachusetts Institute of Technology
163:Massachusetts Institute of Technology
1057:"Ruby's Roots and Matz's Leadership"
749:
743:
653:statement, and multiple assignment.
397:. It is also notable for its use of
385:, multiple return values (a form of
218:Portable CLU / November 6, 2009
44:adding citations to reliable sources
15:
1149:Dictionary of Programming Languages
1142:: a program to compile CLU code to
13:
14:
1246:
1215:Class-based programming languages
1105:
812:
487:application programming interface
474:
459:. CLU does not otherwise perform
1225:Procedural programming languages
1128:. MIT-LCS-TR-561. Archived from
1045:from the original on 2010-07-03.
542:operator. For instance, writing
20:
1077:
1002:
969:
625:, which first appeared in CLU.
55:"CLU" programming language
31:needs additional citations for
1210:Academic programming languages
1205:Articles with example CLU code
1121:Liskov, Barbara (April 1992).
878:
721:
702:Curtis, Dorothy (2009-11-06).
673:Curtis, Dorothy (2009-11-06).
1:
847:Lattner, Chris (2014-06-03).
656:
463:. There is a universal type
784:A History of C++: 1979--1991
593:were major inspirations for
584:
7:
781:Stroustrup, Bjarne (1996).
412:
368:object-oriented programming
174:; 49 years ago
10:
1251:
978:"The main features of CPL"
849:"Chris Lattner's Homepage"
373:Key contributions include
932:Communications of the ACM
555:
546:would exchange values of
461:implicit type conversions
405:and methods, but without
314:
309:
290:
285:
280:
272:
250:
238:
234:
190:
186:
168:
156:
143:
123:
1026:10.1145/1238844.1238846
564:simultaneous assignment
1011:"The evolution of Lua"
995:10.1093/comjnl/6.2.134
793:10.1145/234286.1057836
729:"CLU files, 1976โ1989"
527:, before the language
220:; 14 years ago
207:; 35 years ago
1020:. pp. 2-1โ2-26.
955:10.1145/359763.359789
908:10.1145/800233.807045
205:) / May 26, 1989
1162:CLU Reference Manual
1061:Appfolio Engineering
704:"Index of /pub/pclu"
421:of CLU was based on
356:programming language
40:improve this article
825:on 23 November 2019
536:parallel assignment
391:parameterized types
387:parallel assignment
375:abstract data types
169:First appeared
120:
1170:10.1007/BFb0035014
1123:"A History of CLU"
892:. pp. 50โ59.
574:type-parameterized
556:x,y,z := f(t)
506:exception handling
504:CLU also includes
118:
1035:978-1-59593-766-7
750:Ushijima, Tetsu.
512:and handled with
349:
348:
240:Typing discipline
116:
115:
108:
90:
1242:
1191:
1136:
1134:
1127:
1117:
1116:
1114:Official website
1099:
1098:
1096:
1095:
1081:
1075:
1074:
1069:
1068:
1053:
1047:
1046:
1044:
1015:
1006:
1000:
999:
997:
982:Computer Journal
973:
967:
966:
948:
923:
912:
911:
901:
882:
876:
873:
864:
863:
857:
856:
844:
838:
837:
832:
830:
821:. Archived from
815:"Call By Object"
813:Lundh, Fredrik.
810:
804:
803:
801:
799:
778:
767:
766:
764:
763:
747:
741:
740:
725:
719:
718:
716:
715:
699:
690:
689:
687:
686:
670:
557:
553:
549:
545:
515:
511:
496:
492:
393:, and type-safe
268:
265:
263:
261:
259:
257:
228:
226:
221:
215:
213:
208:
197:Native CLU 1.5 (
182:
180:
175:
152:and her students
145:Designed by
121:
117:
111:
104:
100:
97:
91:
89:
48:
24:
16:
1250:
1249:
1245:
1244:
1243:
1241:
1240:
1239:
1195:
1194:
1180:
1132:
1125:
1112:
1111:
1108:
1103:
1102:
1093:
1091:
1089:docs.python.org
1083:
1082:
1078:
1066:
1064:
1055:
1054:
1050:
1042:
1036:
1013:
1007:
1003:
974:
970:
924:
915:
899:10.1.1.136.3043
886:Liskov, Barbara
883:
879:
874:
867:
854:
852:
851:. Chris Lattner
845:
841:
828:
826:
811:
807:
797:
795:
779:
770:
761:
759:
748:
744:
727:
726:
722:
713:
711:
700:
693:
684:
682:
675:"CLU home page"
671:
664:
659:
647:call by sharing
587:
551:
547:
544:x,y := y,x
543:
513:
509:
494:
490:
477:
438:
431:complex numbers
415:
379:call-by-sharing
358:created at the
275:implementations
254:
230:
224:
222:
219:
216:
211:
209:
206:
178:
176:
173:
134:object-oriented
112:
101:
95:
92:
49:
47:
37:
25:
12:
11:
5:
1248:
1238:
1237:
1232:
1227:
1222:
1217:
1212:
1207:
1193:
1192:
1178:
1157:
1151:
1146:
1137:
1135:on 2003-09-17.
1118:
1107:
1106:External links
1104:
1101:
1100:
1076:
1048:
1034:
1001:
988:(2): 134โ143.
968:
946:10.1.1.112.656
939:(8): 564โ576.
913:
877:
865:
839:
805:
768:
758:. woodsheep.jp
742:
720:
691:
661:
660:
658:
655:
586:
583:
562:(1963), named
491:complex_number
476:
475:Other features
473:
435:
414:
411:
364:Barbara Liskov
347:
346:
312:
311:
307:
306:
288:
287:
283:
282:
278:
277:
270:
269:
252:
248:
247:
242:
236:
235:
232:
231:
196:
194:
192:Stable release
188:
187:
184:
183:
170:
166:
165:
160:
154:
153:
150:Barbara Liskov
147:
141:
140:
130:multi-paradigm
127:
114:
113:
28:
26:
19:
9:
6:
4:
3:
2:
1247:
1236:
1233:
1231:
1228:
1226:
1223:
1221:
1218:
1216:
1213:
1211:
1208:
1206:
1203:
1202:
1200:
1189:
1185:
1181:
1179:9783540108368
1175:
1171:
1167:
1163:
1158:
1155:
1152:
1150:
1147:
1145:
1141:
1138:
1131:
1124:
1119:
1115:
1110:
1109:
1090:
1086:
1080:
1073:
1062:
1058:
1052:
1041:
1037:
1031:
1027:
1023:
1019:
1012:
1005:
996:
991:
987:
983:
979:
972:
964:
960:
956:
952:
947:
942:
938:
934:
933:
928:
922:
920:
918:
909:
905:
900:
895:
891:
887:
881:
872:
870:
862:
850:
843:
836:
824:
820:
816:
809:
794:
790:
786:
785:
777:
775:
773:
757:
753:
746:
738:
734:
730:
724:
709:
705:
698:
696:
680:
676:
669:
667:
662:
654:
652:
648:
644:
640:
636:
634:
630:
626:
624:
620:
616:
612:
608:
606:
601:
599:
596:
592:
582:
579:
578:where clauses
575:
572:CLU supports
570:
567:
565:
561:
541:
537:
532:
530:
526:
522:
521:variant types
517:
507:
502:
500:
488:
484:
483:
472:
470:
466:
462:
458:
454:
450:
445:
442:
434:
432:
428:
424:
420:
410:
408:
404:
400:
396:
395:variant types
392:
389:), type-safe
388:
384:
380:
376:
371:
369:
365:
361:
357:
353:
345:
341:
337:
333:
329:
325:
321:
317:
313:
308:
305:
301:
297:
293:
289:
286:Influenced by
284:
279:
276:
271:
267:
253:
249:
246:
243:
241:
237:
233:
229:
204:
200:
195:
193:
189:
185:
171:
167:
164:
161:
159:
155:
151:
148:
146:
142:
139:
135:
131:
128:
126:
122:
110:
107:
99:
96:February 2013
88:
85:
81:
78:
74:
71:
67:
64:
60:
57: โ
56:
52:
51:Find sources:
45:
41:
35:
34:
29:This article
27:
23:
18:
17:
1161:
1130:the original
1092:. Retrieved
1088:
1079:
1071:
1065:. Retrieved
1063:. 2019-11-08
1060:
1051:
1017:
1004:
985:
981:
971:
936:
930:
889:
880:
859:
853:. Retrieved
842:
834:
827:. Retrieved
823:the original
818:
808:
796:. Retrieved
783:
760:. Retrieved
755:
745:
732:
723:
712:. Retrieved
707:
683:. Retrieved
678:
650:
637:
627:
609:
602:
588:
577:
571:
568:
563:
533:
524:
518:
503:
498:
480:
478:
468:
464:
456:
452:
448:
446:
443:
439:
426:
416:
403:constructors
372:
351:
350:
217:
102:
93:
83:
76:
69:
62:
50:
38:Please help
33:verification
30:
829:21 November
407:inheritance
1199:Categories
1094:2020-05-25
1067:2019-11-15
927:Liskov, B.
855:2014-06-03
819:effbot.org
762:2016-05-26
714:2016-05-26
685:2016-05-26
657:References
540:assignment
531:had them.
469:base types
310:Influenced
225:2009-11-06
212:1989-05-26
138:procedural
66:newspapers
941:CiteSeerX
894:CiteSeerX
645:borrowed
623:iterators
598:templates
585:Influence
523:, called
482:iterators
383:iterators
362:(MIT) by
158:Developer
1188:27382594
1040:Archived
963:17343380
798:25 March
621:include
589:CLU and
413:Clusters
292:ALGOL 60
125:Paradigm
752:"clu2c"
495:integer
427:cluster
399:classes
370:(OOP).
304:Alphard
251:Website
223: (
210: (
177: (
80:scholar
1186:
1176:
1032:
961:
943:
896:
649:, the
639:Python
617:, and
615:Python
611:Sather
525:oneofs
514:except
510:signal
419:syntax
354:is a
340:Sather
332:Python
300:Simula
273:Major
258:.csail
245:strong
82:
75:
68:
61:
53:
1184:S2CID
1140:clu2c
1133:(PDF)
1126:(PDF)
1043:(PDF)
1014:(PDF)
959:S2CID
756:clu2c
651:yield
499:yield
423:ALGOL
401:with
344:Swift
320:Argus
266:.html
199:SPARC
87:JSTOR
73:books
1174:ISBN
1030:ISBN
831:2017
800:2022
643:Ruby
641:and
631:and
629:Perl
605:Java
550:and
453:down
451:and
417:The
336:Ruby
296:Lisp
264:/CLU
262:.edu
260:.mit
179:1975
172:1975
59:news
1166:doi
1154:CLU
1022:doi
990:doi
951:doi
904:doi
789:doi
633:Lua
595:C++
591:Ada
560:CPL
465:any
457:cvt
352:CLU
328:Lua
324:C++
316:Ada
256:pmg
203:VAX
119:CLU
42:by
1201::
1182:.
1172:.
1087:.
1070:.
1059:.
1038:.
1028:.
1016:.
984:.
980:.
957:.
949:.
937:20
935:.
916:^
902:.
868:^
858:.
833:.
817:.
771:^
754:.
731:.
706:.
694:^
677:.
665:^
619:C#
613:,
607:.
600:.
529:ML
449:up
433::
409:.
381:,
377:,
342:,
338:,
334:,
330:,
326:,
322:,
318:,
302:,
298:,
294:,
201:,
136:,
132::
1190:.
1168::
1144:C
1097:.
1024::
998:.
992::
986:6
965:.
953::
910:.
906::
802:.
791::
765:.
739:.
717:.
688:.
552:y
548:x
227:)
214:)
181:)
109:)
103:(
98:)
94:(
84:ยท
77:ยท
70:ยท
63:ยท
36:.
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.