But Michael Hatherly’s showed code above that uses a generated function to 
solve this.

What am I missing?

It’s probably because the thread was getting quite long and what I wrote 
simply got missed.

— Mike
​
On Wednesday, 23 September 2015 03:15:23 UTC+2, Bob Nnamtrop wrote:
>
> But Michael Hatherly's showed code above that uses a generated function to 
> solve this. It seems to work pretty well in the short while I tried it in 
> the REPL. Granted I didn't time it or do anything complicated. It works on 
> Stefan's example above with no problem. The only difference is that one 
> must type fmt("format") instead of "format". Possibly that could be 
> shortened to fmt"format" using a str_macro (although that had some effects 
> when I tried it).
>
> What am I missing?
>
> Bob
>
> On Tue, Sep 22, 2015 at 6:32 PM, Tom Breloff <t...@breloff.com 
> <javascript:>> wrote:
>
>> I think not Luke.  Generated functions work on the types of the 
>> arguments.  If someone wants to format based on an input string, then you 
>> either need a hardcoded value which can go into a macro, or a dynamic value 
>> that would go in a normal function.
>>
>> If all you want to do is print out some arbitrary list of objects with 
>> pre-defined format, then a normal function should be plenty fast (and if 
>> it's a fixed format string, the current macro is the way to go).
>>
>> On Tue, Sep 22, 2015 at 8:21 PM, Luke Stagner <lstag...@gmail.com 
>> <javascript:>> wrote:
>>
>>> Would it be possible to rewrite @printf as a generated function instead 
>>> of a macro. That way the calling syntax would be more familiar.
>>>
>>> On Tuesday, September 22, 2015 at 1:07:23 PM UTC-7, Stefan Karpinski 
>>> wrote:
>>>>
>>>> Possible, but I don't relish the thought of forever explaining to 
>>>> people that they need to use printf with or without the @ depending on if 
>>>> they want it to be fast or flexible. If you really don't care about speed, 
>>>> you can just do this right now:
>>>>
>>>> printf(fmt::AbstractString, args...) = @eval 
>>>> @printf($(bytestring(fmt)), $(args...))
>>>>
>>>>
>>>> But actually don't do that because it's so horrifically slow and 
>>>> inefficient I just can't.
>>>>
>>>> On Tue, Sep 22, 2015 at 3:57 PM, Daniel Carrera <dcar...@gmail.com> 
>>>> wrote:
>>>>
>>>>>
>>>>> On 22 September 2015 at 20:40, Stefan Karpinski <ste...@karpinski.org> 
>>>>> wrote:
>>>>>
>>>>>> I think that before any further discussion takes place of how easy or 
>>>>>> hard implementing a high-performance printf is, anyone who'd like to 
>>>>>> comment should spend some time perusing GNU libc's vfprintf 
>>>>>> implementation 
>>>>>> <http://repo.or.cz/w/glibc.git/blob/ec999b8e5ede67f42759657beb8c5fef87c8cc63:/stdio-common/vfprintf.c>.
>>>>>>  
>>>>>> This code is neither easy nor trivial – it's batsh*t crazy.
>>>>>>
>>>>>
>>>>> That is insane... 2388 lines, half of it macros, and I have no idea 
>>>>> how it works.
>>>>>
>>>>>  
>>>>>
>>>>>> And we want to match its performance yet be much more flexible and 
>>>>>> generic. The current printf implementation does just that, while being 
>>>>>> somewhat less insane GNU's printf code. If someone has bright ideas for 
>>>>>> how 
>>>>>> to *also* allow runtime format specification without sacrificing 
>>>>>> performance or generality, I'm all ears.
>>>>>>
>>>>>
>>>>>
>>>>> This might be a stupid question, but what's the harm in sacrificing 
>>>>> performance as long as we keep the current @sprintf for scenarios that 
>>>>> call 
>>>>> for performance? I don't always need printf() to be fast.
>>>>>
>>>>>
>>>>>  
>>>>>
>>>>>> I have some thoughts, but they're just that – thoughts. One option is 
>>>>>> to change the design and avoid printf-style formatting altogether. But 
>>>>>> then 
>>>>>> I'm sure I'll never hear the end of it with people kvetching about how 
>>>>>> we 
>>>>>> don't have printf.
>>>>>>
>>>>>
>>>>> Probably. Everyone is used to printf and they are comfortable with it.
>>>>>
>>>>> Daniel.
>>>>>
>>>>
>>>>
>>
>

Reply via email to