Any language that has assertions can be used to simulate at least preconditions and postconditions, and maybe some support for invariants.
As the team leader for the second version of a database middleware product developed in C, being convinced by study of the efficacy of assertions for DbC and hence better quality software, I made sure my team used C assertions heavily throughout the codebase, at the entry and exit points of functions, to implement preconditions and postconditions, despite some opposition to it.
End result: the product was a success, and was used in multiple software projects for customers.
We were rewarded well for it.
Edit: I first learned about DbC myself, via reading about Eiffel and Bertrand Meyer's work, early on.
I should add that the product being a success wss not solely due to using assertions for DbC, of course, although, IMO, that did play a significant role in bug detection and hence removal and better product quality. I also ensured that the team consistently applied some other basic software engineering practices, which were not ordinarily followed in that company. The product success was the result of all the practices that were applied and also a good team.
As the team leader for the second version of a database middleware product developed in C, being convinced by study of the efficacy of assertions for DbC and hence better quality software, I made sure my team used C assertions heavily throughout the codebase, at the entry and exit points of functions, to implement preconditions and postconditions, despite some opposition to it.
End result: the product was a success, and was used in multiple software projects for customers.
We were rewarded well for it.
Edit: I first learned about DbC myself, via reading about Eiffel and Bertrand Meyer's work, early on.