Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / localhost / LanguageChanges
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta name="generator" content="AsciiDoc 8.6.9">
6 <title>LanguageChanges</title>
7 <link rel="stylesheet" href="./asciidoc.css" type="text/css">
8 <link rel="stylesheet" href="./pygments.css" type="text/css">
9
10
11 <script type="text/javascript" src="./asciidoc.js"></script>
12 <script type="text/javascript">
13 /*<![CDATA[*/
14 asciidoc.install();
15 /*]]>*/
16 </script>
17 <link rel="stylesheet" href="./mlton.css" type="text/css">
18 </head>
19 <body class="article">
20 <div id="banner">
21 <div id="banner-home">
22 <a href="./Home">MLton 20180207</a>
23 </div>
24 </div>
25 <div id="header">
26 <h1>LanguageChanges</h1>
27 </div>
28 <div id="content">
29 <div id="preamble">
30 <div class="sectionbody">
31 <div class="paragraph"><p>We are sometimes asked to modify MLton to change the language it
32 compiles. In short, we are conservative about making such changes.
33 There are a number of reasons for this.</p></div>
34 <div class="ulist"><ul>
35 <li>
36 <p>
37 <a href="DefinitionOfStandardML">The Definition of Standard ML</a> is an
38 extremely high standard of specification. The value of the Definition
39 would be significantly diluted by changes that are not specified at an
40 equally high level, and the dilution increases with the complexity of
41 the language change and its interaction with other language features.
42 </p>
43 </li>
44 <li>
45 <p>
46 The SML community is small and there are a number of
47 <a href="StandardMLImplementations">SML implementations</a>. Without an
48 agreed-upon standard, it becomes very difficult to port programs
49 between compilers, and the community would be balkanized.
50 </p>
51 </li>
52 <li>
53 <p>
54 Our main goal is to enable programmers to be as effective as
55 possible with MLton/SML. There are a number of improvements other
56 than language changes that we could spend our time on that would
57 provide more benefit to programmers.
58 </p>
59 </li>
60 <li>
61 <p>
62 The more the language that MLton compiles changes over time, the
63 more difficult it is to use MLton as a stable platform for serious
64 program development.
65 </p>
66 </li>
67 </ul></div>
68 <div class="paragraph"><p>Despite these drawbacks, we have extended SML in a couple of cases.</p></div>
69 <div class="ulist"><ul>
70 <li>
71 <p>
72 <a href="ForeignFunctionInterface"> Foreign function interface</a>
73 </p>
74 </li>
75 <li>
76 <p>
77 <a href="MLBasis"> ML Basis system</a>
78 </p>
79 </li>
80 <li>
81 <p>
82 <a href="SuccessorML"> Successor ML features</a>
83 </p>
84 </li>
85 </ul></div>
86 <div class="paragraph"><p>We allow these language extensions because they provide functionality
87 that is impossible to achieve without them or have non-trivial
88 community support. The Definition does not define a foreign function
89 interface. So, we must either extend the language or greatly restrict
90 the class of programs that can be written. Similarly, the Definition
91 does not provide a mechanism for namespace control at the module
92 level, making it impossible to deliver packaged libraries and have a
93 hope of users using them without name clashes. The ML Basis system
94 addresses this problem. We have also provided a formal specification
95 of the ML Basis system at the level of the Definition.</p></div>
96 </div>
97 </div>
98 <div class="sect1">
99 <h2 id="_also_see">Also see</h2>
100 <div class="sectionbody">
101 <div class="ulist"><ul>
102 <li>
103 <p>
104 <a href="http://www.mlton.org/pipermail/mlton/2004-August/016165.html">http://www.mlton.org/pipermail/mlton/2004-August/016165.html</a>
105 </p>
106 </li>
107 <li>
108 <p>
109 <a href="http://www.mlton.org/pipermail/mlton-user/2004-December/000320.html">http://www.mlton.org/pipermail/mlton-user/2004-December/000320.html</a>
110 </p>
111 </li>
112 </ul></div>
113 </div>
114 </div>
115 </div>
116 <div id="footnotes"><hr></div>
117 <div id="footer">
118 <div id="footer-text">
119 </div>
120 <div id="footer-badges">
121 </div>
122 </div>
123 </body>
124 </html>