Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #138663

Re: Modules again

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: Modules again
Date 2018-12-11 14:45 +0100
Organization A noiseless patient Spider
Message-ID <puof1p$o4h$1@dont-email.me> (permalink)
References (3 earlier) <87o9a06lxq.fsf@bsb.me.uk> <d74d25f4-17a3-49f7-a282-731052938415@googlegroups.com> <punpu7$vfo$1@dont-email.me> <87h8fkuxeg.fsf@bsb.me.uk> <jrOPD.613862$aX1.44917@fx21.am4>

Show all headers | View raw


On 11/12/18 13:53, Bart wrote:
> On 11/12/2018 11:15, Ben Bacarisse wrote:
>> David Brown <david.brown@hesbynett.no> writes:
>>
>>> On 11/12/18 08:19, luser droog wrote:
>>>> On Wednesday, December 5, 2018 at 9:19:24 AM UTC-6, Ben Bacarisse
>>>> wrote:
>>>>
>>>>> Some libraries or modules even allow the prefix to be changed so that
>>>>> name clashes can always be avoided, but this is only practical when
>>>>> the
>>>>> code is not shared.
>>>>
>>>> Wow! How do you do that?
>>
>> The simplest way is to declare everything using a macro
>>
>>    #define MAKE_NAME(n) mylib ## _ ## n
>>
>> which the user of the code edits.
> 
> So, to use this method inside a library that exports functions f, g, h,
> every use of those functions must be written as MAKENAME(f) etc? That
> must really help the readability of the code:
> 
>    if (MAKENAME(f)(MAKENAME(g)+1))==0) ...
> 

You use local typedefs or macros inside the implementation in order to
make code more readable.  You need the non-conflicting prefixes in the
header, and in the actual name of the exported functions, but not in the
internal names.  So your implementation might have:

	#define bi_f MAKENAME(f)
	#define bi_g MAKENAME(g)

	if (bi_f(bi_g + 1) == 0) ...

And you are back to exactly the same readability as before.

Static functions and variables, as well as types defined in the
implementation files, don't need any kind of unique names.


