
3998-byte executable reduced to 45 bytes - mudge
http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
======
some
45 bytes? Lets see...

wget -O -
[http://www.muppetlabs.com/~breadbox/software/tiny/teensy.htm...](http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html)
| wc

result: 41150 bytes

------
dzorz
It still doesn't beat plain old com files in DOS/Windows. Take a look at site
<http://www.256b.com>. There are a bunch of 256 bytes programs that do
(visually) amazing stuff. My favourite is called lattice:
<http://www.256b.com/download/256>

------
zandorg
My problem with the article is that it's not really theoretically useful, it's
just a case for one particular program.

Writing large programs in C, I rarely see the need to optimise program size -
I'm more interested in execution time. Even so, with thousands of lines of
code, the executable is typically < 200kb, which would run on an Amiga, never
mind a PC.

I think this article is slightly outdated as we don't run 64kb 8-bit machines
anymore.

My last comment is that you could use an executable 'packer' which
uncompresses at runtime, and that's far easier than his methods.

~~~
brl
This article is definitely not intended to teach you how to optimize your
programs. That is, unless your usual programs are small enough to embed inside
object file headers with the opcodes overlapping header field values.

It's a clever hack that teaches you about how ELF works by forcing you to
think carefully about every single byte in a customized ELF executable.

I work frequently with object file formats (especially ELF) and write tools
which manipulate executables and libraries and when I first read this article
about 5 years ago I learned more about ELF than from any other source.

Highly recommended!

~~~
derefr
My usual programs are. In fact, you might have one of them on your computer
_right now_... unless you've run a scan recently. ;)

------
ratsbane
Neat! Optimization is fun. But you can also shrink code by going to higher-
level languages... (yes, I know, it won't run as fast and will take a lot more
memory when it runs, but still...)

    
    
      mbp:~/test doug$ cat tiny.pl
      return 42;
    
      mbp:~/test doug$ ls -la tiny.pl 
      -rw-r--r--   1 doug  doug  12 Oct 15 11:31 tiny.pl
    

~~~
e1ven
That's an interesting point, and certainly true in some areas, but having
thought about it, I don't think it's fair.

The point of theexercise is to reduce to the smallest bit of program.. Your
version should count the size of the interpeter as well, since it's necessary
for execution.

Under that model, I could use a program of

1

I'll run this program with my new SwankyCool intrepreter [tm] which returns 42
if it sees a program comprising only "1"; Otherwise it calls perl to exec the
rest of the file.

Now, in both cases, we're accepting that the entire OS is already there, but
that was stated in his example. (ELF on Linux)

------
arvid
Off the subject but on this site: A list of Martin Gardner Puzzle Books:
Martin Gardner's Collections of "Mathematical Games" Columns
<http://www.muppetlabs.com/~breadbox/books/gardner.html>

