Deutsch English Français Italiano |
<vgbhkt$155v2$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: David Brown <david.brown@hesbynett.no> Newsgroups: comp.lang.c Subject: Re: else ladders practice Date: Mon, 4 Nov 2024 23:25:32 +0100 Organization: A noiseless patient Spider Lines: 175 Message-ID: <vgbhkt$155v2$1@dont-email.me> References: <3deb64c5b0ee344acd9fbaea1002baf7302c1e8f@i2pn2.org> <vg0t3j$2ruor$1@dont-email.me> <78eabb4054783e30968ae5ffafd6b4ff2e5a5f17@i2pn2.org> <vg2g37$37mh3$1@dont-email.me> <6724CFD2.4030607@grunge.pl> <vg2llt$38ons$1@dont-email.me> <2491a699388b5891a49ef960e1ad8bb689fdc2ed@i2pn2.org> <b681ee05856e165c26a5c29bf42a8d9d53843d6d@i2pn2.org> <vg2ttn$3a4lk$1@dont-email.me> <vg33gs$3b8n5$1@dont-email.me> <vg358c$3bk7t$1@dont-email.me> <vg37nr$3bo0c$1@dont-email.me> <vg3b98$3cc8q$1@dont-email.me> <vg5351$3pada$1@dont-email.me> <vg62vg$3uv02$1@dont-email.me> <vg8a84$euka$1@dont-email.me> <vg8koq$gpsg$1@dont-email.me> <vgat50$112jp$1@dont-email.me> <vgb8if$13ioj$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Mon, 04 Nov 2024 23:25:33 +0100 (CET) Injection-Info: dont-email.me; posting-host="9c2e76ff71a974b5abd108ce38c454d4"; logging-data="1218530"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+p6JTvQRAkbrqiHJOv2Mik6V3FMPnlc5c=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:LOxTjnHdDKLAjspEdLS6qq4y97s= In-Reply-To: <vgb8if$13ioj$1@dont-email.me> Content-Language: en-GB Bytes: 8267 On 04/11/2024 20:50, Bart wrote: > On 04/11/2024 16:35, David Brown wrote: >> On 03/11/2024 21:00, Bart wrote: > > Here is a summary of C vs my language. > <snip the irrelevant stuff> > >> I am very keen on keeping the concepts distinct in cases where it >> matters. > > I know, you like to mix things up. I like clear lines: > > func F:int ... Always returns a value > proc P ... Never returns a value > > Oh, you /know/ that, do you? And how do you "know" that? Is that because you still think I am personally responsible for the C language, and that I think C is the be-all and end-all of perfect languages? I agree that it can make sense to divide different types of "function". I disagree that whether or not a value is returned has any significant relevance. I see no difference, other than minor syntactic issues, between "int foo(...)" and "void foo(int * result, ...)". A much more useful distinction would be between Malcolm-functions and Malcolm-procedures. "Malcolm-functions" are "__attribute__((const))" in gcc terms or "[[unsequenced]]" in C23 terms (don't blame me for the names here). In other words, they have no side-effects and their result(s) are based entirely on their inputs. "Malcolm-procedures" can have side-effects and interact with external data. I would possibly add to that "meta-functions" that deal with compile-time information - reflection, types, functions, etc. > >> and only need to be "solidified" during code generation. That might >> allow the language to track things like "uninitialised" or "no value" >> during compilation without having them part of a real type (such as >> std::optional<> or a C > > But you are always returning an actual type in agreement with the > language. That is my point. You're not choosing to just fall off that > cliff and return garbage or just crash. > > However, your example with std::optional did just that, despite having > that type available. > >> It doesn't return a value. That is why it is UB to try to use that >> non-existent value. > > And why it is so easy to avoid that UB. I agree. I think C gets this wrong. That's why I, and pretty much all other C programmers, use a subset of C that disallows falling off the end of a function with a non-void return type. Thus we avoid that UB. (The only reason it is acceptable syntax in C, AFAIK, is because early versions of C had "default int" everywhere - there were no "void" functions.) >> Note that I have not suggested returning garbage values - I have >> suggested that a language might support handling "no value" in a >> convenient and safe manner. > > But in C it is garbage. Note that /I/ have not suggested returning garbage values. I have not said that I think C is defined in a good way here. You are, as so often, mixing up what people say they like with what C does (or what you /think/ C does, as you are often wrong). And as usual you mix up people telling you what C does with what people think is a good idea in a language. > >> Totally independent of and orthogonal to that, I strongly believe that >> there is no point in trying to define behaviour for something that >> cannot happen, > > But it could for n==4. Again, you /completely/ miss the point. If you have a function (or construct) that returns a correct value for inputs 1, 2 and 3, and you never pass it the value 4 (or anything else), then there is no undefined behaviour no matter what the code looks like for values other than 1, 2 and 3. If someone calls that function with input 4, then /their/ code has the error - not the code that doesn't handle an input 4. > > EVERYBODY agrees that leading zero octals in C were a terrible idea. You > can't say it's just me thinks that! I agree that this a terrible idea. <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60523> But picking one terrible idea in C does not mean /everything/ in C is a terrible idea! /That/ is what you got wrong, as you do so often. > >>> int F() { >>> F(1, 2.3, "four", F,F,F,F(),F(F())); >>> F(42); > >> It is undefined behaviour in C. Programmers are expected to write >> sensible code. > > But it would be nice if the language stopped people writing such things, > yes? Sure. That's why sane programmers use decent tools - the language might not stop them writing this, but the tools do. > > Can you tell me which other current languages, other than C++ and > assembly, allow such nonsense? Python. Of course, it is equally meaningless in Python as it is in C. > > None? So it's not just me and my language then! Mine is lower level and > still plenty unsafe, but it has somewhat higher standards. > >> If I were the designer of the C language and the maintainer of the C >> standards, you might have a point. C is not /my/ language. > > You do like to defend it though. I defend it if that is appropriate. Mostly, I /explain/ it to you. It is bizarre that people need to do that for someone who claims to have written a C compiler, but there it is. > > >> We can agree that C /lets/ people write messy code. It does not >> /require/ it. And I have never found a programming language that >> stops people writing messy code. > > I had included half a dozen points that made C's 'if' error prone and > confusing, that would not occur in my syntax because it is better designed. > I'm glad you didn't - it would be a waste of effort. > You seem to be incapable of drawing a line beween what a language can > enforce, and what a programmer is free to express. > I can't see how you could reach that conclusion. > Or rather, because a programmer has so much freedom anyway, let's not > bother with any lines at all! Just have a language that simply doesn't > care. > You /do/ understand that I use top-quality tools with carefully chosen ========== REMAINDER OF ARTICLE TRUNCATED ==========