From: Marius Amado Alves <amado.alves@netcabo.pt>
To: comp.lang.ada@ada-france.org
Subject: Re: Ada bench : count words
Date: Wed, 23 Mar 2005 15:09:26 +0000
Date: 2005-03-23T15:09:26+00:00 [thread overview]
Message-ID: <mailman.58.1111590593.23655.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: <00b362390273e6c04844dd4ff1885ee0@netcabo.pt>
> 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;
next prev parent reply other threads:[~2005-03-23 15:09 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 [this message]
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
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