Re: Static functions in C code

2006-06-01 Thread Steve Fairhead
Denis Doroshenko said:
 So how do you specify that a function should be visible only to the 
 local compilation unit?  Or, how do you keep others from using your 
 locally-scoped (but not declared static) function in a global context?

 why would you even want that (moreover in opensource)? hide for what
reason? 

I'm not a fan of C++, for many reasons. However some (not all) of the
principles of OOP are conducive to good design practice. One of these has to
do with distinguishing between private and public functions (I won't say
variables; I avoid globals like the plague) within a module. The public
interface is all-you-need-to-know about the module. The private (static)
stuff is in the none-of-your-business category.

There's a myth that complex software has to be buggy. I don't believe in it.
The key lies in managing complexity. Hiding the internals of a module is one
of the tools that allows us to manage complexity.

Steve
http://www.fivetrees.com

[demime 1.01d removed an attachment of type application/ms-tnef which had a 
name of winmail.dat]



Re: Static functions in C code

2006-06-01 Thread Darrin Chandler
On Fri, Jun 02, 2006 at 02:53:48AM +0100, Steve Fairhead wrote:
 Denis Doroshenko said:
  So how do you specify that a function should be visible only to the 
  local compilation unit?  Or, how do you keep others from using your 
  locally-scoped (but not declared static) function in a global context?
 
  why would you even want that (moreover in opensource)? hide for what
 reason? 

snip

 There's a myth that complex software has to be buggy. I don't believe in it.
 The key lies in managing complexity. Hiding the internals of a module is one
 of the tools that allows us to manage complexity.

Well said. I'll add that tools are not enough, and won't help someone
who doesn't *really* understand what they're for or how to use them.
Tools of all kinds are often misused, and some few get frowned upon
because they're misused so often.

Write good, clean code with static declarations that obviously make
things better and there'd probably be a lot less problem with it. Talk
about sprinkling static around like holy water and the reception will be
less friendly. ;)


-- 
Darrin Chandler|  Phoenix BSD Users Group
[EMAIL PROTECTED]   |  http://bsd.phoenix.az.us/
http://www.stilyagin.com/  |



Re: Static functions in C code

2006-05-31 Thread Denis Doroshenko

On 5/31/06, Brett Lymn [EMAIL PROTECTED] wrote:

On Tue, May 30, 2006 at 04:55:14PM +0300, Denis Doroshenko wrote:

 why would you even want that (moreover in opensource)? hide for what reason?

It's called lexical scoping - it has nothing really to do with
security more to do with preventing namespace pollution.  Clearly you
have never written a library.


clearly you're impying too much here. i must admit that i have not
used statics since there was nothing in my tiny projects that would
need it. i won't argue with you, from you have never written a
library sounds like it would be fruitless.

if you want multiple functions named say do_it in your code to not
cause name clashes, then do_it(); i always try to name things the way
they very unlikely to clash with something and yet  such names seem to
make more sense. i like to debug my problems fast, to see every step,
what was called, where and with what parameters. as i said, i didn't
hit the need for it.



Re: Static functions in C code

2006-05-30 Thread matthew . garman
On Fri, May 26, 2006 at 08:29:58AM -0500, Marco Peereboom wrote:
 My answer is correct.  It is not my fault that you don't have a
 clue about programming.  Static has it's uses however for some
 reason the (open source) world at large seem not to understand
 what they are.  Same is true with typedef, it has its uses too but
 mostly it is abused.

What are some examples of abuse/misuse of typedef?  (That's an
honest question, not trolling.)

 I bet you have never wasted days finding a non-bug because of
 static.

So how do you specify that a function should be visible only to the
local compilation unit?  Or, how do you keep others from using your
locally-scoped (but not declared static) function in a global
context?

I've seen situations where someone saw a function that was not
declared static, but clearly intended to have only local visibility,
and someone went off and prototyped that function in some other
module so they could use it.  (Then again, even using 'static'
probably wouldn't have solved the problem---that person would have
just deleted the keyword!)

