ZIm/crates
Ben Brandt 4ece4a635f
extension_host: Use wasmtime incremental compilation (#30948)
Builds on top of https://github.com/zed-industries/zed/pull/30942

This turns on incremental compilation and decreases extension
compilation times by up to another 41%
Putting us at roughly 92% improved extension load times from what is in
the app today.

Because we only have a static engine, I can't reset the cache between
every run. So technically the benchmarks are always running with a
warmed cache. So the first extension we load will take the 8.8ms, and
then any subsequent extensions will be closer to the measured time in
this benchmark.

This is also measuring the entire load process, not just the
compilation. However, since this is the loading we likely think of when
thinking about extensions, I felt it was likely more helpful to see the
impact on the overall time.

This works because our extensions are largely the same Wasm bytecode
(SDK code + std lib functions etc) with minor changes in the trait impl.
The more different that extensions implementation is, there will be less
benefit, however, there will always be a large part of every extension
that is always the same across extensions, so this should be a speedup
regardless.

I used `moka` to provide a bound to the cache. We could use a bare
`DashMap`, however if there was some issue this could lead to a memory
leak. `moka` has some slight overhead, but makes sure that we don't go
over 32mb while using an LRU-style mechanism for deciding which
compilation artifacts to keep.

I measured our current extensions to take roughly 512kb in the cache.
Which means with a cap of 32mb, we can keep roughly 64 *completely
novel* extensions with no overlap. Since our extensions will have more
overlap than this though, we can actually keep much more in the cache
without having to worry about it.

#### Before:

```
load/1                  time:   [8.8301 ms 8.8616 ms 8.8931 ms]
                        change: [-0.1880% +0.3221% +0.8679%] (p = 0.23 > 0.05)
                        No change in performance detected.
```

#### After:

```
load/1                  time:   [5.1575 ms 5.1726 ms 5.1876 ms]
                        change: [-41.894% -41.628% -41.350%] (p = 0.00 < 0.05)
                        Performance has improved.
```

Release Notes:

- N/A
2025-05-21 10:12:16 +02:00
..
activity_indicator Allow updater to check for updates after downloading one (#30969) 2025-05-19 18:27:39 +00:00
agent Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
anthropic Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
askpass askpass: Workaround rust lang 69343 (#30774) 2025-05-16 05:04:36 -04:00
assets Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
assistant_context_editor Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
assistant_settings language_models: Add tool use support for Mistral models (#29994) 2025-05-19 18:36:59 +02:00
assistant_slash_command Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
assistant_slash_commands Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
assistant_tool Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
assistant_tools Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
audio Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
auto_update Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
auto_update_helper Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
auto_update_ui Restyle notification close control (#30262) 2025-05-08 14:10:30 +00:00
aws_http_client Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
bedrock Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
breadcrumbs breadcrumbs: Update multibuffer to match singleton (#28267) 2025-04-07 20:26:55 +00:00
buffer_diff Fix diff recalculation hang (#28377) 2025-04-10 22:58:41 +00:00
call Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
channel Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
cli Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
client Fix socks proxy local DNS resolution not respected (#30619) 2025-05-21 14:55:39 +08:00
clock Add the ability to follow the agent as it makes edits (#29839) 2025-05-04 08:28:39 +00:00
collab collab: Add GET /users/look_up endpoint (#31059) 2025-05-21 01:29:16 +00:00
collab_ui Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
collections Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
command_palette Simplify the SerializableItem::cleanup implementation (#29567) 2025-04-28 22:15:24 +00:00
command_palette_hooks Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
component component: Replace linkme with inventory (#30705) 2025-05-14 23:29:11 +02:00
context_server Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
copilot Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
credentials_provider Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
dap Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
dap_adapters Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
db Add end of service notifications (#30982) 2025-05-20 00:20:00 +00:00
debug_adapter_extension extension: Add debug_adapters to extension manifest (#30676) 2025-05-20 11:01:33 +02:00
debugger_tools Rename debug: commands to dev: (#30675) 2025-05-14 11:15:27 +02:00
debugger_ui Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
deepseek Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
diagnostics component: Replace linkme with inventory (#30705) 2025-05-14 23:29:11 +02:00
docs_preprocessor Simplify docs preprocessing (#30947) 2025-05-19 08:16:14 -04:00
editor wrap_map: Add capacity to vectors for better performance (#31055) 2025-05-20 23:44:19 +00:00
eval Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
extension Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
extension_api extension/dap: Add resolve_tcp_template function (#31010) 2025-05-20 15:17:13 +02:00
extension_cli Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
extension_host extension_host: Use wasmtime incremental compilation (#30948) 2025-05-21 10:12:16 +02:00
extensions_ui Improve error message around failing to install dev extensions (#30711) 2025-05-14 17:22:17 +00:00
feature_flags Add a picker for jj bookmark list (#30883) 2025-05-17 16:42:45 +00:00
feedback feedback: Update issue template URL (#28790) 2025-04-15 21:36:30 -04:00
file_finder Reduce allocations (#30693) 2025-05-14 18:29:28 +02:00
file_icons Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
fs Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
fsevent Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
fuzzy Fix out-of-bounds panic in fuzzy matcher with Unicode/multibyte characters (#30546) 2025-05-12 14:43:14 +00:00
git Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
git_hosting_providers Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
git_ui Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
go_to_line editor: Add minimap (#26893) 2025-05-07 23:11:09 +03:00
google_ai Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
gpui Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
gpui_macros ui_macros: Remove DerivePathStr macro (#30862) 2025-05-17 10:05:55 +00:00
gpui_tokio Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
html_to_markdown Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
http_client Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
http_client_tls Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
icons agent: Fix layout shift due to the "Generating" label (#30422) 2025-05-09 16:20:14 -03:00
image_viewer Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
indexed_docs Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
inline_completion Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
inline_completion_button Add end of service notifications (#30982) 2025-05-20 00:20:00 +00:00
install_cli Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
jj Add a picker for jj bookmark list (#30883) 2025-05-17 16:42:45 +00:00
jj_ui Add a picker for jj bookmark list (#30883) 2025-05-17 16:42:45 +00:00
journal VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
language Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
language_extension debugger/extensions: Revert changes to extension store related to language config (#30225) 2025-05-08 14:01:39 +02:00
language_model Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
language_model_selector agent: Don't duplicate recommended models in all models list (#30692) 2025-05-14 13:21:41 +00:00
language_models Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
language_selector Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
language_tools Rename debug: commands to dev: (#30675) 2025-05-14 11:15:27 +02:00
languages Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
livekit_api Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
livekit_client Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
lmstudio Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
lsp Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
markdown markdown: Fix out of range panic in parser (#30510) 2025-05-11 15:08:37 +00:00
markdown_preview Use image cache to stop leaking images (#29452) 2025-04-29 19:30:16 +00:00
media Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
menu agent: Add new panel navigation dropdown (#29539) 2025-04-29 21:58:45 -03:00
migrator Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
mistral Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
multi_buffer editor: Trim indent guides at last non-empty line (#29482) 2025-05-12 17:04:46 +02:00
node_runtime Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
notifications component: Replace linkme with inventory (#30705) 2025-05-14 23:29:11 +02:00
ollama Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
open_ai Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
outline Highlight merge conflicts and provide for resolving them (#28065) 2025-04-23 12:38:46 -04:00
outline_panel chore: Bump Rust to 1.87 (#30739) 2025-05-15 22:28:52 +00:00
panel Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
paths Add a way to import ssh host names from the ssh config (#30926) 2025-05-18 20:34:47 +00:00
picker agent: Keyboard navigation improvements (#30274) 2025-05-09 13:52:06 +00:00
prettier Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
project Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
project_panel Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
project_symbols Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
prompt_store Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
proto Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
recent_projects Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
refineable Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
release_channel Fix handling of --system-specs argument so it happens before Application::new (#29240) 2025-04-22 21:32:32 +00:00
remote Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
remote_server Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
repl Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
reqwest_client Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
rich_text Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
rope extension_host: Turn on parallel compilation (#30942) 2025-05-19 18:06:33 +02:00
rpc Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
rules_library Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
schema_generator Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
search Project Search: Don't prompt to save edited buffers in project search results if buffers open elsewhere (#31026) 2025-05-20 15:34:42 +00:00
semantic_index Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
semantic_version Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
session Avoid unnecessary DB writes (#29417) 2025-04-25 17:41:49 +03:00
settings Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
settings_ui Add searchable global tab switcher (#28047) 2025-04-28 09:21:27 +00:00
snippet Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
snippet_provider editor: Improve snippet completion to show key inline in completion and description as aside (#30603) 2025-05-13 05:28:59 +05:30
snippets_ui Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
sqlez Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
sqlez_macros Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
story gpui: Add a standard text example (#30747) 2025-05-16 17:35:44 +02:00
storybook Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
streaming_diff Introduce a new StreamingEditFileTool (#29733) 2025-05-01 17:37:43 +02:00
sum_tree Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
supermaven Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
supermaven_api Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
tab_switcher Add searchable global tab switcher (#28047) 2025-04-28 09:21:27 +00:00
task Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
tasks_ui debugger: Add debug task picker to new session modal (#29702) 2025-05-02 08:38:29 +00:00
telemetry Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
telemetry_events Add new action to run agent eval (#29158) 2025-04-21 21:30:21 -07:00
terminal Reduce allocations (#30693) 2025-05-14 18:29:28 +02:00
terminal_view Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
text Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
theme Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
theme_extension Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
theme_importer Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
theme_selector theme_selector: Don't select last theme when fuzzy searching (#28278) 2025-04-28 14:29:17 +00:00
time_format agent: Add date separators to Thread History (#29961) 2025-05-06 10:18:48 +00:00
title_bar title_bar: Fix config merging to respect priority (#30980) 2025-05-20 07:56:24 +00:00
toolchain_selector toolchain: Respect currently focused file when querying toolchains (#28875) 2025-04-16 19:05:57 +02:00
ui Add end of service notifications (#30982) 2025-05-20 00:20:00 +00:00
ui_input component: Replace linkme with inventory (#30705) 2025-05-14 23:29:11 +02:00
ui_macros ui_macros: Remove DerivePathStr macro (#30862) 2025-05-17 10:05:55 +00:00
ui_prompt markdown: Don't retain MarkdownStyle in favor of using MarkdownElement directly (#28255) 2025-04-07 19:03:24 +00:00
util Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
util_macros Fix license symlinks (#29758) 2025-05-01 19:24:14 +00:00
vim Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
vim_mode_setting VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
web_search agent: Expose web search tool to beta users (#29273) 2025-04-23 15:30:20 +00:00
web_search_providers Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
welcome component: Replace linkme with inventory (#30705) 2025-05-14 23:29:11 +02:00
workspace Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
worktree Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
zed Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
zed_actions zed: Fix no way to open local folder from remote window (#30954) 2025-05-19 21:26:30 +05:30
zeta Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
zlog Use anyhow more idiomatically (#31052) 2025-05-20 23:06:07 +00:00
zlog_settings VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00