Ok, weird proposal: Make the per-iteration update part of a for loop change from "assignment to assignment or boolean expression" to allow:
*while COND do {...}:* for i:=0; x[i]<4; {...} *do {...} while COND:* for i:= 0; ; x[i]<4 { ...} On Wed, May 2, 2018 at 12:33 PM Louki Sumirniy < louki.sumirniy.stal...@gmail.com> wrote: > It adds absolutely nothing, that's why it should not be accepted. It will > lead to a divergence in the way it's used as well. However I think maybe > run block once before first condition check would be a useful and powerful > addition. Maybe it shows my age that I even know what do-while > post-conditional loops are, and why they are useful. I have had to write > these more wordy constructs for exactly this purpose several times in a > project I am working on. > > If there could be some less verbose way to flag that the condition only be > checked first run. As I am thinking about it I am thinking of some other > ways too, such as adding an or clause in the conditional that only checks > if it's the first run, since golang's and and or operators are just > drop-throughs, well, more or less, I mean, the or operator just does both > tests and runs the block directly if the first condition passes. Here's a > rough sketch of it while I am thinking about it > > for w:= true; w || <cond>; w=false { > ... > } > > This will always run the first time and I can't be certain but I think > that the compiler may skip the assignment second time since it is an > assignment. Still wordy but it is a do-while loop, nevertheless. If the > assignment is repeated each time it's still an overhead cost, however. Some > kind of 'do this only once' hint to the compiler maybe. But you see what I > mean. This is definitely a case of something Go could use as an improvement > and if it was constructed correctly it would not break old code, but > instead actually give people a way to improve it when refactoring later on. > > On Wednesday, 2 May 2018 20:43:11 UTC+3, Ian Lance Taylor wrote: >> >> On Wed, May 2, 2018 at 2:48 AM, Hugh Fisher <hugo....@gmail.com> wrote: >> > >> > On Tuesday, May 1, 2018 at 10:45:30 PM UTC+10, Ian Lance Taylor wrote: >> >> >> >> >> >> A `while` statement would presumably be exactly identical to a `for` >> >> statement with a single condition. So adding a `while` statement >> >> would not add any power to the language, and would add an additional >> >> keyword. All language choices are a cost benefit decision. In this >> >> case the benefit is a looping construct that some people will find >> >> clearer to read and write, and the cost is a new keyword that >> >> everybody needs to learn, and that at this point in the language's >> >> evolution will likely break some, even if not much, existing code. I >> >> don't think the benefit is worth the cost. >> >> >> > As for not adding any power, that's why I mentioned if-then-else and >> switch. >> > Switch with boolean cases is the same as if then else. It's not an >> obscure >> > side effect either, the Go Tour cheerfully explains how to use it >> instead of >> > if-then-else if you prefer. >> >> That is not the same thing, though. Yes, if-then-else and switch do >> similar things, but they have a different syntax and are idiomatically >> used in different ways. You can consider if-then-else as syntactic >> sugar for switch, if you like. It's OK for a language to have some >> syntactic sugar. >> >> But in this case you seem to be suggesting that we add `while <cond> { >> <body> }` as an exact duplicate of the existing language construct >> `for <cond> { <body> }`. That's not syntactic sugar. You are >> suggesting that `while` just be a synonym for `for`. We don't need >> two different keywords that mean exactly the same thing. >> >> >> > Hmm, think I will have a look at the formal change proposal process... >> >> I encourage proposals but I can tell you upfront that this proposal >> will not be accepted. >> >> Ian >> > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Michael T. Jones michael.jo...@gmail.com -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.