8 ms·
That's really interesting. Compiling only a few times a day is mind boggling to me - in a normal day I'd probably average hundreds to a thousand compilation cyc
by johnfn 6y ago
That's really interesting. Compiling only a few times a day is mind boggling to me - in a normal day I'd probably average hundreds to a thousand compilation cycles!
The main thing that I use compiling for is to validate little off-by-one things. Like, is substring() exclusive on the second parameter? What about range syntax and the slice operator? What if I wrote + 1 instead of - 1 somewhere, or did < instead of <=? I could spend a few minutes combing documentation, or just compile it and check immediately. Well, assuming compilation is fast anyways.
- wiz21c 6y ago>> in a normal day I'd probably average hundreds to a thousand compilation cycles! Maybe it's time to switch to an interpreter ? :-)
- logicchains 6y agoOr a language like Go, C or Nim that can compile tens of thousands of lines of code in a few seconds.
- pjmlp 6y agoOr OCaml, Java, C#, F#, Eiffel, Delphi,...
- hellofunk 6y agoJust googling “f# compile times” would beg to differ.
- pjmlp 6y agoApparently you didn't bother to read the 3 answers that come up. Only one of them says anything and it an empty statement like > F#'s compile times also seem to err on the long side but not very much so, my impression goes. However it is quite easy to validate write the same algorithm in F# and Rust and then compare. Ah but Rust is AOT compiled, easy, use NGEN, .NET Native, or Mono AOT for the F# compile time measurements.
- hellofunk 6y agoApparently you assume that everyone’s google results are identical.
- pjmlp 6y agoApparently you are too lazy to actually come up with some numbers of Rust compile times being faster than F# compile times. Offloading to Google is so much easier.
- chrisoverzero 6y agoIf that’s the case, then there’s no point in making any claims about what “just googling ‘f# compile times’ ” will reveal.
- setzer22 6y agoI've had a reviewer in a (scientific) journal tell me some paper is relevant, and thus I need to cite it, because it "appears on their top google results". People should be educated on the huge bias introduced by personalized services like google.
- LandR 6y agoI've worked in a C# code base where compiling the solution took 40 minutes.
- koyote 6y agoWow, one of our solutions is nearly 100 projects (legacy) and the compile time for the whole solution is sub-5 minutes. I'd love to see what kind of solution would take 40 minutes to compile! (or maybe I don't :)). That being said, C# is clever enough to only need to recompile the assemblies affected by your code change, so often you can get away with 10 second compile times even for large solutions.
- LandR 6y agoIIRC our solution was around 450 projects. Visual Studio just woudn't open the whole solution. So you had to work in individual projects at a time, slowly going through and changing stuff project by project. VS wouldn't even build it either, really. YOu had to build via batch file that did various ms build magic. I would make changes, set of a build and go to lunch, then come back and fix the errors. Once you checked the code into source control it would trigger a build which would sometimes take upwards of an hour :( I hated that code base. It got even worse when they added Coded UI tests. Wait an hour for a build and then a random Coded UI test would fail and the advice from the people who wrote the Coded UI was "just run another build!", yeah, flakey tests on a code bases that tests an hour to run...
- pjmlp 6y agoNow imagine with the current Rust compile times, compiling those 450 projects from scratch, I bet the 40m would turn into hours.
- deleted 6y ago[deleted]
- tastyminerals2 6y agoYou forgot about D, where you can basically bind ctrl+s to rdmd in your favourite IDE and enjoy scripting language akin experience.
- vips7L 6y agoD is sadly very underrated.
- mlindner 6y agoMy day job is in C and compile time is 30 minutes. It really depends what you're working on.
- logicchains 6y agoDoes it take that long for an incremental build?
- wiz21c 6y agoI've used Nim just a bit on Windows/MingW (I'm from python world). The very short program I made (about 200 lines, mostly math stuff, no framework imports) compiles in 2-3 seconds. It's already too long for me to iterate (it's not a rant against Nim, it's just that it's too long for my way of working; the language is nice and gives good results). Also note that Nim compiles fast, it's the compile-to-native compilation step that takes 90% of the time.
- johnfn 6y agoYou mean a REPL, or an interpreted language? I'd love a REPL that could somehow load the state of my entire app so I could test stuff out, but I've never found a language that could do that and also had reasonable type safety guarantees.
- estsauver 6y agoSome of the best solutions to that world right now seem to be things like lisps with dynamic typing added. You get a great set of repl support, but you can also build components and systems into easy wrapper scripts to load them as needed.
- hellofunk 6y agoI assume you mean static typing enabled. Because lisps are already dynamically typed to begin with.
- estsauver 6y agoThanks, I actually meant gradually typed systems, like rust typed or closure with heavy spec usage.
- hellofunk 6y agoI think you mean Clojure. Closure is something different.
- estsauver 6y agoWhat a terrible day for autocorrect, thank you.
- slifin 6y agoClojure has a java type system which can be partially enforced statically with clj-kondo Clojure spec is great at system boundaries but it's hard to describe it is a type system, it's a predicate system it can define very arbitrary constraints mostly at runtime
- _-___________-_ 6y ago> The main thing that I use compiling for is to validate little off-by-one things. Like, is substring() exclusive on the second parameter? What about range syntax and the slice operator? What if I wrote + 1 instead of - 1 somewhere, or did < instead of <=? I could spend a few minutes combing documentation, or just compile it and check immediately. Well, assuming compilation is fast anyways. I'm a really big fan of reading the docs (or, where the docs are insufficient, the source), and will always have docs.rs open alongside my editor. While the examples you provide are easily validated by testing (and I'd probably use `evalr` in `##rust`, or some similar thing, for them), many subtleties can exist in more complex functions, so not reading the docs/source for unfamiliar functions feels like programming-by-guessing to me.
- johnfn 6y agoPerhaps my examples were a little too trivial. I do a decent amount of game/graphics coding, so there's a lot of "hmm, does this look good 20 pixels over? How about 18?" and I don't know how you'd get around that without recompiling. (OK, you could read preferences from a file, but then you'd have to optimistically write every value you'd ever want to recompile to a file. I've tried this, but it's far too much overhead.)
- smt88 6y ago> I do a decent amount of game/graphics coding, so there's a lot of "hmm, does this look good 20 pixels over? How about 18?" and I don't know how you'd get around that without recompiling. I know exactly what you mean. Front-end development can be this way, too. I think it's OK (and probably true) to say that you shouldn't use Rust for cases like this right now.
- nicoburns 6y ago> I think it's OK (and probably true) to say that you shouldn't use Rust for cases like this right now. I think that's true, but only because of the slow compile times. Which is why they're so frustrating. Rust would otherwise be an excellent language for these use-cases.
- hrydgard 6y agoIf you have an editor with syntax checking such as VS Code with rust-analyzer, it checks syntax in the background as you type, saving you a lot of compile cycles. It doesn't yet scale very well to huge projects but getting better every week - rust-analyzer is under very heavy development.
- zozbot234 6y ago> The main thing that I use compiling for is to validate little off-by-one things. Like, is substring() exclusive on the second parameter? What about range syntax and the slice operator? What if I wrote + 1 instead of - 1 somewhere, or did < instead of <=? Rust has a testing facility that can be used for these things. By default, all "example" code that's included as part of a doc comment ends up in the test suite. And because test cases are small and self-contained, they're also very quick to compile.
- dan00 6y agoI've to say, I really hate this way of working, which might be the reason why I prefer statically typed languages like Rust. I think the main reason why I dislike working with dynamically typed languages is that most of them make the reasoning of code a lot harder. If you're able to reason about the code at hand, then there's a lot less need to run the code for every small change.
- addicted 6y ago> is substring() exclusive on the second parameter I can’t imagine not looking up the documentation to do this. If a language had a REPL I may then confirm it in the REPL, but almost certainly would pull up the docs first.
- ewindal 6y agoAssuming you take ~4 seconds from wanting to compile til you have your answer, that’s 60 minutes a day for a thousand compiles. An hour. Doesn’t seem very efficient to me.
- drej 6y agoNot OP, but these things don't have to be synchronous. I sometimes have entr running in a separate terminal, which tests and builds on every save. I don't wait for it to happen, but I do see it if it errs.