....
The [C] language itself doesn't need anything, the
programmer however might appreciate some language
features which makes him/her more productive.
C is very feature rich. You can do 97% of what needs to be done with C with
just the C language and stdio.h, if you exclude a handful of functions that
were placed in the 'wrong' include files. If you don't like extra coding
you can use string.h. There is no need for ctype.h whatsoever. The
remainder of the C library adds more "productive enhancing" code than your
heart could ever desire ... If you took a language completely devoid of
features, like BF which you've cited, then perhaps you have an argument.
But if you consider features not strictly necessary to make a
programming language Turing complete as unnecessary, maybe
BF is the language for you.
1) My understanding is that no programming language can be implemented as
Turing complete due to architecture constraints such as fixed size integers
and limited memory.
2) BF is novel, but it is currently too simple to program with
effectiveness. One of the serious issues it has is it's minimalism.
Various attempts have been made to enhance BF, such as PBrain and Toadskin.
Procedures is one of the most common thing added to the language. PBrain
adds that functionality but uses integers to represent the procedure. This
complicates the use of the procedures. It also complicates the conversion
of BF with PBrain procedures to other languages like C, since a cell may
have a changing value, therefore call different procedures at different
times. Toadskin adds the ability to group operators into named sequences,
which is procedure like and Forth-like. IMO, BF's serious problem is that
it is lacking direct, basic support for integers and characters as ASCII.
Values must be constructed from increment or decrement loops. I've not seen
variants of BF add the capability to express integers or characters
directly. That ability combined with the ability to do procedures would
make
it roughly as powerful as a simple C compiler of yesteryear. You can check
out Esolangs for more info on such languages:
http://esolangs.org/wiki/Main_Page
Even though it might be possible to compile those languages to C, the
language constructs may still be very alien to C programmers. And the
code these language constructs generate would never be written by a sane
C programmer, simply because it is not practical if you have write it
yourself.
I would disagree with both claims. One could claim that being able to do so
depends on skill level and work ethic. No skill? Lazy?
If things don't work as expected I suspect the code being fed into the
compiler first, only as a last resort I inspect the assembly output of
the compiler.
Ah, but you do check assembly, in contrast to NK's claim that that is
laughable.
In the past twenty years I have run into maybe 3 or 4
compiler bugs, and about the same number in the libraries that came with
them (on mainstream compilers, the statistics are a lot worse for some
oddball compilers).
Again, you've confirm my experiences in contrast to NK's claims.
Even if you analyze the assembly output, you still don't know if the
code executes as intended.
Exactly. You won't know the code executes as intended until it is executed,
which was why I asked this of NK:
RP> How do you confirm correctness of both high-level and
RP> low-level code with an imaginary machine? Is your
RP> confirmation of correctness imaginary also? ...
To which, I got more than one absurd response that imaginary
confirmation of correctness was entirely valid ...
Rod Pemberton