Ah, okay. I was unsure if SAC was closed-source or just neglected to provide a link to the source on the downloads page. I was mainly interested in combining the Makefiles and adding an install: option to copy sac to a directory and add that directory to PATH in ~/.bashrc (or ~/.profile on Mac).<br>

<br>I've been following the SAC Tutorial. The examples are really helpful by the way, though I would like to see the output be included in the manual just to double-check my output.<br><br>The tutorial describes function definitions using multiple return types, mimicking Python tuples. I was saddened to read that SAC doesn't support tuples in expressions, only as a kind of hack in calling functions. I would really like to see first-class tuples in SAC; when I read that SAC's fundamental data structure is an n-dimensional array, I thought "Wow, that's cool! All you would need to build other kinds of data structures is arrays and tuples, I hope SAC has those." Even C structs would suffice, but it would be nice to have something more like tuples and as dynamic as SAC arrays.<br clear="all">

<div><br>Also, I was <i>really</i> surprised to read on page 10:<br><br><div style="margin-left: 40px;">In a sequence of variable definitions, the scope of a variable starts with the left-hand side of its definition and either reaches down to the end of the function, or, provided at least one further definition of a variable with the same name exists, to the right-hand side of the next such definition. This measure allows us to reuse variable names.<br>

</div><br>It seems like a bit of a misnomer to call the language Single Assignment C. I know, I know, "the place-holder property always holds!" I realize this scope behavior is there to make it more convenient for coders, but it feels <i>wrong</i>.<br>

