2014-11-12 2 views
-1

Я пытаюсь найти реализацию языка Си, который на самом деле на основе стандартов языка, вот простой примерГде я могу найти реализацию языка координации 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; 
} 
+0

уже пробовали первые 20 результатов на Google, MSN и внешних ссылок на Wikipedia, если это имеет значение !! и они дали мне голосование вниз :( – QuakeCore

+0

Какой 'OS' вы используете и какой' компилятор' с 'версией' у вас есть? – Rizier123

+0

OS windows или linux все, что вы найдете @ Rizier123 – QuakeCore

ответ

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_init(), прежде чем делать Линду вещи
  • Вы должны вызвать linda_end() перед выходом
  • Нет eval() функция, но вы можете использовать spawn()
  • Библиотека varargs.h устарела! Поэтому я бы порекомендовал вам использовать: stdarg.h
    • Так что это может означать, что вам нужно переписать материал!

Так что есть только одна вещь TODO!
Скачайте его и начните!

EDIT:

Другим способом вы могли бы пойти, чтобы загрузить Linda-C компилятор и писать программы в Линда-C (*.clc).

Так, но обратно в библиотеку сверху:
я получил программу, работающую с Линдой в с с этой библиотекой!

у меня есть: GNU GCC compiler(tdm64-1) 4.7.1 MinGW64

То, что вы должны обратить внимание:

  • В linda.h вы должны изменить включают sys/varargs.h к stdarg.h, поскольку переменные аргументы устарела!
    • Это также означает, что вы должны изменить в linda.c всех va_arg() вызовов и изменить следующий тип:
      • float ->double
      • char ->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 файл, как это (в противном случае ваш прекрасный, и вы не должны направлять компилятором реж):

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 -> потоковой библиотеки
    • лм -> математическая библиотека
    • Также я рекомендовал бы вам добавить следующую строку в файле primes.c в конце, так что если вы выполняете его, окно не закрывается мгновенно: system("pause");


  • Кроме того, для вашей проблемы, что с этой библиотекой вы не можете использовать eval() Есть несколько способов решения проблем/решения:
    • Вы можете сделать for петли и называете ваши функции несколько раз! (Так как функция вы звоните с spawn() должен иметь void, как return type)
    • Вы можете определить константу с: #define CALLS 5 и использовать это в самой функции для команды для выполнения в for цикле или также в функции main позвонить spawn() несколько раз
    • Я думаю, что есть больше способов решить это!

Таким образом, все, что сказал. Ваша программа должна выглядеть примерно так:

#include "linda.h" 

#define NUM 5 

void worker() { 

    int i; 

    for (i = 0; i < NUM; i++) 
     out("%s", "hello, world"); 

} 

int main() { 

    int result; 

    spawn(worker); 
    in("%s", "hello, world"); 
    in("%s", "hello, world"); 
    in("%s", "hello, world"); 
    in("%s", "hello, world"); 
    in("%s", "hello, world"); 
    in("%s?d", "worker", &result); 

    system("pause"); 
    return 0; 

} 

Надеюсь, это вам поможет!

Приветствия

+0

к сожалению, мой Друг, я уже видел эту ссылку, которую вы предоставили, но это не для меня :(Например, функция spawn принимает вызов функции void без параметров, что, конечно же, не соответствует языковым стандартам. – QuakeCore

+0

@QuakeCore обновлен мой ответ с несколькими дополнительными сведениями и подсказками! Надеюсь, это поможет вам, и вы получите это! – Rizier123

+0

Я очень ценю ваш интерес @ Rizier123, проблема с этой реализацией - это функция spawn, для которой требуется вызов функции void без аргументов, но ожидается, что она вызовет функцию с любым типом возвращаемого значения и любым количеством аргументов. возможно, есть работа над тем, чтобы реализовать любую программу, которая соответствовала бы этой реализации (как и вы), и это абсолютно прекрасно со мной, но поверьте мне, что я не тот, кто здесь делает правила :). – QuakeCore

Смежные вопросы