Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Joule (programming language)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Infobox programming language |name = Joule |logo = |paradigm = [[multi-paradigm programming language|multi-paradigm]]: [[object-oriented programming|object-oriented]], [[distributed computing|distributed]], [[Dataflow]] |year = 1996 |designer = E. Dean Tribble |developer = |latest release version = |latest release date = |typing = untyped |implementations = |dialects = |influenced_by = [[Logic Programming#Concurrent logic programming|Concurrent Logic Programming]], [[Actor model|Actors]] |influenced = [[E (programming language)|E]] }} '''Joule''' is a capability-secure massively-[[concurrent programming language|concurrent]] [[dataflow programming]] language, designed for building [[distributed computing|distributed applications]].<ref>{{cite journal |last1=Miller |first1=Mark Samuel |authorlink=Mark S. Miller |title=Robust composition: towards a unified approach to access control and concurrency control |date=2006 |url=https://jscholarship.library.jhu.edu/bitstream/handle/1774.2/873/index.html |publisher=Johns Hopkins University}}</ref> It is so concurrent that the order of statements within a block is irrelevant to the operation of the block. Statements are executed whenever possible, based on their inputs. Everything in Joule happens by sending messages. There is no [[control flow]]. Instead, the programmer describes the flow of data, making it a [[dataflow programming]] language.{{cn|date=March 2021}} Joule development started in 1994 at ''Agorics'' in [[Palo Alto, California]].<ref>{{cite journal |last1=Fremont |first1=David |title=Waiting for the cyber-ax |journal=[[Spin (magazine)|Spin]] |date=October 1994 |volume=10 |issue=7 |page=88 |url=https://archive.org/details/sim_spin_1994-10_10_7/page/88/mode/2up?q=joule |language=English}}</ref> It is considered the precursor to the [[E programming language]].<ref>{{cite web |title=Related Links to Agoric Computing & Smart Contracts |url=http://erights.org/related.html |website=erights.org |quote=E's debt to Joule cannot be overstated.}}</ref><ref>{{cite web |title=The E Programmer's Manual |url=http://www.erights.org/history/original-e/programmers/index.html |publisher=Electric Communities |date=19 July 1996 |quote=The E programming language was largely inspired by the language Joule, currently being developed by Dean Tribble, Norm Hardy, and their colleagues at Agorics, Inc.}}</ref> == Language syntax == [[Numerical digit|Numerals]] consist of [[ASCII]] digits 0β9; [[identifier]]s are [[Unicode]] sequences of digits, letters, and operator characters that begin with a letter. It is also possible to form identifiers by using Unicode sequences (including whitespace) enclosed by either straight (' ') or standard (β β) single quotes, where the backslash is the escape character. [[Reserved word|Keyword]]s have to start with a letter, except the ''β’'' keyword to send information. [[Operator (computer programming)|Operators]] consist of Unicode sequences of digits, letters, and operator characters, beginning with an operator character. [[Label (computer science)|Labels]] are identifiers followed by a colon (':').<ref name="Draft95">{{cite journal | date = 20 December 2004 | title = Joule: Distributed Application Foundations: 4.2. Expressions | volume = 1 | pages = 31β33 | publisher = Agorics, Inc. | accessdate = 2012-08-29 | url = http://www.erights.org/history/joule/MANUAL.BK6.pdf }}</ref> At the root, Joule is an [[Imperative programming|imperative language]] and because of that a statement-based language. It has a rich expression syntax, which transforms easily to its relational syntax underneath. Complex expressions become separate statements, where the site of the original expression is replaced by a reference to the acceptor of the results channel. Therefore, nested expressions still compute completely concurrently with their embedding statement.<ref name="Draft95" /> If amount <= balance β’ account withdraw: amount else β’ account report-bounce: end An identifiers may name a channel to communicate with the server. If this is the case, it is said to be ''bound'' to that channel.<ref name="Draft95" /> == References == {{Reflist|2}} ==External links== * [http://www.erights.org/history/joule/ Joule: Distributed Application Foundations] * [http://c2.com/cgi/wiki?PromisePipelining C2: Promise Pipelining] <!--Categories--> [[Category:Concurrent programming languages]] [[Category:Object-oriented programming languages]] [[Category:Secure programming languages]] [[Category:Capability systems]] {{compu-lang-stub}}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Cn
(
edit
)
Template:Compu-lang-stub
(
edit
)
Template:Infobox programming language
(
edit
)
Template:Prog-lang-stub
(
edit
)
Template:R shell
(
edit
)
Template:Reflist
(
edit
)