4 ms·
Typescript allows to compile without type checking at the sacrifice of correctness. If you would have a slow computer or huge code-base, you could consider usin
by sebazzz 6y ago
Typescript allows to compile without type checking at the sacrifice of correctness. If you would have a slow computer or huge code-base, you could consider using the type checker only for tests, pre-checkin check, or CI. (Not that Typescript is slow - but as an conceptual example)
Would something similar be possible for Rust, so you still have the ability for correctness for CI and release builds, but allow for fast compilation when necessary or desired?
- deleted 6y ago[deleted]
- justwalt 6y agoI’ve heard someone say about the rust compiler that it will never allow compilation without its safety checks in place because it would decrease faith in any rust binary.
- estebank 6y agoYou could always replace the fn body of large parts of your codebase with unimplemented!() (or use the nightly only everybody-loops flag), but I don't think this will have as big a benefit as people would expect. cargo check though is probably something more people should know about.
- MinusGix 6y agoTypescript would have a far easier time in that scenario because much of it's syntax is simply Javascript with extra types attached. So, it could (I don't know the implementation details at all) 'just' strip away all the typescript-syntax, and give you your Javascript files. Rust has the issue that there's a lot of type-checking done, even in basic scenarios: such as setting a variable `let alpha = some_function(abc);`, you have to do some form of basic typechecking here to get the type of `alpha` (since that affects how it's stored on the stack). The simple case of `fn some_function(abc: u32) -> i16;` would be 'easy', but more complicated scenarios like generics would make your life harder. Though, I'm sure there's parts of the checking that could be eventually written so that they can be turned off, but I don't think it would provide nearly as much benefit as Typescript's non-correct compilation. Personally, I think it would be better to spend that time on just making the compiler faster. This is perhaps easier than I made it sound, but this is my assumptions as to why it wouldn't work that well.
- entha_saava 6y agoType checking doesn't seem to be major bottleneck at all. The major issues seem to be 1) Technical debt in rustc producing large amounts of LLVM IR and expecting LLVM to optimize it away 2) generic monomorphization producing vast amount of IR IIRC.
- masklinn 6y ago> Would something similar be possible for Rust Yes. The `mrustc` alternative implementation doesn't do things like borrow checking, it assumes the source is "correct". > [skipping typechecking would] allow for fast compilation when necessary or desired? The real expenses in a "release" compilation pipeline are in the optimisation passes and codegen, so the gains are mostly in avoiding optimisations (debug build) or avoiding codegen entirely (`cargo check`). For instance on the latest ripgrep head on my machine: * cargo check takes ~200s user * cargo build (debug) takes ~300s user * carbo build --release takes ~900s user