最新评论
Re:同时使用有线网上内网、无线网上外网 crossie 2012-02-10 11:11
好文!
Re:Windows消息值列表 爱让一切都对了 2011-06-15 21:33
好东西啊,十分感谢。
Re:使用eclipse打开已有项目 YaoTong 2011-02-11 14:57
Mark
Re:通过JDBC操作ORACLE数据库 tttiger 2010-12-14 17:03
恩恩,好,正在进行
Re:oracle 数据导入导出 米达 2010-03-22 15:23
谢谢,对orcle不是很熟,可急着操作,还好楼主有总结。
Re:F#:微软的下一代重量级语言 景坤 2009-12-21 11:10
谢谢。
Re:C#中,String和string的区别 dsdsds 2009-11-28 13:47
学习学习~
Re:[原创]删除重复记录的另一种方法 苏广军 2009-11-10 09:09
学习了不错啊。
Re:查看mfc源码的一个很好的导航工具 54321sb 2009-09-05 22:06
你好,我在安装VS的时候找不到mfc.bsc,能否借给小弟一用??
Re:主从表主键外键 灰包蛋儿 2009-08-11 14:25
说成垃圾
Re:Windows消息值列表 北+北 2009-08-10 10:27
顶..谢谢楼主了...
Re:函数编程(FP) 鞠文广 2009-08-06 15:47
理想的编程语言 鞠文广
以下纯粹是个人观点, 不代表任何组织或社团.
现在流行的编程语言如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说得很明白:
"Process Oriented Design for Java: Concurrency for All",
"Communicating Processes, Components and Scaleable Systems".
ProcessLog的语法概要如下:
1 运算符
(1) ? 输入; c ? x 从输入端口c或通道c上接收输入值放到变量x中
(2) ! 输出; c ! v 把v的值从输出端口或通道c上输出
(3) -> 顺序进行的事件的先后关系
(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 -> pt1! compute(x) -> p1
}
5 进程间相互作用
(1) 进程并行 process1( c1.out, c2.in)|| process2(c1.in, c2.out)
(2) 附属进程 (getE: getElements || getR: getReleasedVersion) // X.(in?method -> getE ! method ? elems -> getR ! em ? rem-> … ->X)
6 函数
[Function] compute(double x)=
| x<=0: x*x+3
| x>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代码), 证实用它写的程序确实简单清晰, 有类似数学的简洁美. "7 谓词"就是其中一部分代码.
我的想法是: 应先在纸面上规定它的语法与语义, 再通过使用它编写一些应用程序来发现它的不足,再进而改进它, 再实践, 再改进, 直到它基本完善再在机器上实现. 另外, 大家不要把语言分为中国人提出的还是外国人提出的, 科学无国界, 这里不存在狭隘的爱国主义. 我不是那种技术高手, 但我自信我是一个能将理论很好地联系实践的研究者.
希望有识之士和我一起共同发展这种编程方法论和这门语言.
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
注: 转载时请注明作者.
Re:Visual Studio 2008 中创建和调用Static Library静态链接库文件 blue1899 2009-07-23 11:06
明显是打五笔的~ 静态全成了表态
re: 代码生成工具排行榜 一剑飘 红 2009-06-08 22:04
我最近也再写一个代码生成器
re: 代码生成工具排行榜 raisun 2009-04-27 09:49
是啊,我想找一个合适的,monorail代码生成器有没有详细的介绍啊。如有请告诉我,谢谢。
re: 动态库和静态库和运行时库和引入库的区别 阿木郎 2008-12-29 22:21
编程题
2 定义并实现类Student(学生)类,要求如下
1)Student类有三个属性:姓名,年龄,学号
2)Student类提供一个无参数构造函数,和一个有参数构造函数,即:
a)Student() //用默认值设置三个属性
b)Student(CString name,int age,CString id)//用传入的参数设置三个属性
3)String getInformation( )函数,该函数的返回值中包括学生的三个属性值,
格式为:
“name: xxx age: xx id: xxxxxxx”
4)写一个函数来测试Student类的构造函数以及其他函数。
高手这个题如何做?谢谢啊
2 定义并实现类Student(学生)类,要求如下
1)Student类有三个属性:姓名,年龄,学号
2)Student类提供一个无参数构造函数,和一个有参数构造函数,即:
a)Student() //用默认值设置三个属性
b)Student(CString name,int age,CString id)//用传入的参数设置三个属性
3)String getInformation( )函数,该函数的返回值中包括学生的三个属性值,
格式为:
“name: xxx age: xx id: xxxxxxx”
4)写一个函数来测试Student类的构造函数以及其他函数。
高手这个题如何做?谢谢啊
re: 轻松玩转CreateRemoteThread,让你的代码长出翅膀(转) wufabiyu 2008-12-16 23:05
希望你能给出一个具体的实例,并加上相应的说明。
re: 代码生成工具排行榜 金鑫 2007-05-02 02:29
每种工具都提供简介就相好了!
re: 代码生成工具排行榜 博主 2007-04-04 11:12
前面基本按知名度排列,后面的随机排列的。
re: 代码生成工具排行榜 丁丁 2007-03-28 22:50
果然多,按什么次序排的呢?
