Pensieve header: Experiments with half-delayed evaluation.

With

a=1;b=2;c=5;
With[{a=a,b=b},x:=a+b+c;y:=b+c];
a=10;b=20;c=50;
{x,y}

?x

?y

a=1; With[{a=a}, z:=a]; ?z

Block

a=1; b=2;
Block[{a=a}, c:=a+b];
a=10; b=20;
c

?c

a=1; Block[{a=a}, z:=a]; ?z

Module

a=1; b=2;
Module[{a=a}, c:=a+b];
a=10; b=20;
c

?c

a=1; Module[{a=a}, z:=a]; ?z

WithCurrent, V1

From http://mathematica.stackexchange.com/questions/45361/half-delayed-evaluation:

SetAttributes[WithCurrent,HoldAll];
WithCurrent[vs_List,delayeddefs___] := With[
{eqs=Replace[
Map[Hold,Replace[Hold@vs,Hold[{x___}]:>Hold[x]],1],
Hold[x_]:>(x=x),
-1
]},
Hold[With[eqs,delayeddefs]]/.Hold[x___Set]:>{x}
]//ReleaseHold;
a=1; b=2; c=3;
WithCurrent[{a,b},x:=a+b+c]
?x

With[{vs={p,q}},
Map[Hold,Replace[Hold@vs,Hold[{x___}]:>Hold[x]],1]
]

With[{vs={p,q}},
Replace[
Map[Hold,Replace[Hold@vs,Hold[{x___}]:>Hold[x]],1],
Hold[x_]:>(x=x),
-1
]
]

SetAttributes[WithCurrent,HoldAll];
WithCurrent[vs_List,delayeddefs___] := With[
{eqs=Replace[
Map[Hold,Replace[Hold@vs,Hold[{x___}]:>Hold[x]],1],
Hold[x_]:>(x=x),
-1
]},
MapAt[
Replace[#,Hold[x___Set]:>{x}]&,
Hold[With[eqs,delayeddefs]],
{1,1}
]
]//ReleaseHold;
a=1; b=2; c=3;
WithCurrent[{a,b},x:=a+b+c]
?x

(Replace[#1,Hold[x___Set]:>{x}]&)[Hold[a=a,b=b]]

WithCurrent, V2

SetAttributes[WithCurrent,HoldAll];
WithCurrent[{vs:(_Symbol...)}, body_] := Replace[
Hold[vs],s_:>(s=s),{1}
] /. _[eqs___]:>With[{eqs}, body];
a=1; b=2; c=3;
WithCurrent[{a,b},x:=a+b+c]
?x