comp.lang.ada
 help / color / mirror / Atom feed
From: "Robert Kawulak" <tigrisek@interia.pl>
Subject: Re: Ada Popularity: Comparison of Ada/Charles with C++ STL (and Perl)
Date: Sun, 26 Sep 2004 12:36:41 +0200
Date: 2004-09-26T12:36:41+02:00	[thread overview]
Message-ID: <cj670d$rfg$1@nemesis.news.tpi.pl> (raw)
In-Reply-To: 1700922.2nPlMsa4Ny@linux1.krischik.com

Hi!

(Sorry for mixing quotations of your post, it was easier for me to respond
this way).

> In 99.99% of all cases I don't need strings on user defined types. I need
> base_string<char>. I can see that I one day might need
> base_string<wchar_t>, but I have not until now. They made all that funky
> design which I just never need.

    And the best thing is that if you don't need it, you don't have to use
it. Yet still there is this 0.01% of cases when this approach is extremely
useful because of its flexibility. E.g. when you want a class of
case-insensitive strings - you just reuse the basic string template like
this:

//class defining character traits
class my_char_traits: public std::char_traits<char>
{
  //here you just redefine simple comparison
  //functions like eq() to be case-insensitive
};

//case-insensitive string class
typedef std::basic_string<char, my_char_traits> cis_string;

> Would have been so easy, so usefull but it would not have been a template.
> The "all is template" religion got in there way.

    Actually you might not even know that std::string is a typedef of
template instantiation and still use it as if nothing had happened.
    And compare this example to creating completely new string class just
because you want this small difference in behaviour - and you have an
explanation for making everything a template. :-) Similar results could be
achieved using polymorphysm, but the "template religion" has got one great
advantage - all the binding is done during compilation, and moreover many
functions are inlined (!) - this allows a performance during runtime other
approaches couldn't have...

> And for that:
>
> int
> string::asInt();
>  throw (bad_value);
>
> and
>
> explicit
> string::string (int value)
>   throw();
>
> are missing. Two functions I am missing on daily basis. Sure, I am an
> experienced programmer, I can do that myself - but a proper library should
> have all the function one need on a daily basis.

    std::string doesn't have int conversion functions, because it's not its
job to do this. Maybe you don't see the whole idea of the design of C++
standard library. It's goal is to divide responsibility for diffrent
features between separate parts of library - that's where it's flexibility
and extensibility comes from.

> And just for the record: atio is a C function - you need the overhead of
> convertion the std::string into a char* and std::strstream seem quite
> heavy
> weight for just a simple task of convertion a string from and to an int.

    Actually, the overhead of conversion is virtually none (at least in
Stlport implementation). You just call std::string::c_str() which just
returns a pointer to the data, and which is also inlined.

    If you need string-to-int conversion and vice-versa, then it's the job
of std::stringstream (std::strstream is obsolete...) - there's a very easy
way to do this:

/********************************************/

#include <string>
using std::string;

#include <sstream>
typedef std::ostringstream oss;
typedef std::istringstream iss;

int i = 4;
string MyString("2");



//step-by-step:

void f() {

  //instead of std::string::fromInt(int)
  oss MyOutputStream;
  MyOutputStream << i;
  MyString = MyOutputStream.str();

  //instead of std::string::toInt()
  iss MyInputStream;
  MyInputStream.str(MyString);
  MyInputStream >> i;

} //f()



//same things as one-liners:

void g() {

  MyString = static_cast<oss &>(oss() << i).str();
  iss(MyString) >> i;

} //g()



//you may also define two simple functions to do this for you:

inline string ToString(int i)
{
  return static_cast<oss &>(oss() << i).str();
} //ToString()

inline int ToInt(const string & s)
{
  int i;
  iss(s) >> i;
  return i;
} //ToInt()

void h() {

  //couldn't be simplier ;-)
  MyString = ToString(i);
  i = ToInt(MyString);

} //h()

/********************************************/

    Most compilers will optimise away the initialisations etc., so in this
case you don't have to worry about the overhead.
    But if you really can't live without this ability in the string class,
then nothing stands on a way to extend std::string with these two functions
using inheritance (note, however, that you will also have to re-implement
constructors you want to use. Constructor inheritance is not a part of
standard C++ yet).

    C++ is not that evil, you just have to switch your mind to a different
way of thinking to understand it well... ;-) It *is* difficult, but once you
feel it, it gives you a lot of abilities. Please don't understand me wrong -
I don't claim I'm some kind of C++ guru, and the following is just my
general opinion, not an answer for your particular post. Why I think many
people think of C++ as so dangerous and letting you easily shoot your foot
is that unfortunately not many people know it as well as they should to use
it properly. I mean C++ is not a "toy language" - if you want something
easy, use Java. But be prepared for many limitations and restrictions (which
are there for your own good, but if you exactly know what you are doing,
they are inconvenient).
    I also don't say C++ is better than Ada - it depends on how a programmer 
