3

我有一个库项目,它需要 C 与其他语言的互操作性和合理的性能,但必须非常清楚地记录在案,比如文学编程,并且其文档可能受益于函数方法,如 Haskell,甚至是Idris的证明功能。

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

我想要什么识字的编程工具?

NuWeb是为多语言读写编程而设计的,但是它们对 @ 符号或任何转义字符的使用对于 Idris、Haskell 等函数式语言来说是有问题的。

Idris想要一个我可以贡献的有文化的编程工具。我喜欢他们只使用由块.tex分隔的文件的首选方法。\begin{code} .. \end{code}

Idris、Haskell 等不需要像 C 那样的缠结,所以这样做会增加复杂性,我希望我在这里使用的任何工具都可以保留。

为库使用者减少工具的一种方法可能是使用简单的 Perl 脚本提取 C 和 Idris 代码,例如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;
        }
}

此时 Idris 应该可以正常编译。而且我可以嵌入 CWEB 或 NuWeb 等有文化的 C 编程工具所需的 tangle 指令。

想法?

4

1 回答 1

1

如果文档是最重要的,并且您对 emacs 有一定的亲和力,那么您可能会比查看 org-mode 中的 literate 编程支持做得更糟。Babel是一个 org 模式扩展,允许与许多编程环境集成,包括 tangle-weaving 编译语言、执行代码块、...

它完全与语言无关,并且由于它具有大纲的 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 的答案不能开始触及这个系统的表面。

于 2015-05-05T17:24:34.483 回答