> Especially when applied also to types:
> 
>    MAKENAME(int32) MAKENAME(F)(MAKENAME(float32) {
>      MAKENAME(int32) result;
>      ....
> 
> The MAKENAME macro itself has to be kept private as it could clash with
> MAKENAME used from other libraries (writing MAKENAME(MAKENAME)(f) is not
> practical!).
> 

Use a sensible name appropriate to the library - but long enough to be
likely to be unique.

> And, as functions within the library change between static and
> non-static, that MAKENAME must be added and removed.
> 

So don't do that.  Design your library, and think about what should be
exported or not.

But the recommendation I gave above about local #define's for the names
avoids the problem anyway.

> With the modules that use that library, if the library is A.h/A.c but
> they want the prefix to be b_, then they set 'mylib' to 'b', and
> functions are then called as 'b_f()'. They just need to be aware of any
> other entities that happen to have the unadorned name 'b_f'.
> 

Yes.

> ---------------------------
> 
> I looked briefly at how it works in my language (as I rarely make use of
> the namespace feature), and this stuff just works effortlessly.
> 

Namespaces, as found in C++, are a better solution than prefixes for
exported functions.  I would like namespaces to be added to C.  And I
would expect any large newer language to support a similar concept.

But configurable prefixes like this are rarely used and (as Ben said)
even more rarely needed.  Someone wanted to know how they could be
implemented, so we are telling them - no one is suggesting it is a
particularly elegant idea.


> One module can export functions f,g,h, and so can another, and they
> don't clash (examples snipped).
> 
> Yet C is the language that has world-wide dominance.

Yes, but I think it is despite a lack of namespaces, rather than because
of it.

> 
> It's a funny world.
> 

It is conceivable that there are other more important differences
between your language and C, that outweigh the advantages of your
namespaces.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Big integers Bart <bc@freeuk.com> - 2018-12-04 12:17 +0000
  Re: Big integers fir <profesor.fir@gmail.com> - 2018-12-04 05:58 -0800
    Re: Big integers Chad <cdalten@gmail.com> - 2018-12-04 08:22 -0800
      Re: Big integers Bart <bc@freeuk.com> - 2018-12-04 17:04 +0000
        Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-04 17:19 +0000
  Re: Big integers Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-12-04 08:38 -0800
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-04 17:35 +0000
      Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-04 18:13 +0000
        Re: Big integers "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2018-12-04 10:50 -0800
        Re: Big integers Rosario19 <Ros@invalid.invalid> - 2018-12-06 17:56 +0100
      Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-04 10:22 -0800
        Re: Big integers Eli the Bearded <*@eli.users.panix.com> - 2018-12-04 18:58 +0000
          Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-04 11:32 -0800
            Re: Big integers Eli the Bearded <*@eli.users.panix.com> - 2018-12-04 22:45 +0000
              Re: Big integers jameskuyper@alumni.caltech.edu - 2018-12-04 14:57 -0800
          Re: Big integers jameskuyper@alumni.caltech.edu - 2018-12-04 12:14 -0800
          Re: Big integers chris.m.thomasson.1@gmail.com - 2018-12-04 16:58 -0800
            Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-05 03:14 +0000
              Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-05 14:27 -0800
            Re: Big integers Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-04 20:03 -0500
              Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-05 14:25 -0800
      Re: Big integers jacob navia <jacob@jacob.remcomp.fr> - 2018-12-04 23:45 +0100
        Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-04 23:29 +0000
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-05 00:30 +0000
          Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-05 14:28 -0800
        Re: Big integers Jens Stuckelberger <Jens_Stuckelberger@nowhere.net> - 2018-12-05 17:50 +0000
          Re: Big integers jacobnavia <jacob@jacob.remcomp.fr> - 2018-12-05 20:03 +0100
        Re: Big integers Keith Thompson <kst-u@mib.org> - 2018-12-05 13:46 -0800
          Re: Big integers jacobnavia <jacob@jacob.remcomp.fr> - 2018-12-06 06:41 +0100
            Re: Big integers Keith Thompson <kst-u@mib.org> - 2018-12-05 22:40 -0800
  Re: Big integers "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2018-12-04 09:08 -0800
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-04 19:41 +0000
      Re: Big integers "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2018-12-04 12:00 -0800
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-08 11:28 +0000
  Re: Big integers Ian Collins <ian-news@hotmail.com> - 2018-12-05 15:19 +1300
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-05 11:58 +0000
      Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-05 14:35 +0100
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-05 14:35 +0000
          Re: Big integers Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-12-05 07:39 -0800
            Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-05 07:45 -0800
              Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-05 17:51 +0000
                Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-05 22:19 +0100
              Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-05 14:55 -0800
                Re: Big integers jameskuyper@alumni.caltech.edu - 2018-12-05 15:19 -0800
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-05 16:13 -0800
                Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-06 09:35 +0100
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-07 14:26 -0800
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-07 19:56 -0800
                Re: Big integers James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-09 12:01 -0500
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-10 14:47 -0800
                Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-11 00:50 +0000
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-10 17:37 -0800
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-14 21:18 -0800
          Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-05 07:57 -0800
          Re: Big integers Bart <bc@freeuk.com> - 2018-12-05 15:59 +0000
            Re: Big integers Bart <bc@freeuk.com> - 2018-12-05 22:59 +0000
              Re: Big integers jameskuyper@alumni.caltech.edu - 2018-12-05 15:31 -0800
                Re: Big integers Robert Wessel <robertwessel2@yahoo.com> - 2018-12-05 20:03 -0600
              Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-05 23:42 +0000
                Re: Big integers James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-05 20:15 -0500
              Re: Big integers Ike Naar <ike@iceland.freeshell.org> - 2018-12-10 07:26 +0000
                Re: Big integers Bart <bc@freeuk.com> - 2018-12-10 18:38 +0000
                Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-10 19:10 +0000
                Re: Big integers Bart <bc@freeuk.com> - 2018-12-10 21:23 +0000
                Re: Big integers Ike Naar <ike@iceland.freeshell.org> - 2018-12-10 22:47 +0000
          Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-05 22:15 +0100
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-06 13:43 +0000
          Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-06 07:50 -0800
      Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-05 15:19 +0000
        Re: Big integers luser droog <luser.droog@gmail.com> - 2018-12-10 23:19 -0800
          Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-11 08:45 +0100
            Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-11 11:15 +0000
              Re: Big integers Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-12-11 04:36 -0800
                Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-11 14:35 +0100
              Re: Modules again (was: Big integers) Bart <bc@freeuk.com> - 2018-12-11 12:53 +0000
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-11 14:45 +0100
                Re: Modules again Bart <bc@freeuk.com> - 2018-12-11 16:08 +0000
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-11 21:37 +0100
                Re: Modules again Thiago Adams <thiago.adams@gmail.com> - 2018-12-11 08:59 -0800
                Re: Modules again Bart <bc@freeuk.com> - 2018-12-11 17:49 +0000
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-11 21:44 +0100
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-11 18:02 +0000
                Re: Modules again Thiago Adams <thiago.adams@gmail.com> - 2018-12-11 10:10 -0800
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-11 18:54 +0000
                Re: Modules again Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-11 13:14 -0500
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-11 18:54 +0000
                Re: Modules again Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-11 14:42 -0500
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-11 21:54 +0100
                Re: Modules again Keith Thompson <kst-u@mib.org> - 2018-12-11 14:53 -0800
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-12 08:24 +0100
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-11 21:51 +0100
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-11 23:24 +0000
                Re: Modules again Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-11 18:44 -0500
                Re: Modules again Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-11 18:45 -0500
                Re: Modules again Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-12-12 06:39 +0000
                Re: Modules again James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-12 07:59 -0500
                Re: Modules again mark.bluemel@gmail.com - 2018-12-12 05:43 -0800
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-12 14:20 +0000
                Re: Modules again David Brown <david.brown@hesbynett.no> - 2018-12-12 17:10 +0100
                Re: Modules again James Kuyper <jameskuyper@alumni.caltech.edu> - 2018-12-12 13:39 -0800
                Re: Modules again scott@slp53.sl.home (Scott Lurndal) - 2018-12-12 14:19 +0000
                Re: Modules again Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2018-12-12 10:28 -0500
      Re: Big integers Ian Collins <ian-news@hotmail.com> - 2018-12-06 08:10 +1300
        Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-05 20:57 +0000
          Re: Big integers Ian Collins <ian-news@hotmail.com> - 2018-12-06 10:16 +1300
            Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-05 23:15 +0000
              Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-05 23:44 +0000
  Re: Big integers Robert Wessel <robertwessel2@yahoo.com> - 2018-12-05 02:51 -0600
  Re: Big integers antispam@math.uni.wroc.pl - 2018-12-07 15:26 +0000
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-07 16:27 +0000
      Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-07 16:36 +0000
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-07 17:01 +0000
      Re: Big integers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-12-07 17:55 +0000
      Re: Big integers antispam@math.uni.wroc.pl - 2018-12-07 19:26 +0000
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-07 21:39 +0000
          Re: Big integers Ian Collins <ian-news@hotmail.com> - 2018-12-08 10:51 +1300
  Re: Big integers Anton Shepelev <anton.txt@gmail.com> - 2018-12-08 00:43 +0300
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-08 01:08 +0000
    Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-08 15:13 +0100
      Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-08 15:15 +0100
        Re: Big integers Bart <bc@freeuk.com> - 2018-12-08 14:48 +0000
          Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-10 05:10 -0800
            Re: Big integers Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2018-12-10 05:22 -0800
              Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-10 15:27 +0100
                Re: Big integers scott@slp53.sl.home (Scott Lurndal) - 2018-12-10 15:59 +0000
                Re: Big integers antispam@math.uni.wroc.pl - 2018-12-11 21:14 +0000
            Re: Big integers Bart <bc@freeuk.com> - 2018-12-10 14:56 +0000
              Re: Big integers Ike Naar <ike@iceland.freeshell.org> - 2018-12-10 17:46 +0000
                Re: Big integers Bart <bc@freeuk.com> - 2018-12-10 18:24 +0000
                Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-10 11:12 -0800
                Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-10 11:23 -0800
                Re: Big integers Bart <bc@freeuk.com> - 2018-12-10 21:44 +0000
                Re: Big integers Thiago Adams <thiago.adams@gmail.com> - 2018-12-11 10:20 -0800
                Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-11 13:15 -0800
      Re: Big integers Keith Thompson <kst-u@mib.org> - 2018-12-08 12:14 -0800
        Re: Big integers David Brown <david.brown@hesbynett.no> - 2018-12-09 13:31 +0100
      Re: Big integers "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-12-08 15:52 -0800
  Re: Big integers Bart <bc@freeuk.com> - 2018-12-16 19:29 +0000
  Re: Big integers "Tristan B. Kildaire" <deavmi@disroot.org> - 2018-12-25 12:59 +0000
    Re: Big integers Bart <bc@freeuk.com> - 2018-12-25 15:54 +0000

csiph-web