Will you accept patch for this, if I'll write it?

(contract-out ...) will have (id debug-contract-expr production-contract-expr) 
instead of (id contract-expr) in syntax
There will be global phase-1 variable 
contract-mode : (or/c 'nothing 'production 'pre 'pre-and-past 'all) = 'all

nothing -- no checks
production -- use production contract if present, otherwise check only 
pre-condiction
pre -- check only pre-condiction
pre-and-post -- check pre and post conditions
all -- current behavior




Tue, 3 Jun 2014 12:47:18 -0400 от Matthias Felleisen <matth...@ccs.neu.edu>:
>
>Your mail calls for a philosophical answer. If this were Eiffel, you would be 
>correct. 
>
>But Racket is not Eiffel: 
> -- we are not a tools company that sells a language 
> -- we spent our own time on a maintenance effort that goes above and beyond 
>our jobs 
> -- and we don't provide a standard language (meant to make developers happy 
>and its creators famous and wealthy). 
>
>Racket is a programming language programming language [not a typo]. We wish to 
>go beyond conventional features. When it comes to contracts, this means we 
>wish to provide (1) higher-order contracts so that we cover the full spectrum 
>of linguistic features and (2) a programmable toolbox so that programmers can 
>create their own favorite idioms -- above and beyond the stuff available in 
>standard languages. 
>
>We fully understand that expanding the horizons of the language puts some 
>burden on programmers. Every programmer may have to develop his own techniques 
>and tools and idioms for our new features. We balance this burden with a 
>catalog-driven on-line library, where programmers can register little more 
>than a github URL to share such libraries. 
>
>With apologies for the extra burden and the non-technical answer -- Matthias
>
>
>
>
>
>
>
>On Jun 3, 2014, at 12:24 PM, Roman Klochkov < kalimeh...@mail.ru > wrote:
>
>> There should be _standard_ check-modes. With global variable (or better 
>> compile-mode).
>> 
>> Because, I can in my own libraries make this 4 or even more modes. But I use 
>> 3d-party or standard library. And I cannot rewrite them all to my 4 modes. 
>> Even if another developer will use the same idea, he or she will have own 
>> modes and own variable to set them.
>> 
>> 
>> Tue, 3 Jun 2014 07:47:37 -0400 от Matthias Felleisen < matth...@ccs.neu.edu 
>> >:
>> 
>> You can program these scenarios with option contracts; see comparison in 
>> paper. Perhaps it's time to write this up as a chapter for the Guide. 
>> 
>> 
>> On Jun 3, 2014, at 12:38 AM, Daniel Prager wrote:
>> 
>>> > I propose something like two contracts: for debug and production modes.
>>> 
>>> Eiffel compilers implement a sliding scale of contract-checking, something 
>>> like:
>>>     • Check nothing [naive]
>>>     • Check pre-conditions only [good for production - quick]
>>>     • Check pre- and post-conditions only [can be slow]
>>>     • Check pre- and post-conditions and invariants [van be very slow]
>>> [Loop and ad hoc assertions would have been in there too.]
>>> 
>>> Post-conditions and invariants can be *very* expensive to check, but are 
>>> great when debugging.
>>> 
>>> Pre-condition checking is typically cheap, and quickly tells you when 
>>> trusted code is being called with bad arguments.
>>> 
>>> Recommeneded development practice was to start with all contracts checked, 
>>> and as one's code iterated towards trustworthiness turn down the 
>>> checking-level (but leave pre-conduitions on) and enjoy the huge speed 
>>> boost.
>>> 
>>> There's value in being able to control checking on a per module basis, 
>>> essentially doing deep checks on newer / less-tested / less-trusted parts 
>>> of the system.
>>> 
>>> How does the picture change with higher-order contracts and checking at 
>>> module boundaries?
>>> 
>>> Dan
>>> 
>>> 
>>> 
>>> On Tue, Jun 3, 2014 at 6:20 AM, Roman Klochkov < kalimeh...@mail.ru > wrote:
>>> The problem is that, when debbugging, contract should be precise. For 
>>> example, insert-in-sorted-queue may check that queue is orted before and 
>>> after the function. 
>>> But inserting the element is O(log n) and testing will be O(n).
>>> 
>>> option contracts -- 1) unstable 2) should be turned off and on individually.
>>> 
>>> For quick hack, I'll simply redefine contract-out and recompile all. But I 
>>> propose something like two contracts: for debug and production modes. 
>>> 
>>> 
>>> Mon, 2 Jun 2014 15:49:05 -0400 от Matthias Felleisen < matth...@ccs.neu.edu 
>>> >:
>>> 
>>> 
>>> On Jun 2, 2014, at 3:42 PM, Roman Klochkov < kalimeh...@mail.ru > wrote:
>>> 
>>> > Is there a way to disable all contract checks? 
>>> > 
>>> > Suppose, I debugged my program and sure that it is reliable. I disable 
>>> > debugging, but as I understand, contracts are still checked in every 
>>> > function.
>>> > But I want to maximize the performance of my program. Is there a way to 
>>> > do that or I have to manually hack racket/contract/base to do that?
>>> 
>>> 
>>> No. 
>>> 
>>> ;; --- 
>>> 
>>> Programmers who disable assertion checking as they are deploying software 
>>> are like people who wear life vests on land when they learn about the 
>>> theory of sailing and take them off as soon as they board the boat for 
>>> practical exercises on the water. -- somebody famous 
>>> 
>>> ;; --- 
>>> 
>>> You will need to define a version of provide and/or contract-out that 
>>> throws away contracts based on a switch. 
>>> 
>>> Or you check out option contracts and use those. 
>>> 
>>> -- Matthias
>>> 
>>> 
>>> 
>>> -- 
>>> Roman Klochkov
>>> 
>>> ____________________
>>>   Racket Users list:
>>>  http://lists.racket-lang.org/users
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Daniel Prager
>>> Agile/Lean Coaching, Software Development and Leadership
>>> Startup:  www.youpatch.com
>>> Twitter: @agilejitsu 
>>> Blog: agile-jitsu.blogspot.com
>> 
>> 
>> 
>> -- 
>> Roman Klochkov
>


-- 
Roman Klochkov
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to