我在哪里可以找到c中协调语言linda的实现?

时间:2014-11-12 07:18:58

标签: c parallel-processing linda

我试图在c中找到一种实际上基于语言标准的语言,这里有一个简单的例子

#include "linda.h"

int worker(int num)
{
  int i;
  for (i=0; i<num; i++)
    out("hello, world");
  return 0;
}

int main()
{
  int result;
  eval("worker", worker(5));
  in("hello, world");
  in("hello, world");
  in("hello, world");
  in("hello, world");
  in("hello, world");
  in("worker", ? result);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

直接针对您的问题:

Where can i find an implementation of the coordination language linda in c?
这里:http://www.comp.nus.edu.sg/~wongwf/linda.html

您可以下载并使用它!

如果你下载它,你应该得到这个:

linda //dir
  |
  | - linda.c     //file
  | - linda.h     //file
  | - primes.c    //file
  | - README.txt  //file

但你必须知道:

  • 在做linda之前,你必须先致电linda_init()
  • 您必须在退出
  • 之前致电linda_end()
  • 没有eval()功能,但您可以使用spawn()
  • 图书馆varargs.h已过时!所以我建议你使用:stdarg.h
    • 这意味着你可能需要重写内容!

所以只有一件事要做! 下载并开始使用!

修改

另一种方法是下载Linda-C编译器并在Linda-C(*.clc)中编写程序。

所以,但从上面回到图书馆:
我在这个库里有一个与linda一起工作的程序!

我有:GNU GCC compiler(tdm64-1) 4.7.1 MinGW64

你必须注意的事项:

  • linda.h中,您必须将包含sys/varargs.h更改为stdarg.h,因为varargs已过时!
    • 这也意味着您必须更改linda.c所有va_arg()次来电并更改以下类型:
      • float - &gt; double
      • char - &gt; int
  • 完成后,您应该能够使用以下命令行将linda.c编译为linda.o
    • gcc -c -O linda.c(也可能是您必须直接转到gcc.exe,以便在gcc中了解Windows cmd命令

以此为例:

gcc compiler的路径:

"C:\Program Files (x86)\Dev-Cpp\MinGW64\bin"

linda library的路径:

"C:\Users\xy\Downloads\linda\linda"

现在,如果您打开cmd并输入:gcc --version并且找不到它,则必须直接转到gcc.exe这样的文件(否则你的罚款,你没有指向编译器dir):

cd "C:\Program Files (x86)\Dev-Cpp\MinGW64\bin"

因此,如果您位于directory所在的gcc.exe,您应该能够执行该命令:gcc --version

从那里你可以执行命令来创建linda.o!在这个例子中看起来像这样:

gcc -c -O C:\Users\xy\Downloads\linda\linda\linda.c

如果一切顺利的话!您最终应该在编译器目录中找到文件linda.o

现在使用文件linda.o,您可以编译primes.c(在此库中作为示例)并在linda中获得c个程序!使用以下行:

gcc -o C:\Users\xy\Downloads\linda\linda\primes -O C:\Users\xy\Downloads\linda\linda\primes.c C:\Users\xy\Downloads\linda\linda\linda.o -lpthread -lm

使用此行,您最终应该使用.exe文件:primes.exe!您可以在编译器目录中复制并执行!如果你在这个目录中没有它,那么lpthreadGC2_64.dll是未知的,它无法执行!

  • 编写此示例的一些注意事项:
    • lpthread - &gt; pthread库
    • lm - &gt;数学图书馆
    • 另外我建议你在最后的primes.c文件中添加以下行,这样如果你执行它,窗口就不会立即关闭:system("pause");


  • 同样针对您的问题,使用此库您无法使用eval(),有一些解决方法/解决方案:
    • 您可以进行for循环并多次调用您的函数! (由于您使用spawn()调用的功能必须voidreturn type
    • 您可以使用:#define CALLS 5定义一个常量,并在函数本身中使用它来使命令在for循环中执行,或者在main函数中调用{{1多次
    • 我认为有更多方法可以解决这个问题!

所以这么说。你的程序应该是这样的:

spawn()

希望这能帮到你!

干杯