Knowledge

Language-oriented programming

Source 📝

372: 47:
as possible to the user's descriptions, so that the mapping between requirements and implementation is as direct as possible. A measure of the closeness of this isomorphism is the "redundancy" of the language, defined as the number of editing operations needed to implement a stand-alone change in
52:
what is the best language for implementing the new language. Rather, the developer can choose among options created by analysis of the information flows — what information is acquired, what its structure is, when it is acquired, from whom, and what is done with it.
497: 23:) is a software-development paradigm where "language" is a software building block with the same status as objects, modules and components, and rather than solving problems in 43:
The concept of language-oriented programming takes the approach to capture requirements in the user's terms, and then to try to create an implementation language as
31:(DSLs) for the problem first, and solves the problem in those languages. Language-oriented programming was first described in detail in Martin Ward's 1994 paper 403: 467: 416: 204:
Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (March 2018).
141: 566: 501: 396: 630: 980: 842: 368: 986: 389: 322: 182: 205: 1171: 919: 24: 639: 263: 1011: 691: 635: 255: 871: 744: 675: 610: 533: 1232: 1049: 812: 442: 827: 595: 1211: 1191: 1121: 1064: 1026: 1016: 976: 901: 837: 807: 734: 723: 620: 600: 575: 538: 94: 1166: 929: 896: 791: 767: 729: 709: 605: 514: 492: 477: 62: 1113: 1099: 1006: 966: 891: 797: 777: 644: 523: 457: 1206: 971: 881: 861: 847: 365:
In: Proceedings of the 6th International Conference on Software Language Engineering (SLE'13). 2013.
1186: 1146: 1089: 1021: 759: 590: 104: 28: 1196: 1176: 1117: 1104: 1084: 911: 648: 552: 510: 381: 362: 114: 363:
The State of the Art in Language Workbenches. Conclusions from the Language Workbench Challenge.
1156: 1131: 1125: 1069: 1031: 719: 714: 666: 561: 462: 434: 425: 109: 1058: 1054: 996: 948: 518: 1201: 1181: 1141: 943: 802: 671: 658: 412: 280: 44: 8: 1136: 1074: 886: 866: 852: 584: 452: 447: 953: 906: 876: 822: 681: 580: 472: 356: 328: 225: 70: 1109: 1001: 856: 832: 772: 739: 701: 686: 625: 318: 259: 178: 991: 923: 787: 528: 332: 310: 229: 217: 170: 85:
provide the tools to design and implement DSLs and language-oriented programming.
1041: 915: 781: 482: 314: 174: 69:
were designed to support language-oriented programming from the ground up. Other
1093: 749: 615: 375:
The system used the very same Top Down Parsing Language algorithm that powered
1226: 1079: 74: 961: 252:
Building Better Applications: a Theory of Efficient Software Development
309:. Lecture Notes in Computer Science. Vol. 8225. pp. 197–217. 99: 376: 281:"Language Workbenches: The Killer-App for Domain Specific Languages?" 66: 221: 411: 203: 78: 302: 82: 357:
Language Oriented Programming: The Next Programming Paradigm
165:
Pickering, Robert (2010). "Language-Oriented Programming".
359:
Sergey Dmitriev's paper that further explored the topic.
1224: 199: 197: 303:"The State of the Art in Language Workbenches" 397: 194: 404: 390: 468:Programming in the large and in the small 369:Language Oriented Programming in MetaLisp 164: 272: 249: 1225: 300: 278: 169:. Berkeley: Apress. pp. 327–349. 385: 294: 206:"A Programmable Programming Language" 132: 130: 27:, the programmer creates one or more 25:general-purpose programming languages 139: 13: 127: 14: 1244: 350: 1012:Partitioned global address space 256:International Thomson Publishing 48:requirements. It is not assumed 373:thesis 1992 University of Leeds 279:Fowler, Martin (12 June 2005). 142:"Language-Oriented Programming" 243: 56: 1: 307:Software Language Engineering 146:Software - Concepts and Tools 120: 33:Language Oriented Programming 17:Language-oriented programming 539:Uniform Function Call Syntax 315:10.1007/978-3-319-02654-1_11 175:10.1007/978-1-4302-2390-0_12 95:Grammar-oriented programming 7: 1007:Parallel programming models 981:Concurrent constraint logic 88: 63:Racket programming language 10: 1249: 1100:Metalinguistic abstraction 967:Automatic mutual exclusion 301:Erdweg, Sebastian (2013). 38: 1155: 1040: 972:Choreographic programming 942: 758: 700: 657: 560: 551: 491: 433: 424: 210:Communications of the ACM 29:domain-specific languages 1022:Relativistic programming 105:Domain-specific language 115:Intentional programming 1032:Structured concurrency 417:Comparison by language 110:Extensible programming 1233:Programming paradigms 997:Multitier programming 813:Interface description 413:Programming paradigms 140:Ward, Martin (1994). 1137:Self-modifying code 745:Probabilistic logic 676:Functional reactive 631:Expression-oriented 585:Partial application 1050:Attribute-oriented 823:List comprehension 768:Algebraic modeling 581:Anonymous function 473:Design by contract 443:Jackson structures 71:language workbench 1220: 1219: 1110:Program synthesis 1002:Organic computing 938: 937: 843:Non-English-based 818:Language-oriented 596:Purely functional 547: 546: 324:978-3-319-02653-4 250:Dunlavey (1994). 184:978-1-4302-2389-4 1240: 1122:by demonstration 1027:Service-oriented 1017:Process-oriented 992:Macroprogramming 977:Concurrent logic 848:Page description 838:Natural language 808:Grammar-oriented 735:Nondeterministic 724:Constraint logic 626:Point-free style 621:Functional logic 558: 557: 529:Immutable object 448:Block-structured 431: 430: 406: 399: 392: 383: 382: 344: 343: 341: 339: 298: 292: 291: 289: 287: 276: 270: 269: 247: 241: 240: 238: 236: 201: 192: 188: 161: 159: 157: 134: 1248: 1247: 1243: 1242: 1241: 1239: 1238: 1237: 1223: 1222: 1221: 1216: 1158: 1151: 1042:Metaprogramming 1036: 952: 947: 934: 916:Graph rewriting 754: 730:Inductive logic 710:Abductive logic 696: 653: 616:Dependent types 564: 543: 515:Prototype-based 495: 493:Object-oriented 487: 483:Nested function 478:Invariant-based 420: 410: 353: 348: 347: 337: 335: 325: 299: 295: 285: 283: 277: 273: 266: 248: 244: 234: 232: 222:10.1145/3127323 202: 195: 191: 185: 155: 153: 135: 128: 123: 91: 59: 41: 12: 11: 5: 1246: 1236: 1235: 1218: 1217: 1215: 1214: 1209: 1204: 1199: 1194: 1189: 1184: 1179: 1174: 1169: 1163: 1161: 1153: 1152: 1150: 1149: 1144: 1139: 1134: 1129: 1107: 1102: 1097: 1087: 1082: 1077: 1072: 1067: 1062: 1052: 1046: 1044: 1038: 1037: 1035: 1034: 1029: 1024: 1019: 1014: 1009: 1004: 999: 994: 989: 984: 974: 969: 964: 958: 956: 940: 939: 936: 935: 933: 932: 927: 912:Transformation 909: 904: 899: 894: 889: 884: 879: 874: 869: 864: 859: 850: 845: 840: 835: 830: 825: 820: 815: 810: 805: 800: 798:Differentiable 795: 785: 778:Automata-based 775: 770: 764: 762: 756: 755: 753: 752: 747: 742: 737: 732: 727: 717: 712: 706: 704: 698: 697: 695: 694: 689: 684: 679: 669: 663: 661: 655: 654: 652: 651: 645:Function-level 642: 633: 628: 623: 618: 613: 608: 603: 598: 593: 588: 578: 572: 570: 555: 549: 548: 545: 544: 542: 541: 536: 531: 526: 521: 507: 505: 489: 488: 486: 485: 480: 475: 470: 465: 460: 458:Non-structured 455: 450: 445: 439: 437: 428: 422: 421: 409: 408: 401: 394: 386: 380: 379: 371:Gyuri Lajos's 366: 360: 352: 351:External links 349: 346: 345: 323: 293: 271: 264: 242: 193: 190: 189: 183: 162: 136: 125: 124: 122: 119: 118: 117: 112: 107: 102: 97: 90: 87: 73:tools such as 58: 55: 40: 37: 9: 6: 4: 3: 2: 1245: 1234: 1231: 1230: 1228: 1213: 1210: 1208: 1205: 1203: 1200: 1198: 1195: 1193: 1190: 1188: 1185: 1183: 1182:Data-oriented 1180: 1178: 1175: 1173: 1170: 1168: 1165: 1164: 1162: 1160: 1154: 1148: 1145: 1143: 1140: 1138: 1135: 1133: 1130: 1127: 1123: 1119: 1115: 1111: 1108: 1106: 1103: 1101: 1098: 1095: 1091: 1088: 1086: 1083: 1081: 1080:Homoiconicity 1078: 1076: 1073: 1071: 1068: 1066: 1063: 1060: 1056: 1053: 1051: 1048: 1047: 1045: 1043: 1039: 1033: 1030: 1028: 1025: 1023: 1020: 1018: 1015: 1013: 1010: 1008: 1005: 1003: 1000: 998: 995: 993: 990: 988: 987:Concurrent OO 985: 982: 978: 975: 973: 970: 968: 965: 963: 960: 959: 957: 955: 950: 945: 941: 931: 928: 925: 921: 917: 913: 910: 908: 905: 903: 900: 898: 895: 893: 890: 888: 885: 883: 882:Set-theoretic 880: 878: 875: 873: 870: 868: 865: 863: 862:Probabilistic 860: 858: 854: 851: 849: 846: 844: 841: 839: 836: 834: 831: 829: 826: 824: 821: 819: 816: 814: 811: 809: 806: 804: 801: 799: 796: 793: 789: 786: 783: 779: 776: 774: 771: 769: 766: 765: 763: 761: 757: 751: 748: 746: 743: 741: 738: 736: 733: 731: 728: 725: 721: 718: 716: 713: 711: 708: 707: 705: 703: 699: 693: 690: 688: 685: 683: 680: 677: 673: 670: 668: 665: 664: 662: 660: 656: 650: 646: 643: 641: 640:Concatenative 637: 634: 632: 629: 627: 624: 622: 619: 617: 614: 612: 609: 607: 604: 602: 599: 597: 594: 592: 589: 586: 582: 579: 577: 574: 573: 571: 568: 563: 559: 556: 554: 550: 540: 537: 535: 532: 530: 527: 525: 522: 520: 516: 512: 509: 508: 506: 503: 499: 494: 490: 484: 481: 479: 476: 474: 471: 469: 466: 464: 461: 459: 456: 454: 451: 449: 446: 444: 441: 440: 438: 436: 432: 429: 427: 423: 418: 414: 407: 402: 400: 395: 393: 388: 387: 384: 378: 374: 370: 367: 364: 361: 358: 355: 354: 334: 330: 326: 320: 316: 312: 308: 304: 297: 282: 275: 267: 265:0-442-01740-5 261: 257: 253: 246: 231: 227: 223: 219: 215: 211: 207: 200: 198: 186: 180: 176: 172: 168: 163: 151: 147: 143: 138: 137: 133: 131: 126: 116: 113: 111: 108: 106: 103: 101: 98: 96: 93: 92: 86: 84: 80: 76: 75:JetBrains MPS 72: 68: 64: 54: 51: 46: 36: 34: 30: 26: 22: 18: 1187:Event-driven 817: 591:Higher-order 519:Object-based 336:. Retrieved 306: 296: 284:. Retrieved 274: 251: 245: 233:. Retrieved 216:(3): 62–71. 213: 209: 167:Beginning F# 166: 154:. Retrieved 152:(4): 147–161 149: 145: 60: 49: 42: 32: 20: 16: 15: 1197:Intentional 1177:Data-driven 1159:of concerns 1118:Inferential 1105:Multi-stage 1085:Interactive 962:Actor-based 949:distributed 892:Stack-based 692:Synchronous 649:Value-level 636:Applicative 553:Declarative 511:Class-based 57:Development 1172:Components 1157:Separation 1132:Reflective 1126:by example 1070:Extensible 944:Concurrent 920:Production 907:Templating 887:Simulation 872:Scientific 792:Spacecraft 720:Constraint 715:Answer set 667:Flow-based 567:comparison 562:Functional 534:Persistent 498:comparison 463:Procedural 435:Structured 426:Imperative 121:References 100:Dialecting 45:isomorphic 1059:Inductive 1055:Automatic 877:Scripting 576:Recursive 377:Tree-Meta 67:RascalMPL 1227:Category 1212:Subjects 1202:Literate 1192:Features 1147:Template 1142:Symbolic 1114:Bayesian 1094:Hygienic 954:parallel 833:Modeling 828:Low-code 803:End-user 740:Ontology 672:Reactive 659:Dataflow 286:14 April 89:See also 50:a-priori 1167:Aspects 1075:Generic 1065:Dynamic 924:Pattern 902:Tactile 867:Quantum 857:filters 788:Command 687:Streams 682:Signals 453:Modular 333:5234848 230:3887010 79:Kermeta 39:Concept 930:Visual 897:System 782:Action 606:Strict 338:4 July 331:  321:  262:  235:15 May 228:  181:  156:15 May 1207:Roles 1090:Macro 853:Pipes 773:Array 750:Query 702:Logic 611:GADTs 601:Total 524:Agent 329:S2CID 226:S2CID 83:Xtext 81:, or 855:and 502:list 340:2023 319:ISBN 288:2015 260:ISBN 237:2019 179:ISBN 158:2019 65:and 61:The 760:DSL 311:doi 218:doi 171:doi 21:LOP 1229:: 1124:, 1120:, 1116:, 922:, 918:, 647:, 638:, 517:, 513:, 500:, 327:. 317:. 305:. 258:. 254:. 224:. 214:61 212:. 208:. 196:^ 177:. 150:15 148:. 144:. 129:^ 77:, 35:. 1128:) 1112:( 1096:) 1092:( 1061:) 1057:( 983:) 979:( 951:, 946:, 926:) 914:( 794:) 790:( 784:) 780:( 726:) 722:( 678:) 674:( 587:) 583:( 569:) 565:( 504:) 496:( 419:) 415:( 405:e 398:t 391:v 342:. 313:: 290:. 268:. 239:. 220:: 187:. 173:: 160:. 19:(

Index

general-purpose programming languages
domain-specific languages
isomorphic
Racket programming language
RascalMPL
language workbench
JetBrains MPS
Kermeta
Xtext
Grammar-oriented programming
Dialecting
Domain-specific language
Extensible programming
Intentional programming


"Language-Oriented Programming"
doi
10.1007/978-1-4302-2390-0_12
ISBN
978-1-4302-2389-4


"A Programmable Programming Language"
doi
10.1145/3127323
S2CID
3887010
International Thomson Publishing
ISBN

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