Ketil Malde writes:
> I'm sorry, but, if we define "compiler" as a input->process->output
> pipeline, then:
>> "shuffling and transforming data" = compiler
> "transforming data for reports" = compiler
>> I actually think a lot of useful programs fit into that category.
Ketil, calling "compiler" all this stuff you mention, simply
desintegrates the very definition of compilation. ALL is compiler...
An image synthesis program (say, a ray-tracer like POV-Ray) is a
compiler. TeX is a compiler. Etc. ... Perhaps, if you wish. But still,
most people *USE* TeX or POV-Ray to make images or formatted documents.
So, I think that your opponent (was it Alistair Bayley?) is mostly
right claiming that people *write compilers* rarely. Even if I accept
your philosophy that all/most data processing activities is a *kind*
of compilation, in order to keep some minimum of discipline, I believe
that it is good to assume that
+ Compilers are *universal*; they should handle a large set of sources,
transforming them in something digested, reformatted, rendered visually
etc.
+ The output of the compiler *should, at least conceptually* preserve the
semantics - as we see it - of the source. Thus, say, a game is not
a compiler.
+ They are more or less autonomous. TeX is a compiler. An add-on, say,
a LaTeX macro-package (or an #included script to POV-Ray) are not, they
just enrich the grammar of processed documents.
+ Compilers must respect some criteria of decency. (This is my idée
fixe, I used to insist on that during all my compilation courses...)
They are not allowed to break on erroneous data. They MUST terminate
(gracefully). Etc.
What is the percentage of programs written by average Norwegian salmon
eaters which respect that? Concerning local French snail-eaters ... well,
I lost all illusions quite a time ago.
Jerzy Karczmarczuk
PS. About the subject (when to teach IO): don't be sectarians. If
a programming course insists on algorithmics, the IO issues can be
postponed a bit. If it insists on practical data processing, IO
should come in immediately. A programming course should be
harmonious, homogeneous, well assembled, interesting, and easy to
put into practice (...sorry for triviality, you ALL know that...),
and the details depend on the language and on the teacher. In Scheme
it is easier than in Haskell.