3 ms·
I think they were introduced with Eiffel, which was all about design by contract
by peterashford 1y ago
I think they were introduced with Eiffel, which was all about design by contract
- johnisgood 1y agoAda has that too, for what it is worth: https://learn.adacore.com/courses/intro-to-ada/chapters/contracts.html https://learn.adacore.com/courses/intro-to-ada/chapters/cont... and https://en.wikibooks.org/wiki/Ada_Programming/Contract_Based_Programming https://en.wikibooks.org/wiki/Ada_Programming/Contract_Based.... It can be verified at compile time. But what I love the most is: https://news.ycombinator.com/item?id=43936007 https://news.ycombinator.com/item?id=43936007 Instead of: const MIN_U32 = 0; const MAX_U32 = 2 ** 32 - 1; function u32(v) { if (v < MIN_U32 || v > MAX_U32) { throw Error(`Value out of range for u32: ${v}`); } return leb128(v); } You can do this, in Ada: subtype U32 is Interfaces.Unsigned_64 range 0 .. 2 ** 32 - 1; or alternatively: type U32 is mod 2 ** 32; and then you can use attributes such as: First : constant U32 := U32'First; -- = 0 Last : constant U32 := U32'Last; -- = 2 ** 32 - 1 Range_ : constant U32 := U32'Range; -- Range 0 .. 2**32 - 1 Does D have anything like this? Or do any other languages?