comp.lang.ada
 help / color / mirror / Atom feed
From: Richard Riehle <richard@adaworks.com>
Subject: Re: What is faster Ada or C?
Date: Sun, 09 Dec 2001 11:32:26 -0800
Date: 2001-12-09T19:35:57+00:00	[thread overview]
Message-ID: <3C13BC4A.1C1EBE8B@adaworks.com> (raw)
In-Reply-To: 568ede3c.0112071202.56fc9f@posting.google.com

Hyman Rosen wrote:

> In C++ it is perfectly legal to separate the declaration of a function
> from its implementation, even when it's inline:
>
>     struct a { int twice(int x); };
>     inline int a::twice(int x) { return 2 * x; }

Unless something has changed, C++ requires the full definition of the
inlined function at the place where it is declared.   Stroustrup does make
a little exception for this in his note about the "absence of unusually
clever compilation and linking facilities" (The C++ Programming
Language, Third Edition, page 144).    At present, the most compilers
require full definition in the header file.

> Any code which wants to call the function must arrange to see the definition,
> which is usually done through an #include. In Ada, the compiler can manage to
> find the definition on its own, because of the library system, but that's not
> exactly "separate compilation".

Well, actually, it is separate compilation.  Of course, if one chooses to use
some new definition of separate compilation, so be it.


Ada permits the designer to specify a declaration in the package specification
as inlined:

      package Not_C_Plus_Plus is
           procedure Friendly_Inline;
           pragma Inline(Friendly_Inline); -- no full definition required or permitted
      end Not_C_Plus_Plus;

This specification is compiled independently of its implementation.  If we really
want to defer the implementation to another separate compilation, we could,


    package body Not_C_Plus_Plus is
           procedure Friendly_Inline is separate;
      end Not_C_Plus_Plus;

thereby separating the compilation of the [definition of] the implementing
code to yet another separate subunit.

    separate (Not_C_Plus_Plus)
    procedure Friendly_Inline is
    begin
        -- algorithmic implementation
    end Friendly_Inline;

The library unit model of Ada, along with its many facilities for separate
compilation are one of the useful features of the language.    In fact, Ada's
separate compilation  helps maintain consistency across multiple library
units when development is being performed by multiple programmers.
The need for a #include, along with associated compiler directives in C++
is not as robust a model for preserving unit integrity as the Ada model,
even though the C++ model does have some offsetting advantages under
some circumstances.

Richard Riehle









  reply	other threads:[~2001-12-09 19:32 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-01  1:22 What is faster Ada or C? Heiko Hamann
2001-12-01  1:43 ` Aaro Koskinen
2001-12-03  8:49   ` John McCabe
2001-12-04 23:00     ` Florian Weimer
2001-12-05 15:53       ` Ted Dennison
2001-12-06  0:17         ` Jeffrey Carter
2001-12-10 15:18   ` Dale Pontius
2001-12-10 17:44     ` Pascal Obry
2001-12-01  3:44 ` Nick Roberts
2001-12-01 20:09   ` Heiko Hamann
2001-12-02  4:49     ` Jeffrey Carter
2001-12-02 10:44       ` Pascal Obry
2001-12-04 11:43       ` john mann
2001-12-04 14:25         ` Ted Dennison
2001-12-05  9:46           ` John McCabe
2001-12-02 10:07     ` Mark Lundquist
2001-12-03 14:43       ` Ted Dennison
2001-12-09 12:31       ` Robert Dewar
2001-12-01  9:26 ` Gisle Sælensminde
2001-12-01 10:13 ` Pascal Obry
2001-12-02 17:49   ` Bertrand Augereau
2001-12-03 14:39 ` Ted Dennison
2001-12-03 16:19   ` Jeffrey Carter
2001-12-03 19:04     ` Ted Dennison
2001-12-03 20:56       ` Georg Bauhaus
2001-12-03 21:17         ` Preben Randhol
2001-12-03 21:20           ` Preben Randhol
2001-12-04 23:02           ` Florian Weimer
2001-12-05 16:05             ` Georg Bauhaus
2001-12-06 23:33               ` Florian Weimer
2001-12-04  2:35         ` Jeffrey Carter
2001-12-04  6:54           ` Steven Deller
2001-12-04 22:05             ` Bertrand Augereau
2001-12-06  4:25               ` Richard Riehle
2001-12-07 20:02                 ` Hyman Rosen
2001-12-09 19:32                   ` Richard Riehle [this message]
2001-12-11 16:14                     ` Hyman Rosen
2001-12-14  0:36                       ` Will
2001-12-19 22:23                         ` Hyman Rosen
2001-12-17 17:37                       ` Richard Riehle
2001-12-20 23:02                         ` Hyman Rosen
2001-12-23  4:12                           ` Will
2001-12-23  6:41                             ` James Rogers
2001-12-04 22:37         ` Pascal Obry
2001-12-05 15:57           ` Georg Bauhaus
2001-12-05 17:12             ` Larry Kilgallen
2001-12-07 13:21     ` Jacob Sparre Andersen
2001-12-07 15:16       ` Aaro Koskinen
2001-12-07 16:50         ` Preben Randhol
2001-12-07 17:03           ` Jacob Sparre Andersen
2001-12-07 17:26             ` Aaro Koskinen
2001-12-07 18:32               ` Preben Randhol
2001-12-07 20:23               ` Wes Groleau
2001-12-07 17:11           ` Ted Dennison
2001-12-07 18:47             ` Preben Randhol
2001-12-07 16:16       ` Preben Randhol
2001-12-07 17:04         ` Jacob Sparre Andersen
2001-12-07 16:26       ` Ted Dennison
2001-12-07 17:08         ` Jacob Sparre Andersen
2001-12-09 12:27           ` Robert Dewar
2001-12-10 16:51             ` Jacob Sparre Andersen
2001-12-10 17:33               ` Jeff Creem
2001-12-07 16:45       ` Georg Bauhaus
2001-12-07 17:02         ` Preben Randhol
2001-12-07 17:10         ` Jacob Sparre Andersen
2001-12-07 18:12       ` Pascal Obry
2001-12-07 18:50         ` Preben Randhol
2001-12-07 18:54           ` Pascal Obry
2001-12-07 20:40             ` Preben Randhol
2001-12-07 22:01               ` Pascal Obry
2001-12-07 18:19       ` Jeffrey Carter
2001-12-10  9:59       ` Ole-Hjalmar Kristensen
  -- strict thread matches above, loose matches on Subject: below --
2001-12-02 19:37 Gautier Write-only-address
2001-12-23 10:33 Gautier Write-only-address
replies disabled

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