Phase 21.7 normalization: optimization pre-work + bench harness expansion
- Add opt-in optimizations (defaults OFF) - Ret purity verifier: NYASH_VERIFY_RET_PURITY=1 - strlen FAST enhancement for const handles - FAST_INT gate for same-BB SSA optimization - length cache for string literals in llvmlite - Expand bench harness (tools/perf/microbench.sh) - Add branch/call/stringchain/arraymap/chip8/kilo cases - Auto-calculate ratio vs C reference - Document in benchmarks/README.md - Compiler health improvements - Unify PHI insertion to insert_phi_at_head() - Add NYASH_LLVM_SKIP_BUILD=1 for build reuse - Runtime & safety enhancements - Clarify Rust/Hako ownership boundaries - Strengthen receiver localization (LocalSSA/pin/after-PHIs) - Stop excessive PluginInvoke→BoxCall rewrites - Update CURRENT_TASK.md, docs, and canaries 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -63,6 +63,45 @@ pub fn init_bid_plugins() {
|
||||
eprintln!("✅ plugin host fully configured");
|
||||
}
|
||||
}
|
||||
|
||||
// Optional autoload for [using.*] kind="dylib" packages
|
||||
if std::env::var("NYASH_USING_DYLIB_AUTOLOAD").ok().as_deref() == Some("1")
|
||||
&& std::env::var("NYASH_DISABLE_PLUGINS").ok().as_deref() != Some("1")
|
||||
{
|
||||
if plugin_debug || cli_verbose { eprintln!("[using.dylib/autoload] scanning nyash.toml packages …"); }
|
||||
let mut using_paths: Vec<String> = Vec::new();
|
||||
let mut pending_modules: std::vec::Vec<(String, String)> = Vec::new();
|
||||
let mut aliases: std::collections::HashMap<String, String> = std::collections::HashMap::new();
|
||||
let mut packages: std::collections::HashMap<String, crate::using::spec::UsingPackage> = std::collections::HashMap::new();
|
||||
let _ = crate::using::resolver::populate_from_toml(
|
||||
&mut using_paths,
|
||||
&mut pending_modules,
|
||||
&mut aliases,
|
||||
&mut packages,
|
||||
);
|
||||
for (name, pkg) in packages.iter() {
|
||||
if let crate::using::spec::PackageKind::Dylib = pkg.kind {
|
||||
// Build library name from file stem (best-effort)
|
||||
let lib_name = std::path::Path::new(&pkg.path)
|
||||
.file_name()
|
||||
.and_then(|s| s.to_str())
|
||||
.unwrap_or(name)
|
||||
.to_string();
|
||||
let host = get_global_plugin_host();
|
||||
let res = host
|
||||
.read()
|
||||
.unwrap()
|
||||
.load_library_direct(&lib_name, &pkg.path, &[]);
|
||||
if let Err(e) = res {
|
||||
if plugin_debug || cli_verbose {
|
||||
eprintln!("[using.dylib/autoload] failed '{}': {}", lib_name, e);
|
||||
}
|
||||
} else if plugin_debug || cli_verbose {
|
||||
eprintln!("[using.dylib/autoload] loaded '{}' from {}", lib_name, pkg.path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if plugin_debug || cli_verbose {
|
||||
eprintln!("⚠️ Failed to load plugin config (hakorune.toml/nyash.toml) - plugins disabled");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user