2015-04-01 118 views
3

我有一个库项目,它需要C与其他语言的互操作性和合理的性能,但必须非常清晰地记录文档编程,其文档可能从功能方法中受益,如Haskell ,甚至Idris“的特点。多种语言的文字编程

因此,我有兴趣将这个库作为一个识字程序,首先编写文档和工作Idris原型代码,然后编写与Idris代码非常类似的C代码以解决任何性能问题,并且可以轻松地与其他代码链接语言。

我需要什么文学编程工具?

NuWeb是专为多语言编程书籍,但他们的@符号,或任何转义字符的使用,是有问题的像伊德里斯,哈斯克尔等

伊德里斯wants功能性语言literate programming tool到我可以贡献。我喜欢他们的首选方法,只使用由\begin{code} .. \end{code}块分隔的.tex文件。

伊德里斯,哈斯克尔等不需要像C那样纠结,所以这样做会增加复杂性,我宁愿我在这里使用的任何工具都存在。

,最大限度地减少工装库的消费者可能会提取使用一个简单的Perl脚本的C和伊德里斯代码像cat_latex_env的一种方法:

#!/usr/bin/perl 
use strict; 
use warnings; 

sub usage { die "Usage: cat_latex_env enviroment_name [filename]\n"; } 
usage if ($#ARGV < 0); 

my $env = shift; 
my $begin = quotemeta "\\begin{$env}"; 
my $end = quotemeta "\\end{$env}"; 
while (<>) { 
     if (/$begin/../$end/) { 
       next if /$begin/ || /$end/; 
       print; 
     } 
} 

此时伊德里斯应该编译罚款。我可以嵌入C语言编程工具(如CWEB或NuWeb)所需的纠结指令。

想法?

+0

我不会创建答案,因为我的选择是有偏见的。就个人而言,我反对任何形式的文学编程,它使得程序维护和调试非常困难。我建议你看看其他方式,使用程序内的文档工具。像C的doxygen和Haskell的http://en.wikipedia.org/wiki/Haddock_(software)等。 – qunying 2015-05-05 17:43:36

+0

@Cœur这个问题似乎脱离主题,因为它要求提供软件建议。你的编辑只是纠正了一个拼写错误。你会投票结束这个问题,以更好地服务Stack Overflow吗? – AdrianHHH 2017-04-03 08:14:58

+0

@Cœur补充说AdrianHHH说:问题主要是这个问题碰到了首页,没有明显的改进(我没有把一个拼写纠正算作重要的),现在这个OT问题重新受到关注,因为它再次位于首页。我已经看到你编辑这样的微不足道的编辑问题,只是稍后关闭;请在编辑时考虑问题,并考虑是否接近投票不是更好的选择。 – Adriaan 2017-04-03 08:22:59

回答

1

如果文档是最重要的,并且您有一些emacs关联,那么您可能会比在org-mode中查看文档编程支持更糟糕。 Babel是一种组织模式的扩展,允许与许多编程环境集成,包括纠缠编织编译语言,执行代码块,...

它是彻底的语言不可知的,因为它有一个大纲的DNA,它允许以结构化的方式管理文档。当然,它会生成语法高亮的HTML/LateX/PDF/...来源。

查看更多信息http://orgmode.org/worg/org-contrib/babel/intro.html

样本:

** Compiles libpq library for iOS 

copy this script as *build-ios.sh* in the root of the postgresql 
source tree. 

#+BEGIN_SRC sh tangle:build-ios.sh 
mkdir -p build 
rm -rf build/* #*/ 

function build_libpq() 
{ 
    make distclean 

    ./configure \ 
...snip... 
lipo -create -output libpq.a build/* 

#+END_SRC 

Run it and it will create a universal library and separate arm 
library in the root folder. 

我希望这给一个想法,做什么用组织模式/巴布尔组合创建文档/代码。当然,一个堆栈交换答案不能开始刮擦这个系统的表面。