From: Walter Bright <boost@digitalmars.com>
To: git@vger.kernel.org
Subject: Re: [RFC] Convert builin-mailinfo.c to use The Better String Library.
Date: Fri, 07 Sep 2007 13:22:53 -0700 [thread overview]
Message-ID: <fbsbul$dg0$1@sea.gmane.org> (raw)
In-Reply-To: <85wsv26cv8.fsf@lola.goethe.zz>
David Kastrup wrote:
> Again, C won't keep you from shooting yourself in the foot.
Right, it won't. A good systems language should do what it can to
prevent the programmer from *inadvertently* shooting himself in the
foot, while allowing him to *deliberately* shoot himself in the foot.
In the example loop, the cases I pointed out were ones where, if one
changes part of the code (such as the array dimension, or the array
type, etc.), then there are multiple places in the source that must be
updated to reflect it. The reality of human programmers is we update one
or two places, and overlook the third place, and we now have a bug.
Saying that one should just be a better programmer and not make such
mistakes is a pipe dream.
Ideally, each facet of the design of the code should have a single point
where it can be changed, and then all dependencies on that design should
be automatically updated. That way, nothing gets overlooked. Doing this
in C, such as using a #define for the array dimension, involves extra work.
It's a truism that if it involves extra work, then it often gets omitted.
Doesn't "A design is perfect not when there is no longer anything you
can add to it, but if there is no longer anything you can take away."
apply here? Going from:
void foo(int array[10])
{
for (int i = 0; i < 10; i++)
{ int value = array[i];
... do something ...
}
}
to:
void foo(int[] array)
{
foreach (value; array)
{
... do something ...
}
}
takes a lot of frankly unnecessary things away, each of which is a
potential source of error when maintaining the code.
> No, because programmers get things wrong.
Exactly. That goes back to my point that a good language should help
prevent inadvertent errors, while still allowing deliberate choices. D
approaches this by making the correct approach essentially be the one
with minimal typing effort. To deliberately shoot yourself in the foot
usually requires extra typing. For our loop example, we can still write
the C style loop (with all its potential problems) in D, but it requires
extra effort to put in those potential problems. The easier, simpler way
doesn't have the problems.
(The issue I have with C++'s fixes to various problems is they require
extra typing (like the loop example), so guess what, people being people
tend to not use them. This results in endless attempts to try and push
C++ programmers into using the more verbose forms, a strategy I suspect
will be ultimately futile.)
> You can tell C compilers to
> check all array accesses, but that is a performance issue.
Runtime checking of arrays in D is a performance issue too, so it is
selectable via a command line switch. But more importantly,
1) Static type checking of fixed size arrays works, so errors can be
caught at compile time.
2) For dynamically sized arrays, the dimension of the array is carried
with the array, so loops automatically loop the correct number of times.
No runtime check is necessary, and it's easier for the code reviewer to
visually check the code for correctness.
------
Walter Bright
http://www.digitalmars.com C, C++, D programming language compilers
http://www.astoriaseminar.com Extraordinary C++
next prev parent reply other threads:[~2007-09-07 20:23 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-04 20:50 [RFC] Convert builin-mailinfo.c to use The Better String Library Lukas Sandström
2007-09-04 21:38 ` Alex Riesen
2007-09-04 23:01 ` Pierre Habouzit
2007-09-05 14:54 ` Kristian Høgsberg
2007-09-05 17:29 ` Matthieu Moy
2007-09-06 2:30 ` Miles Bader
2007-09-06 4:48 ` Dmitry Kakurin
2007-09-06 4:59 ` Shawn O. Pearce
2007-09-06 9:12 ` Andreas Ericsson
2007-09-06 9:35 ` Junio C Hamano
2007-09-06 10:21 ` Andreas Ericsson
2007-09-06 9:52 ` David Kastrup
2007-09-06 5:03 ` Miles Bader
2007-09-06 12:08 ` Johannes Schindelin
2007-09-06 17:50 ` Linus Torvalds
2007-09-07 0:21 ` Dmitry Kakurin
2007-09-07 0:38 ` Linus Torvalds
2007-09-07 1:08 ` Dmitry Kakurin
2007-09-07 1:27 ` Linus Torvalds
2007-09-07 3:09 ` Dmitry Kakurin
2007-09-07 5:48 ` David Symonds
2007-09-07 6:15 ` Theodore Tso
2007-09-20 14:06 ` Steven Burns
2007-09-20 14:56 ` Andreas Ericsson
2007-09-07 6:31 ` Andreas Ericsson
2007-09-07 22:17 ` Dmitry Kakurin
2007-09-07 22:28 ` David Kastrup
2007-09-08 0:37 ` Dmitry Kakurin
2007-09-08 6:25 ` David Kastrup
2007-09-09 0:29 ` Andreas Ericsson
2007-09-07 6:52 ` David Kastrup
2007-09-07 10:28 ` Johannes Schindelin
2007-09-07 10:26 ` Johannes Schindelin
2007-09-07 6:50 ` David Kastrup
2007-09-07 1:12 ` Linus Torvalds
2007-09-07 1:40 ` alan
2007-09-07 5:09 ` Walter Bright
2007-09-07 7:40 ` David Kastrup
2007-09-07 8:15 ` Walter Bright
2007-09-07 8:26 ` David Kastrup
2007-09-07 9:14 ` Walter Bright
2007-09-07 9:31 ` David Kastrup
2007-09-07 20:22 ` Walter Bright [this message]
2007-09-07 20:27 ` David Kastrup
2007-09-07 23:16 ` Walter Bright
2007-09-08 23:50 ` Andreas Ericsson
2007-09-09 0:37 ` Pierre Habouzit
2007-09-09 1:36 ` Andreas Ericsson
2007-09-07 11:36 ` Wincent Colaiuta
2007-09-07 9:41 ` Pierre Habouzit
2007-09-07 19:03 ` Walter Bright
2007-09-07 19:31 ` David Kastrup
2007-09-07 20:49 ` Walter Bright
2007-09-07 19:41 ` Pierre Habouzit
2007-09-07 19:51 ` David Kastrup
2007-09-07 19:59 ` Pierre Habouzit
2007-09-07 20:40 ` Walter Bright
2007-09-07 20:56 ` Pierre Habouzit
2007-09-07 22:54 ` Walter Bright
2007-09-08 0:56 ` John 'Z-Bo' Zabroski
2007-09-08 6:36 ` David Kastrup
2007-09-19 19:56 ` Steven Burns
2007-09-07 3:06 ` Wincent Colaiuta
2007-09-07 4:06 ` Paul Wankadia
2007-09-07 4:30 ` Nicolas Pitre
2007-09-07 9:19 ` Wincent Colaiuta
2007-09-07 6:25 ` Andreas Ericsson
2007-09-07 10:56 ` Johannes Schindelin
2007-09-07 11:54 ` Andreas Ericsson
2007-09-07 12:33 ` Wincent Colaiuta
2007-09-07 12:55 ` Karl Hasselström
2007-09-07 13:58 ` Andreas Ericsson
2007-09-07 14:13 ` Wincent Colaiuta
2007-09-09 0:09 ` Andreas Ericsson
2007-09-07 16:09 ` David Kastrup
2007-09-07 11:30 ` Wincent Colaiuta
2007-09-07 8:36 ` Walter Bright
2007-09-07 9:41 ` Andreas Ericsson
2007-09-07 19:23 ` Walter Bright
2007-09-07 19:40 ` David Kastrup
2007-09-09 0:25 ` Andreas Ericsson
2009-09-17 16:23 ` Bernd Jendrissek
2007-09-07 11:52 ` Wincent Colaiuta
2007-09-07 19:25 ` Walter Bright
2007-09-22 16:52 ` Steven Burns
2007-09-07 6:47 ` David Kastrup
2007-09-07 7:41 ` Andy Parkins
2007-09-07 8:08 ` David Kastrup
2007-09-07 10:21 ` Johannes Schindelin
2007-09-08 0:32 ` Dmitry Kakurin
2007-09-08 6:24 ` David Kastrup
2007-09-08 23:25 ` Alex Riesen
2007-09-24 13:41 ` figo
2007-09-24 13:57 ` David Kastrup
2007-09-25 19:19 ` Steven Burns
2007-09-25 19:55 ` David Kastrup
2012-05-22 18:30 ` Syed M Raihan
2010-06-10 19:12 ` Ian Molton
2010-06-11 12:23 ` Jakub Narebski
2010-06-11 13:33 ` Dario Rodriguez
2007-09-05 15:27 ` Kristian Høgsberg
2007-09-07 10:47 ` Lukas Sandström
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='fbsbul$dg0$1@sea.gmane.org' \
--to=boost@digitalmars.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).