Tim,

The 11 seconds was entirely spent in compiling the 6 functions in the file 
that I was working on.  I had no 'using' or 'include' commands in the file; 
I think the time was entirely compilation.  

I would be happy with the mode you suggest.  I see it as a development 
mode; ideally in addition to quick compilation, changed files are detected 
and automatically reloaded and in general the 'compile' part of the 
edit-compile-test cycle is very short and we can essentially iterate on an 
edit-test cycle.   Then we can have a compilation mode, in which the LLVM 
can do all kinds of fancy tricks, and it's ok that it takes 11 seconds to 
compile a relatively small module.

I'm glad to hear about Jameson's caching work; I think this is important.

Chris

On Sunday, November 23, 2014 12:21:43 PM UTC-8, Tim Holy wrote:
>
> I think Christian has a good point. 
>
> The time in Julia does depend on how many extra packages, etc, one loads. 
> In 
> Jameson's up-and-coming caching work, packages should get compiled the 
> first 
> time you use them, and thereafter be very fast to load. But if your 
> package 
> has a large codebase on its own, this will only get you so far. 
>
> Christian, how much of that 11 seconds was _parsing_ (statements like 
> `using` 
> or `include`) vs. the time to _compile_ (the delay when you run something 
> like 
> `runtest(A)`, where `A` is the input)? If it's mostly the latter, then I 
> wonder if it would be helped by having a mode in which compilation is less 
> specialized, and therefore fewer methods need to be built. 
>
> --Tim 
>
> On Sunday, November 23, 2014 08:06:34 PM Milan Bouchet-Valat wrote: 
> > Le dimanche 23 novembre 2014 à 10:32 -0800, Christian Peel a écrit : 
> > > Stefan, 
> > > 
> > > Thank you for the explanation of the issues with line numbers and 
> > > LLVM, and how it compares with Matlab and Julia. 
> > > 
> > > In your recent papers and on http://julialang.org/benchmarks/  we can 
> > > see that Julia is among the fastest languages to *run*.  I'd be very 
> > > interested to see the speed with which a language can detect a syntax 
> > > error.  In an informal test a minute ago using similar 500-line 
> > > functions in both languages, Matlab was able to detect my syntax error 
> > > in under a second.  Julia took around 11 seconds.   So Matlab has an 
> > > edit-test cycle; it's very quick.   Julia has what feels very much 
> > > like an edit-compile-test cycle; the compile step is very visible. 
> > > Matlab allows me to make thousands of edits per day and quickly 
> > > develop high-level code; Julia development feels slower overall, even 
> > > with faster runtime.   Tamas made a suggestion above which I 
> > > interpreted as asking for a flag that would allow one to have faster 
> > > syntax error checking at the expense of slower runtime.  I agree with 
> > > you that it would be ideal to have 'always fast debug info';  if for 
> > > some reason you can't get the syntax error checking down; I would 
> > > support a flag such as Tamas suggests. 
> > 
> > Stefan was talking about getting backtraces when runtime errors happen. 
> > As regards simple syntax errors, I don't think anything implies Julia 
> > must be slow to report them: just like Matlab, she needs to parse the 
> > code before doing anything with it. The compilation step, which involves 
> > more work in Julia, happens later (and only if the code is correct). 
> > 
> > But most of the time your code won't probably include syntax errors: in 
> > that case, improving compilation times may prove trickier. 
> > 
> > 
> > Regards 
> > 
> > > Thanks for your work! 
> > > 
> > > Chris 
> > > 
> > > On Sunday, November 23, 2014 5:44:32 AM UTC-8, Stefan Karpinski wrote: 
> > >         I'd rather shoot for always fast, always good debug info :-). 
> > >         We're not very far off, we just need to keep upstreaming 
> > >         improvements to LLVM. 
> > >         
> > >         On Sun, Nov 23, 2014 at 8:16 AM, Tamas Papp <[email protected]> 
>
> > >         
> > >         wrote: 
> > >                 On Sun, Nov 23 2014, Stefan Karpinski 
> > >                 
> > >                 <[email protected]> wrote: 
> > >                 > On Sun, Nov 23, 2014 at 6:02 AM, Christian Peel 
> > >                 
> > >                 <[email protected]> wrote: 
> > >                 >> Milan, 
> > >                 >> 
> > >                 >> Thanks for the comments.  I also am confident that 
> > >                 
> > >                 info about what line 
> > >                 
> > >                 >> errors occur on will improve. 
> > >                 > 
> > >                 > For some context, the reason traditional dynamic 
> > >                 
> > >                 systems like e.g. Matlab 
> > >                 
> > >                 > or Python, don't have this issue is that they use 
> > >                 
> > >                 interpreters and 
> > >                 
> > >                 > literally walk through a fairly faithful 
> > >                 
> > >                 representation of the code you 
> > >                 
> > >                 > wrote, including line number annotations. Thus, when 
> > >                 
> > >                 an error occurs, it's 
> > >                 
> > >                 > a trivial matter to report the line number you are 
> > >                 
> > >                 currently interpreting – 
> > >                 
> > >                 > the parsed code representation is the exact thing 
> > >                 
> > >                 you're operating on when 
> > >                 
> > >                 > the error occurs. Moreover, to give a full stack 
> > >                 
> > >                 trace, you simply need to 
> > >                 
> > >                 > walk back through the stack data structure that the 
> > >                 
> > >                 interpreter maintains 
> > >                 
> > >                 > as it executes the program. 
> > >                 > 
> > >                 > In a JIT system like Julia, things are quite 
> > >                 
> > >                 different. By the time your 
> > >                 
> > >                 > code is running, it no longer closely resembles the 
> > >                 
> > >                 code you wrote and 
> > >                 
> > >                 > there is no interpreter and the "stack" is the 
> > >                 
> > >                 actual stack. All of this is 
> > >                 
> > >                 > what gives you C-like performance. When an error 
> > >                 
> > >                 occurs, the error message 
> > >                 
> > >                 > and stack trace have to be determined from the 
> > >                 
> > >                 machine code that is 
> > >                 
> > >                 > currently executing and the stack trace is derived 
> > >                 
> > >                 from *the* stack, not 
> > >                 
> > >                 > some data structure. All this is further complicated 
> > >                 
> > >                 by the fact that 
> > >                 
> > >                 > LLVM's JIT does not tend to produce debug data quite 
> > >                 
> > >                 as well as the static 
> > >                 
> > >                 > compilation infrastructure does. People don't seem 
> > >                 
> > >                 to use debuggers on 
> > >                 
> > >                 > JITed code or particularly care about backtraces, so 
> > >                 
> > >                 we're pushing the 
> > >                 
> > >                 > envelope here, but things are getting better quite 
> > >                 
> > >                 steadily. 
> > >                 
> > >                 I am wondering if the approach used by Common Lisp 
> > >                 implementations could 
> > >                 be applicable in Julia. In Common Lisp, one can have 
> > >                 various 
> > >                 optimization and debug level settings, eg 
> > >                 
> > >                 (optimize (speed 3) (safety 0) (debug 0)) 
> > >                 
> > >                 will produce very fast code (comparable to C on modern 
> > >                 implementations 
> > >                 if type info is available), with the trade-off that 
> > >                 one has very little 
> > >                 debug information, while 
> > >                 
> > >                 (optimize (debug 3)) 
> > >                 
> > >                 does the opposite. Of course, the function needs to be 
> > >                 recompiled for 
> > >                 these to take effect, but given that you can always 
> > >                 modify the image in 
> > >                 a backtrace (AFAIK you can do the same in Julia), it 
> > >                 works fine in 
> > >                 practice. 
> > >                 
> > >                 Best, 
> > >                 
> > >                 Tamas 
>
>

Reply via email to