Re: [AD] Proposal for new Allegro interface

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


Thanks to Sven for these points -- they are all very good.

In reply to Sven Sandberg <svsa1977@xxxxxxxxxx>:
[snip]
>I agree that if something should be done, then what you suggest is very
>close to it. I even think that making palettes be 8 bit will work
>smoothly: As long as all old-style functions continue to assume 6-bit
>palettes, there's no harm done if the prefixed functions use 8-bit
>palettes.

Yes; the current set_palette et al. would use 6-bit palettes, and we
could provide al_set_palette8 for 8-bit palettes.

> There are four `extern PALETTE' variables, but those don't
>seem to be any problem either (black_palette isn't even different in 8
>bits, desktop_palette and default_palette are not read by the library
>anyway, and I don't think fli_palette is either).

Again, al_black_palette and al_black_palette8, etc.

> - What about variables? I think the only way to create aliases for
>these is with #defines. And this will be a problem for C++ programs
>which have member variables called e.g. `screen', `key' or `font', if
>one file that uses the class #includes <allegro.h> and another doesn't.
>This happens e.g. if the class is defined in some library. IMHO `key'
>and `font' are some of the worst namespace polluters so it would be a
>pity not to get rid of them.

Excellent point: something I totally missed. Under C++, this is a total
non-problem:

  extern FONT* al_font;
  namespace {
    FONT*& font = al_font;
  }

However, do we even need this? The following example compiles perfectly
under GCC's C++. Can somebody try it on MSVC, Borland, etc.? Thanks.
int other_clear = 0;

#define clear other_clear

#include <list>

void test(list<int>& l)
{
    l.clear();
}


> - Another problem is that some compilers (at least watcom) don't remove
>unused static functions, so that each object file will contain tons of
>such. Moreover, each such static function will contain a dependency to
>some part of Allegro (and conversely: each and every function in Allegro
>will be used in one of those functions), so that literally _all_ of
>Allegro will be linked in on those platforms.

OK, fair point. However, for a long while, most of Allegro was
statically linked under DJGPP even when you only used a few things due
to a bug (CONSTRUCTOR_FUNCTION wasn't defined under DJGPP), and Allegro
caused about a 200kb overhead once compressed with UPX. Obviously, you
get this overhead anyway if you use most of the stuff in Allegro.

And unless Watcom supports CONSTRUCTOR_FUNCTION (which I don't believe
it does), the whole lib is going to be linked in anyway. So although I
acknowledge that this is not ideal, I don't believe it is a show-
stopper.

Of course, I could extend the CONSTRUCTOR_FUNCTION system to cover
*everything*, thus solving the whole problem, but I don't like this
because it adds complexity where I don't think we need any.

> And it will require you to
>link with Allegro, which wasn't strictly needed before if you only used
>e.g. inline math functions.

As Peter said, I'm not really worried about this...

>But I would personally vote "no" unless someone comes up with good
>solutions to the problems I mentioned.

What do you think of the above?

Bye for now,
-- 
Laurence Withers, lwithers@xxxxxxxxxx
                http://www.lwithers.demon.co.uk/

Attachment: signature.asc
Description: PGP signature



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/