SML
Standard ML (SML) is a general-purpose, modular functional programming language featuring compile-time type checking, polymorphic type inference, and garbage collection, designed to promote safe and expressive software development.[1] Originating as the Meta Language (ML) in the 1970s at the University of Edinburgh for use in the LCF automated theorem prover, it evolved to address inconsistencies across early implementations and was formally standardized in 1990, with a revised definition published in 1997.[2] SML's core strengths lie in its strict evaluation semantics, support for higher-order functions with lexical scoping, pattern matching for concise data handling, and a sophisticated module system comprising structures, signatures, and parametric functors that enable abstraction and large-scale composition.[1] These elements facilitate immutable data structures by default alongside limited imperative features like mutable references and arrays, balancing purity with practicality for tasks such as symbolic computation and compiler construction.[2] Its type safety, proven formally sound, prevents common errors like null pointer dereferences or type mismatches at runtime, enhancing reliability in verification-heavy domains.[1] Notable implementations include Standard ML of New Jersey (SML/NJ), which provides an interactive environment and optimizing compiler, and MLton, focused on whole-program optimization for high performance.[1] SML's innovations in type polymorphism, modules, and exception handling have profoundly shaped subsequent languages and paradigms, underscoring its enduring role in advancing functional programming theory and practice.[3]Computing and technology
Standard ML
Standard ML (SML) is a general-purpose, statically typed functional programming language that supports modular programming through parametric modules, exception handling, and a combination of functional and imperative features. It features strong type checking at compile time, automatic polymorphic type inference, and garbage collection, making it suitable for developing reliable software in research, teaching, and industry applications. The language's design prioritizes mathematical rigor, with a formal definition providing operational semantics for both static type checking and dynamic evaluation.[4][1] SML originated from the Meta Language (ML), developed in 1973 by Robin Milner and his group at the University of Edinburgh as a proof-checking component for the LCF theorem-proving system. Early implementations, such as Edinburgh ML and Luca Cardelli's "ML under VMS" compiler released in June 1981, highlighted dialect variations, prompting standardization efforts starting with the first design meeting in April 1983, organized by Milner. Subsequent meetings in 1984 and 1985 refined the core language and module system, with David MacQueen's contributions on modules finalized in October 1985. The initial formal Definition of Standard ML was published in 1990 by MIT Press, authored by Milner, Robert Harper, and Mads Tofte, following iterative technical reports from 1986 onward. A revised definition appeared in 1997, addressing limitations in the type system (e.g., introducing the value restriction for polymorphism) and module matching, with input from MacQueen. The Standard ML Basis Library, specifying a portable standard library, was formalized in 2004 by Emden Gansner and John Reppy.[3][4] Core features of SML include:- Type system: Hindley-Milner polymorphism with inference, enabling types like
'a -> 'afor identity functions without explicit annotations; algebraic datatypes for recursive structures, such asdatatype 'a [tree](/page/Tree) = Leaf of 'a | Node of 'a [tree](/page/Tree) * 'a [tree](/page/Tree).[4] - Expressions and control: Higher-order functions, pattern matching via
caseexpressions, and imperative constructs like references (ref) and sequencing (;), balanced by referential transparency in pure functional subsets.[1] - Module system: Structures for code organization, signatures for interfaces, and functors for generic modules, e.g., a functor applying a monoid operation to containers; supports sharing and opaque/as signatures for abstraction.[4][3]
fun add x y = x + y has type int -> int -> int) and list comprehensions via library functions.[4]
Major implementations include Standard ML of New Jersey (SML/NJ), an interactive compiler with native code generation and extensions like the visible compiler for metaprogramming, started in the late 1980s at Bell Labs; MLton, a whole-program optimizing compiler producing efficient native binaries; Poly/ML, supporting multicore parallelism and POSIX threads; and others like Moscow ML and MLKit for bytecode or research use. These conform to the 1997 revision and Basis Library, ensuring portability.[1][5]
SML has influenced functional language design, notably in the module systems of OCaml and F# derivatives, and type inference in languages like Haskell; its formal semantics advanced denotational and operational models in programming language theory. Despite limited commercial adoption, it remains active in academia for theorem proving, compilers, and verification tools.[3][6]
Service Modeling Language
The Service Modeling Language (SML) is an XML-based specification designed to model complex IT services and systems by defining their structure, constraints, policies, and best practices.[7] It enables the creation of interrelated XML documents that represent IT resources such as hardware, software, applications, and services, facilitating validation and management across multi-vendor environments.[8] SML models consist of definition documents (schemas and rules) and instance documents, allowing for reusable building blocks to describe service hierarchies and dependencies.[7] Development of SML began with a public review initiated on July 31, 2006, by a consortium of technology companies including BEA Systems, BMC Software, Cisco Systems, Dell, EMC, HP, IBM, Intel, Microsoft, and Sun Microsystems.[9] The effort aimed to standardize IT resource modeling to reduce management complexity and costs, addressing inconsistencies in proprietary formats used for configuration, change management, and deployment.[9] Version 1.0 was submitted to the W3C in March 2007, with Version 1.1 advancing through candidate and proposed recommendation stages before becoming a W3C Recommendation on May 12, 2009.[7] The specification was produced by the W3C Service Modeling Language Working Group, which has since closed.[10] SML builds on XML Schema 1.0 for structural definitions and Schematron for rule-based constraints, extending XML Schema with mechanisms for cross-document references using URIs and thesmlfn:deref() function.[7] Core constructs include reference attributes like sml:ref and sml:uri for linking elements, constraint annotations such as sml:acyclic to prevent cycles and sml:targetRequired to enforce presence, and identity constraints via sml:key, sml:unique, and sml:keyref elements supporting XPath selectors.[7] These features allow models to enforce policies and relationships, such as ensuring compatibility in service compositions, while supporting localization of natural language content through standardized schemes.[7]
Validation in SML involves checking instance documents against definition models, confirming reference resolution, constraint satisfaction, and schema compliance, often using tools that process the entire model graph.[7] The Service Modeling Language Interchange Format (SML-IF), also a W3C Recommendation from May 12, 2009, provides a serialized XML format for exchanging complete SML models, including definitions, instances, and metadata, to enable interoperability between tools and systems.[11]
Following its 2009 recommendation, SML saw calls for implementations from W3C in November 2008, but documented adoption remains limited, with references primarily in academic and vendor explorations of model-based IT management rather than widespread commercial deployment.[12] The specification has been positioned as a potential successor to earlier IT modeling approaches, yet no major updates or active standards maintenance have occurred since the working group's closure.[10]