多语言下的文学编程

3
我有一个库项目,需要C与其他语言的互操作性和合理的性能,但必须非常清晰地记录,如文学编程一样,并且其文档可能受益于函数式方法,如Haskell,甚至是Idris的证明功能。
因此,我有兴趣将此库构建为文学程序,首先编写文档并使用Idris原型代码,然后编写C代码,以尽可能接近Idris代码来解决任何性能问题,并易于从其他语言进行链接。
我想要哪种文学编程工具? NuWeb专为多语言文学编程而设计,但他们对于像Idris、Haskell等函数式语言的@符号或任何转义字符的使用存在问题。

Idris希望有一个文学编程工具,我可以为其做出贡献。我喜欢他们的首选方法,只需使用由\begin{code} .. \end{code}块限定的.tex文件。

Idris、Haskell等不需要像C一样进行交错,因此这样做会增加复杂性,我更希望在这里使用的任何工具都能够保持稳定。

一种最小化库消费者工具使用的方法可能是使用一个简单的Perl脚本cat_latex_env来提取C和Idris代码:

#!/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;
        }
}

在这一步,Idris 应该可以成功编译。我可以嵌入文学化编程工具(如 CWEB 或 NuWeb)所需的交织指令。您有何想法?

我不会给出答案,因为我的观点是有偏见的。就个人而言,我反对任何形式的文学编程,它使程序维护和调试变得非常困难。我建议你从另一个角度来看待这个问题,使用程序内部的文档工具,比如C语言中的doxygen和Haskell中的http://en.wikipedia.org/wiki/Haddock_(software)等。 - qunying
@Cœur 这个问题似乎不太相关,因为它正在寻求软件建议。您的编辑只是纠正了一个拼写错误。如果您投票关闭此问题,那么您会更好地为 Stack Overflow 提供服务吗? - AdrianHHH
@Cœur 补充 AdrianHHH 的观点:问题主要在于这个问题被推到了前台,但并没有显著的改进(我不认为一个拼写更正是显著的改进),现在这个与主题无关的问题因为再次出现在前台而受到了新的关注。我曾经看到你编辑过一些类似这样的微不足道的问题,但很快就被关闭了;请在编辑时考虑问题被推到前台的情况,并考虑是否关闭投票不是更好的选择。 - Adriaan
@AdrianHHH,我认为拼写更正也是很重要的。如果人们发现它与主题无关,投票关闭是好的:我不总是注意到,但当我注意到时,我也会投反对票并投票关闭。 - Cœur
1个回答

1
如果文档至关重要,并且您对emacs有一定的熟悉度,那么您可能不妨看看org-mode中的文学编程支持。Babel是org-mode的扩展,允许与许多编程环境集成,包括编织编译语言,执行代码块等。
它完全与语言无关,由于它具有大纲工具的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.

我希望这能给你一个创建使用org-mode/Bable组合的文档/代码的想法。当然,一个stackexchange答案无法深入探讨这个系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接