<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Occam</id>
	<title>Occam - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Occam"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Occam&amp;action=history"/>
	<updated>2026-07-16T06:20:08Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Occam&amp;diff=2191696&amp;oldid=prev</id>
		<title>imported&gt;Yumeto：​使用DisamAssist清理消歧義連結：Go（改連結至Go語言）。</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Occam&amp;diff=2191696&amp;oldid=prev"/>
		<updated>2026-03-02T15:22:31Z</updated>

		<summary type="html">&lt;p&gt;使用&lt;a href=&quot;/index.php?title=User:Peacearth/DisamAssist.js&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Peacearth/DisamAssist.js（页面不存在）&quot;&gt;DisamAssist&lt;/a&gt;清理&lt;a href=&quot;/index.php?title=WP:DAB&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:DAB（页面不存在）&quot;&gt;消歧義&lt;/a&gt;連結：&lt;a href=&quot;/wiki/Go&quot; title=&quot;Go&quot;&gt;Go&lt;/a&gt;（改連結至&lt;a href=&quot;/wiki/Go%E8%AA%9E%E8%A8%80&quot; title=&quot;Go語言&quot;&gt;Go語言&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{distinguish|OCaml}}&lt;br /&gt;
{{lowercase title|occam}}{{NoteTA|G1=IT}}&lt;br /&gt;
{{Infobox programming language&lt;br /&gt;
| name = occam&lt;br /&gt;
| logo = File:1983 1988 Trademark occam and occam 2 INMOS Limited.jpg&lt;br /&gt;
| logo size = 200px&lt;br /&gt;
| paradigm = [[指令式编程|指令式]], [[过程式编程|过程式]], [[并发计算|并发]]&lt;br /&gt;
| designer = {{le|David May|David May (computer scientist)||David May}}&lt;br /&gt;
| developer = {{le|Inmos}}&lt;br /&gt;
| released = {{Start date and age|1983}}&lt;br /&gt;
| latest release version = 2.1 (官方), 2.5 (非官方), 3 (不完全实现)&lt;br /&gt;
| latest release date = {{Start date and age|1994}}&lt;br /&gt;
| typing = &lt;br /&gt;
| implementations = &lt;br /&gt;
| dialects = {{le|occam-π}}&lt;br /&gt;
| influenced by = [[通信顺序进程]]&lt;br /&gt;
| influenced = {{le|Ease|Ease (programming language)}}, [[Go語言|Go]], [[Handel-C]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;occam&amp;#039;&amp;#039;&amp;#039;，一種[[并发计算|并发]]程式語言，主要基於[[通信顺序进程]]的[[进程演算|程式代數]]&amp;lt;ref name=&amp;quot;oc21refman&amp;quot;&amp;gt;{{cite book |author=&amp;lt;!--Must be person--&amp;gt; |author-link=Inmos |url=http://www.wotug.org/occam/documentation/oc21refman.pdf |title=occam 2.1 Reference Manual |publisher=SGS-Thomson Microelectronics Ltd |date=1995-05-12 |access-date=2020-05-05 |archive-date=2020-08-01 |archive-url=https://web.archive.org/web/20200801234838/http://www.wotug.org/occam/documentation/oc21refman.pdf |dead-url=no }} Inmos document 72 occ 45 03&amp;lt;/ref&amp;gt;，以及它的許多特色而實作。它的名稱來自於[[奥卡姆的威廉]]提出的[[奥卡姆剃刀]]（Occam&amp;#039;s razor）原則。&lt;br /&gt;
&lt;br /&gt;
occam是一種類似於Pascal的[[指令式編程|指令式]][[过程式编程|过程式]][[編程語言]]。這個語言於1983年出現，由英國計算機科學家{{le|David May|David May (computer scientist)||David May}}，以及{{le|Inmos}}公司的科學家，在[[東尼·霍爾]]提供顧問意見後，共同研發而成。&lt;br /&gt;
&lt;br /&gt;
==概述==&lt;br /&gt;
在下列例子中，缩进和格式对于分析代码是关键性的：表达式以行结束来终止，表达式的列表需要在缩进的相同水平上。这个特征叫做[[越位规则]]，也能在其他语言比如[[Haskell]]和[[Python]]中见到。occam有指令式语言的基本要素和常规构造：变量，数据类型，表达式，条件构造&amp;lt;code&amp;gt;IF&amp;lt;/code&amp;gt;，选择构造&amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;，重复构造&amp;lt;code&amp;gt;WHILE&amp;lt;/code&amp;gt;，作为命名进程的[[子程序|过程]]，和作为值过程的[[函数]]，过程不可以[[递归]]。&lt;br /&gt;
&lt;br /&gt;
在进程之间的通信使用命名的[[通道 (编程)|通道]]完成的。通道是有类型的，定义了两个进程间的[[通信协议]]，可以作为参数传递给过程，可以建立通道的[[阵列]]。一个进程通过&amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;向一个通道输出数据，而另一个进程用&amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;从它输入数据。输入和输出不能进行，直到另一端已经准备好接受或提供数据。进程在不能进行的情况下，经常称呼为它[[阻塞 (计算)|阻塞]]在这个通道之上，它不会阻塞其他独立进程的运行。阻塞行为不会是自旋（spin）或轮询（poll），而会是其他机制如等待（wait）、挂起（hang）或让位（yield）。下举一例，其中&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;是变量：&lt;br /&gt;
&lt;br /&gt;
  keyboard ? c&lt;br /&gt;
  screen ! c&lt;br /&gt;
&lt;br /&gt;
occam还有对应[[通信顺序进程]]的如下构造和机制：&lt;br /&gt;
&lt;br /&gt;
===顺序===&lt;br /&gt;
&amp;lt;code&amp;gt;SEQ&amp;lt;/code&amp;gt; 顺序构造，介入要被顺序求值的表达式的一个列表。顺序执行不是隐含的，大多数其他语言无这种显式构造。例如：&lt;br /&gt;
&lt;br /&gt;
  SEQ&lt;br /&gt;
    x := x + 1&lt;br /&gt;
    y := x * x&lt;br /&gt;
&lt;br /&gt;
===交替===&lt;br /&gt;
&amp;lt;code&amp;gt;ALT&amp;lt;/code&amp;gt;{{le|交替 (形式语言理论)|Alternation (formal language theory)|交替}}（alternation）构造，指定有守卫的命令的一个列表。[[卫语句|守卫]]（guard）起源于[[Edsger W. Dijkstra]]在1976年提出的[[守卫命令语言]]&amp;lt;ref&amp;gt;Edsger W. Dijkstra, [https://dl.acm.org/doi/10.1145/360933.360975 Guarded commands, nondeterminacy and formal derivation of programs.] {{Wayback|url=https://dl.acm.org/doi/10.1145/360933.360975 |date=20220414134708 }} August 1975. Communications of the ACM.&amp;lt;br /&amp;gt;{{cite book |first=Edsger W. |last=Dijkstra |title=A Discipline of Programming |url=https://archive.org/details/disciplineofprog0000dijk |publisher=Prentice Hall |location= |year=1976 |isbn=978-0132158718 }}&amp;lt;/ref&amp;gt;，是一个布尔条件和一个输入表达式的组合（二者都是可选的）。其条件为真并且输入通道已经就绪的守卫是成功的。选择一个成功的交替者（alternative）来执行，如果没有成功者则等待；如果有多个成功，语言不明确规定会执行其中哪一个，这不同于选择构造。例如：&lt;br /&gt;
&lt;br /&gt;
  ALT&lt;br /&gt;
    count1 &amp;lt; 100 &amp;amp; c1 ? data&lt;br /&gt;
      SEQ&lt;br /&gt;
        count1 := count1 + 1&lt;br /&gt;
        merged ! data&lt;br /&gt;
    count2 &amp;lt; 100 &amp;amp; c2 ? data&lt;br /&gt;
      SEQ&lt;br /&gt;
        count2 := count2 + 1&lt;br /&gt;
        merged ! data&lt;br /&gt;
    status ? request&lt;br /&gt;
      SEQ&lt;br /&gt;
        out ! count1&lt;br /&gt;
        out ! count2&lt;br /&gt;
&lt;br /&gt;
它将从通道&amp;lt;code&amp;gt;c1&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;c2&amp;lt;/code&amp;gt;读取数据（哪个就绪了都行）并把它传递到叫作&amp;lt;code&amp;gt;merged&amp;lt;/code&amp;gt;的通道。如果&amp;lt;code&amp;gt;countN&amp;lt;/code&amp;gt;达到&amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;，从对应通道的读取将停用。在叫作状态的通道读取要求，将通过输出这些计数来回答。&lt;br /&gt;
&lt;br /&gt;
===并行===&lt;br /&gt;
&amp;lt;code&amp;gt;PAR&amp;lt;/code&amp;gt; 并行（parallel）构造，开始一个可以被并发（concurrent）求值的表达式的列表。并行构造可溯源至[[Edsger W. Dijkstra]]在1965年提出的“协同顺序进程”（cooperating sequential processes）&amp;lt;ref&amp;gt;Edsger W. Dijkstra, [https://dl.acm.org/doi/10.1145/360933.360975 Cooperating sequential processes] {{Wayback|url=https://dl.acm.org/doi/10.1145/360933.360975 |date=20220414134708 }}.January 1965.Technical Report EWD-123.&amp;lt;/ref&amp;gt;，例如：&lt;br /&gt;
&lt;br /&gt;
  PAR&lt;br /&gt;
    p()&lt;br /&gt;
    q()&lt;br /&gt;
&lt;br /&gt;
===复制===&lt;br /&gt;
构造&amp;lt;code&amp;gt;SEQ&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;IF&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;ALT&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;PAR&amp;lt;/code&amp;gt;，都是可以通过&amp;lt;code&amp;gt;FOR&amp;lt;/code&amp;gt;{{le|复制 (计算)|Replication (computing)|复制}}的（replicated）。复制的&amp;lt;code&amp;gt;PAR&amp;lt;/code&amp;gt;的例子：&lt;br /&gt;
&lt;br /&gt;
  PAR&lt;br /&gt;
    farmer()&lt;br /&gt;
    PAR i = 0 FOR 4&lt;br /&gt;
      worker(i)&lt;br /&gt;
&lt;br /&gt;
它产生5个并发的求值，等价于：&lt;br /&gt;
&lt;br /&gt;
  PAR&lt;br /&gt;
    farmer()&lt;br /&gt;
    PAR&lt;br /&gt;
      worker(0)&lt;br /&gt;
      worker(1)&lt;br /&gt;
      worker(2)&lt;br /&gt;
      worker(3)&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*{{le|occam-π}}&amp;lt;ref name=&amp;quot;kroc&amp;quot;&amp;gt;{{cite web |url=http://www.cs.kent.ac.uk/projects/ofa/kroc/ |title=occam-pi: Blending the best of CSP and the pi-calculus |last1=Barnes |first1=Fred |last2=Welch |first2=Peter |date=2006-01-14 |access-date=2006-11-24}}&amp;lt;/ref&amp;gt;，是[[肯特大学|Kent]]可重定目标occam编译器（{{le|KRoC}}）的后期版本所实现的occam变体的共用名字。这个名字反映了将[[π-演算]]运算介入到occam，特别是涉及到[[移动主体]]（进程）和数据的概念。&lt;br /&gt;
*[[Handel-C]]&lt;br /&gt;
*[[并发计算#並行性程式語言|并发编程语言]]&lt;br /&gt;
&lt;br /&gt;
==引用==&lt;br /&gt;
{{Reflist|2}}&lt;br /&gt;
&lt;br /&gt;
==延伸阅读==&lt;br /&gt;
*{{cite book |last1=Roscoe |first1=Andrew William |author-link1=Bill Roscoe |last2=Hoare |first2=Charles Antony Richard |author-link2=Tony Hoare |title=The Laws of Occam Programming |year=1986 |publisher=Programming Research Group, Oxford University |url=https://www.sciencedirect.com/science/article/pii/0304397588900497 |access-date=2020-05-05 |archive-date=2012-12-07 |archive-url=https://web.archive.org/web/20121207213443/http://www.sciencedirect.com/science/article/pii/0304397588900497 |dead-url=no |quote=Abstract. One of the attractive features of occam is the large number of memorable algebraic laws which exist relating programs. We investigate these laws and, by discovering a normal form for WHILE-free programs, show that they completely characterise the language&amp;#039;s semantics.}}&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://www.wotug.org/occam/ Information, compilers, editors and utilities at the WoTUG occam pages]{{Wayback|url=http://www.wotug.org/occam/ |date=20190915072724 }}&lt;br /&gt;
* [http://www.wotug.org/parallel/occam/ Compilers, documentation, examples, projects and utilities at the Internet Parallel Computing Archive]{{Wayback|url=http://www.wotug.org/parallel/occam/ |date=20190915045059 }} (no longer maintained)&lt;br /&gt;
* [http://www.transputer.net/obooks/obooks.asp Occam books on Transputer.net]{{Wayback|url=http://www.transputer.net/obooks/obooks.asp |date=20200206144954 }}&lt;br /&gt;
* [http://www.cs.kent.ac.uk/projects/ofa/kroc/ The occam-pi language]{{Wayback|url=http://www.cs.kent.ac.uk/projects/ofa/kroc/ |date=20200715050231 }}.&lt;br /&gt;
* [http://projects.cs.kent.ac.uk/projects/tock/trac/ Tock occam compiler]{{Wayback|url=http://projects.cs.kent.ac.uk/projects/tock/trac/ |date=20090924060319 }} – (translator from occam to C from Kent) a Haskell-based compiler for occam and related languages.&lt;br /&gt;
&lt;br /&gt;
{{FOLDOC}}&lt;br /&gt;
{{程序设计语言}}&lt;br /&gt;
[[Category:并发编程语言]]&lt;br /&gt;
[[Category:过程式编程语言]]&lt;br /&gt;
[[Category:1983年建立的程式語言]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Yumeto</name></author>
	</entry>
</feed>