From a1764f7690cfdc3e42724fcad29ef954b7e576a4 Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Tue, 4 Apr 2023 06:46:31 -0600 Subject: refactor(core): Improve ergonomics of managing ASCII strings (#18498) This is a follow-on to the earlier work in reducing string copies, mainly focused on ensuring that ASCII strings are easy to provide to the JS runtime. While we are replacing a 16-byte reference in a number of places with a 24-byte structure (measured via `std::mem::size_of`), the reduction in copies wins out over the additional size of the arguments passed into functions. Benchmarking shows approximately the same if not slightly less wallclock time/instructions retired, but I believe this continues to open up further refactoring opportunities. --- cli/tsc/mod.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'cli/tsc') diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index a9dc5b7f3..3bd8efefa 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -13,6 +13,7 @@ use crate::util::path::mapped_specifier_for_tsc; use deno_ast::MediaType; use deno_core::anyhow::anyhow; use deno_core::anyhow::Context; +use deno_core::ascii_str; use deno_core::error::AnyError; use deno_core::located_script_name; use deno_core::op; @@ -131,8 +132,8 @@ fn get_asset_texts_from_new_runtime() -> Result, AnyError> { extensions: vec![deno_cli_tsc::init_ops()], ..Default::default() }); - let global = - runtime.execute_script("get_assets.js", "globalThis.getAssets()")?; + let global = runtime + .execute_script("get_assets.js", ascii_str!("globalThis.getAssets()"))?; let scope = &mut runtime.handle_scope(); let local = deno_core::v8::Local::new(scope, global); Ok(serde_v8::from_v8::>(scope, local)?) @@ -792,15 +793,14 @@ pub fn exec(request: Request) -> Result { }, ); - let startup_source = "globalThis.startup({ legacyFlag: false })"; + let startup_source = ascii_str!("globalThis.startup({ legacyFlag: false })"); let request_value = json!({ "config": request.config, "debug": request.debug, "rootNames": root_names, "localOnly": request.check_mode == TypeCheckMode::Local, }); - let request_str = request_value.to_string(); - let exec_source = format!("globalThis.exec({request_str})"); + let exec_source = format!("globalThis.exec({request_value})").into(); let mut runtime = JsRuntime::new(RuntimeOptions { startup_snapshot: Some(compiler_snapshot()), @@ -974,7 +974,7 @@ mod tests { ..Default::default() }); js_runtime - .execute_script( + .execute_script_static( "", r#" if (!(startup)) { -- cgit v1.2.3