feat: Use GraalVM to beat Clojure startup times

Required a patch[1] to spec-dict.  Something about GraalVM initialisation and
Clojure files without packages (i.e. single-level namespaced files).  I don't
know!

[1]: 531d629b7f
This commit is contained in:
Madeleine Sydney
2025-01-14 19:36:10 -07:00
parent 8674027ae1
commit 29fd94f9e2
4 changed files with 28 additions and 39 deletions

View File

@@ -1,6 +1,14 @@
{ {
"lock-version": 4, "lock-version": 4,
"git-deps": [], "git-deps": [
{
"lib": "com.github.msyds/spec-dict",
"url": "https://github.com/msyds/spec-dict.git",
"rev": "531d629b7f05f37232261cf9e8927a4b5915714f",
"git-dir": "https/github.com/msyds/spec-dict",
"hash": "sha256-5hMdPsB8OhOCtByPZS+CHXzVLq0H+OBKKnXec21xwmg="
}
],
"mvn-deps": [ "mvn-deps": [
{ {
"mvn-path": "babashka/fs/0.5.24/fs-0.5.24.jar", "mvn-path": "babashka/fs/0.5.24/fs-0.5.24.jar",
@@ -42,26 +50,6 @@
"mvn-repo": "https://repo.clojars.org/", "mvn-repo": "https://repo.clojars.org/",
"hash": "sha256-eUGmk2TB2JzLpi2p+Ge//udJO7t/o339YCaPNt7KFek=" "hash": "sha256-eUGmk2TB2JzLpi2p+Ge//udJO7t/o339YCaPNt7KFek="
}, },
{
"mvn-path": "clojure-lanterna/clojure-lanterna/0.9.7/clojure-lanterna-0.9.7.jar",
"mvn-repo": "https://repo.clojars.org/",
"hash": "sha256-rv2Pp1B4p64VdjzXBdJskFzPrK6gVZAL7JfWDfHQikU="
},
{
"mvn-path": "clojure-lanterna/clojure-lanterna/0.9.7/clojure-lanterna-0.9.7.pom",
"mvn-repo": "https://repo.clojars.org/",
"hash": "sha256-a1fotCBLdq5aa6ioMIMvLowMJfVYMx4P2oJSj9VS3Cc="
},
{
"mvn-path": "com/googlecode/lanterna/lanterna/2.1.7/lanterna-2.1.7.jar",
"mvn-repo": "https://repo1.maven.org/maven2/",
"hash": "sha256-Xr24XNnqvVTsGf+MoESc23RZWc6NTDGSWbs5rOS3hhg="
},
{
"mvn-path": "com/googlecode/lanterna/lanterna/2.1.7/lanterna-2.1.7.pom",
"mvn-repo": "https://repo1.maven.org/maven2/",
"hash": "sha256-INQIUi0aEHp7mBvoD0f7t3c2NmMtqZS8/VlJb5JKW/4="
},
{ {
"mvn-path": "com/kohlschutter/junixsocket/junixsocket-common/2.3.2/junixsocket-common-2.3.2.jar", "mvn-path": "com/kohlschutter/junixsocket/junixsocket-common/2.3.2/junixsocket-common-2.3.2.jar",
"mvn-repo": "https://repo1.maven.org/maven2/", "mvn-repo": "https://repo1.maven.org/maven2/",
@@ -296,21 +284,6 @@
"mvn-path": "org/clojure/spec.alpha/0.5.238/spec.alpha-0.5.238.pom", "mvn-path": "org/clojure/spec.alpha/0.5.238/spec.alpha-0.5.238.pom",
"mvn-repo": "https://repo1.maven.org/maven2/", "mvn-repo": "https://repo1.maven.org/maven2/",
"hash": "sha256-PLp+DcwIXEzpLd3/6iJhJP+sF4vnm9A3m1suMKlpy+o=" "hash": "sha256-PLp+DcwIXEzpLd3/6iJhJP+sF4vnm9A3m1suMKlpy+o="
},
{
"mvn-path": "org/sonatype/oss/oss-parent/7/oss-parent-7.pom",
"mvn-repo": "https://repo1.maven.org/maven2/",
"hash": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
{
"mvn-path": "spec-dict/spec-dict/0.2.1/spec-dict-0.2.1.jar",
"mvn-repo": "https://repo.clojars.org/",
"hash": "sha256-a9AvVMvRL/4FoSLQLDjQBMutDIpwWEc7V5wrnjqAp34="
},
{
"mvn-path": "spec-dict/spec-dict/0.2.1/spec-dict-0.2.1.pom",
"mvn-repo": "https://repo.clojars.org/",
"hash": "sha256-pTMOUp6WJneXHxP97KYVULX+Yqn04DJR2uvkXlxxRUQ="
} }
] ]
} }

View File

@@ -3,7 +3,8 @@
babashka/fs {:mvn/version "0.5.24"} babashka/fs {:mvn/version "0.5.24"}
org.clojure/clojure {:mvn/version "1.12.0"} org.clojure/clojure {:mvn/version "1.12.0"}
org.clojure/core.match {:mvn/version "1.1.0"} org.clojure/core.match {:mvn/version "1.1.0"}
spec-dict/spec-dict {:mvn/version "0.2.1"}} com.github.msyds/spec-dict
{:git/sha "531d629b7f05f37232261cf9e8927a4b5915714f"}}
:paths ["src"] :paths ["src"]
:aliases :aliases
{:cider {:cider

View File

@@ -35,7 +35,22 @@
''; '';
}; };
in { in {
packages.default = sydnix; packages.default = clj-nix.lib.mkCljApp {
pkgs = nixpkgs.legacyPackages.${system};
modules = [
{
name = "msyds/sydnix";
version = "1.0";
main-ns = "sydnix.main";
projectSrc = ./.;
nativeImage = {
enable = true;
};
# customJdk.enable = true;
}
];
};
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
inputsFrom = [ inputsFrom = [

View File

@@ -1,7 +1,7 @@
(ns asciidoc.types (ns asciidoc.types
(:require (:require
[clojure.spec.alpha :as s] [clojure.spec.alpha :as s]
[spec-dict :refer [->opt dict]])) [spec-dict.main :refer [->opt dict]]))
(defn- make-block-arguments [req opt] (defn- make-block-arguments [req opt]
(let [args (dict req (let [args (dict req