Hi Stefan, I'll get my hands dirty and give it a go, but only if you can't see a gotcha that will kill the elegance of julia, I don't know know the whole picture of julia like you and I don't want to screw something up in the language. It seems conceptually clean enough to me that $() interpolation is already parsing a string then extracting the first argument and interpreting it as an expression, and the second argument as a formatting string fine for the gains it gives you.
What is the best way to put forward a proposal like this and get feedback from the Julia community as to if they think it is a good idea? On Saturday, June 14, 2014 3:12:00 PM UTC+8, Stefan Karpinski wrote: > > Pull requests to add functionality are a great way to push changes > forward. The exact syntax and functionality would need a fair amount of > bikeshedding for something so fundamental – and personally, I'm not > convinced that we need new syntax for this. It's unlikely to happen without > someone who wants it taking the initiative to implement it. > > > On Sat, Jun 14, 2014 at 2:25 AM, Andrew Simper <[email protected] > <javascript:>> wrote: > >> Can ask what the point of the "$(variable)" syntax is? My understanding >> is that is is a hack to allow you to easily and quickly insert the results >> of expressions into strings, ie formatting a value as a string. As it >> stands it is only a marginally useful hack, since most of the time when I >> format a value as a string I want to be able to specify for format. >> Modifying the hack to allow a second argument to be a formatting string >> would be insanely useful, you would watch people ditch using sprintf by the >> droves (apart from porting old c code to julia). >> >> On Saturday, June 14, 2014 2:06:31 PM UTC+8, Andrew Simper wrote: >>> >>> That sounds great with regards using the printf internals in a more >>> general context. >>> >>> Now I just tried this: >>> >>> julia> v = 0.1234 >>> 0.1234 >>> >>> julia> "$(v, v)" >>> ERROR: syntax: invalid interpolation syntax >>> >>> So for the first "argument" of the tuple it makes sense it has to be a >>> valid expression, but for the second argument it would be cool to support >>> formatted output of whatever the first argument evaluates to. eg: >>> >>> julia> "$(v, %0.2f)" >>> "0.12" >>> >>> julia> "$(v+v, %0.2f)" >>> "0.25" >>> >>> This would be a huge win for making complicated formatting very >>> powerful, succinct, and easy to use without mistakes. >>> >>> >>> On Saturday, June 14, 2014 1:46:26 AM UTC+8, Stefan Karpinski wrote: >>>> >>>> The trouble is that what's inside the parentheses is just an expression >>>> and printf format specifiers are not generally valid expressions. I've >>>> been >>>> meaning for a while to take a crack at making some of the printf >>>> formatting >>>> machinery a little more generally usable. It's easier now that Jameson, >>>> Keno and Jeff have made it efficient enough to use local variables for the >>>> printf machinery instead of having to use const globals. >>>> >>>> >>>> On Thu, Jun 12, 2014 at 11:05 PM, Andrew Simper <[email protected]> >>>> wrote: >>>> >>>>> Perhaps even the other way around may be better to keep things as >>>>> similar as possible to the regular println syntax: >>>>> >>>>> $(arg, fmt) >>>>> >>>>> v0 = 1.234 >>>>> v1 = 200 >>>>> @print ("some formatted numbers: $(v0, 0.2f), $(v1, 06d)") >>>>> >>>>> >>>>> On Friday, June 13, 2014 10:56:35 AM UTC+8, Andrew Simper wrote: >>>>>> >>>>>> I love the old style c formatting specifiers, they are quick and easy >>>>>> to use. I noticed that there is an @printf macro that will still have >>>>>> the >>>>>> same sort of issues as the old c version in that you have to match the >>>>>> order of vargs to that of the formating string which can lead to errors. >>>>>> I >>>>>> noticed that the println function uses $(var) syntax like php which I >>>>>> think >>>>>> is much better since the variable is inplace in the string. >>>>>> >>>>>> What do people think about keeping the same php type syntax but >>>>>> adding an optional formatting element and making the $(arg) into a tuple >>>>>> $(fmt, arg) so you can't screw up the matching of the format with the >>>>>> argument? >>>>>> >>>>>> so using this type of style: >>>>>> v0 = 1.234 >>>>>> v1 = 200 >>>>>> @print ("some formatted numbers: $(0.2f, v0), $(06d, v1)") >>>>>> >>>>>> >>>>>> instead of the current: >>>>>> @printf("some formatted numbers: %0.2f, %06d", v0, v1) >>>>>> >>>>>> >>>>>> both output: >>>>>> >>>>>> *some formatted numbers: float 1.23, int 000200* >>>>>> >>>>>> >>>>>> >>>>>> >>>> >
