Re: Fwd: Compiler Guided Refactoring.

J Arrizza <[email protected]> Tue, 9 Jul 2013 21:07:15 -0700
Newsgroups gmane.comp.programming.refactoring
Message-ID <CAEyOLyAeKUmz-EKfzqMp5w7D6e_-OFOf_CV-v83UpJq5W51Fkw@mail.gmail.com>
John, I may be beating a dead horse here, but I'm going to throw it out
there anyway.

I remember vaguely from a comp-sci course that a flow-graph can be
generated from source, and in your case from the generated assembly code.
Comparing the before and after flow-graphs would give you a true/false as
to functional equivalence of a refactoring operation. But I'm pretty sure
that flow-graphs do not include timing.

So here's the pitch: extend the concept of a flow-graph to tally the timing
on the branches of the graph. Then the before/after comparison would give
you both functional and timing equivalence. Sounds like a pain, but it
might make a nice master's thesis.

Not sure what exactly this would bring to the table, but it would --
potentially -- allow some refactorings to occur that a strict diff of the
before/after executables would not. From a practical perspective, you'd
have to trust the theory and also the utility that generates the
flow-graphs, of course.

Bottom line: Is it worth the effort? no idea....

John

On Mon, Jul 8, 2013 at 3:54 PM, J Arrizza <[email protected]> wrote:

> On Mon, Jul 8, 2013 at 3:02 PM, John Carter <[email protected]>wr=
ote:
>
>> **
>>
>>
>> > The key aspect to the Extract Method with no arguments and void return
>> > value (i.e. void-void extraction) is that it minimizes the risk of
>> > introducing side-effects.
>>
>> That is what appeals to me most about it....
>>
>> However, it is steps a largish notch away from the idea... ie. Tweaking
>> the Declarations to Tighten the constraints enforced by the compiler.
>>
>> I see, so the code is that critical... You're looking for absolutely no
> change in the generated executable but still refactorings on the source.
>
>> ie. Your void-void is low risk, provided the person doing the refactorin=
g
>> doesn't,,,
>> * accidentally reorder something,
>> * drop a step,
>> * or extract copypasta into a single method that isn't copypasta but
>> copypasta and tiny easily missed tweak.
>>
>> :) copy and pasta, had it for supper last night.
>
> I wonder if there is any way of doing a reliable cross check, or a varian=
t
>> of this, or a way of injecting additional steps to increase safety.
>>
>> So clearly UTs are not available. What about Pair Programming? Or code
> review after a small set of changes?
> On the other hand, if the code is as critical as it seems to be, even
> those won't guarantee no changes in the executable.
>
> Hmm. It might need an additional check, gcc will always inline something
>> like that so could diff the disassembly output.
>>
> Sure, it could be used in lieu of UTs:
> - If the disassembly output matches, then all is well.
> - If they don't match, then a quick review of the disassembly output and
> the source to see why the mismatch. A mismatch might still be acceptable,
> right??
>
> On the bright side... you might find a compiler bug.
>
>
>> On Sun, Jul 7, 2013 at 5:31 AM, J Arrizza <[email protected]> wrote:
>>
>> > The key aspect to the Extract Method with no arguments and void return
>> > value (i.e. void-void extraction) is that it minimizes the risk of
>> > introducing side-effects.
>> >
>> > The conversion of the function parameters to consts is slightly
>> different,
>> > its purpose is to highlight the fact that the function won't introduce=
 a
