Deutsch English Français Italiano |
<v5gqld$23d7q$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feeds.phibee-telecom.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Vir Campestris <vir.campestris@invalid.invalid> Newsgroups: comp.lang.c Subject: Re: Baby X is bor nagain Date: Wed, 26 Jun 2024 11:31:07 +0100 Organization: A noiseless patient Spider Lines: 80 Message-ID: <v5gqld$23d7q$1@dont-email.me> References: <v494f9$von8$1@dont-email.me> <v49seg$14cva$1@raubtier-asyl.eternal-september.org> <v49t6f$14i1o$1@dont-email.me> <v4bcbj$1gqlo$1@raubtier-asyl.eternal-september.org> <v4bh56$1hibd$1@dont-email.me> <v4c0mg$1kjmk$1@dont-email.me> <v4c8s4$1lki1$4@dont-email.me> <20240613002933.000075c5@yahoo.com> <v4emki$28d1b$1@dont-email.me> <20240613174354.00005498@yahoo.com> <v4okn9$flpo$2@dont-email.me> <v4p37r$k32n$1@dont-email.me> <v4pei3$m5th$2@dont-email.me> <v4plsk$nn9o$2@dont-email.me> <v4pnq6$o4fs$1@dont-email.me> <v4q245$si2n$1@dont-email.me> <v4q2rl$sqk3$1@dont-email.me> <v52308$2nli8$3@dont-email.me> <v53i4s$33k73$2@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 26 Jun 2024 12:31:09 +0200 (CEST) Injection-Info: dont-email.me; posting-host="33717825154947d0235c868c3b1181dd"; logging-data="2209018"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/OFO1GYsZuoWEEXKmpFafQ9P3M/prvfzE=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:bPi6IapZjD8b0Hq74IJrXq5Z2h4= In-Reply-To: <v53i4s$33k73$2@dont-email.me> Content-Language: en-GB Bytes: 5977 On 21/06/2024 10:46, David Brown wrote: > > I understand your viewpoint and motivation. But my own experience is > mostly different. > > First, to get it out of the way, there's the speed of compilation. While > heavy optimisation (-O3) can take noticeably longer, I never see -O0 as > being in any noticeable way faster for compilation than -O1 or even > -O2. (I'm implicitly using gcc options here, but it's mostly applicable > to any serious compiler I have used.) Frankly, if your individual C > compiles during development are taking too long, you are doing something > wrong. Maybe you are using far too big files, or trying to do too much > in one part - split the code into manageable sections and possibly into > libraries, and it will be far easier to understand, write and test. > Maybe you are not using appropriate build tools. Maybe you are using a > host computer that is long outdated or grossly underpowered. > Or maybe I have a really big code base. (My last project at work was using a distributed compilation system across all our workstations) I must admit I haven't tried O1 or O2. I'll give it a go. > There are exceptions. Clearly some languages - like C++ - are more > demanding of compilers than others. And if you are using whole-program > or link-time optimisation, compilation and build time is more of an > issue - but of course these only make sense with strong optimisation. > In recent years most of my code has ben C++. Now I'm retired I'm not writing much serious code anyway - for some reason I don't seem to have the time for any voluntary projects, and all I do is a little hackery. If it's really small I'll do it in a spreadsheet. > > Secondly, there is the static error analysis. While it is possible to > do this using additional tools, your first friend is your compiler and > its warnings. (Even with additional tools, you'll want compiler > warnings enabled.) You always want to find your errors as early as > possible - from your editor/IDE, your compiler, your linker, your > additional linters, your automatic tests, your manual tests, your beta > tests, your end user complaints. The earlier in this chain you find the > issue, the faster, easier and cheaper it is to fix things. And > compilers do a better job at static error checking with strong > optimisations enabled, because they do more code analysis. > > > Thirdly, optimisation allows you to write your code with more focus on > clarity, flexibility and maintainability, relying on the compiler for > the donkey work of efficiency details. If you want efficient results > (and that doesn't always matter - but if it doesn't, then C is probably > not the best choice of language in the first place) and you also want to > write good quality source code, optimisation is a must. > Agreed. The cost of maintenance is often overlooked, and correct code is more useful than faster code. > > Now to your point about debugging. It is not uncommon for me to use > debuggers, including single-stepping, breakpoints, monitoring variables, > modifying data via the debugger, and so on. It is common practice in > embedded development. I also regularly examine the generated assembly, > and debug at that level. If I am doing a lot of debugging on a section > of code, I generally use -O1 rather than -O0 - precisely because it is > far /easier/ to understand the generated code. Typically it is hard to > see what is going on in the assembly because it is swamped by stack > accesses or code that would be far simpler when optimised. (That goes > back to the focus on source code clarity and flexibility rather than > micro-managing for run-time efficiency without optimisation.) > > Some specific optimisation options can make a big difference to > debugging, and can be worth disabling, such as "-fno-inline" or > "-fno-top-reorder", and heavily optimised code can be hard to follow in > a debugger. But disabling optimisation entirely can often, IME, make > things harder. > > Temporarily changing optimisation flags for all or part of the code > while chasing particular bugs is a useful tool, however. I'll play with the settings. Andy