'Echo' in three languages, for compiler comparison
Arnold Robbins
arnold at gt-nimbus.UUCP
Fri Apr 19 02:46:02 AEST 1985
Here are some programs that make for an interesting, although not very useful,
comparison between generated code size for different languages and compilers.
Please no flames; I am not trying to offend anyone with this.
What I have is three versions of "echo", in C, Pascal, and Ada. The
differences in size are:
-rwxr-xr-x 1 arnold 59392 Apr 18 10:59 echo_in_a* # ada
-rwxr-xr-x 1 arnold 8192 Apr 18 11:01 echo_in_c* # c
-rwxr-xr-x 1 arnold 14336 Apr 18 11:30 echo_in_p* # pascal
They were compiled with the Verdix VADS compiler, the 4.2BSD cc, and the
4.2 BSD pc compiler respectively. A vice president of Verdix told me that
they will be working on arranging to only load what is needed, so that small
ADA programs will not need such large binaries. Also, we are using a
Beta Test version of their Ada compiler.
-----------------------------------
/* echo : echo out command line arguments */
#include <stdio.h>
#define TRUE 1
#define FALSE 0
main (argc, argv)
register int argc;
register char **argv;
{
register int i; /* loop control variable */
auto int no_newline = FALSE; /* don't put out trailing newline */
auto int start = 1; /* starting argument number */
if (argc > 1)
{
if (strcmp (argv[1], "-n") == 0)
{
start++;
no_newline = TRUE;
}
for (i = start; i <= argc - 1; i++)
{
if (i > start)
putchar (' ');
printf ("%s", argv[i]);
}
}
if (! no_newline)
putchar ('\n');
exit (0);
}
-------------------------------------
(* echo : echo out command line arguments *)
program echo (output);
var
i : integer; (* loop control variable *)
nonewline : boolean; (* don't put out trailing newline *)
start : integer; (* starting argument number *)
rawtext : packed array [1..100] of char; (* argument text padded *)
argtext : packed array [1..100] of char; (* argument text *)
procedure fixarg; (* BSD Pascal pads strings with blanks *)
var
i, j : integer;
begin
j := 100;
while rawtext[j] = ' ' do
j := j - 1;
for i := 1 to j do
argtext[i] := rawtext[i];
for i := j + 1 to 100 do
argtext[i] := chr(0);
end;
begin
nonewline := false;
start := 1;
if argc > 1 then
begin
argv (start, rawtext); (* get the argument *)
if (rawtext = '-n') then begin
start := start + 1;
nonewline := true
end
else
fixarg;
for i := start to argc - 1 do
begin
argv (i, rawtext);
fixarg;
if i > start then
write (' ');
write (argtext)
end;
end;
if not nonewline then
writeln;
end.
-------------------------------------
-- echo : echo out command line arguments
with text_io; use text_io;
with u_env; use u_env; -- get Unix argc and argv (VADS specific)
procedure ECHO is
no_newline : boolean := FALSE; -- don't put out trailing newline
start : integer := 1; -- starting argument number
begin
if (argc > 1) then
if (argv(1).all = "-n") then
start := start + 1;
no_newline := TRUE;
end if;
for i in start .. argc - 1 loop
if (i > start) then
PUT (" ");
end if;
PUT (argv(i).all);
end loop;
end if;
if (not no_newline) then
NEW_LINE;
end if;
end ECHO;
--
Arnold Robbins
CSNET: arnold at gatech ARPA: arnold%gatech.csnet at csnet-relay.arpa
UUCP: { akgua, allegra, hplabs, ihnp4, seismo, ut-sally }!gatech!arnold
When taking aim at the ball, it helps tremendously to pretend it's a PR1ME...
More information about the Comp.sources.unix
mailing list