>> > side-effect via those parameters.
>>
>> >
>> > Further to this, one additional refactoring I've used is Rename
>> Variable to
>> > add a "g" prefix to all global variables. I personally don't like
>> hungarian
>> > notation but adding the "g" is a very useful exception to this rule. A=
ll
>> > the globals show up clearly in the code.
>> >
>> > One other way to achieve this is to put all globals into a single stru=
ct
>> > called "globals". Then all uses show up as "globals.some_variable" whi=
ch
>> > makes it very clear that there is a global side-effect in that part of
>> the
>> > code. But note the compiler may generate more code for this technique.
>> >
>> > John
>>
>> >
>> >
>> >
>> > On Thu, Jul 4, 2013 at 3:28 PM, J Arrizza <[email protected]> wrote:
>> >
>> > > On Thu, Jul 4, 2013 at 7:27 AM, Richard <[email protected]>
>> wrote:
>> > >
>> > >> **
>> > >>
>> > >> n article <
>> > >> CAEyOLyBfwH6uD6Z5RxBmmne4NA90cpF6N6LGacJPmRTSz7Enyg@mail.gmail.com>=
,
>>
>> > >> J Arrizza <[email protected]> writes:
>> > >>
>> > >> > is. IMO the biggest bang for buck is the void-void extraction.
>> > >>
>> > >> This is Extract Method/Extract Function with no arguments
>> > >>
>> > > ... and void return value.
>> > >
>> > >> > The next best is the void-const extraction.
>> > >>
>> > >
>> > >> This is Extract Method/Extract Function with arguments
>> > >>
>> > > ... and void return value and all the arguments are const.
>> > >
>> > >>
>> > >> I think it's important to use the established names for well known
>> > >> refactorings for clear communication.
>> > >>
>> > > Absolutely.
>> > >
>> > >>
>> > >>
>> > >>
>> > >> Start a New Topic<
>> >
>> http://groups.yahoo.com/group/refactoring/post;_ylc=3DX3oDMTJlazgzdWgyBF=
9TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA=
250cGMEc3RpbWUDMTM3Mjk0ODA2Ng--
>> >
>> > Messages
>> > >> in this topic<
>> >
>> http://groups.yahoo.com/group/refactoring/message/10661;_ylc=3DX3oDMTM2d=
TY1ZDY3BF9TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lk=
AzEwNjY0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTM3Mjk0ODA2NgR0cGNJZAMxMDY2MQ--
>> > >(4)
>> > >> Recent Activity:
>> > >>
>> > >>
>> > >> Visit Your Group<
>> >
>> http://groups.yahoo.com/group/refactoring;_ylc=3DX3oDMTJlOW1ucG5jBF9TAzk=
3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZnaH=
AEc3RpbWUDMTM3Mjk0ODA2Ng--
>> > >
>> > >> [image: Yahoo! Groups]<
>> >
>> http://groups.yahoo.com/;_ylc=3DX3oDMTJkbWt0N2dqBF9TAzk3MzU5NzE0BGdycElk=
AzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzcyOTQ=
4MDY2
>> > >
>> > >> Switch to: Text-Only<
>> > [email protected]
>> ?subject=3DChange+Delivery+Format:+Traditional
>> > >,
>> > >> Daily Digest<
>> > [email protected]?subject=3DEmail+Delivery:+Digest>=
=95
>> > >> Unsubscribe <
>> > [email protected]?subject=3DUnsubscribe>=95 Term=
s
>> > >> of Use <http://docs.yahoo.com/info/terms/> =95 Send us Feedback
>> > >> <
>> > [email protected]
>> ?subject=3DFeedback+on+the+redesigned+individual+mail+v1
>> > >
>> > >> .
>> > >>
>> > >>
>> > >>
>> > >
>> > >
>> >
>> >
>> > [Non-text portions of this message have been removed]
>> >
>> >
>> >
>> > ------------------------------------
>> >
>> > Yahoo! Groups Links
>> >
>> >
>> >
>> >
>>
>> --
>> John Carter Phone : (64)(3) 358 6639
>> Tait Electronics Fax : (64)(3) 359 4632
>> PO Box 1645 Christchurch Email : [email protected]
>> New Zealand
>>
>> --
>>
>> ------------------------------
>> This email, including any attachments, is only for the intended
>> recipient.
>> It is subject to copyright, is confidential and may be the subject of
>> legal
>> or other privilege, none of which is waived or lost by reason of this
>> transmission.
>> If you are not an intended recipient, you may not use, disseminate,
>> distribute or reproduce such email, any attachments, or any part thereof=
.
>> If you have received a message in error, please notify the sender
>> immediately and erase all copies of the message and any attachments.
>> Unfortunately, we cannot warrant that the email has not been altered or
>> corrupted during transmission nor can we guarantee that any email or any
>> attachments are free from computer viruses or other conditions which may
>> damage or interfere with recipient data, hardware or software. The
>> recipient relies upon its own procedures and assumes all risk of use and
>> of
>> opening any attachments.
>> ------------------------------
>>
>>
>> [Non-text portions of this message have been removed]
>>
>>=20=20
>>
>
>


[Non-text portions of this message have been removed]



------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/refactoring/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/refactoring/join
    (Yahoo! ID required)

<*> To change settings via email:
    [email protected]=20
    [email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/