is familiar with those languages and how effectively can write good, safe 
programs using them. Of course C++ forces to learn more to write such 
programs, but in turn provides you with much more flexibility and 
usefulness.

Best regards,
Robert Kawulak

































  reply	other threads:[~2004-09-26 10:36 UTC|newest]

Thread overview: 229+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-22  0:21 Ada Popularity: Comparison of Ada/Charles with C++ STL (and Perl) Kevin Cline
2004-09-22  2:16 ` Pylinius
2004-09-22  8:50 ` Björn Persson
2004-09-22 13:38   ` Benjamin Ketcham
2004-09-22 14:07     ` Hyman Rosen
2004-09-22 15:16     ` Cesar Rabak
2004-09-23  8:22     ` Kevin Cline
2004-09-23 10:52     ` Anders Wirzenius
2004-09-23 10:54       ` stephane richard
2004-09-23 11:17       ` Jean-Pierre Rosen
2004-09-23 11:47       ` Marius Amado Alves
2004-09-23 13:34         ` Anders Wirzenius
2004-09-23 16:53           ` Warren W. Gay VE3WWG
2004-09-23 18:30           ` Kevin Cline
2004-09-23 19:00             ` Marius Amado Alves
2004-09-24  6:04               ` [OT]Screen ergonomics, was " Anders Wirzenius
2004-09-26  7:22               ` Kevin Cline
2004-09-23 17:19         ` Cesar Rabak
2004-09-23  8:51   ` Kevin Cline
2004-09-23 11:01     ` Georg Bauhaus
2004-09-23 15:59       ` Matthew Heaney
2004-09-23 16:38       ` Kevin Cline
2004-09-24  2:47         ` Matthew Heaney
2004-09-24 13:43           ` Hyman Rosen
2004-09-24 17:47             ` Mark Lorenzen
2004-09-24 18:16               ` Matthew Heaney
2004-09-29 19:29                 ` Mark Lorenzen
2004-09-29 22:44                   ` Matthew Heaney
2004-09-25 14:09             ` Martin Krischik
2004-09-26  7:08           ` Kevin Cline
2004-09-26 15:13             ` Matthew Heaney
2004-09-23 19:10     ` jayessay
2004-09-23 21:13       ` Adam Ruth
2004-09-27  2:12         ` Keith H Duggar
2004-09-27 14:21           ` Adam Ruth
2004-09-27 14:51             ` Chris Humphries
2004-09-27 17:10               ` Adam Ruth
2004-09-27 20:16               ` Keith H Duggar
2004-09-27 21:15                 ` Chris Humphries
2004-09-28  4:46                   ` Keith H Duggar
2004-09-27 20:34             ` Kevin Cline
2004-09-27 21:15               ` Adam Ruth
2004-09-23 23:05     ` Brian May
2004-09-24  3:06       ` Matthew Heaney
2004-09-24  3:52       ` Randy Brukardt
2004-09-24  5:15         ` Matthew Heaney
2004-09-24 19:12         ` Kevin Cline
2004-09-24 20:54           ` Randy Brukardt
2004-09-24 21:23             ` Matthew Heaney
2004-09-27 13:22           ` Chris Humphries
2004-09-27 13:45             ` Chris Humphries
2004-09-27 21:31             ` Kevin Cline
2004-09-27 23:51               ` Brian May
2004-09-28 12:21               ` Chris Humphries
2004-09-26 17:10         ` jayessay
2004-09-26 20:00           ` Georg Bauhaus
2004-09-27 14:45             ` jayessay
2004-09-24  0:19     ` Stephen Leake
2004-09-24 14:54       ` Cesar Rabak
2004-09-22 15:27 ` James Alan Farrell
2004-09-22 21:24   ` Simon Wright
2004-09-23  0:03     ` Brian May
2004-09-23  9:17       ` Kevin Cline
2004-09-23  0:44     ` Jeffrey Carter
2004-09-23 11:08       ` Georg Bauhaus
2004-09-23  8:15     ` Martin Krischik
2004-09-23 16:20       ` Matthew Heaney
2004-09-23 19:23         ` Simon Wright
2004-09-24  7:19         ` Martin Krischik
2004-09-24 16:31           ` Matthew Heaney
2004-09-24 19:24           ` Kevin Cline
2004-09-25 14:04             ` Martin Krischik
2004-09-26 10:36               ` Robert Kawulak [this message]
2004-09-26 15:35                 ` Martin Krischik
2004-09-28 17:46                   ` Robert Kawulak
2004-09-29  7:49                     ` Martin Krischik
2004-09-29 12:01                       ` Xenos
2004-09-29 18:16                       ` Robert Kawulak
2004-09-30 15:55                         ` Martin Krischik
2004-09-27 22:22               ` Kevin Cline
2004-09-28  7:51                 ` Martin Krischik
2004-09-29  3:04                   ` Kevin Cline
2004-09-29  6:03                     ` Dale Stanbrough
2004-09-29 13:31                     ` Georg Bauhaus
2004-09-29 13:46                     ` Matthew Heaney
2004-09-30  3:42                       ` Kevin Cline
2004-09-30  7:54                         ` Dale Stanbrough
2004-09-30 16:50                         ` Matthew Heaney
2004-10-01  0:04                           ` Kevin Cline
2004-10-01 12:25                             ` Georg Bauhaus
2004-10-02  7:35                               ` K
2004-10-02 10:00                                 ` Brian May
2004-10-02 20:39                                   ` Kevin Cline
2004-10-03  2:17                                     ` Brian May
2004-10-02 13:40                                 ` Matthew Heaney
2004-10-02 23:33                                 ` Randy Brukardt
2004-10-03 12:47                                   ` Stephen Leake
2004-09-30 19:01                         ` Björn Persson
2004-09-30 23:54                           ` Kevin Cline
2004-10-01 16:11                             ` Björn Persson
2004-10-02  6:48                               ` K
2004-10-02 10:41                                 ` Björn Persson
2004-10-02 13:32                                 ` Matthew Heaney
2004-10-04  9:02                                 ` Ole-Hjalmar Kristensen
2004-09-23  9:00   ` Kevin Cline
2004-09-23 11:27     ` Ole-Hjalmar Kristensen
2004-09-23 19:11       ` Kevin Cline
2004-09-23 21:01         ` Alexander E. Kopilovich
2004-09-26  6:53           ` Kevin Cline
2004-09-26 15:29             ` Alexander E. Kopilovich
2004-09-23 21:54         ` Eric Jacoboni
2004-09-24  9:44         ` Ole-Hjalmar Kristensen
2004-09-24  9:50         ` Georg Bauhaus
2004-09-24 13:47           ` Matthew Heaney
2004-09-24 14:14             ` Dmitry A. Kazakov
2004-09-25 14:17               ` Martin Krischik
2004-09-27  8:12                 ` Dmitry A. Kazakov
2004-09-27 12:59                   ` Georg Bauhaus
2004-09-27 13:53                     ` Dmitry A. Kazakov
2004-09-26  7:17               ` Kevin Cline
2004-09-27  8:19                 ` Dmitry A. Kazakov
2004-09-27 13:03                   ` Georg Bauhaus
2004-09-27 14:00                     ` Dmitry A. Kazakov
2004-09-24 16:28           ` Kevin Cline
2004-09-24 17:45             ` Georg Bauhaus
2004-09-24 20:14             ` Matthew Heaney
2004-09-24 20:10               ` Frank J. Lhota
2004-09-27  8:29                 ` Dmitry A. Kazakov
2004-09-26  7:13               ` Kevin Cline
2004-09-26 15:15                 ` Matthew Heaney
2004-09-27 14:31                   ` Kevin Cline
2004-09-27 15:05                     ` Dmitry A. Kazakov
2004-09-28  4:22                       ` Kevin Cline
2004-09-28  8:20                         ` Dmitry A. Kazakov
2004-09-28 23:26                           ` Robert Kawulak
2004-09-29 12:19                             ` Dmitry A. Kazakov
2004-09-30 18:52                               ` Robert Kawulak
2004-10-01  7:55                                 ` Dmitry A. Kazakov
2004-10-03 19:35                                   ` Robert Kawulak
2004-10-04 10:24                                     ` Dmitry A. Kazakov
2004-10-06 17:28                                       ` Robert Kawulak
2004-10-07  8:24                                         ` Dmitry A. Kazakov
2004-10-10 21:09                                           ` Robert Kawulak
2004-10-11  8:08                                             ` Dmitry A. Kazakov
2004-10-15  9:34                                               ` Robert Kawulak
2004-10-15 16:58                                                 ` Martin Krischik
2004-09-29 15:44                             ` Matthew Heaney
2004-09-30 18:27                               ` Robert Kawulak
2004-09-28 17:21                       ` Robert Kawulak
2004-09-29  1:38                         ` Georg Bauhaus
2004-09-29 18:08                           ` Robert Kawulak
2004-09-30 18:30                             ` Georg Bauhaus
2004-09-29  8:08                         ` Dmitry A. Kazakov
2004-09-29 18:11                           ` Robert Kawulak
2004-09-30  8:57                             ` Dmitry A. Kazakov
     [not found]                               ` <cji06f$17a$2@atlantis.news.tpi.pl>
2004-10-01  8:58                                 ` Dmitry A. Kazakov
2004-10-03 19:53                                   ` Robert Kawulak
2004-10-04 10:15                                     ` Dmitry A. Kazakov
2004-10-04 12:16                                       ` Matthew Heaney
2004-10-04 13:21                                         ` Dmitry A. Kazakov
2004-10-06 17:20                                       ` Robert Kawulak
2004-10-07 10:08                                         ` Dmitry A. Kazakov
2004-10-10 22:21                                           ` Robert Kawulak
2004-10-11  8:46                                             ` Dmitry A. Kazakov
2004-10-15  9:25                                               ` Robert Kawulak
2004-10-15 11:56                                                 ` Dmitry A. Kazakov
2004-10-20 20:06                                                   ` Robert Kawulak
2004-10-21  2:51                                                     ` Kevin Cline
2004-10-21  8:39                                                     ` Dmitry A. Kazakov
2004-10-27 21:41                                                       ` Robert Kawulak
2004-10-01 13:02                                 ` Robert Kawulak
2004-10-28 10:26                                 ` Larry Kilgallen
2004-09-27 16:21                     ` Matthew Heaney
2004-09-28  2:47                       ` Kevin Cline
2004-09-28  4:03                         ` Brian May
2004-09-28  4:46                         ` Matthew Heaney
2004-09-29  3:14                           ` Kevin Cline
2004-09-29  3:50                             ` Matthew Heaney
2004-09-29  3:52                               ` Matthew Heaney
2004-09-29 13:44                             ` Matthew Heaney
2004-09-26  6:32           ` Kevin Cline
2004-09-26 15:05             ` Matthew Heaney
2004-09-27 14:35               ` Kevin Cline
2004-09-23 19:30       ` jayessay
2004-09-23 19:42     ` Alexander E. Kopilovich
2004-09-22 21:05 ` Georg Bauhaus
2004-09-23  9:20   ` Kevin Cline
2004-09-23 16:58     ` Warren W. Gay VE3WWG
2004-09-23  6:24 ` Matthew Heaney
2004-09-23 11:23   ` Jeff C r e e.m
2004-09-23 11:35     ` Georg Bauhaus
2004-09-23 17:05       ` Pascal Obry
2004-09-23 17:07       ` Pascal Obry
2004-09-23 18:30     ` Matthew Heaney
2004-09-23 19:31       ` Simon Wright
2004-09-24  0:09         ` Stephen Leake
2004-09-25 10:41           ` Simon Wright
2004-09-23 18:24   ` Kevin Cline
2004-09-23 17:12 ` Dan Andreatta
2004-09-23 18:10   ` Pascal Obry
2004-09-23 19:21     ` Eric Jacoboni
2004-09-23 19:31       ` Ed Falis
2004-09-23 19:37         ` Eric Jacoboni
2004-09-24 20:09       ` Kevin Cline
2004-09-25  0:18         ` Eric Jacoboni
2004-09-26  6:37           ` Kevin Cline
2004-09-26 14:57             ` Matthew Heaney
2004-09-23 19:24     ` Eric Jacoboni
2004-09-23 21:30       ` Eric Jacoboni
2004-09-26 11:44         ` Jacob Sparre Andersen
2004-09-26 17:02         ` jayessay
2004-09-24  8:26       ` Ole-Hjalmar Kristensen
2004-09-23 22:08     ` Anders Gidenstam
2004-09-24  8:10     ` Ole-Hjalmar Kristensen
2004-09-24 17:43       ` Dan Andreatta
2004-09-24 17:40     ` Dan Andreatta
2004-09-24 18:50       ` Pascal Obry
2004-09-23 22:34 ` Randy Brukardt
2004-09-23 23:11   ` Dale Stanbrough
2004-09-24  1:57     ` Matthew Heaney
2004-09-24  6:32       ` Dale Stanbrough
2004-09-24 21:01         ` Randy Brukardt
2004-09-24  0:43   ` Jeffrey Carter
2004-09-24  1:51   ` Matthew Heaney
2004-09-24 20:21     ` Kevin Cline
2004-09-26 11:09 ` Jacob Sparre Andersen
2004-09-27 13:49   ` Björn Persson
2004-10-12  5:21 ` Ada Popularity: Comparison of languages Brian May
2004-10-12 11:43   ` Peter Hermann
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox