多种语言的文化编程

时间:2015-04-01 20:16:40

标签: c perl haskell literate-programming idris

我有一个库项目需要C与其他语言的互操作性和合理的性能,但必须非常清楚地记录,文化编程,其文档可能会受益于功能方法,如Haskell,甚至{{ 3}}'证明功能。

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

我想要什么有文化的编程工具?

Idris专为多语言文字编程而设计,但它们对@符号或任何转义字符的使用对像Idris,Haskell等函数式语言来说是个问题。

我可以贡献的Idris NuWebwants。我喜欢他们首选使用由.tex块分隔的\begin{code} .. \end{code}文件的方法。

Idris,Haskell等不需要像C那样纠结,所以这样做会增加复杂性,我更喜欢我在这里使用的任何工具都在附近。

最小化库消费者工具的方法可能是使用像cat_latex_env这样的简单Perl脚本来提取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;
        }
}

此时伊德里斯应该编译好。我可以嵌入一个有文化的编程工具所需的纠结指令,如CWEB或NuWeb。

思想?

1 个答案:

答案 0 :(得分: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.

我希望这能让我们了解如何使用org-mode / Bable组合创建文档/代码。当然,stackexchange答案不能开始划伤这个系统的表面。