Re: Fwd: Compiler Guided Refactoring.

J Arrizza <[email protected]> Wed, 10 Jul 2013 05:24:32 -0700
Newsgroups gmane.comp.programming.refactoring
Message-ID <CAEyOLyBeiFRgyk6oxBwPh93X7QkneOGCwDT-kXuHc_+wpWs0mw@mail.gmail.com>
I'm not a 100% sure, but I believe Michael Feathers is talking about a
dependency graph (i.e. what code depends on what).

What I'm saying here is to use a DAG (like those used by compiler
optimizers):

http://en.wikipedia.org/wiki/Directed_acyclic_graph

BTW I did a quick search and found nothing open source or immediately
available, although there probably is one buried in the gcc optimizer...



On Tue, Jul 9, 2013 at 10:58 PM, Andrew McDonagh
<[email protected]>wrote:

> **
>
>
> This topic is covered in Michael Feathers book: Working With Legacy Code.
>
> Regards
> Andrew
>
>
> On 10 Jul 2013, at 05:07, J Arrizza <[email protected]> wrote:
>
> > 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 cod=
e.
> > 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 su=
re
> > 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 gi=
ve
> > 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 t=
he
> > 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]
> >wrote:
> >>
> >>> **
>
> >>>
> >>>
> >>>> The key aspect to the Extract Method with no arguments and void retu=
rn
> >>>> 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. Tweaki=
ng
> >>> 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 sourc=
e.
> >>
> >>> ie. Your void-void is low risk, provided the person doing the
> refactoring
> >>> 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
> variant
> >>> of this, or a way of injecting additional steps to increase safety.
> >>>
> >>> So clearly UTs are not available. What about Pair Programming? Or cod=
e
> >> 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 somethi=
ng
> >>> 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 a=
nd
> >> 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 retu=
rn
> >>>> 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.
> All
> >>>> the globals show up clearly in the code.
> >>>>
> >>>> One other way to achieve this is to put all globals into a single
> struct
> >>>> called "globals". Then all uses show up as "globals.some_variable"
> which
> >>>> 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 techniqu=
e.
> >>>>
> >>>> 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=3DX3oDMTJlazgzdWgyBF9=
TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2=
50cGMEc3RpbWUDMTM3Mjk0ODA2Ng--
> >>>>
> >>>> Messages
> >>>>>> in this topic<
> >>>
> http://groups.yahoo.com/group/refactoring/message/10661;_ylc=3DX3oDMTM2dT=
Y1ZDY3BF9TAzk3MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkA=
zEwNjY0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTM3Mjk0ODA2NgR0cGNJZAMxMDY2MQ--
> >>>>> (4)
> >>>>>> Recent Activity:
> >>>>>>
> >>>>>>
> >>>>>> Visit Your Group<
> >>>
> http://groups.yahoo.com/group/refactoring;_ylc=3DX3oDMTJlOW1ucG5jBF9TAzk3=
MzU5NzE0BGdycElkAzM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZnaHA=
Ec3RpbWUDMTM3Mjk0ODA2Ng--
> >>>>>
> >>>>>> [image: Yahoo! Groups]<
> >>>
> http://groups.yahoo.com/;_ylc=3DX3oDMTJkbWt0N2dqBF9TAzk3MzU5NzE0BGdycElkA=
zM5NzU2MDIEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzcyOTQ4=
MDY2
> >>>>>
> >>>>>> 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 Te=
rms
> >>>>>> 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]
> >
> >
> > [Non-text portions of this message have been removed]
> >
> >
> >
> > ------------------------------------
> >
> > Yahoo! Groups Links
> >
> >
> >
>
>=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/