From: Andre <avsaway@hotmail.com>
Subject: Re: Ada bench : count words
Date: Wed, 30 Mar 2005 18:08:55 +0200
Date: 2005-03-30T18:08:55+02:00 [thread overview]
Message-ID: <d2eiuj$s01$1@news2.tilbu1.nb.home.nl> (raw)
In-Reply-To: <mailman.58.1111590593.23655.comp.lang.ada@ada-france.org>
Marius Amado Alves wrote:
>> I'll review this tomorrow on the bus to work (I think your program is
>> separating words at buffer end, and it should not).
>
>
> Done. Tmoran, sorry, my first sight was wrong, your algorithm is mostly
> fine. Minor reservations:
> - special statute given to CR; personally I think all characters
> (control or not) should count to total
> - reliance on Stream_Element representing one character; portable across
> all range of environments?
>
> My own program rewritten with Text_Streams attains the same speed as
> yours. The fact that it is structured doesn't hit performance
> significantly. Pragma Inline improves a little bit. Real times (ms) on
> my iBook, for input file repeated 2500 times, all compiled with only -O3:
> C ........................ 600
> Yours, or mine inlined ... 700
> Mine not inlined ......... 750
>
> So we should submit yours, or mine inlined. It will put Ada right after
> the Cs w.r.t. speed. W.r.t. executable file size Ada is much bigger. On
> my iBook:
> C ....... 15k
> Mine .... 423k
> Yours ... 459k
>
> W.r.t. source code size all are similar. Number of significant
> semicolons (Ada), or semicolons + {} blocks + #includes + #defines (C):
> C .............. 27
> Yours .......... 33
> Mine inlined ... 52
>
> My program follows for reference. It accepts the code for EOL as an
> argument. Default = 10 (LF).
>
> -- The Great Computer Language Shootout
> -- http://shootout.alioth.debian.org/
> --
> -- contributed by Guys De Cla
>
> with Ada.Characters.Handling;
> with Ada.Characters.Latin_1;
> with Ada.Command_Line;
> with Ada.Streams;
> with Ada.Streams.Stream_IO;
> with Ada.Strings.Fixed;
> with Ada.Text_IO;
> with Ada.Text_IO.Text_Streams;
>
> procedure Count_Words_Portable is
>
> use Ada.Characters.Handling;
> use Ada.Characters.Latin_1;
> use Ada.Command_Line;
> use Ada.Streams;
> use Ada.Streams.Stream_IO;
> use Ada.Text_IO;
> use Ada.Text_IO.Text_Streams;
>
> Buffer : Stream_Element_Array (1 .. 4096);
> Input_Stream : Ada.Text_IO.Text_Streams.Stream_Access
> := Ada.Text_IO.Text_Streams.Stream (Current_Input);
> EOL_Character_Pos : Stream_Element := Character'Pos (LF);
> Lines : Natural := 0;
> Words : Natural := 0;
> Total : Natural := 0;
> In_Word : Boolean := False;
> N : Stream_Element_Offset;
> Is_Separator : array (Stream_Element) of Boolean :=
> (0 .. 32 | 127 .. 159 => True, others => False);
>
> procedure Begin_Word is
> begin
> Words := Words + 1;
> In_Word := True;
> end;
>
> procedure End_Word is
> begin
> In_Word := False;
> end;
>
> procedure End_Line is
> begin
> Lines := Lines + 1;
> End_Word;
> end;
>
> procedure Count_Words (S : in Stream_Element_Array) is
> begin
> Total := Total + S'Length;
> for I in S'Range loop
> if S (I) = EOL_Character_Pos then
> End_Line;
> else
> if Is_Separator (S (I)) then
> if In_Word then End_Word; end if;
> else
> if not In_Word then Begin_Word; end if;
> end if;
> end if;
> end loop;
> end;
>
> pragma Inline (Begin_Word, End_Word, End_Line, Count_Words);
>
> begin
> begin
> EOL_Character_Pos := Stream_Element'Value (Argument (1));
> exception
> when Constraint_Error => null;
> end;
> Ada.Text_IO.Put_Line ("EOL =>" & Stream_Element'Image
> (EOL_Character_Pos));
>
> loop
> Read (Root_Stream_Type'Class (Input_Stream.all), Buffer, N);
> Count_Words (Buffer (1 .. N));
> exit when N < Buffer'Length;
> end loop;
>
> Ada.Text_IO.Put_Line
> (Natural'Image (Lines) &
> Natural'Image (Words) &
> Natural'Image (Total));
> end;
>
I checked with the Shootout side. The Ada program sent in was rated with
Error. So, maybe you can check why and correct it.
Andr�
next prev parent reply other threads:[~2005-03-30 16:08 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-19 16:22 Ada bench Pascal Obry
2005-03-19 16:55 ` Dr. Adrian Wrigley
2005-03-19 21:32 ` Michael Bode
2005-03-20 9:20 ` Pascal Obry
2005-03-20 9:39 ` Michael Bode
2005-03-20 11:16 ` Pascal Obry
2005-03-20 12:20 ` Dmitry A. Kazakov
2005-03-20 12:32 ` Pascal Obry
2005-03-21 1:42 ` (see below)
2005-03-21 2:24 ` (see below)
2005-03-21 15:00 ` (see below)
2005-03-21 3:54 ` Ed Falis
2005-03-21 12:20 ` Jeff C
2005-03-21 15:18 ` (see below)
2005-03-21 15:24 ` (see below)
2005-03-21 18:56 ` Isaac Gouy
2005-03-21 21:31 ` Randy Brukardt
2005-03-21 22:14 ` Ed Falis
2005-03-21 18:07 ` Pascal Obry
2005-03-20 10:11 ` Adrian Knoth
2005-03-20 10:30 ` Michael Bode
2005-03-21 23:27 ` Georg Bauhaus
2005-03-22 1:16 ` Ada bench : count words Marius Amado Alves
2005-03-22 10:59 ` Dmitry A. Kazakov
2005-03-22 11:57 ` Marius Amado Alves
2005-03-22 12:17 ` Dmitry A. Kazakov
2005-03-22 12:47 ` Marius Amado Alves
2005-03-22 13:08 ` Dmitry A. Kazakov
2005-03-22 13:28 ` Marius Amado Alves
2005-03-22 16:48 ` Marius Amado Alves
2005-03-22 17:34 ` Dmitry A. Kazakov
2005-03-27 20:14 ` jtg
2005-03-27 21:22 ` Dmitry A. Kazakov
2005-03-28 19:54 ` jtg
2005-03-28 20:56 ` Dmitry A. Kazakov
2005-03-29 12:40 ` jtg
2005-03-29 13:00 ` [OT] " Tapio Kelloniemi
2005-03-29 13:47 ` Dmitry A. Kazakov
2005-03-29 15:53 ` Tapio Kelloniemi
2005-03-29 16:17 ` Dmitry A. Kazakov
[not found] ` <k33j419lgei1ui89s26o1dlr9ccf1qe1hd@4ax.com>
2005-04-11 23:04 ` Marius Amado Alves
2005-03-29 13:47 ` Dmitry A. Kazakov
2005-04-01 20:58 ` Georg Bauhaus
2005-04-01 20:18 ` Pascal Obry
2005-03-22 12:53 ` Marius Amado Alves
[not found] ` <f205219321dd18dba878fab16b7cb50d@netcabo.pt>
2005-03-22 13:12 ` Marius Amado Alves
2005-03-23 16:58 ` Isaac Gouy
2005-03-22 13:58 ` Robert A Duff
2005-03-22 16:30 ` Marius Amado Alves
2005-03-22 16:41 ` Tapio Kelloniemi
2005-03-22 17:39 ` Marius Amado Alves
2005-03-22 18:59 ` Dmitry A. Kazakov
2005-03-22 19:08 ` Tapio Kelloniemi
2005-03-22 18:34 ` Georg Bauhaus
2005-03-22 19:32 ` Robert A Duff
2005-03-22 20:04 ` tmoran
2005-03-23 16:55 ` Isaac Gouy
[not found] ` <1820eab50b57f2fe1c4e8e50bb0f4fe5@netcabo.pt>
2005-03-22 22:49 ` Stephen Leake
2005-03-22 22:58 ` Robert A Duff
2005-03-22 23:27 ` Larry Kilgallen
2005-03-23 22:33 ` Robert A Duff
2005-03-24 5:02 ` Larry Kilgallen
[not found] ` <wccpsxqro0c.fsfOrganization: LJK Software <bM40pHW6P2KW@eisner.encompasserve.org>
2005-03-25 1:34 ` Robert A Duff
2005-03-22 12:22 ` Jeff C
2005-03-23 16:48 ` Isaac Gouy
2005-03-23 17:06 ` Isaac Gouy
2005-03-22 19:49 ` tmoran
2005-03-22 21:51 ` Dmitry A. Kazakov
2005-03-23 0:16 ` tmoran
2005-03-23 7:25 ` Dmitry A. Kazakov
2005-03-22 22:33 ` Marius Amado Alves
[not found] ` <00b362390273e6c04844dd4ff1885ee0@netcabo.pt>
2005-03-23 15:09 ` Marius Amado Alves
2005-03-23 19:00 ` tmoran
2005-03-23 19:30 ` tmoran
2005-03-23 21:38 ` tmoran
2005-03-25 7:30 ` Simon Wright
2005-03-25 9:38 ` tmoran
2005-03-25 16:20 ` Tapio Kelloniemi
2005-03-25 22:18 ` Ada:The High Performance Language for Hyperthreaded and Multicore CPUs; was " tmoran
2005-03-23 19:54 ` Tapio Kelloniemi
2005-03-23 20:39 ` Ada bench : word frequency Marius Amado Alves
2005-03-23 21:26 ` Isaac Gouy
2005-03-24 1:24 ` Marius Amado Alves
2005-03-24 17:23 ` Isaac Gouy
2005-03-24 19:52 ` Martin Dowie
2005-04-11 15:11 ` Marius Amado Alves
2005-03-24 20:16 ` Pascal Obry
2005-03-24 22:54 ` tmoran
2005-04-11 15:38 ` Marius Amado Alves
2005-03-24 21:18 ` Gautier Write-only
2005-04-11 15:32 ` Marius Amado Alves
2005-04-11 23:56 ` Robert A Duff
2005-04-28 4:04 ` Matthew Heaney
2005-04-28 20:40 ` Matthew Heaney
2005-03-23 21:38 ` Ada bench : count words tmoran
2005-03-24 20:19 ` tmoran
2005-03-24 21:00 ` Pascal Obry
2005-03-24 22:54 ` tmoran
2005-03-30 16:08 ` Andre [this message]
2005-03-30 16:36 ` Pascal Obry
2005-03-22 22:27 ` Dmitry A. Kazakov
2005-03-23 7:46 ` Pascal Obry
2005-03-23 7:56 ` Dmitry A. Kazakov
2005-03-23 13:38 ` Robert A Duff
2005-03-22 7:05 ` Ada bench Pascal Obry
2005-04-07 20:59 ` David Sauvage
2005-04-07 23:40 ` David Sauvage
2005-04-08 17:11 ` Pascal Obry
2005-04-08 17:39 ` tmoran
2005-04-08 18:49 ` David Sauvage
2005-04-18 19:14 ` David Sauvage
2005-04-19 16:43 ` Matthew Heaney
2005-04-19 23:22 ` David Sauvage
2005-04-20 0:49 ` Matthew Heaney
2005-04-20 4:22 ` Georg Bauhaus
2005-04-20 21:24 ` David Sauvage
2005-04-20 23:06 ` Georg Bauhaus
2005-04-20 9:41 ` Pascal Obry
2005-04-20 11:44 ` Matthew Heaney
2005-04-20 14:47 ` Pascal Obry
2005-04-20 19:26 ` Georg Bauhaus
2005-04-20 19:34 ` Pascal Obry
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox