[OT]一个关于文学编程的想法

33 views
Skip to first unread message

limodou

unread,
Aug 2, 2006, 2:44:58 AM8/2/06
to Python.cn@google
文学编程不是一个新东西,是由Donald
Knuth提出来的。不过我接触经时间很短,但在CPUG第九次会课上听了zoom.quiet关于leo的讲解开始有所体会。再看一看我写的django
step by step,现在我想,如果在写教程时,其中的代码就是最终的运行代码,那么等我的教程写完了,程序不也编完了嘛。当然这其中操作起来还有难度。不过我不想使用
leo 来进行文学编程。大家有什么想法吗?可以考虑开发一个从rst中提取代码的工具?还是有更方便更好的想法。

--
I like python!
My Blog: http://www.donews.net/limodou
My Django Site: http://www.djangocn.org
NewEdit Maillist: http://groups.google.com/group/NewEdit

yi huang

unread,
Aug 2, 2006, 3:27:24 AM8/2/06
to pyth...@googlegroups.com
从文档中提取代码?  似乎和传说中的doctest有点像



--
http://codeplayer.blogbus.com/

limodou

unread,
Aug 2, 2006, 3:34:09 AM8/2/06
to pyth...@googlegroups.com
On 8/2/06, yi huang <yi.cod...@gmail.com> wrote:
> 从文档中提取代码? 似乎和传说中的doctest有点像
>
比如我一边写教程,一边在教程中嵌入代码。等差不多了,运行一个工具,代码就抽出来,并且可以运行。不过现在想一想在rst中实现很麻烦,而且有时代码并不一定要生成程序,可能就是显示几个命令。leo组织得不错,不过它是图形化的方式,保存格式采用xml来实现的。

yi huang

unread,
Aug 2, 2006, 4:27:54 AM8/2/06
to pyth...@googlegroups.com
临时看了下文档 , 似乎 doctest 已经很接近你的想法了.

>>> import doctest
>>> doc = '''
... example
... ==========
... >>>1+1
... 2
... >>>pring 'hello'
... 'hello'
...
... '''
>>> p = doctest.DocTestParser()
>>> code = p.get_examples(str)
>>> code
[<doctest.Example instance at 0x00C4A058>, <doctest.Example instance at 0x00C4A2
38>]
>>> dir(code[0])
['__doc__', '__init__', '__module__', 'exc_msg', 'indent', 'lineno', 'options',
'source', 'want']
>>> code[0].source
'1+1\n'
 

--
http://codeplayer.blogbus.com/

limodou

unread,
Aug 2, 2006, 4:31:49 AM8/2/06
to pyth...@googlegroups.com
On 8/2/06, yi huang <yi.cod...@gmail.com> wrote:
不是doctest是代码中嵌入文档,再从嵌入的文档中取代码。而我直接就是从文档中取代码。并且可以生成文档和代码不同的东西。对于复杂的,需要生成不同的文件,存放在不同的目录下。

马踏飞燕

unread,
Aug 2, 2006, 4:31:53 AM8/2/06
to pyth...@googlegroups.com
文学编程我还没搞清楚它的精要,不过倒是leo的研究有了点进展,哈哈!
因为leo是用tree的结构组织的,所以对node的操作就很方便了。
不管是写计划,还是程序、文档,大都可以先写在一起,接下来再分离到各个节点。
可以复用的还可以单独拎出来放到一起,还可以写一写脚本来管理节点里面的内容或者文件系统的内容。

不过leo我还是略知皮毛,还需要zoom多分享经验哪!

在 06-8-2,limodou<lim...@gmail.com> 写道:

limodou

unread,
Aug 2, 2006, 4:33:42 AM8/2/06
to pyth...@googlegroups.com
On 8/2/06, 马踏飞燕 <honey...@gmail.com> wrote:
> 文学编程我还没搞清楚它的精要,不过倒是leo的研究有了点进展,哈哈!
> 因为leo是用tree的结构组织的,所以对node的操作就很方便了。
> 不管是写计划,还是程序、文档,大都可以先写在一起,接下来再分离到各个节点。
> 可以复用的还可以单独拎出来放到一起,还可以写一写脚本来管理节点里面的内容或者文件系统的内容。
>
> 不过leo我还是略知皮毛,还需要zoom多分享经验哪!
>
在一个结点中可以嵌入文档和代码吗?好象leo不支持。只能是独立的代码。而且不知你如何处理@thin结点的。一个@thin结点可以又有文档,又有代码吗?

马踏飞燕

unread,
Aug 2, 2006, 5:18:51 AM8/2/06
to pyth...@googlegroups.com
在 06-8-2,limodou<lim...@gmail.com> 写道:
> On 8/2/06, 马踏飞燕 <honey...@gmail.com> wrote:
> > 文学编程我还没搞清楚它的精要,不过倒是leo的研究有了点进展,哈哈!
> > 因为leo是用tree的结构组织的,所以对node的操作就很方便了。
> > 不管是写计划,还是程序、文档,大都可以先写在一起,接下来再分离到各个节点。
> > 可以复用的还可以单独拎出来放到一起,还可以写一写脚本来管理节点里面的内容或者文件系统的内容。
> >
> > 不过leo我还是略知皮毛,还需要zoom多分享经验哪!
> >
> 在一个结点中可以嵌入文档和代码吗?好象leo不支持。只能是独立的代码。而且不知你如何处理@thin结点的。一个@thin结点可以又有文档,又有代码吗?
>

