Roman,

This approach is unlikely to work out due to separate compilation. Module A 
can't really affect how module B gets compiled. Your contract-mode appears to 
be trying to do such a thing.

So it is not clear where the decision on compile mode is made. If it is inside 
a module, then why not turn them off to remove contracts that enforce things 
like security?

Something like this seems to be "outside" of the language. I have thought that 
the right place would be inside the compiler or something like the 
demodularizer. Further, I imagine a general mechanism that turns

(if p e (error ...))

into just

e

Instead of baked-in cooperation with and knowledge of contracts.

Jay

Sent from my iPhone

> On Jun 3, 2014, at 1:16 PM, Roman Klochkov <kalimeh...@mail.ru> wrote:
> 
> 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
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to