Just curious!
Thanks,
Matt



Re: Static functions in C code

2006-05-30 Thread Denis Doroshenko

On 5/30/06, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

On Fri, May 26, 2006 at 08:29:58AM -0500, Marco Peereboom wrote:
 Static has it's uses however for some
 reason the (open source) world at large seem not to understand
 what they are.  Same is true with typedef, it has its uses too but
 mostly it is abused.

What are some examples of abuse/misuse of typedef?  (That's an
honest question, not trolling.)


well everything was already said within this very thread. RTFA in case
you've missed it.


 I bet you have never wasted days finding a non-bug because of
 static.

So how do you specify that a function should be visible only to the
local compilation unit?  Or, how do you keep others from using your
locally-scoped (but not declared static) function in a global
context?


why would you even want that (moreover in opensource)? hide for what reason?


I've seen situations where someone saw a function that was not
declared static, but clearly intended to have only local visibility,
and someone went off and prototyped that function in some other
module so they could use it.  (Then again, even using 'static'
probably wouldn't have solved the problem---that person would have
just deleted the keyword!)


well, as i asked before, i think it is not like OpenBSD developers
consider hiding functions from other developers (and effectively from
themselves). this increase of obscurity has little to go with use the
source Luke...


Just curious!
Thanks,
Matt




Re: Static functions in C code

2006-05-30 Thread Brett Lymn
On Tue, May 30, 2006 at 04:55:14PM +0300, Denis Doroshenko wrote:
 
 why would you even want that (moreover in opensource)? hide for what reason?
 

It's called lexical scoping - it has nothing really to do with
security more to do with preventing namespace pollution.  Clearly you
have never written a library.  By scoping functions static you are
indicating that the functions are private and are not part of the
interface available for use.  You do this actually to protect the
users of your code - you don't need to care about namespace clashes
e.g. you can call the internal function next_one() without fear, if
the function is not statically scoped then you would have to prefix
the function with __mylib_next_one() or suchlike otherwise a consumer
of your library would get a duplicate symbol if they created their own
function next_one(), or even worse the consumer's function will be
called by the library internals... no doubt doing the wrong thing.

Secondly it means that you, as the library creator, are able to change
the internal interfaces at whim without needing to be concerned about
the impact on the consumers of your library.  Sure, people can modify
the source and remove the static from the function but that this point
they are lining a gun up on their foot with their finger on the
trigger - if they happen to put a bullet through their foot they have
noone to blame but themselves.

Again, it's not a security issue - it's a usuability/api issue.

-- 
Brett Lymn



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:

Because it'll clash.  Clashing is good.


I'm pretty sure you would be more successfull on a humor TV show as a
clown than wasting people time and bandwith with stupid statements
like that. And I don't mind if you are a OpenBSD developer,
contributor, US president or a dirty bitch.

--
DG



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/25/06, Ted Unangst [EMAIL PROTECTED] wrote:

how many parse_config functions do you think spamd needs?


It was an example. The point is: is there a reason for not using
static on functions with internal linkage? There's at least one reason
to use static: name clashes.

--
DG



Re: Static functions in C code

2006-05-26 Thread mickey
On Fri, May 26, 2006 at 10:14:04AM -0300, Diego Giagio wrote:
 On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:
 Because it'll clash.  Clashing is good.
 
 I'm pretty sure you would be more successfull on a humor TV show as a
 clown than wasting people time and bandwith with stupid statements
 like that. And I don't mind if you are a OpenBSD developer,
 contributor, US president or a dirty bitch.

nobody cares if you use static or not.
if you do not understand answers given you can
as well make your own decisions yourself godamnit!

cu

-- 
paranoic mickey   (my employers have changed but, the name has remained)



Re: Static functions in C code

2006-05-26 Thread Marco Peereboom
My answer is correct.  It is not my fault that you don't have a clue 
about programming.  Static has it's uses however for some reason the 
(open source) world at large seem not to understand what they are.  Same 
is true with typedef, it has its uses too but mostly it is abused.