我是分了两个子节点,一个写代码,一个写注释或者说明。
我现在想知道,在写注释的结点里面能否引用写代码的节点里面的内容呢?就像xml的实体引用那样的。

limodou

unread,
Aug 2, 2006, 5:21:38 AM8/2/06
to pyth...@googlegroups.com

使用<<node>>应该就可以呀。

如果不写成注释的话,可以共存于一个@thin吗?是不是保存时还是存到一起了。

Zoom.Quiet

unread,
Aug 3, 2006, 12:11:05 AM8/3/06
to pyth...@googlegroups.com
On 8/2/06, limodou <lim...@gmail.com> wrote:
> On 8/2/06, 马踏飞燕 <honey...@gmail.com> wrote:
> > 在 06-8-2,limodou<lim...@gmail.com> 写道:
> > > On 8/2/06, 马踏飞燕 <honey...@gmail.com> wrote:
> > > > 文学编程我还没搞清楚它的精要,不过倒是leo的研究有了点进展,哈哈!
> > > > 因为leo是用tree的结构组织的,所以对node的操作就很方便了。
> > > > 不管是写计划,还是程序、文档,大都可以先写在一起,接下来再分离到各个节点。
> > > > 可以复用的还可以单独拎出来放到一起,还可以写一写脚本来管理节点里面的内容或者文件系统的内容。
> > > >
> > > > 不过leo我还是略知皮毛,还需要zoom多分享经验哪!
> > > >
> > > 在一个结点中可以嵌入文档和代码吗?好象leo不支持。只能是独立的代码。而且不知你如何处理@thin结点的。一个@thin结点可以又有文档,又有代码吗?
> > >
> >
> > 我是分了两个子节点,一个写代码,一个写注释或者说明。
> > 我现在想知道,在写注释的结点里面能否引用写代码的节点里面的内容呢?就像xml的实体引用那样的。
> >
>
> 使用<<node>>应该就可以呀。
>
> 如果不写成注释的话,可以共存于一个@thin吗?是不是保存时还是存到一起了。
btw in Leo , there is so many action word,
not only @thin ....

>
> --
> I like python!
> My Blog: http://www.donews.net/limodou
> My Django Site: http://www.djangocn.org
> NewEdit Maillist: http://groups.google.com/group/NewEdit
>


--
"""Time is unimportant, only life important!
blogging : http://blog.zoomquiet.org/pyblosxom/
wiki enter: http://wiki.woodpecker.org.cn/moin/ZoomQuiet
in douban: http://www.douban.com/people/zoomq/
"""

chinh...@gmail.com

unread,
Aug 3, 2006, 4:37:46 AM8/3/06
to python.cn

limodou 写道:

limodou的主意很好,不过似乎已经有很好的工具了,sed/grep或者vim结合正则表达式是否能够满足需求,只需要做一个匹配-导出就可以了,当然最好能够写在一个txt文件中,也不一定非要rst格式。
另外,vim中有折叠以及扩展vol折叠,似乎也不是很需要leo工具,而且都在一个txt文件中搞定。
当然,对于以上提到的都不太了解,抛砖

limodou

unread,
Aug 3, 2006, 4:42:53 AM8/3/06
to pyth...@googlegroups.com
vim没用过太多的高级功能,而且这主要是依靠编辑器的功能。不过leo这种方式可能更直观和方便。当然文档结构也不一定使用rst,但为什么用它呢?因为一是rst生成文档不错,用得人也很多,另外扩展也方便。而如果自定义格式,必然要自已写分析代码。使用rst都自动给你做了,你可以在一个很高的基础上来做你的事。对于几种文学编程工具,如noweb,
leo都可以在一个代码块中,再引用其它的代码块,同时保持自动缩近。而简单的靠sed/grep是无法完成的。vim也不支持吧。

我已经完成了基本的文学编程的功能,基于docutils,有兴趣可以试一试。

Zoom.Quiet

unread,
Aug 3, 2006, 5:52:45 AM8/3/06
to pyth...@googlegroups.com
手册!实例!练习!截屏!

一个都不能少哪!
否则,大家仅仅从字面的"文学化编程"来理解,一定是偏离的…………

Leo 的"文学化"是徦借,文学的组织思維来比喻,全新的编程行为是也…………

limodou

unread,
Aug 3, 2006, 5:56:00 AM8/3/06
to pyth...@googlegroups.com
On 8/3/06, Zoom. Quiet <zoom....@gmail.com> wrote:
> 手册!实例!练习!截屏!
>
> 一个都不能少哪!
> 否则,大家仅仅从字面的"文学化编程"来理解,一定是偏离的…………
>
> Leo 的"文学化"是徦借,文学的组织思維来比喻,全新的编程行为是也…………
>
>
不管是不是假借,这种编程方法总要有一个名字。leo作者自已写说是文学编程,在文学编程网站上也把leo作为它的开发工具 。

http://www.literateprogramming.com/

kernel1983

unread,
Aug 3, 2006, 7:28:25 AM8/3/06
to python.cn
今天下午一边听会课录音,一边在试用

和前两个月初次接触Leo,感觉又非常的不一样⋯⋯就像录音一开始说的,Leo不是一个非常复杂的东西。

我在学习Knuth的The art of computer
programming的时候,使用了一个MMIX计算机的模拟器和MMIXAL汇编语言的编译器,他们都是用CWEB的写的。没有过多久,又在邮件列表中认识了Leo

到现在,总算是初窥门径了~~~

Reply all
Reply to author
Forward
0 new messages