[sac-user] SaC beginner: modularization, declaration

Carl Alan Joslin carl.joslin at joslinfamily.co.uk
Wed Dec 8 15:56:10 CET 2010


On Wed, 2010-12-08 at 14:50 +0100, Juhasz David wrote:
> Hi,
> 
> I'm participant of a project in Eötvös Loránd University, Hungary. In this 
> project we want to develop a general programming language for multicore 
> and distributed systems, wich is not hardware-specific, but can make an 
> effective code from the source. My actual assignment is to write a summary 
> about SaC and its compiling issues. There are useful papers on SAC 
> homepage. But as I can see, the module subsystem section doesn't reflect 
> the current syntax for modularization. So I have two questions about this 
> topic:
> * What is the difference between the use and the import instructions?
> * How is it possible to define uniqueness type explicitly? Classtypes are 
>   uniqueness, but I'd like to define uniqueness types on a general way.
> 
> And one more question about variable declaration. I don't know that it's a 
> bug or just I don't understand the impact of declarations. Consider the 
> following example:
> 
> import Array: all;
> import StdIO: all;
> 
> typedef int[1] array;
> 
> int main()
> {
> 	array x;
> 	x = 10;
> 
> #ifndef EXCLUDE_ERRORS
> 	print(x);
> #endif
> 
> 	return(0);
> }
> 
> Without the print there is no error, but with the print there is a typing 
> error for the assignment. I wonder, why succeed the compiling without the 
> print. What's the matter in this case? If this is actually a bug, I'll 
> report it more detailed in SaC-Zilla.
I will cover your last question.

This is not a bug.  You have defined array to be of type int[1] this
means an array with one dimension of length 1 AKA a vector of one
element.  However you assign 10 to a variable (x) of type array.  10 is
a scalar, therefor the types are different.  Perhaps what you meant to
do was x = [10] or x[0] = 10?

The reason that this does not show up when you remove the print is that
without the print there is no use of x and there for x = 10 and array x
are not needed to compute the answer to your program and therefor can be
removed.  It would seem that the compiler works out that x is not needed
before it tries to check that the right hand side of your assignment is
valid.

The reason that print is not dead code is that it affects an uniqueness
type the terminal.  It may help seeing a SIMPLIFIED version of how your
code looks inside the compiler is:

int main()
{
  array x;
  term = initTerminal( );
  x = 10;
  term' = print( term, x);
  return( term', 0);
}
> 
> Thanks for any advice!
> 
> Best regards,
> David
> _______________________________________________ sac-user mailing list sac-user at sac-home.org http://lists.sac-home.org/mailman/listinfo.cgi/sac-user





More information about the sac-user mailing list