util.paths: Optimize path joining with few arguments
authorKim Alvefur <zash@zash.se>
Sun, 11 Oct 2020 23:04:13 +0200
changeset 11187 2ac63715ef6f
parent 11186 bab8d01e139a
child 11188 2ede7f43ccfe
util.paths: Optimize path joining with few arguments A casual search suggests that the majority of paths.join() calls involve only two arguments. This saves the creation of a table for up to 3 arguments. Looks like 3x faster for 3 arguments or less, 5% slower when it uses the array to concatenate.
util/paths.lua
--- a/util/paths.lua	Sat Oct 17 19:24:44 2020 +0200
+++ b/util/paths.lua	Sun Oct 11 23:04:13 2020 +0200
@@ -37,8 +37,18 @@
 	end).."$";
 end
 
-function path_util.join(...)
-	return t_concat({...}, path_sep);
+function path_util.join(a, b, c, ...) -- (... : string) --> string
+	-- Optimization: Avoid creating table for most uses
+	if b then
+		if c then
+			if ... then
+				return t_concat({a,b,c,...}, path_sep);
+			end
+			return a..path_sep..b..path_sep..c;
+		end
+		return a..path_sep..b;
+	end
+	return a;
 end
 
 function path_util.complement_lua_path(installer_plugin_path)