2016-01-28 22:12 GMT+01:00 Nicolas Cellier <
[email protected]>:

> I wonder if an override of assert/assert: with ^self in production will
> make a noticeable performance drop once inlining JIT is ready.
> Of course eliminating the send with compiler hack eliminates some work for
> inliner, but it sounds like manual optimization duplicating automatic
> optimizer work.
>
> 2016-01-28 21:50 GMT+01:00 stepharo <[email protected]>:
>
>> Marcus
>>
>> I do not really like that we get per class behavior.
>> I would prefer to have a
>>
>> Compiler recompileAllForProductionAndNoAssert
>> or at the level of the package.
>>
>> Stef
>>
>> Hello,
>>
>> Yes, we should experiment with that.
>>
>> A compiler option is very easy to add… and easy to understand. And
>> trivial to do.
>>
>> 1) step one:
>>
>> add the following line at the start of OCASTTranslator>>emitMessageNode:
>>
>> self compilationContext optionDisableAssert ifTrue: [
>> aMessageNode selector == #assert: ifTrue: [ ^methodBuilder pushReceiver ]
>>  ].
>>
>> 2) step 2. There is no step. 2 ;-). Maybe a better version would use
>> plugin… changing the code generator like that
>> is a bit a hack. But it works.
>>
>> You can now turn off all sends to #assert: by enabling the
>> #optionDisableAssert compiler option.
>> e.g. class wide by setting on the class side in
>>
>> compiler
>> ^super compiler options: #(+ optionDisableAssert).
>>
>>
>> More magic is, of course, always possible later… I have some ideas.
>>
>> Marcus
>>
>>
>> On 28 Jan 2016, at 13:54, Aliaksei Syrel < <[email protected]>
>> [email protected]> wrote:
>>
>> Hi
>>
>> Assertions play an important role in design by contract. It is great to
>> have assertions in Pharo out of box (Object>>#assert:). However in projects
>> with many post- and precondition as also class invariants heavy usage of
>> assertions decreases performance...
>>
>> Would it be possible to have a compiler setting (in setting browser) to
>> enable/disable assertions and not compile them to bytecode? Compiler should
>> ignore the whole assertion statement with removed condition. For example:
>>
>>> self assert: self hugeInvariant.
>>
>> with disabled assertion hugeInvariant must not be sent.
>>
>> Thanks,
>> Alex
>>
>>
>>
>>
>
Is it common to use #assert: outside of unit tests? I always saw this as
part of sunit and wondering why one would  want to disable it.
Sure, there are other language which uses some assert-like construct for
runtime checks. But I would have thought smalltalk just does not
use it like that or we would have another one, that is not used for sunit
tests.


nicolai

Reply via email to