How to begin

19 views
Skip to first unread message

Toby Smithe

unread,
Jun 7, 2010, 9:53:02 AM6/7/10
to ani-co...@googlegroups.com
Hi, everyone.

I've been lurking on this list ever since Adrian announced the
project, and I've been absolutely fascinated. I know very little about
compilers, but I have done a small amount of C (and Python)
development in my time, and I currently maintain a couple of packages
in Debian. That is about the extent of my software engineering
experience, and my computer science experience is similarly amateur:
I've read about Turing machines and decidability, isomorphism, Gödel
and formal systems, and I've taken a basic, introductory course in
discrete mathematics, so I know vaguely about simple algorithms like
Dijkstra's shortest path algorithm, and the travelling salesman
problem.

That's my background knowledge; as you can probably tell, it's not
especially relevant. I'm currently in the process of finishing my A
level studies, and in October, I expect to be taking up a place at
Oxford to read Psychology and Philosophy. Again, it's only
tangentially relevant.

But the parallelism and data flow in ani is very tempting to me. I'm
very interested in the brain as a computational system, and as I begin
my undergraduate studies, I'll be keeping that in mind. It might be
very interesting to explore concepts from neuropsychology in ani, but
also to understand ani as a language, and anic as a compiler, in the
context of the brain as a massively parallel information processing
system.

So my question, after all that preamble, is simple: how can someone -
who at the moment is quite busy with exams, but in three weeks will
become much less so - learn about compiler architecture, specifically
anic, starting from the knowledge I have? I'm sure, in the end, it
boils down to "read the code"; but I'd like a deeper theoretical
understanding, as well as the example of anic as Adrian has
implemented it.

Many thanks,

--
Toby Smithe

Adrian

unread,
Jun 7, 2010, 12:37:58 PM6/7/10
to anic
Hi Toby!

It's great to know that you're looking to get involved in this
research area, and I can see how this does very much relate to your
studies/research interests: ANI is designed with the massively
parallel problems of the future (such as neural modelling) in mind. By
any chance, are you a fan of Ray Kurzweil's stuff? ;)

In any case, your best bet would be a good book on compiler design
that would take you through all of the important concepts: namely
lexing, parsing, abstract syntax and binding, type derivation and type
inference, intermediate representation, some basic tree analysis, and
code generation. I grew up on "Modern compiler implementation in Java"
by Andrew W. Appel, but the same text comes in a C (as opposed to
Java) version. I imagine that the C version would require a thorough
knowledge of C, though, so you should go in with the expectation that
you might need to brush up on some C concepts while reading.

Anic is a bit different from a typical compiler in some ways (such as
using a global cactus stacks for both the abstract syntax tree and
symbol table, as well as having no concept of "function calls"), but
getting through a book on compiler design should make the code
understandable -- anic is written in C++ but a lot of it has a pure C
flavor to it.

I would expect that this would be a reasonably large time commitment,
however, so you might want to hold off learning about compilers until
exams are over. I know that back when I was in school, it was really
hard to find time to work on my personal compiler projects (the
precursors of what is now anic).

Anyway, if there's anything else you'd like to know, please ask. I'd
be glad to give you whatever keys you need to get involved.

Cheers!
Adrian
Reply all
Reply to author
Forward
0 new messages