[Haskell-cafe] A suggestion: On why code merges should influence Haskell design

Dimitri DeFigueiredo defigueiredo at ucdavis.edu
Mon Oct 12 19:20:29 UTC 2015


I think both these examples strengthen my argument! :-)

There is no problem at all in the second and the first one precisely 
show us a situation when we would like to know there is a conflict.

The guarantee I want is that when merging 2 branches A and B:
*If there are no conflicts*, the merge tool guarantees the merge output 
introduces no new bugs *other than those already found in A or B*.

Note:
1. we get to define what a conflict is and
2. we don't care if the bugs were already present in either branch.

On the first example, I assume both branches A and B will compile and 
run before the merge so that we are really only changing the value of 
the variable on branch A and the definition of the function on branch B 
(otherwise the branches would not compile before the merge).

Because the definition of the function depends on a *specific* value the 
variable, there is no way to avoid declaring a conflict. But notice that 
in the more general case where the function puts that value as a 
parameter there is no conflict, because if there were a bug it would 
already be present in branch B. So, the merge process is not introducing 
any bugs by itself.

This is exactly what happens in the second example. I assume branch A 
provides the new definition of f(x) and that in branch B we change the 
search strategy in the search function g. However, I assume that g would 
take f as a parameter g:: (Integer -> Integer) -> Integer. In this case, 
if there were a bug in g in the merged output, then it would already be 
present in branch B before the merge. Therefore, there is no conflict at 
all here.

In summary, there is no conflict on the second example and I would like 
to know about the conflict due to the global dependency on the first one.


Dimitri


On 10/11/15 6:58 PM, Charles Durham wrote:
> 1. If you have a merge take place in two lines right next to each 
> other, say one variable is declared in one and a function processes 
> that variable in another, if those two are responsible together for 
> exiting a loop, then you're going to be solving the Halting Problem to 
> show there are no bugs.
>
> 2. If you have one function "f(x) = a + bx + cx^2 +..." and another 
> function that iterates through integers until a solution is found in 
> integers, then if the internals of either is changed (either the 
> constants in f, or the search strategy), then you're going to have to 
> be solving "Hilberts 10th Problem" to understand that there are no 
> bugs introduced, thought this was interesting as the changes are 
> "further" apart.
>
> At least for the general case, this should be a problem for all Turing 
> Complete languages. It might be interesting to think about finding 
> sections of code that are "Total", and perhaps put certain guarantees 
> on that, but there still might be weird ways that two lines of code 
> can play with each other beyond that.
>
> I hope this isn't overly pedantic, or that I'm not completely off base.
>
> On Sun, Oct 11, 2015 at 8:10 PM, Jeffrey Brown 
> <jeffbrown.the at gmail.com <mailto:jeffbrown.the at gmail.com>> wrote:
>
>     +1 for AST merge. Writing code from text is reasonable, but
>     storing code as text is lunacy.
>
>     On Sat, Oct 10, 2015 at 11:17 PM, Sean Leather
>     <sean.leather at gmail.com <mailto:sean.leather at gmail.com>> wrote:
>
>         On Sun, Oct 11, 2015 at 4:09 AM, Dimitri DeFigueiredo wrote:
>
>             Can we write a "compiler-like" merge tool for Haskell?
>
>
>         Merge could be considered to be a combination of diff and
>         patch. And so you might want to merge ASTs, which are
>         typically families of datatypes. Related: Type-Safe Diff for
>         Families of Dataypes: http://www.andres-loeh.de/gdiff-wgp.pdf
>
>         Regards,
>         Sean
>
>         _______________________________________________
>         Haskell-Cafe mailing list
>         Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
>         http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>
>
>
>     -- 
>     Jeffrey Benjamin Brown
>
>     _______________________________________________
>     Haskell-Cafe mailing list
>     Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
>     http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20151012/a6443aae/attachment.html>


More information about the Haskell-Cafe mailing list