Dear Axiom developers,

I am trying to build a  string  interface between  C  and  Axiom 
by 
    named pipes  in Linux (Unix)

(in future, the C end needs to change to Haskell).

The  C <--> C      interface works,  
The  C <--> Axiom  interface works in half.

The pipes are created by the Linux shell commands

    > mkfifo toA
    > mkfifo fromA

The user programs operate with these pipes as with  files:
open, close, read, write, ....
The difference to files is that the named pipe operations for the two 
processes are automatically synchronized.

A C function  cAxiom  
* outputs the given   line  string to  toA, 
  waits for the respond from Axiom in  fromA,
* inputs a string from  fromA  to the array pointed by  res.

fricas  is run first -- in the  terminal-2:

        > fricas
        ...
        (1) )read fifoToC

Then,  ./fifoToAxiom  is run in  terminal-1. 

A loop body in the program                fifoToC.input
  
for the Axiom interpreter does the following.
* Reads a string from  toA,  
* parses, interprets it, 
* converts the result to a string  resStr,  
* writes resStr  to  fromA.

The C part also has the function  main,

which makes certain  n  different strings and applies  cAxiom  
to each string.
For example, for  n = 3,  the strings are 
                                      "((2*x + y + x^2*z^3) ^ 2) + 0",
                                      "((2*x + y + x^2*z^3) ^ 2) + 1",
                                      "((2*x + y + x^2*z^3) ^ 2) + 2".

As the preliminary test, I replaced Axiom with the C program  fifoToC.c.  
It inputs from  toA,  then skips evaluation, and only outputs a single 
letter to  fromA.

Now,  C <--> C   works correct, 
                 but slow:  6600 strings/sec  for a  1 GHz machine
(probably, the speed can be fixed, probably, repeated  fclose  needs
to be replaced by something, but this is another subject).

C <--> Axiom  only does the first string (so, it looks almost correct), 
              but then, the very  fricas  breaks silently.

Please, what might this mean ?

The Axiom part is in  fifoToC.input :

-------------------------------------------------------
repeat 
  toA: File String := open("toA", "input")
  iStr := readIfCan! toA  
  close! toA
  if iStr = "failed" then (output ""; output "input -> failed"; break)
  output "iStr =  "
  output iStr

                     -- parse iStr, interpret, unparse, output to  fromA
  iForm    := parse(iStr)$InputForm 
  oForm    := interpret iForm
  resIForm := oForm :: InputForm
  resStr   := unparse(resIForm)$InputForm
  output "resStr =  "
  output resStr

  fromA: File String := open("fromA", "output")
  write!(fromA, resStr)  
  close! fromA
  output "resStr is output"
  output ""
-------------------------------------------------------



terminal-2  shows

----------------------------------------------
(1) -> )r fifoToC
repeat 
  toA: File String := open("toA", "input")
  <the loop body printing>
  ...
 
   iStr =
   "((2*x + y + x^2*z^3) ^ 2) + 0"
----------------------------------------------
-- and  fricas  breaks out.


terminal-1  shows

-----------------------------------
n = 4
line =  "((2*x + y + x^2*z^3) ^ 2) + 0"
res =  "x^4*z^6+(2*x^2*y+4*x^3)*z^3+(y^2+4*x*y+4*x^2)" 

line =  "((2*x + y + x^2*z^3) ^ 2) + 1"
-----------------------------------
-- hangs at this point.


The files  fifoToAxiom.c, fifoToC.c  

are not large to consider but, probably, are too large for this broad 
mail list. Can you, please, take them from 

     http://botik.ru/pub/local/Mechveliani/axiQuest/fifoC.zip

and comment the effect ?

Regards,

------
Sergei
[email protected]




-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/fricas-devel?hl=en.

Reply via email to