I bet you have never wasted days finding a non-bug because of static.

And let me state again that clashing is good.

Diego Giagio wrote:

On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:

Because it'll clash.  Clashing is good.


I'm pretty sure you would be more successfull on a humor TV show as a
clown than wasting people time and bandwith with stupid statements
like that. And I don't mind if you are a OpenBSD developer,
contributor, US president or a dirty bitch.

--
DG




Re: Static functions in C code

2006-05-26 Thread Jason Crawford

On 5/26/06, Diego Giagio [EMAIL PROTECTED] wrote:

On 5/25/06, Ted Unangst [EMAIL PROTECTED] wrote:
 how many parse_config functions do you think spamd needs?

It was an example. The point is: is there a reason for not using
static on functions with internal linkage? There's at least one reason
to use static: name clashes.


And Marco was explaining why he (and probably other OpenBSD devs)
don't use static: name clashes. static makes things more difficult to
debug, and having 50 different static functions named the same thing
could get pretty confusing in large projects.



Re: Static functions in C code

2006-05-26 Thread Jacob Yocom-Piatt
 Original message 
Date: Fri, 26 May 2006 10:14:04 -0300
From: Diego Giagio [EMAIL PROTECTED]  
Subject: Re: Static functions in C code  
To: Marco Peereboom [EMAIL PROTECTED]
Cc: misc@openbsd.org

On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:
 Because it'll clash.  Clashing is good.

I'm pretty sure you would be more successfull on a humor TV show as a
clown than wasting people time and bandwith with stupid statements
like that. And I don't mind if you are a OpenBSD developer,
contributor, US president or a dirty bitch.


wow. this is just about the most offensive thing i've ever seen on list. that's
not to say it should be censored ;).

all this from someone who spends time pointing finding holes in swiss cheese
(read: ethereal). what would we do without that guy doing the quality control at
the swiss cheese factory?



Re: Static functions in C code

2006-05-26 Thread Siju George

On 5/26/06, Diego Giagio [EMAIL PROTECTED] wrote:

On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:
 Because it'll clash.  Clashing is good.

I'm pretty sure you would be more successfull on a humor TV show as a
clown than wasting people time and bandwith with stupid statements
like that. And I don't mind if you are a OpenBSD developer,
contributor, US president or a dirty bitch.



Dear Diego,

Again this is not a troll.
But being quick to get offended and be angry at people trying to help
will mostly make us look like real fools infront of others. And it has
happened to me a lot of times. ( Still trying to get over it ).

I am sure Marco has a reason to state that considering who he is.

http://www.peereboom.us/

If you are interested in knowledge perhaps a little more polite
request to elaborate his point would yeild more information.

Kind Regards :-)

Siju



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/25/06, Marco Peereboom [EMAIL PROTECTED] wrote:

Because it'll clash.  Clashing is good.


I thought you were being sarcastic, and I was wrong. I strongly apologize.

--
DG



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/26/06, Jason Crawford [EMAIL PROTECTED] wrote:

And Marco was explaining why he (and probably other OpenBSD devs)
don't use static: name clashes. static makes things more difficult to
debug, and having 50 different static functions named the same thing
could get pretty confusing in large projects.


Thank you.

--
DG



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/26/06, Jacob Yocom-Piatt [EMAIL PROTECTED] wrote:

wow. this is just about the most offensive thing i've ever seen on list. that's
not to say it should be censored ;).



I wrongly interpreted Marco's statement, and shot him badly.


all this from someone who spends time pointing finding holes in swiss cheese
(read: ethereal). what would we do without that guy doing the quality control at
the swiss cheese factory?



At least you know how to use Google.

--
DG



Re: Static functions in C code

2006-05-26 Thread Matthias Kilian
On Fri, May 26, 2006 at 11:59:51AM -0300, Diego Giagio wrote:
 Because it'll clash.  Clashing is good.
 
 I thought you were being sarcastic, and I was wrong. I strongly apologize.

