I really hate how printf and sprintf are macros. I have no idea why they would have these in the standard library instead of replacing them with function forms.
I agree with this. I believe the choice of having them as macros rather than functions was made for performance reasons? However, I think they should be in std lib... having to do 'using Printf' everywhere is silly
I once spent a bit of time playing with DataFramesMeta.jl, which is what I was able to find that seemed like Julia's answer to dplyr, and I thought it was awful precisely because everything was macros. With dplyr, any function that takes a dataframe and returns a dataframe can be thrown into the mix. In DataFramesMeta.jl, if I ran a chain of events and needed to look at only the first few rows, instead of throwing Julia's head function into the chain I was building, I had to switch modes and wrap everything in the function. It was aggravating (and yes, this is a very minor thing, but I was only doing very minor work, and as things got more complicated I don't think I was going to miss dplyr's flexibility less).