﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Aim &amp; Action-最新评论</title><link>http://www.cnblogs.com/Jifangliang/CommentsRSS.aspx</link><description>Ready To Rock! Coming, and Coming, and Coming, and Coming…… </description><language>zh-cn</language><pubDate>Tue, 05 Aug 2008 01:38:01 GMT</pubDate><lastBuildDate>Tue, 05 Aug 2008 01:38:01 GMT</lastBuildDate><generator>cnblogs</generator><item><title>Re:函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2009/08/20/1260602.html#1620930</link><dc:creator>Jaxu</dc:creator><author>Jaxu</author><pubDate>Thu, 20 Aug 2009 08:18:08 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2009/08/20/1260602.html#1620930</guid><description><![CDATA[讲得不错，收藏了！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">Jaxu</a> 2009-08-20 16:18 <a href="http://www.cnblogs.com/Jifangliang/archive/2009/08/20/1260602.html#1620930#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2009/08/06/1260602.html#1607459</link><dc:creator>鞠文广</dc:creator><author>鞠文广</author><pubDate>Thu, 06 Aug 2009 07:16:46 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2009/08/06/1260602.html#1607459</guid><description><![CDATA[理想的编程语言  鞠文广

以下纯粹是个人观点, 不代表任何组织或社团.

现在流行的编程语言如Java和C#, 大多是面向对象的, 程序的各部分是通过方法调用连在一起, 其编程范式是命令编程, 即使支持其他范式也包装得很难理解和使用. 

面向对象实际上只适合实现抽象数据类型, 让它去完成除此之外的任务确实是勉为其难, 即便能完成也给人不伦不类的感觉, 既不像面向对象编程, 也不像它的前任(过程编程). 这些语言中的对象与物质世界的物质(或对象)很不一致, 它使用方法调用的方式与其他对象进行相互作用, 而这与物质之间的(通过通信或媒介)相互作用是截然不同的, 因此用面向对象无法很确切地模拟现实世界(面向对象思想的初衷), 更不用说准确地为现实世界建立模型. 

这几年流行的web服务和SOA虽使程序间交互更方便, 但它从本质上说还是使用”面向对象+命令编程+方法调用”的思路, 在编程方法论上并没有实质的进步.

用现在流行的语言实现的完成复杂功能的程序逻辑不清晰, 原因在于”命令编程+方法调用”的设计机制. 这使程序很难模块化, 副作用无所不在, 因此很难正确实现复杂功能. 

现实世界的发展变化是通过事物间的相互作用实现的, 而这种相互作用用计算机科学的语言来说就是并发(concurrency). 软件的本质是什么? 我觉得:软件总是完成某种功能的,归根到底是对现实世界的事物间相互作用进行建模. 因此软件的组成部分间自然就是并发的关系, 而不是过程调用的关系. 用通信进程来对现实世界的事物间相互作用进行建模是比较合理的. 所以进程应该作为语言的基础成分, 是软件的基本组成部分, 而不是只为了提高效率才采用的. 

为了使程序能准确地为现实世界建立模型, 从而正确性更高, 结构更合理, 模块化程度更高, 因此在几种编程思想或语言的基础上(见references), 我提出一种新的编程方法论: 面向进程+函数编程+进程间通信+逻辑编程+约束编程+其他合理的范式(命令编程除外)和一门编程语言ProcessLog (全称process logic).

ProcessLog只支持一种并发:通信进程. 它就是计算机科学家在上世纪70年代为了克服现在的Java中仍采用的那种并发方式的缺点而提出的. 它是经过充分研究得到的一种理想并发方式, 看了并发理论(concurrency)和进程代数(Process algebra), 就会明白这种并发方式可解决实际中的各种并发问题, 用它足够了. 