No sarcasm. If you've clashes, the linker will tell you. But if you
make everything static, you may using the same name for different
things without noticing, and this *may* be confusing when reading
the code.

Ciao,
Kili



Re: Static functions in C code

2006-05-26 Thread jjhartley
Original message from Diego Giagio [EMAIL PROTECTED]:
  1. there are debugging requirements. Static functions do not expose entry 
  points. 
 
 Even for user-level code? 

If you are thinking there is a difference between kernel code  userland code, 
no.  Compilers compile code based upon the files  switches provided.  The only 
difference between static  non-static functions from a compiler's perspective 
is that non-static functions have the symbol representing their address made 
public in the resulting object file;  static functions do have an analogous 
symbol, but it is not made public.  Look at nm for more discussion:

http://www.openbsd.org/cgi-bin/man.cgi?query=nmapropos=0sektion=0manpath=OpenBSD+Currentarch=i386format=html

End result:  the keyword static simply plays games with what the linker 
receives as input.

Jim



Re: Static functions in C code

2006-05-26 Thread Diego Giagio

On 5/26/06, Matthias Kilian [EMAIL PROTECTED] wrote:

No sarcasm. If you've clashes, the linker will tell you. But if you
make everything static, you may using the same name for different
things without noticing, and this *may* be confusing when reading
the code.



That's a very reasonable explanation to me.
Thank you.

--
DG



Re: Static functions in C code

2006-05-25 Thread Marco Peereboom

Because it'll clash.  Clashing is good.

Diego Giagio wrote:
Lately I've been reading OpenBSD code, both user-level and kernel-level, 
and I find it very clean and well organized. I have a concern,

thought: why most applications don't use the 'static' keyword for
functions with internal linkage ? Wouldn't that avoid function
name clashes when developing large programs? See below spamd.c snippet:

void  usage(void);
char *grow_obuf(struct con *, int);
int   parse_configline(char *);
void  parse_configs(void);
...

Thanks.

--
DG




Re: Static functions in C code

2006-05-25 Thread Ted Unangst

On 5/25/06, Diego Giagio [EMAIL PROTECTED] wrote:

Lately I've been reading OpenBSD code, both user-level and kernel-level,
and I find it very clean and well organized. I have a concern,
thought: why most applications don't use the 'static' keyword for
functions with internal linkage ? Wouldn't that avoid function
name clashes when developing large programs? See below spamd.c snippet:

void  usage(void);
char *grow_obuf(struct con *, int);
int   parse_configline(char *);
void  parse_configs(void);


how many parse_config functions do you think spamd needs?



Re: Static functions in C code

2006-05-25 Thread jjhartley
Original message from Diego Giagio [EMAIL PROTECTED]:
 ...
 I have a concern, thought: why most applications don't use the 'static' 
 keyword for 
 functions with internal linkage ? Wouldn't that avoid function name clashes 
 when 
 developing large programs? 

Either because:
1.  there are debugging requirements.  Static functions do not expose entry 
points.
2.  most developers don't consider limiting global namespace pollution as this 
doesn't frequently hinder development.  Consider being concerned about how many 
names are in the global namespace the programmatic equivalent to flossing.

As an aside, note in C++ that the keyword static is even less in vogue than 
it was in C given its overuse within the language definition.  static has at 
least five distinct meaning based upon its context:
1.  static global instances -- no public linkage for names are created in 
object files.
2.  static automatic variables within functions -- 
3.  static functions -- 
4.  static members within class definitions -- class variables of which one 
instance is shared across all instances of the class.
5.  static member functions -- functions with no knowledge of individual 
class instances other than whatever static members which may be defined.

There may be a sixth, but I haven't verified it lately.  This may only be a 
compiler implementation issue:
6.?  static constants -- may force the compiler to allocated memory for the 
instance.

This isn't to say that there are equivalents elsewhere in the language which 
obviate all uses of static, but namespaces sidesteps some of these issues.

Jim