{"id":1496,"date":"2025-10-25T16:35:30","date_gmt":"2025-10-25T23:35:30","guid":{"rendered":"https:\/\/mcjones.org\/dustydecks\/?p=1496"},"modified":"2025-10-27T09:40:10","modified_gmt":"2025-10-27T16:40:10","slug":"modula-3","status":"publish","type":"post","link":"https:\/\/mcjones.org\/dustydecks\/archives\/2025\/10\/25\/1496\/","title":{"rendered":"Modula-3"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/modula3_precursors.png\" alt=\"Languages influencing Modula-3, starting with Algol 60\" style=\"width:475px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p>There&#8217;s a brand new project at the newly-refurbished <a href=\"https:\/\/softwarepreservation.computerhistory.org\">Software Preservation Group<\/a> website: the <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/\">Modula-3<\/a> programming language. Modula-3 sounds like it would have been designed by <a href=\"https:\/\/en.wikipedia.org\/wiki\/Niklaus_Wirth\">Niklaus Wirth<\/a>, but it was actually designed by a committee consisting of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Luca_Cardelli\">Luca Cardelli<\/a>, <a href=\"https:\/\/www.linkedin.com\/in\/jim-donahue-a860ba1\/\">Jim Donahue<\/a>, <a href=\"https:\/\/obituaries.paloaltoonline.com\/obituaries\/memorials\/mick-jordan?o=5158\">Mick Jordan<\/a>, <a href=\"https:\/\/dblp.org\/pid\/56\/1306.html\">Bill Kalsow<\/a>, and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Greg_Nelson_(computer_scientist)\">Greg Nelson<\/a>, and named Modula-3 with Wirth&#8217;s blessing.<\/p>\n\n\n\n<p>The diagram above, drawn by Nelson, gives an idea of its heritage. <a href=\"https:\/\/softwarepreservation.computerhistory.org\/mesa\/\">Mesa<\/a>, designed at Xerox PARC in the mid 1970s, borrowed many ideas from <a href=\"https:\/\/en.wikipedia.org\/wiki\/Pascal_(programming_language)\">Pascal<\/a>, but added modules (with interfaces called DEFINITIONS modules and a module configuration language), exceptions, and <a href=\"https:\/\/dl.acm.org\/doi\/10.1145\/358818.358824\">threads<\/a> (called processes, but they shared a single address space). Wirth spent a sabbatical at PARC, and decided to add definition modules to Modula-2. Meanwhile, PARC&#8217;s Cedar project extended Mesa with storage safety (via garbage collection) and runtime type determination. Then a core of PARC researchers followed their director <a href=\"https:\/\/en.wikipedia.org\/wiki\/Robert_Taylor_(computer_scientist)\">Bob Taylor<\/a> to establish the System Research Center (SRC) at DEC. They couldn&#8217;t take Cedar with them (it was proprietary, and ran only on exotic <a href=\"https:\/\/doi.org\/10.1145\/800046.801663\">Dorado<\/a> workstations). Another DEC lab had implemented a Modula-2 compiler, which the SRC people extended with their favorite Cedar Mesa features (exceptions, threads, garbage collection, and runtime type determination), naming the result <a href=\"https:\/\/bitsavers.org\/pdf\/dec\/tech_reports\/SRC-RR-3.pdf\">Modula-2+<\/a>. The nearby Olivetti Research Center, with other former PARC researchers, adopted this new language too. Seeing the utility of this language, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Maurice_Wilkes\">Maurice Wilkes<\/a>, retired from Cambridge but consulting at DEC and Olivetti, suggested to Wirth that Modula-2+ be revised and standardized as Modula-3. Wirth approved and the committee got to work, ultimately adding two important features, <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/archive\/DEC_SRC\/release-3.6-html\/m3defn\/html\/objects.html\">object types<\/a> and <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/archive\/DEC_SRC\/release-3.6-html\/m3defn\/html\/generics.html\">generics<\/a>; even still, the <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/archive\/DEC_SRC\/release-3.6-html\/m3defn\/html\/m3.html\">Modula-3 Report<\/a> came in at just over 50 pages.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#SRC_M3\">SRC implementation<\/a> at first generated C. Later the compiler was restructured with an interface making it fairly easy to substitute different code generators; one that used the back-end of <a href=\"https:\/\/gcc.gnu.org\">gcc<\/a> allowed widespread portability. Modula-3 adoption began spreading, facilitated by ftp to distribute source code and email and the <a href=\"https:\/\/groups.google.com\/g\/comp.lang.modula3\">comp.lang.modula3<\/a> newsgroup to share ideas and experience.<\/p>\n\n\n\n<p>Researchers at SRC switched fairly quickly from Modula-2+ to Modula-3: the former was tied to older hardware, whereas Modula-3&#8217;s portability allowed it to run on the latest DEC ALPHA workstations. <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#Apps\">Projects<\/a> included window system toolkits, algorithm animation, distributed systems, experimental programming languages, two-view and constraint-based editors, new web browsing paradigms, and program verification. Many of these projects produced <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#Libs\">libraries<\/a> that became building blocks for subsequent projects. Researchers at several universities also found it a good base for ambitious projects, including an <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#SPIN\">extensible operating system<\/a> and an <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#Coterie\">augmented reality system<\/a>. One <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#Critical_Mass\">small company<\/a> attempted to commercialize the language. An open-source developer used it to create the <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#CVSup\">system<\/a> used for many years to distribute FreeBSD source code.<\/p>\n\n\n\n<p>Then Java came along, offering similar features plus &#8220;write once, run anywhere&#8221;\u2014that plus Sun Microsystem&#8217;s marketing effort quickly eclipsed Modula-3. Even at SRC, researchers switched from Modula-3 to Java.<\/p>\n\n\n\n<p>SRC&#8217;s system had always been open source, and there were several forks, including the commercial company&#8217;s proprietary version (which was later open-sourced). Gradually the forks were merged into two alternative releases, CM3 and PM3, which are both hosted at <a href=\"https:\/\/github.com\/modula3\/\">https:\/\/github.com\/modula3\/<\/a>. CM3 will run on most modern platforms. Documentation exists, but isn&#8217;t always easy to navigate. <\/p>\n\n\n\n<p>My personal interest in Modula-3 began when I worked at SRC and helped develop some of the <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#SUM3I\">standard library interfaces<\/a> and an <a href=\"https:\/\/softwarepreservation.computerhistory.org\/modula3\/#Virtual_Paper\">application<\/a>. I hope the language will be remembered\u2014and used\u2014for many years to come.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>There&#8217;s a brand new project at the newly-refurbished Software Preservation Group website: the Modula-3 programming language. Modula-3 sounds like it would have been designed by Niklaus Wirth, but it was actually designed by a committee consisting of Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow, and Greg Nelson, and named Modula-3 with Wirth&#8217;s blessing. The &hellip; <a href=\"https:\/\/mcjones.org\/dustydecks\/archives\/2025\/10\/25\/1496\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Modula-3&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[42,41,40,39],"class_list":["post-1496","post","type-post","status-publish","format-standard","hentry","category-software-history","tag-cedar-mesa","tag-mesa","tag-modula-2","tag-modula-3"],"_links":{"self":[{"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/posts\/1496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/comments?post=1496"}],"version-history":[{"count":10,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/posts\/1496\/revisions"}],"predecessor-version":[{"id":1536,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/posts\/1496\/revisions\/1536"}],"wp:attachment":[{"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/media?parent=1496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/categories?post=1496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mcjones.org\/dustydecks\/wp-json\/wp\/v2\/tags?post=1496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}