<br>Have you used Haskell, another single assignment language? One way to get around the problem of creating so many variable names is to allow the prime (') character in variable names:<br><br>x = 5<br>x' = x + 5<br>

x'' = x * 10<br>x''' = x ^ 2<br><br>It's straight out of mathematics, and it becomes second nature to code like this.<br><br>Side note: the print( arbitrary_array ) function is extremely handy. I'd like to modify the formatting, though, I feel there's a lot of extra space, and the alignment sometimes looks forced.<br>

<br><span style="font-family: courier new,monospace;">$ cat ars.sac</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">use StdIO: all;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">use Array: all;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">int main() {</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    print(reshape([5], [1, 2, 3, 4, 5]));</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    print(reshape([3, 2], [1, 2, 3, 4, 5, 6]));</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    print(reshape([3, 2, 1], [1, 2, 3, 4, 5, 6]));</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return(0);</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$ ./ars </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Dimension:  1</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Shape    : <  5></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">< 1  2  3  4  5 > </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Dimension:  2</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape    : <  3,  2></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">| 1  2 | </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">| 3  4 | </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">| 5  6 | </span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Dimension:  3</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Shape    : <  3,  2,  1></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">< 1 > < 2 > </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">< 3 > < 4 > </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">< 5 > < 6 > </span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$</span><br><br>Why not clean the formatting up a bit?<br><br><span style="font-family: courier new,monospace;">$ ./ars </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Dimension: 1</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape: <5></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><1 2 3 4 5> </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Dimension: 2</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Shape: <3, 2></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">|1 2|</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">|3 4|</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">|5 6|</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Dimension: 3</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape: <3, 2, 1></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><1><2></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><3><4></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><5><6></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$</span><br><br>And why do shapes use commas, but the actual arrays do not?<br>

<br><span style="font-family: courier new,monospace;">$ ./ars </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Dimension: 1</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Shape: <5></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><1 2 3 4 5> </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">Dimension: 2</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape: <3 2></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">|1 2|</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">|3 4|</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">|5 6|</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Dimension: 3</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape: <3 2 1></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><1><2></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><3><4></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><5><6></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$</span><br><br></div>Does SAC have a function like print() that shows an array as a string, but without showing the dimension and shape?<br>

<br>Does SAC have a function like print() that returns a string like C's sprintf()?<br><br>How do you like my solution to Exercise 3 on page 8?<br><br>Exercise 3<br><br>Given the language constructs introduced so far, can you define an array that would print as<br>

<br><span style="font-family: courier new,monospace;">Dimension: 3</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Shape :< 5, 2, 2> <0 0><0 0></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><1 0><0 0></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><0 1><0 0></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><0 0><1 0></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><0 0><0 1></span><br style="font-family: courier new,monospace;">

<br>, but whose definition does not contain the letter 1 more than once?<br><br><span style="font-family: courier new,monospace;">$ cat ex3.sac</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">use StdIO: all;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">use Array: all;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">int main() {</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    print(genarray([5, 2, 2], 3) - reshape([5, 2, 2], [</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        3, 3, 3, 3,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        2, 3, 3, 3,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        3, 2, 3, 3,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        3, 3, 2, 3,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        3, 3, 3, 2</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    ]));</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return(0);</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">}</span><br><br>Since array addition and subtraction weren't introduced yet, I had to guess that (-) worked intuitively. It's a bit odd that the exercise would require you to use these methods, since they aren't even introduced yet, so I have to wonder if there's another way to do this.<br>

<br>Finally, I made a quick vector image of the SAC logo using Inkscape, if anyone's interested.<br><br><a href="http://www.yellosoft.us/public/images/sac.svg">http://www.yellosoft.us/public/images/sac.svg</a><br><br>

Cheers,<div><br></div><div>Andrew Pennebaker</div><div><a href="http://www.yellosoft.us" target="_blank">www.yellosoft.us</a></div><br><div class="gmail_quote">On Mon, Oct 24, 2011 at 3:11 AM, Clemens Grelck <span dir="ltr"><<a href="mailto:clemens.grelck@googlemail.com">clemens.grelck@googlemail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Your understanding is correct indeed. For a number of reasons, that<br>
I do not want to elaborate here, the SAC compiler is currently not<br>
open source. This may change in the future (or not). For now you can<br>
download a binary distribution here:<br>
  <a href="http://www.sac-home.org/index.php?p=.%2F55_Download" target="_blank">http://www.sac-home.org/index.<u></u>php?p=.%2F55_Download</a><br>
<br>
If you are seriously interested in how the compilation works, the<br>
compiler is very verbose in its doing, for instance you can stop<br>
the compilation after any of the several hundred passes and look<br>
at the intermediate code. This might be more interesting in practice<br>
than looking at the sources.<br>
<br>
If you are seriously interested in contributing to the SAC project,<br>
we are under certain conditions happy to welcome you in the team and<br>
provide you with access to the sources.<br>
<br>
Cheers,<br>
 Clemens<div class="im"><br>
<br>
On 10/24/2011 05:35 AM, Ivan Shmakov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Andrew Pennebaker<<a href="mailto:andrew.pennebaker@gmail.com" target="_blank">andrew.pennebaker@<u></u>gmail.com</a>>  writes:<br>
</blockquote></blockquote></blockquote></blockquote></blockquote>
<br>
  >  Where is the SAC repository? Is it CVS, Subversion, or something<br>
  >  else?  Cheers,<br>
<br>
        It was my understanding that SAC is non-free.  (In the sense of<br>
        the first freedom, which reads: “The freedom to study how the<br>
        program works, and change it so it does your computing as you<br>
        wish (freedom 1).  Access to the source code is a precondition<br>
        for this.” [1].)<br>
<br>
        I'd be glad should someone point out that I'm wrong.<br>
<br>
        TIA.<br>
<br>
[1] <a href="http://www.gnu.org/philosophy/free-sw.html" target="_blank">http://www.gnu.org/philosophy/<u></u>free-sw.html</a><br>
<br>
</blockquote>
<br>
<br>
-- <br></div>
------------------------------<u></u>------------------------------<u></u>----------<br>
Dr Clemens Grelck                                     Science Park 904<br>
University Lecturer                                   1098XH Amsterdam<br>
                                                           Netherlands<br>
University of Amsterdam<br>
Institute for Informatics                        T <a href="tel:%2B31%20%280%29%2020%20525%208683" value="+31205258683" target="_blank">+31 (0) 20 525 8683</a><br>
Computer Systems Architecture Group              F <a href="tel:%2B31%20%280%29%2020%20525%207490" value="+31205257490" target="_blank">+31 (0) 20 525 7490</a><br>
<br>
Office C3.105                               <a href="http://www.science.uva.nl/%7Egrelck" target="_blank">www.science.uva.nl/~grelck</a><br>
------------------------------<u></u>------------------------------<u></u>----------<div><div></div><div class="h5"><br>
______________________________<u></u>_________________<br>
sac-user mailing list<br>
<a href="mailto:sac-user@sac-home.org" target="_blank">sac-user@sac-home.org</a><br>
<a href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user" target="_blank">http://lists.sac-home.org/<u></u>mailman/listinfo.cgi/sac-user</a><br>
</div></div></blockquote></div><br>