Knowledge

CLU (programming language)

Source ๐Ÿ“

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:.

Index


verification
improve this article
adding citations to reliable sources
"CLU" programming language
news
newspapers
books
scholar
JSTOR
Learn how and when to remove this message
Paradigm
multi-paradigm
object-oriented
procedural
Designed by
Barbara Liskov
Developer
Massachusetts Institute of Technology
Stable release
SPARC
VAX
Typing discipline
strong
pmg.csail.mit.edu/CLU.html
implementations
ALGOL 60
Lisp
Simula
Alphard

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

โ†‘