2015-04-01 4 views
3

У меня есть проект библиотеки, который требует совместимости C с другими языками и разумной производительности, но должен быть документирован очень четко, по-латентному программированию и чья документация может выиграть от функционального подхода, такого как Haskell , или даже Idris '.Грамотное программирование на нескольких языках

Я заинтересован в создании этой библиотеки в качестве грамотной программы, сначала написав документацию и рабочий код прототипа Idris, а затем написав код C, который тесно параллелен коду Idris для решения любых проблем с производительностью и может быть легко связан с другими языки.

Какой грамотный инструмент программирования я хочу?

NuWeb предназначен для многоязыковой грамотного программирования, но их использование знака @, или действительно любого экранирующего символа, является проблематичным для функциональных языков, как Идрис, Haskell и т.д.

Идрис wantsliterate programming tool, к которому Я мог бы внести свой вклад. Мне нравится их предпочтительный подход только с использованием .tex файлов, разделенных \begin{code} .. \end{code} блоков.

Идрис, Хаскелл и т. Д. Не нуждаются в путанице, как это делает C, так что это добавляет сложности, и я предпочел бы, чтобы какой-либо инструмент, который я использую здесь, торчит.

Подход, который сводит к минимуму набор инструментов для потребителей библиотеки может быть извлечь C и Идрис код, используя простой скрипт на Perl, как 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

Я бы не создал ответ, так как мой вариант предвзятый. Лично я против любых форм грамотного программирования, он очень усложняет обслуживание и отладку программы. Я предложил бы вам взглянуть в другую сторону, используя инструменты документа внутри программы. например, doxygen для C и http://en.wikipedia.org/wiki/Haddock_(software) для Haskell и т. д. – qunying

+0

@ Cœur Этот вопрос кажется вне темы, поскольку он просит рекомендации по программному обеспечению. Ваше правление просто исправляло одну орфографическую ошибку. Вы бы лучше воспользовались Stack Overflow, голосуя, чтобы закрыть этот вопрос? – AdrianHHH

+0

@ Cœur, чтобы добавить к тому, что сказал AdrianHHH: проблема в основном состоит в том, что этот вопрос был затронут на первой странице без существенного улучшения (я не считаю, что одна коррекция правописания значительна), и что теперь этот вопрос OT получает новое внимание из-за он снова находится на первой странице. Я видел, как вы редактируете вопросы с незначительными изменениями, как это только для закрытия не намного позже; пожалуйста, учтите, что при редактировании учитывается вопрос, и подумайте, не будет ли более предпочтительным вариант голосования. – Adriaan

ответ

1

Если документация имеет первостепенное значение, и у вас есть сродство к emacs, то вы можете сделать хуже, чем смотреть на поддержку грамотного программирования в org-mode. Babel - это расширение в режиме org-mode, позволяющее интегрироваться со многими средами программирования, в том числе скомпилированные языки сплетения, выполнение кодовых блоков, ...

Это полностью языковой агностик, и поскольку у него есть ДНК outliner, это позволяет структурировать структуру документации. Конечно, он генерирует синтаксис, выделенный 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. 

Я надеюсь, что это дает представление о том, что нужно сделать, чтобы создать Docs/код, используя комбинацию орг-режим/Bable. Конечно, ответ stackexchange не может начать царапать поверхность этой системы.