Pascal's repeat... until vs. C's do... while

11,089

Solution 1

There's no fundamental difference at all, and no advantage to one over the other. It's just "syntactic sugar" — a change to the language's syntax that doesn't change its behavior in any real way. Some people find "repeat until" easier to conceptualize, while others find "repeat while" easier.

If, in C, you encounter a situation where "until" is what's desire, you can always just negate the condition:

do {
    excitingThings();
} while ( !endOfTheWorld() );

Solution 2

In C the statement

 while(some_condition);

might either be a "do nothing" loop or might have become detached from a "do ... while" loop.

 do {
  statement;
  statement;
  statement;
  lots more statements;
 }

 while(some_condition);

Using a different keyword - until - avoids this possible misinterpretation.

Not such a problem these days when everybody turns on all compiler warnings and heeds them, don't they? Still, I suspect that most veteran C programmers have wished - at some time or other - that C used "until" in this case.

Solution 3

The design of Pascal was motivated in part by the structured-programming work of the 1960s, including Edsger Dijkstra's groundbreaking work A Discipline of Programming. Dijkstra (the same man who considered goto harmful) invented methods for creating programs that were correct by construction. These methods including methods for writing loops that focus on the postcondition established when the loop terminates. In creating the repeat... until form, Wirth was inspired by Dijkstra to make the termination condition, rather than its complement, explicit in the code.

I have always admired languages like Smalltalk and Icon, which offer two syntactic forms, thus allowing the programmer to express his or her intent clearly, without necessarily having to rely on an easily missed complement operator. (In Icon the forms are while e1 do e2 and until e1 do e2; in Smalltalk they are block1 whileTrue: block2 and block1 whileFalse: block2.) From my perspective neither C nor Pascal is a fully built out, orthogonal design.

Solution 4

I'm not sure about historical influences, but in my opinion C is more consistent, in the sense that ifs require a condition to be true for the code to run, as do whiles and do whiles.

Solution 5

There was no "decision" that would in any way connect the behavior of Pascal repeat/until loop with the behavior of C do/while loop, neither deliberate nor arbitrary. These are simply two completely unrelated issues.

Share:
11,089
Bob
Author by

Bob

Updated on June 27, 2022

Comments

  • Bob
    Bob over 1 year

    In C there is a do while loop and pascal's (almost) equivalent is the repeat until loop, but there is a small difference between the two, while both structures will iterate at least once and check whether they need to do the loop again only in the end, in pascal you write the condition that need to met to terminate the loop (REPEAT UNTIL something) in C you write the condition that needs to be met to continue the loop (DO WHILE something). Is there a reason why there is this difference or is it just an arbitrary decision?