Deutsch   English   Français   Italiano  
<20250502220618.480@kylheku.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Kaz Kylheku <643-408-1753@kylheku.com>
Newsgroups: comp.lang.c
Subject: Re: That depends... (Was: Regarding assignment to struct)
Date: Sat, 3 May 2025 05:11:25 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 35
Message-ID: <20250502220618.480@kylheku.com>
References: <vv338b$16oam$1@dont-email.me>
 <51ba1k5h5lkj75qvfuj0ferlddpb6bi0n8@4ax.com>
 <vv3art$2ku6u$1@news.xmission.com> <vv3qkc$2b7nd$1@dont-email.me>
 <20250502211854.795@kylheku.com>
Injection-Date: Sat, 03 May 2025 07:11:29 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="5e2693d8db794596c9e694e70f971fe4";
	logging-data="2979503"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/jT1+HH+UC43eJrhpkdzj7Tb7CJqBXer4="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:oyHoN+fAfAReRSXpvpO5NwjmSUg=
Bytes: 2569

On 2025-05-03, Kaz Kylheku <643-408-1753@kylheku.com> wrote:
> - some structures cannot be copied; duplicating objects can
>   be nontrivial when they manage resources or are sensitive
>   to their own address (like have pointers to parts of themselves).
>   E.g.  you can't just have a FILE parameter and pass (*stdout) to it.
>   Under object-based/oriented programming in C, we usually pass
>   around pointers to objects. Treating OOP objects by value requires
>   techniques found in C++: you need handlers to be invoked when
>   objects are copied ("copy constructors").

Expanding on this point, C++ goes to town with pass-by-value interfaces
involving objects. For instance the std::basic_string template allows
C++ programs to treat dynamic strings as just values to be tossed
around:

   std::string path_combine(std::string dir, std::string name)
   {
      return dir + "/" + name;
   }

C++ experience informs us that you can get away with doing this
with PODs (plain old datatypes---structs with no constructors
or destructors) only to a point. But in C, that's all you have.

You are limited in C by not being able to endow the type with
the brains for what to do when it is copied: like for instance
to share a pointer to some associated data with the new copy,
bumping up a reference count.

That tends to exert "downward pressure" on the technique.

-- 
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca