rust/compiler
bors 58a721af9f Auto merge of #93839 - Mark-Simulacrum:delete-json-rust-deserialization, r=nnethercote
Simplify rustc_serialize by dropping support for decoding into JSON

This PR currently bundles two (somewhat separate) tasks.

First, it removes the JSON Decoder trait impl, which permitted going from JSON to Rust structs. For now, we keep supporting JSON deserialization, but only to `Json` (an equivalent of serde_json::Value). The primary hard to remove user there is for custom targets -- which need some form of JSON deserialization -- but they already have a custom ad-hoc pass for moving from Json to a Rust struct.

A [comment](e7aca89598/compiler/rustc_target/src/spec/mod.rs (L1653)) there suggests that it would be impractical to move them to a Decodable-based impl, at least without backwards compatibility concerns. I suspect that if we were widely breaking compat there, it would make sense to use serde_json at this point which would produce better error messages; the types in rustc_target are relatively isolated so we would not particularly suffer from using serde_derive.

The second part of the PR (all but the first commit) is to simplify the Decoder API by removing the non-primitive `read_*` functions. These primarily add indirection (through a closure), which doesn't directly cause a performance issue (the unique closure types essentially guarantee monomorphization), but does increase the amount of work rustc and LLVM need to do. This could be split out to a separate PR, but is included here in part to help motivate the first part.

Future work might consist of:

* Specializing enum discriminant encoding to avoid leb128 for small enums (since we know the variant count, we can directly use read/write u8 in almost all cases)
* Adding new methods to support faster deserialization (e.g., access to the underlying byte stream)
   * Currently these are somewhat ad-hoc supported by specializations for e.g. `Vec<u8>`, but other types which could benefit don't today.
* Removing the Decoder trait entirely in favor of a concrete type -- today, we only really have one impl of it modulo wrappers used for specialization-based dispatch.

Highly recommend review with whitespace changes off, as the removal of closures frequently causes things to be de-indented.
2022-02-22 07:54:22 +00:00
..
rustc remove unused jemallocator crate 2022-01-28 16:56:05 +01:00
rustc_apfloat Stabilize iter::zip. 2021-12-14 18:50:31 -04:00
rustc_arena Remove unused dep from rustc_arena 2022-02-02 17:37:14 +01:00
rustc_ast Rollup merge of #93634 - matthiaskrgr:clippy_complexity_jan_2022, r=oli-obk 2022-02-18 16:23:33 +01:00
rustc_ast_lowering Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_ast_passes Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_ast_pretty Pretty print ItemKind::Use in rustfmt style 2022-02-07 21:51:05 -08:00
rustc_attr Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_borrowck use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_builtin_macros Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_codegen_cranelift use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_codegen_gcc Move ty::print methods to Drop-based scope guards 2022-02-16 17:24:23 -05:00
rustc_codegen_llvm use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_codegen_ssa use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_const_eval Rollup merge of #94189 - GuillaumeGomez:scalar-lower-hex, r=RalfJung 2022-02-21 19:36:50 +01:00
rustc_data_structures obligation forest docs 2022-02-21 12:00:26 +01:00
rustc_driver Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_error_codes Revert "Auto merge of #91403 - cjgillot:inherit-async, r=oli-obk" 2022-02-17 16:00:04 +00:00
rustc_errors Remove support for JSON deserialization to Rust 2022-02-20 18:58:21 -05:00
rustc_expand Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_feature Rollup merge of #93658 - cchiw:issue-77443-fix, r=joshtriplett 2022-02-19 06:45:29 +01:00
rustc_fs_util Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_graphviz eplace usages of vec![].into_iter with [].into_iter 2022-01-09 14:09:25 +11:00
rustc_hir Adopt let else in more places 2022-02-19 17:27:43 +01:00
rustc_hir_pretty Rollup merge of #93746 - cjgillot:nodefii, r=nikomatsakis 2022-02-09 14:12:22 +09:00
rustc_incremental Adopt let else in more places 2022-02-19 17:27:43 +01:00
rustc_index Adopt let else in more places 2022-02-19 17:27:43 +01:00
rustc_infer Auto merge of #94225 - matthiaskrgr:rollup-0728x8n, r=matthiaskrgr 2022-02-21 22:53:45 +00:00
rustc_interface Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_lexer Auto merge of #91393 - Julian-Wollersberger:lexer_optimization, r=petrochenkov 2021-12-03 13:20:14 +00:00
rustc_lint use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_lint_defs Implement --check-cfg option (RFC 3013) 2022-02-16 13:03:12 +01:00
rustc_llvm Rollup merge of #91675 - ivanloz:memtagsan, r=nagisa 2022-02-18 23:23:03 +01:00
rustc_log Make rustc_log doc test runnable 2022-01-03 22:31:56 -08:00
rustc_macros Delete Decoder::read_enum_variant 2022-02-20 18:58:23 -05:00
rustc_metadata Adopt let else in more places 2022-02-19 17:27:43 +01:00
rustc_middle Auto merge of #94225 - matthiaskrgr:rollup-0728x8n, r=matthiaskrgr 2022-02-21 22:53:45 +00:00
rustc_mir_build Auto merge of #93505 - lcnr:substsref-vs-ty-list, r=michaelwoerister 2022-02-21 16:03:38 +00:00
rustc_mir_dataflow use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_mir_transform use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_monomorphize Auto merge of #94062 - Mark-Simulacrum:drop-print-cfg, r=oli-obk 2022-02-20 18:12:59 +00:00
rustc_parse Better error if the user tries to do assignment ... else 2022-02-21 08:59:39 +01:00
rustc_parse_format Correctly mark the span of captured arguments in format_args!() 2022-02-16 07:34:06 +00:00
rustc_passes Adopt let else in more places 2022-02-19 17:27:43 +01:00
rustc_plugin_impl replace dynamic library module with libloading 2021-12-06 12:03:47 -05:00
rustc_privacy Overhaul Const. 2022-02-15 16:19:59 +11:00
rustc_query_impl Auto merge of #94066 - Mark-Simulacrum:factor-out-simple-def-kind, r=davidtwco 2022-02-21 03:36:55 +00:00
rustc_query_system Auto merge of #93839 - Mark-Simulacrum:delete-json-rust-deserialization, r=nnethercote 2022-02-22 07:54:22 +00:00
rustc_resolve Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_save_analysis Auto merge of #94062 - Mark-Simulacrum:drop-print-cfg, r=oli-obk 2022-02-20 18:12:59 +00:00
rustc_serialize Delete Decoder::read_map 2022-02-20 18:58:23 -05:00
rustc_session Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_span Delete Decoder::read_struct_field 2022-02-20 18:58:22 -05:00
rustc_symbol_mangling use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_target Rollup merge of #94146 - est31:let_else, r=cjgillot 2022-02-20 00:37:34 +01:00
rustc_trait_selection Auto merge of #94225 - matthiaskrgr:rollup-0728x8n, r=matthiaskrgr 2022-02-21 22:53:45 +00:00
rustc_traits use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_ty_utils use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00
rustc_type_ir Inline UnifyKey::index and UnifyKey::from_index 2022-02-15 19:07:06 +01:00
rustc_typeck use List<Ty<'tcx>> for tuples 2022-02-21 07:09:11 +01:00