这里的进程是进程代数的进程,不是过程,也不是Java中的线程. 看看jcsp或Hoare的CSP(http://www.usingcsp.com/)就明白了.推荐网址:
http://www.cs.kent.ac.uk/projects/ofa/jcsp/,
其中有两个ppt说得很明白:
&quot;Process Oriented Design for Java: Concurrency for All&quot;, 
&quot;Communicating Processes, Components and Scaleable Systems&quot;.

ProcessLog的语法概要如下:

1 运算符 
(1)  ?  输入;  c ? x 从输入端口c或通道c上接收输入值放到变量x中
(2)  !  输出;  c ! v 把v的值从输出端口或通道c上输出
(3)  -&gt;  顺序进行的事件的先后关系
(4)  | b : s  分支
(5)  ||  进程并行
(6)  //  附属进程
(7)  and, or, not 逻辑运算符
(8)  算术运算符和关系运算符  与Java中相同 

2 程序的组成成分
(1)  Unit 程序单元
(2)  Process  进程
(3)  Function  函数
(4)  Predicate 谓词
(5)  Channel 通道, 有两个端口: in 输入端口, out 输出端口
(6)  OutPort  输出端口
(7)  InPort  输入端口

3 数据结构 
(1) List (函数编程中的List类型, 对List的操作函数与函数编程中相同);
(2) Tuple 元组, 同Clean.
(3) Set 集合
没有数组

4 进程的定义	
Process p1 (OutPort pt1, InPort pt2 ){
     pt2?x  -&gt;	pt1! compute(x)  -&gt; p1
}

5 进程间相互作用
(1)  进程并行 process1( c1.out, c2.in)|| process2(c1.in, c2.out)
(2)  附属进程  (getE: getElements || getR: getReleasedVersion) // X.(in?method -&gt; getE ! method ? elems -&gt; getR ! em ? rem-&gt; … -&gt;X)

6 函数
[Function] compute(double x)=
         | x&lt;=0: x*x+3
 	| x&gt;0:  compute(x-5)* compute(x-3)  
函数只能以事件的方式在进程中使用或在其他函数中使用, 不能独立使用.

7 谓词
/* 建图 */
Predicate createGraph(t, graph):-
	addNode(t, null, ({},{}), graph1),
	getDS(t, graph1.ns, tlist),
	addList(tlist, t, graph1, graph).
/* 加节点 */
Predicate addNode(t, null, (ns, es), (ns1, es):-
	merge(ns, {t}, ns1).
Predicate addNode(t, upper, (ns, es), (ns1, es1)):-
	merge(ns, {t}, ns1),
	merge(es, {(upper, t)}, es1).

8 把谓词转换为函数
create(t)= graph
	where createGraph(t, graph)	

谓词不能独立使用也不能在进程中直接使用, 要在进程中使用需要先转换为函数.

9  程序单元: 包含进程和数据类型
Unit PmethodDAO;
interface
	Tuple Method;
	Process getLastVersion(OutPort pt1 , InPort pt2);
	…
implementation
	Method=(String id, String name, String version);
	Process getLastVersion(OutPort pt1 , InPort pt2){
		…
	}

指导原则: 程序是由通过通道通信的进程组成的. 数据处理和算法用函数编程实现, 如果函数编程不适用于要处理的问题, 就使用逻辑编程或约束编程.

ProcessLog语言限制了编程的随意性, 要求只能用进程代数+函数编程+逻辑编程的方式编程, 不允许用Java或c#的命令方式编程.

ProcessLog 现在还没有在机器上实现. 我用该语言重写了实际项目中的一些复杂代码(原是Java代码), 证实用它写的程序确实简单清晰, 有类似数学的简洁美. &quot;7 谓词&quot;就是其中一部分代码.

我的想法是: 应先在纸面上规定它的语法与语义, 再通过使用它编写一些应用程序来发现它的不足,再进而改进它, 再实践, 再改进, 直到它基本完善再在机器上实现. 另外, 大家不要把语言分为中国人提出的还是外国人提出的, 科学无国界, 这里不存在狭隘的爱国主义. 我不是那种技术高手, 但我自信我是一个能将理论很好地联系实践的研究者.

希望有识之士和我一起共同发展这种编程方法论和这门语言.

References
1. CSP  http://www.usingcsp.com/
2. JCSP  http://www.cs.kent.ac.uk/projects/ofa/jcsp/
3. Clean  http://clean.cs.ru.nl/
4. Prolog
5. Delphi

注: 转载时请注明作者.
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">鞠文广</a> 2009-08-06 15:16 <a href="http://www.cnblogs.com/Jifangliang/archive/2009/08/06/1260602.html#1607459#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2009/06/03/1260602.html#1546869</link><dc:creator>卞凯</dc:creator><author>卞凯</author><pubDate>Wed, 03 Jun 2009 08:57:32 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2009/06/03/1260602.html#1546869</guid><description><![CDATA[function ExFunc(n){<br/>	sum = n;<br/>	function InsFunc(){<br/>		return sum+1;<br/>	}<br/>	return InsFunc;<br/>}<br/>myFunc=ExFunc(10);<br/>alert(myFunc());<br/><br/>myAnotherFunc=ExFunc(20);<br/>alert(myAnotherFunc());<br/><br/>alert(myFunc());<br/>alert(myAnotherFunc());<br/><br/>但应用在哪里呢？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">卞凯</a> 2009-06-03 16:57 <a href="http://www.cnblogs.com/Jifangliang/archive/2009/06/03/1260602.html#1546869#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 函数和方法装饰漫谈(Function decorator)</title><link>http://www.cnblogs.com/Jifangliang/archive/2009/05/04/1248313.html#1518257</link><dc:creator>tfy815</dc:creator><author>tfy815</author><pubDate>Sun, 03 May 2009 16:13:10 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2009/05/04/1248313.html#1518257</guid><description><![CDATA[看了几遍，终于看懂了。谢谢～～<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">tfy815</a> 2009-05-04 00:13 <a href="http://www.cnblogs.com/Jifangliang/archive/2009/05/04/1248313.html#1518257#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/10/15/1256973.html#1340880</link><dc:creator>maming</dc:creator><author>maming</author><pubDate>Tue, 14 Oct 2008 16:25:12 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/10/15/1256973.html#1340880</guid><description><![CDATA[python不是用C写的么？。。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">maming</a> 2008-10-15 00:25 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/10/15/1256973.html#1340880#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/09/27/1260602.html#1328644</link><dc:creator>wdq4587</dc:creator><author>wdq4587</author><pubDate>Sat, 27 Sep 2008 09:48:47 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/09/27/1260602.html#1328644</guid><description><![CDATA[只会C++没用过Closure的看不太懂。闭包按C的概念是不是可以理解为没有声明的隐含的调用参数，但闭包被调用之前这些参数已经实例化，每次调用定义闭包的函数实质返回的是一个新函数，这个新函数中隐含的参数已经实例化了（不知道如果隐含参数也是函数的话是不是延迟求值？）。这有些象类的成员函数，隐含参数就是类的数据，不同的不要那么繁琐随调用随时生成，还是隐含参数。<br/><br/>另外1楼应该是 return x*y; 吧？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">wdq4587</a> 2008-09-27 17:48 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/09/27/1260602.html#1328644#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/28/1256973.html#1300236</link><dc:creator>elleryq</dc:creator><author>elleryq</author><pubDate>Thu, 28 Aug 2008 02:05:00 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/28/1256973.html#1300236</guid><description><![CDATA[c#也會擲出異常吧...<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">elleryq</a> 2008-08-28 10:05 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/28/1256973.html#1300236#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278463</link><dc:creator>无常</dc:creator><author>无常</author><pubDate>Tue, 05 Aug 2008 07:30:50 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278463</guid><description><![CDATA[        static void Main(string[] args)<br/>        {<br/>            var tt = foo(10);<br/><br/>            Console.WriteLine(&quot;{0}&quot;, tt());  // 11<br/>            Console.WriteLine(&quot;{0}&quot;, tt()); // 11<br/>            Console.WriteLine(&quot;{0}&quot;, tt()); // 11<br/>            Console.WriteLine(&quot;{0}&quot;, tt()); // 11<br/><br/>            Console.ReadLine();<br/>        }<br/><br/>        static Func&lt;int&gt; foo(int n)<br/>        {<br/>            int sum = n;<br/><br/>            Func&lt;int&gt; bar = () =&gt; { return sum + 1; };<br/><br/>            return bar;<br/>        }<br/>    }<br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">无常</a> 2008-08-05 15:30 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278463#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: API设计指南(话剧篇)</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1250538.html#1278142</link><dc:creator>NingDev</dc:creator><author>NingDev</author><pubDate>Tue, 05 Aug 2008 02:57:05 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1250538.html#1278142</guid><description><![CDATA[ 通俗易懂！谢谢楼主！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">NingDev</a> 2008-08-05 10:57 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1250538.html#1278142#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 函数编程之闭包漫谈(Closure)</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278121</link><dc:creator>Nicholas Yuen</dc:creator><author>Nicholas Yuen</author><pubDate>Tue, 05 Aug 2008 02:45:25 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278121</guid><description><![CDATA[// AS3.0<br />
function foo(): function {<br />
&nbsp; var x: int = 40;<br />
&nbsp; function funClosure(y: int): int { // define the closure<br />
&nbsp;&nbsp;&nbsp; return x*x;<br />
&nbsp; }<br />
&nbsp; return funClosure;<br />
}<br />
<br />
function bar(): void {<br />
&nbsp; x: int = 2;<br />
&nbsp; y: int = 4;<br />
&nbsp; var myFun: function = foo();<br />
&nbsp; trace(myFun(4)); // call the closure<br />
}<br />
<br />
bar(); // 160
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">Nicholas Yuen</a> 2008-08-05 10:45 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html#1278121#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: Inside IronPython: IronPython AST语法树(2/2)</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/03/1256041.html#1276205</link><dc:creator>Colin Han</dc:creator><author>Colin Han</author><pubDate>Sun, 03 Aug 2008 07:41:18 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/03/1256041.html#1276205</guid><description><![CDATA[DLR的AST上有一个Dump属性，可以将一个AST子树输出为一个字符串。用来了解AST的内容很有用。<br>没仔细看过，IronPython的AST有没有。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">Colin Han</a> 2008-08-03 15:41 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/03/1256041.html#1276205#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/08/01/1256973.html#1274503</link><dc:creator>绝世无才</dc:creator><author>绝世无才</author><pubDate>Fri, 01 Aug 2008 03:08:14 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/08/01/1256973.html#1274503</guid><description><![CDATA[不错的文章,其实不只是在这个层面要考虑,我在做医保接口的时候处理得更多是应用层面上的平衡,HIS和医保中心系统各有不同的业务流程,写代码时就要考虑某一步业务谁先谁后,业务或数据有冲突时如何取舍的问题了<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">绝世无才</a> 2008-08-01 11:08 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/08/01/1256973.html#1274503#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273924</link><dc:creator>Kevin.Ji</dc:creator><author>Kevin.Ji</author><pubDate>Thu, 31 Jul 2008 11:15:32 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273924</guid><description><![CDATA[好不容易找到个同姓（“季”）的同行<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">Kevin.Ji</a> 2008-07-31 19:15 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273924#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273525</link><dc:creator>Colin Han</dc:creator><author>Colin Han</author><pubDate>Thu, 31 Jul 2008 05:37:27 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273525</guid><description><![CDATA[呵呵，还真强大啊。只是不知道原理是什么？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">Colin Han</a> 2008-07-31 13:37 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273525#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 软件设计之道：平衡之术</title><link>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273462</link><dc:creator>季方亮</dc:creator><author>季方亮</author><pubDate>Thu, 31 Jul 2008 05:00:09 GMT</pubDate><guid>http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273462</guid><description><![CDATA[@金色海洋（jyk）<br/>IronPython是微软在.NET平台上实现的动态语言。CPython是Python的C语言实现。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jifangliang/" target="_blank">季方亮</a> 2008-07-31 13:00 <a href="http://www.cnblogs.com/Jifangliang/archive/2008/07/31/1256973.html#1273462#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>
