Knowledge (XXG)

Cyclone (programming language)

Source 📝

27: 1964: 571:
pointer dereferences. This extra limit, however, can be a rather large stumbling block for most C programmers, who are used to being able to manipulate their pointers directly with arithmetic. Although this is desirable, it can lead to
580:
pointer type is delimited by a known bound, the size of the array. Although this adds overhead due to the extra information stored about the pointer, it improves safety and security. Take for instance a simple (and naïve)
967:
bounds itself by the length of the array passed to it, thus not going over the actual length. Each of the kinds of pointer type can be safely cast to each of the others, and arrays and strings are automatically cast to
1217:, but there are no guarantees that all such errors will be detected. Cyclone does regional analysis of each segment of code, preventing dangling pointers, such as the one returned from this version of 1335: 1491: 1221:. All of the local variables in a given scope are considered to be part of the same region, separate from the heap or any other local region. Thus, when analyzing 1995: 1276: 1990: 1339: 1319: 361: 1459: 1484: 48: 458:
The purpose of introducing these new pointer types is to avoid common problems when using pointers. Take for instance a function, called
1423: 1804: 1968: 70: 221:
and other vulnerabilities that are possible in C programs by design, without losing the power and convenience of C as a tool for
1785: 1694: 1477: 376: 1903: 1393: 1875: 1923: 282: 1933: 1918: 1624: 1248: 230: 194: 135: 1108:
is deallocated when the function returns, so the returned value cannot be used safely outside of the function. While
41: 35: 1880: 1609: 420: 260:, while still maintaining its look and performance. To this end, Cyclone places the following limits on programs: 1928: 1634: 1531: 1526: 1521: 1243: 404:
For a better high-level introduction to Cyclone, the reasoning behind Cyclone and the source of these lists, see
1298:
Jim, Trevor; Morrisett, J. Greg; Grossman, Dan; Hicks, Michael W.; Cheney, James; Wang, Yanling (10 June 2002).
52: 1908: 1619: 1567: 1500: 1238: 257: 214: 182: 1361: 1771: 1746: 1464: 1109: 777:
which can be used to avoid such problems, but these functions are not standard with every implementation of
1789: 1268: 233:
language is mentioned by the original developers for having integrated many of the same ideas Cyclone had.
1731: 1329: 1751: 1112:
and other compilers will warn about such code, the following will typically compile without warnings:
210: 337:
To maintain the tool set that C programmers are used to, Cyclone provides the following extensions:
1766: 1761: 1723: 1614: 405: 225:. It is no longer supported by its original developers, with the reference tooling not supporting 1832: 1597: 1438: 1388: 500: 447: 390: 275: 270: 245: 222: 106: 101: 1433: 1304:
Proceedings of the General Track of the annual conference on USENIX Annual Technical Conference
1665: 1660: 1629: 1572: 1562: 1315: 1307: 288: 226: 1776: 1736: 1644: 981: 573: 353: 218: 89: 1794: 1949: 1756: 1682: 1582: 1451:
by Dan Grossman, Michael Hicks, Trevor Jim, and Greg Morrisett - published January 2005
241: 198: 1209:
GNU Compiler Collection can produce warnings for such code as a side-effect of option
411:
Cyclone looks, in general, much like C, but it should be viewed as a C-like language.
1984: 1852: 1842: 1781: 1448: 1822: 1587: 380: 367: 310: 302: 265: 237: 94: 1913: 507: 451: 1443: 1299: 510:
being sent to the application). To avoid such problems, Cyclone introduces the
1557: 1536: 1383: 1428: 1311: 765:
were passed to this string? This is perfectly legal in C, yet would cause
1857: 1847: 1827: 1672: 1639: 1577: 1469: 495:
checks, let us assume that for performance reasons they did not. Calling
324: 1541: 706:
This function assumes that the string being passed in is terminated by
555:, avoiding the aforementioned undefined behavior. The simple change of 504: 236:
Cyclone development was started as a joint project of Trevor Jim from
1812: 1709: 1704: 1511: 778: 769:
to iterate through memory not necessarily associated with the string
293: 1898: 1837: 1817: 1741: 1689: 1677: 1418: 1353: 373:
Injections help automate the use of tagged unions for programmers
165: 1699: 358:
Growable regions support a form of safe manual memory management
1473: 1516: 1229:
is a pointer into the local stack, and would report an error.
20: 1269:"Open Access Cyclone (programming language) Journals · OA.mg" 281:
Pointers must be initialized before use (this is enforced by
576:
and other "off-by-one"-style mistakes. To avoid this, the
256:
Cyclone attempts to avoid some of the common pitfalls of
352:"Fat" pointers support pointer arithmetic with run-time 547:
This tells the Cyclone compiler that the argument to
567:
checks and the operating system from having to trap
291:
are prevented through region analysis and limits on
1942: 1889: 1866: 1803: 1722: 1653: 1596: 1550: 1465:
Cyclone: A Memory-Safe C-Level Programming Language
1214: 1210: 1100:on the stack and returns a pointer to the start of 715: 707: 188: 176: 160: 134: 112: 100: 88: 248:in 2001. Version 1.0 was released on May 8, 2006. 16:Memory-safe dialect of the C programming language 1004:results in no checks whatsoever; the resulting 1334:: CS1 maint: DOI inactive as of August 2024 ( 1306:. ATEC '02. USA: USENIX Association: 275–288. 1485: 8: 1104:. However, the memory used on the stack for 83: 487:Although the person who wrote the function 1602: 1492: 1478: 1470: 563:saves the programmer from having to write 82: 318:Pointer-returning functions must execute 315:labels in different scopes are disallowed 213:was intended to be a safe dialect of the 71:Learn how and when to remove this message 785:is not so different from the C version: 503:(typically, although not necessarily, a 299:Only "safe" casts and unions are allowed 34:This article includes a list of general 1260: 996:check and a bounds check. Casting from 387:varargs are implemented as fat pointers 1327: 1225:, the Cyclone compiler would see that 1996:Programming languages created in 2002 1012:Dangling pointers and region analysis 7: 1396:from the original on 15 October 2022 1279:from the original on 30 October 2022 1016:Consider the following code, in C: 1460:Cyclone: A Type-Safe Dialect of C 1429:Cyclone - source code repositories 419:Cyclone implements three kinds of 40:it lacks sufficient corresponding 14: 1449:Cyclone: a Type-safe Dialect of C 1338:) CS1 maint: ignored DOI errors ( 714:). However, what would happen if 514:pointer type, which can never be 1963: 1962: 1364:from the original on 21 May 2006 462:that takes a pointer to an int: 25: 972:by the compiler. (Casting from 773:. There are functions, such as 269:checks are inserted to prevent 1300:"Cyclone: A Safe Dialect of C" 518:. Thus, the "safe" version of 370:support type-varying arguments 1: 1991:C programming language family 1096:allocates an array of chars 283:definite assignment analysis 118:; 22 years ago 2012: 1876:Compatibility of C and C++ 1314:(inactive 3 August 2024). 1008:pointer has a size of 1.) 1958: 1605: 1507: 1439:Cyclone for C programmers 781:. The Cyclone version of 364:for heap-allocated values 307:into scopes is disallowed 193: 181: 156: 141:1.0 / May 8, 2006 130: 1114: 1018: 787: 587: 585:function, written in C: 524: 464: 345:pointers do not require 1358:cyclone.thelanguage.org 1110:GNU Compiler Collection 55:more precise citations. 1881:Comparison with Pascal 1501:C programming language 379:replaces some uses of 143:; 18 years ago 1312:10.5555/647057.713871 393:replace some uses of 491:could have inserted 446:(the only type with 211:programming language 1444:Cyclone user manual 984:, and casting from 271:segmentation faults 113:First appeared 85: 1389:Cornell University 501:undefined behavior 448:pointer arithmetic 362:Garbage collection 276:Pointer arithmetic 246:Cornell University 223:system programming 107:Cornell University 1978: 1977: 1718: 1717: 1321:978-1-880446-00-3 430:(the normal type) 333:are not supported 289:Dangling pointers 252:Language features 204: 203: 81: 80: 73: 2003: 1966: 1965: 1603: 1598:Standard library 1494: 1487: 1480: 1471: 1419:Cyclone homepage 1406: 1405: 1403: 1401: 1380: 1374: 1373: 1371: 1369: 1350: 1344: 1343: 1333: 1325: 1295: 1289: 1288: 1286: 1284: 1265: 1228: 1224: 1220: 1216: 1212: 1205: 1202: 1199: 1196: 1193: 1190: 1187: 1184: 1181: 1178: 1175: 1172: 1169: 1166: 1163: 1160: 1157: 1154: 1151: 1148: 1145: 1142: 1139: 1136: 1133: 1130: 1127: 1124: 1121: 1118: 1107: 1103: 1099: 1095: 1088: 1085: 1082: 1079: 1076: 1073: 1070: 1067: 1064: 1061: 1058: 1055: 1052: 1049: 1046: 1043: 1040: 1037: 1034: 1031: 1028: 1025: 1022: 1007: 1003: 999: 995: 991: 987: 979: 975: 971: 966: 959: 956: 953: 950: 947: 944: 941: 938: 935: 932: 929: 926: 923: 920: 917: 914: 911: 908: 905: 902: 899: 896: 893: 890: 887: 884: 881: 878: 875: 872: 869: 866: 863: 860: 857: 854: 851: 848: 845: 842: 839: 836: 833: 830: 827: 824: 821: 818: 815: 812: 809: 806: 803: 800: 797: 794: 791: 784: 776: 772: 768: 764: 763: 760: 757: 754: 751: 748: 745: 742: 739: 736: 733: 730: 727: 724: 721: 718: 713: 709: 702: 699: 696: 693: 690: 687: 684: 681: 678: 675: 672: 669: 666: 663: 660: 657: 654: 651: 648: 645: 642: 639: 636: 633: 630: 627: 624: 621: 618: 615: 612: 609: 606: 603: 600: 597: 594: 591: 584: 579: 574:buffer overflows 570: 566: 562: 558: 554: 551:should never be 550: 543: 540: 537: 534: 531: 528: 521: 517: 513: 498: 494: 490: 483: 480: 477: 474: 471: 468: 461: 445: 439: 435: 429: 400: 396: 383: 348: 344: 331: 327: 321: 313: 305: 296: 268: 227:64-bit platforms 219:buffer overflows 172: 169: 167: 151: 149: 144: 126: 124: 119: 90:Designed by 86: 76: 69: 65: 62: 56: 51:this article by 42:inline citations 29: 28: 21: 2011: 2010: 2006: 2005: 2004: 2002: 2001: 2000: 1981: 1980: 1979: 1974: 1954: 1938: 1891: 1885: 1869:other languages 1868: 1867:Comparison with 1862: 1799: 1737:Borland Turbo C 1714: 1654:Implementations 1649: 1592: 1546: 1503: 1498: 1455:Presentations: 1415: 1410: 1409: 1399: 1397: 1382: 1381: 1377: 1367: 1365: 1352: 1351: 1347: 1326: 1322: 1297: 1296: 1292: 1282: 1280: 1267: 1266: 1262: 1257: 1235: 1226: 1222: 1218: 1207: 1206: 1203: 1200: 1197: 1194: 1191: 1188: 1185: 1182: 1179: 1176: 1173: 1170: 1167: 1164: 1161: 1158: 1155: 1152: 1149: 1146: 1143: 1140: 1137: 1134: 1131: 1128: 1125: 1122: 1119: 1116: 1105: 1101: 1097: 1093: 1090: 1089: 1086: 1083: 1080: 1077: 1074: 1071: 1068: 1065: 1062: 1059: 1056: 1053: 1050: 1047: 1044: 1041: 1038: 1035: 1032: 1029: 1026: 1023: 1020: 1014: 1005: 1001: 997: 993: 992:invokes both a 989: 985: 977: 973: 969: 964: 961: 960: 957: 954: 951: 948: 945: 942: 939: 936: 933: 930: 927: 924: 921: 918: 915: 912: 909: 906: 903: 900: 897: 894: 891: 888: 885: 882: 879: 876: 873: 870: 867: 864: 861: 858: 855: 852: 849: 846: 843: 840: 837: 834: 831: 828: 825: 822: 819: 816: 813: 810: 807: 804: 801: 798: 795: 792: 789: 782: 774: 770: 766: 761: 758: 755: 752: 749: 746: 743: 740: 737: 734: 731: 728: 725: 722: 719: 716: 711: 704: 703: 700: 697: 694: 691: 688: 685: 682: 679: 676: 673: 670: 667: 664: 661: 658: 655: 652: 649: 646: 643: 640: 637: 634: 631: 628: 625: 622: 619: 616: 613: 610: 607: 604: 601: 598: 595: 592: 589: 582: 577: 568: 564: 560: 556: 552: 548: 545: 544: 541: 538: 535: 532: 529: 526: 519: 515: 511: 499:will result in 496: 492: 488: 485: 484: 481: 478: 475: 472: 469: 466: 459: 443: 437: 433: 427: 417: 398: 394: 381: 354:bounds checking 346: 342: 329: 325: 319: 311: 303: 292: 264: 254: 164: 152: 147: 145: 142: 122: 120: 117: 77: 66: 60: 57: 47:Please help to 46: 30: 26: 17: 12: 11: 5: 2009: 2007: 1999: 1998: 1993: 1983: 1982: 1976: 1975: 1973: 1972: 1959: 1956: 1955: 1953: 1952: 1950:Dennis Ritchie 1946: 1944: 1940: 1939: 1937: 1936: 1931: 1926: 1921: 1916: 1911: 1906: 1901: 1895: 1893: 1887: 1886: 1884: 1883: 1878: 1872: 1870: 1864: 1863: 1861: 1860: 1855: 1850: 1845: 1840: 1835: 1830: 1825: 1820: 1815: 1809: 1807: 1801: 1800: 1798: 1797: 1792: 1779: 1774: 1769: 1764: 1759: 1754: 1749: 1744: 1739: 1734: 1728: 1726: 1720: 1719: 1716: 1715: 1713: 1712: 1707: 1702: 1697: 1692: 1687: 1686: 1685: 1675: 1670: 1669: 1668: 1657: 1655: 1651: 1650: 1648: 1647: 1642: 1637: 1632: 1627: 1625:Dynamic memory 1622: 1617: 1612: 1606: 1600: 1594: 1593: 1591: 1590: 1585: 1580: 1575: 1570: 1565: 1560: 1554: 1552: 1548: 1547: 1545: 1544: 1539: 1534: 1529: 1524: 1519: 1514: 1508: 1505: 1504: 1499: 1497: 1496: 1489: 1482: 1474: 1468: 1467: 1462: 1453: 1452: 1446: 1441: 1436: 1431: 1426: 1421: 1414: 1413:External links 1411: 1408: 1407: 1375: 1345: 1320: 1290: 1259: 1258: 1256: 1253: 1252: 1251: 1246: 1241: 1234: 1231: 1171:"%d" 1115: 1066:"%d" 1019: 1013: 1010: 788: 588: 525: 465: 456: 455: 452:"fat" pointers 441: 431: 416: 413: 402: 401: 388: 385: 374: 371: 365: 359: 356: 350: 335: 334: 322: 316: 308: 300: 297: 286: 279: 273: 253: 250: 242:Greg Morrisett 202: 201: 199:Project Verona 191: 190: 186: 185: 179: 178: 174: 173: 162: 158: 157: 154: 153: 140: 138: 136:Stable release 132: 131: 128: 127: 114: 110: 109: 104: 98: 97: 92: 79: 78: 33: 31: 24: 15: 13: 10: 9: 6: 4: 3: 2: 2008: 1997: 1994: 1992: 1989: 1988: 1986: 1971: 1970: 1961: 1960: 1957: 1951: 1948: 1947: 1945: 1941: 1935: 1932: 1930: 1927: 1925: 1922: 1920: 1917: 1915: 1912: 1910: 1907: 1905: 1902: 1900: 1897: 1896: 1894: 1888: 1882: 1879: 1877: 1874: 1873: 1871: 1865: 1859: 1856: 1854: 1853:Visual Studio 1851: 1849: 1846: 1844: 1843:GNOME Builder 1841: 1839: 1836: 1834: 1831: 1829: 1826: 1824: 1821: 1819: 1816: 1814: 1811: 1810: 1808: 1806: 1802: 1796: 1793: 1791: 1787: 1783: 1782:Visual Studio 1780: 1778: 1775: 1773: 1770: 1768: 1765: 1763: 1760: 1758: 1755: 1753: 1750: 1748: 1745: 1743: 1740: 1738: 1735: 1733: 1730: 1729: 1727: 1725: 1721: 1711: 1708: 1706: 1703: 1701: 1698: 1696: 1693: 1691: 1688: 1684: 1681: 1680: 1679: 1676: 1674: 1671: 1667: 1664: 1663: 1662: 1659: 1658: 1656: 1652: 1646: 1643: 1641: 1638: 1636: 1633: 1631: 1628: 1626: 1623: 1621: 1618: 1616: 1613: 1611: 1608: 1607: 1604: 1601: 1599: 1595: 1589: 1586: 1584: 1581: 1579: 1576: 1574: 1571: 1569: 1566: 1564: 1561: 1559: 1556: 1555: 1553: 1549: 1543: 1540: 1538: 1535: 1533: 1530: 1528: 1525: 1523: 1520: 1518: 1515: 1513: 1510: 1509: 1506: 1502: 1495: 1490: 1488: 1483: 1481: 1476: 1475: 1472: 1466: 1463: 1461: 1458: 1457: 1456: 1450: 1447: 1445: 1442: 1440: 1437: 1435: 1434:Cyclone - FAQ 1432: 1430: 1427: 1425: 1422: 1420: 1417: 1416: 1412: 1395: 1391: 1390: 1385: 1379: 1376: 1363: 1359: 1355: 1349: 1346: 1341: 1337: 1331: 1323: 1317: 1313: 1309: 1305: 1301: 1294: 1291: 1278: 1274: 1270: 1264: 1261: 1254: 1250: 1247: 1245: 1242: 1240: 1237: 1236: 1232: 1230: 1113: 1111: 1092:The function 1017: 1011: 1009: 983: 786: 780: 586: 575: 523: 509: 506: 502: 463: 453: 449: 442: 440:pointer), and 432: 426: 425: 424: 422: 415:Pointer types 414: 412: 409: 407: 392: 389: 386: 384: 378: 375: 372: 369: 368:Tagged unions 366: 363: 360: 357: 355: 351: 340: 339: 338: 332: 323: 317: 314: 309: 306: 301: 298: 295: 290: 287: 284: 280: 277: 274: 272: 267: 263: 262: 261: 259: 251: 249: 247: 243: 240:Research and 239: 238:AT&T Labs 234: 232: 228: 224: 220: 216: 212: 209: 200: 196: 192: 187: 184: 180: 177:Influenced by 175: 171: 163: 159: 155: 139: 137: 133: 129: 115: 111: 108: 105: 103: 99: 96: 95:AT&T Labs 93: 91: 87: 75: 72: 64: 54: 50: 44: 43: 37: 32: 23: 22: 19: 1967: 1823:Code::Blocks 1795:Watcom C/C++ 1583:Preprocessor 1563:Header files 1454: 1424:Old web site 1398:. Retrieved 1387: 1378: 1366:. Retrieved 1357: 1348: 1330:cite journal 1303: 1293: 1281:. Retrieved 1272: 1263: 1208: 1091: 1015: 982:bounds check 962: 934:'\0' 705: 671:'\0' 546: 486: 457: 418: 410: 403: 377:Polymorphism 336: 255: 244:'s group at 235: 217:. It avoids 207: 205: 168:.thelanguage 67: 58: 39: 18: 1914:Objective-C 1695:Windows CRT 1368:11 December 759:'!' 753:'o' 747:'l' 741:'l' 735:'e' 729:'h' 436:(the never- 61:August 2015 53:introducing 1985:Categories 1890:Descendant 1762:Norcroft C 1588:Data types 1537:Embedded C 1400:30 October 1283:30 October 1255:References 980:invokes a 522:would be: 497:foo(NULL); 406:this paper 391:Exceptions 278:is limited 215:C language 189:Influenced 148:2006-05-08 36:references 1892:languages 1724:Compilers 1666:libhybris 1568:Operators 1558:Functions 1384:"Cyclone" 1354:"Cyclone" 450:allowed, 102:Developer 1969:Category 1943:Designer 1858:NetBeans 1848:KDevelop 1828:CodeLite 1673:dietlibc 1640:Variadic 1615:File I/O 1551:Features 1394:Archived 1362:Archived 1277:Archived 1233:See also 1833:Eclipse 1786:Express 1542:MISRA C 1159:sprintf 1054:sprintf 775:strnlen 505:SIGSEGV 421:pointer 399:longjmp 330:longjmp 208:Cyclone 166:cyclone 161:Website 146: ( 121: ( 84:Cyclone 49:improve 1813:Anjuta 1710:uClibc 1705:Newlib 1683:EGLIBC 1661:Bionic 1630:String 1578:Syntax 1573:String 1512:ANSI C 1318:  1195:return 1078:return 965:strlen 963:Here, 949:return 940:return 862:return 793:strlen 783:strlen 779:ANSI C 767:strlen 692:return 650:return 593:strlen 583:strlen 508:signal 395:setjmp 382:void * 349:checks 341:Never- 326:setjmp 320:return 312:switch 294:free() 229:. The 38:, but 1924:Limbo 1838:Geany 1818:CLion 1742:Clang 1690:klibc 1678:glibc 1645:POSIX 1273:oa.mg 799:const 659:while 599:const 1934:Vala 1919:Alef 1805:IDEs 1772:SDCC 1700:musl 1635:Time 1620:Math 1610:Char 1402:2022 1370:2023 1340:link 1336:link 1316:ISBN 1285:2022 1249:Rust 1223:itoa 1219:itoa 1141:char 1123:itoa 1117:char 1094:itoa 1045:char 1027:itoa 1021:char 994:NULL 892:< 856:NULL 838:size 802:char 717:char 712:'\0' 708:NULL 644:NULL 602:char 569:NULL 565:NULL 553:NULL 516:NULL 493:NULL 438:NULL 397:and 347:NULL 343:NULL 328:and 304:goto 266:NULL 231:Rust 206:The 195:Rust 170:.org 123:2002 116:2002 1899:C++ 1790:C++ 1777:TCC 1767:PCC 1757:LCC 1752:ICC 1747:GCC 1732:ACK 1532:C23 1527:C17 1522:C11 1517:C99 1308:doi 1215:-O3 1213:or 1211:-O2 1189:buf 1165:buf 1144:buf 1129:int 1106:buf 1102:buf 1098:buf 1081:buf 1060:buf 1048:buf 1033:int 1000:to 988:to 976:to 871:for 817:int 790:int 720:buf 617:int 590:int 559:to 549:foo 536:int 530:foo 527:int 520:foo 489:foo 476:int 470:foo 467:int 460:foo 1987:: 1929:Go 1904:C# 1788:, 1784:, 1392:. 1386:. 1360:. 1356:. 1332:}} 1328:{{ 1302:. 1275:. 1271:. 1244:ML 1180:); 1075:); 931:== 919:if 913:++ 904:++ 853:== 844:if 762:}; 683:++ 668:!= 641:== 632:if 542:); 482:); 454:). 423:: 408:. 197:, 1909:D 1493:e 1486:t 1479:v 1404:. 1372:. 1342:) 1324:. 1310:: 1287:. 1239:C 1227:z 1204:} 1201:; 1198:z 1192:; 1186:= 1183:z 1177:i 1174:, 1168:, 1162:( 1156:; 1153:z 1150:* 1147:, 1138:{ 1135:) 1132:i 1126:( 1120:* 1087:} 1084:; 1072:i 1069:, 1063:, 1057:( 1051:; 1042:{ 1039:) 1036:i 1030:( 1024:* 1006:? 1002:? 998:* 990:@ 986:? 978:* 974:? 970:? 958:} 955:; 952:n 946:; 943:i 937:) 928:s 925:* 922:( 916:) 910:s 907:, 901:i 898:; 895:n 889:i 886:; 883:0 880:= 877:i 874:( 868:; 865:0 859:) 850:s 847:( 841:; 835:. 832:s 829:= 826:n 823:, 820:i 814:{ 811:) 808:s 805:? 796:( 771:s 756:, 750:, 744:, 738:, 732:, 726:{ 723:= 710:( 701:} 698:; 695:i 689:} 686:; 680:i 677:{ 674:) 665:s 662:( 656:; 653:0 647:) 638:s 635:( 629:; 626:0 623:= 620:i 614:{ 611:) 608:s 605:* 596:( 578:? 561:@ 557:* 539:@ 533:( 512:@ 479:* 473:( 444:? 434:@ 428:* 285:) 258:C 183:C 150:) 125:) 74:) 68:( 63:) 59:( 45:.

Index

references
inline citations
improve
introducing
Learn how and when to remove this message
Designed by
AT&T Labs
Developer
Cornell University
Stable release
cyclone.thelanguage.org
C
Rust
Project Verona
programming language
C language
buffer overflows
system programming
64-bit platforms
Rust
AT&T Labs
Greg Morrisett
Cornell University
C
NULL
segmentation faults
Pointer arithmetic
definite assignment analysis
Dangling pointers
free()

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