Skip to content

Commit d46b8f1

Browse files
committed
rollup merge of #19235: bjz/reference
cc. @steveklabnik
2 parents c7dd3c4 + 144f4b8 commit d46b8f1

File tree

1 file changed

+22
-67
lines changed

1 file changed

+22
-67
lines changed

src/doc/reference.md

Lines changed: 22 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -4316,73 +4316,28 @@ fine-grained control is desired over the output format of a Rust crate.
43164316

43174317
*TODO*.
43184318

4319-
# Appendix: Influences and further references
4320-
4321-
## Influences
4322-
4323-
> The essential problem that must be solved in making a fault-tolerant
4324-
> software system is therefore that of fault-isolation. Different programmers
4325-
> will write different modules, some modules will be correct, others will have
4326-
> errors. We do not want the errors in one module to adversely affect the
4327-
> behaviour of a module which does not have any errors.
4328-
>
4329-
> — Joe Armstrong
4330-
4331-
> In our approach, all data is private to some process, and processes can
4332-
> only communicate through communications channels. *Security*, as used
4333-
> in this paper, is the property which guarantees that processes in a system
4334-
> cannot affect each other except by explicit communication.
4335-
>
4336-
> When security is absent, nothing which can be proven about a single module
4337-
> in isolation can be guaranteed to hold when that module is embedded in a
4338-
> system [...]
4339-
>
4340-
> — Robert Strom and Shaula Yemini
4341-
4342-
> Concurrent and applicative programming complement each other. The
4343-
> ability to send messages on channels provides I/O without side effects,
4344-
> while the avoidance of shared data helps keep concurrent processes from
4345-
> colliding.
4346-
>
4347-
> — Rob Pike
4348-
4349-
Rust is not a particularly original language. It may however appear unusual by
4350-
contemporary standards, as its design elements are drawn from a number of
4351-
"historical" languages that have, with a few exceptions, fallen out of favour.
4352-
Five prominent lineages contribute the most, though their influences have come
4353-
and gone during the course of Rust's development:
4354-
4355-
* The NIL (1981) and Hermes (1990) family. These languages were developed by
4356-
Robert Strom, Shaula Yemini, David Bacon and others in their group at IBM
4357-
Watson Research Center (Yorktown Heights, NY, USA).
4358-
4359-
* The Erlang (1987) language, developed by Joe Armstrong, Robert Virding, Claes
4360-
Wikström, Mike Williams and others in their group at the Ericsson Computer
4361-
Science Laboratory (Älvsjö, Stockholm, Sweden) .
4362-
4363-
* The Sather (1990) language, developed by Stephen Omohundro, Chu-Cheow Lim,
4364-
Heinz Schmidt and others in their group at The International Computer
4365-
Science Institute of the University of California, Berkeley (Berkeley, CA,
4366-
USA).
4367-
4368-
* The Newsqueak (1988), Alef (1995), and Limbo (1996) family. These
4369-
languages were developed by Rob Pike, Phil Winterbottom, Sean Dorward and
4370-
others in their group at Bell Labs Computing Sciences Research Center
4371-
(Murray Hill, NJ, USA).
4372-
4373-
* The Napier (1985) and Napier88 (1988) family. These languages were
4374-
developed by Malcolm Atkinson, Ron Morrison and others in their group at
4375-
the University of St. Andrews (St. Andrews, Fife, UK).
4376-
4377-
Additional specific influences can be seen from the following languages:
4378-
4379-
* The structural algebraic types and compilation manager of SML.
4380-
* The attribute and assembly systems of C#.
4381-
* The references and deterministic destructor system of C++.
4382-
* The memory region systems of the ML Kit and Cyclone.
4383-
* The typeclass system of Haskell.
4384-
* The lexical identifier rule of Python.
4385-
* The block syntax of Ruby.
4319+
# Appendix: Influences
4320+
4321+
Rust is not a particularly original language, with design elements coming from
4322+
a wide range of sources. Some of these are listed below (including elements
4323+
that have since been removed):
4324+
4325+
* SML, OCaml: algebraic datatypes, pattern matching, type inference,
4326+
semicolon statement separation
4327+
* C++: references, RAII, smart pointers, move semantics, monomorphisation,
4328+
memory model
4329+
* ML Kit, Cyclone: region based memory management
4330+
* Haskell (GHC): typeclasses, type families
4331+
* Newsqueak, Alef, Limbo: channels, concurrency
4332+
* Erlang: message passing, task failure, ~~linked task failure~~,
4333+
~~lightweight concurrency~~
4334+
* Swift: optional bindings
4335+
* Scheme: hygienic macros
4336+
* C#: attributes
4337+
* Ruby: ~~block syntax~~
4338+
* NIL, Hermes: ~~typestate~~
4339+
* [Unicode Annex #31](http://www.unicode.org/reports/tr31/): identifier and
4340+
pattern syntax
43864341

43874342
[ffi]: guide-ffi.html
43884343
[plugin]: guide-plugin.html

0 commit comments

Comments
 (0)