# HG changeset patch # User ellis # Date 1682906492 14400 # Node ID eb8ed24e8a76b657f3af4e6c5af63ba8e29f12df init diff -r 000000000000 -r eb8ed24e8a76 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,4 @@ +out/.* +.*Cargo.lock$ +.*target/.* +.*[.]fasl$ \ No newline at end of file diff -r 000000000000 -r eb8ed24e8a76 Cargo.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Cargo.toml Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,16 @@ +[package] +name = "cl-demo-rs" +version = "0.1.0" +edition = "2021" +build = "build.rs" +[lib] +path = "lib.rs" +crate-type = ["cdylib"] +[workspace] +members = ["cfg","obj"] +[dependencies] +libc = "0.2" +obj = {version = "0.1.0",path = "obj"} +cfg = {version = "0.1.0",path = "cfg"} +[build-dependencies] +cbindgen = "0.20" \ No newline at end of file diff -r 000000000000 -r eb8ed24e8a76 build.py diff -r 000000000000 -r eb8ed24e8a76 build.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build.rs Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,18 @@ +use std::env; +use std::fs::create_dir; +use std::path::PathBuf; +fn main() { + let crate_dir: PathBuf = env::var("CARGO_MANIFEST_DIR") + .expect("CARGO_MANIFEST_DIR env var is not defined") + .into(); + let mpk_py = "build.py"; + let config = cbindgen::Config::from_file("cbindgen.toml") + .expect("Unable to find cbindgen.toml configuration file"); + let build_dir = crate_dir.join("build/"); + if !build_dir.exists() { + create_dir(&build_dir).unwrap(); + } + cbindgen::generate_with_config(&crate_dir, config) + .unwrap() + .write_to_file(build_dir.join("mpk_ffi.h")); +} diff -r 000000000000 -r eb8ed24e8a76 cbindgen.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbindgen.toml Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,11 @@ +include_guard = "mpk_ffi_h" +autogen_warning = "/* DO NOT TOUCH */" +include_version = true +language = "C" +cpp_compat = true +line_length = 88 + +[parse] +parse_deps = true +include = ["mpk_config", "mpk_hash"] +extra_bindings = ["mpk_hash", "mpk_config"] diff -r 000000000000 -r eb8ed24e8a76 cfg/Cargo.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cfg/Cargo.toml Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,6 @@ +[package] +name = "cfg" +version = "0.1.0" +edition = "2021" +[dependencies] +serde_dhall = "0.12.1" \ No newline at end of file diff -r 000000000000 -r eb8ed24e8a76 cfg/src/lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cfg/src/lib.rs Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,14 @@ +pub fn add(left: usize, right: usize) -> usize { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff -r 000000000000 -r eb8ed24e8a76 cl-demo.asd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cl-demo.asd Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,37 @@ +(asdf:defsystem "cl-demo" + :version "1.0.0" + :author "ellis " + :maintainer "ellis " + :description "" + :homepage "https://rwest.io/p/cl-demo" + :bug-tracker "https://gitlab.rwest.io/ellis/cl-demo/issues" + :source-control (:hg "https://gitlab.rwest.io/ellis/cl-demo") + :license "WTFPL" + :depends-on (:bordeaux-threads + #+(or ccl sbcl) + :clack + :caveman2 + :clog + :cl-rocksdb + :verbose + :alexandria + :cl-ppcre + :cffi + :clingon) + :serial T + :components ((:file "pkg") + (:file "tk") + (:file "db") + (:file "ui") + (:file "demo")) + ;; :in-order-to ((test-op (test-op "cl-demo/tests"))) + ;; :defsystem-depends-on (:deploy) + ;; :build-operation "deploy" + :build-pathname "cl-demo" + :entry-point "cl-demo:main") + +;; (asdf:defsystem "cl-demo:tests" + ;; :depends-on ("cl-demo" "fiveam") + ;; :components ((:file "tests")) + ;; :perform (test-op (o c) (symbol-call :fiveam '#:run! :cl-demo)) + ;; ) diff -r 000000000000 -r eb8ed24e8a76 db.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,2 @@ +(in-package :cl-demo) + diff -r 000000000000 -r eb8ed24e8a76 demo.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demo.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,38 @@ +;; demo.lisp +(in-package :cl-demo) + +(defparameter demo-path (merge-pathnames "cl-demo" (uiop:temporary-directory))) + +(defvar db-path (merge-pathnames "db" demo-path)) + +(defun cli-opts () + "Returns the top-level CLI options." + (list + (cli:make-option + :string + :description "demo app to run" + :short-name #\x + :long-name "app" + :initial-value "client" + :env-vars '("DEMO_APP") + :key :app))) + +(defun cli-handler (cmd) + "Handler for the `demo' command." + (let ((app (cli:getopt cmd :app))) + (format t "running app: ~A!~%" app))) + +(defun cli-cmd () + "Our demo command." + (cli:make-command + :name "demo" + :description "A collection of demos" + :version "1.0.0" + :authors '("ellis ") + :license "WTFPL" + :options (demo/opts) + :handler #'demo/handler)) + +(defun main () + "A demo of some common-lisp functionality." + (cli:run (demo/cmd))) diff -r 000000000000 -r eb8ed24e8a76 ffi/build.py diff -r 000000000000 -r eb8ed24e8a76 ffi/mpk_ffi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ffi/mpk_ffi.h Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,13 @@ +#ifndef mpk_ffi_h +#define mpk_ffi_h + +/* Generated with cbindgen:0.20.0 */ + +/* DO NOT TOUCH */ + +#include +#include +#include +#include + +#endif /* mpk_ffi_h */ diff -r 000000000000 -r eb8ed24e8a76 lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib.rs Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,1 @@ +//! cl-demo-rs diff -r 000000000000 -r eb8ed24e8a76 makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,10 @@ +L ?= sbcl +O ?= /tmp/cl-demo +.PHONY:build +$(O):;mkdir -p $@ +clean:;rm -rf out *.fasl;cargo clean +build:;ros/build.ros +docs:;ros/docs.ros +test:;ros/test.ros +pack:;ros/pack.ros +ci:clean build docs test pack; diff -r 000000000000 -r eb8ed24e8a76 obj/Cargo.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/obj/Cargo.toml Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,8 @@ +[package] +name = "obj" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff -r 000000000000 -r eb8ed24e8a76 obj/src/lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/obj/src/lib.rs Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,14 @@ +pub fn add(left: usize, right: usize) -> usize { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff -r 000000000000 -r eb8ed24e8a76 pkg.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,35 @@ +#| +cl-demo + +> (cl-demo:main) +|# + +(defpackage #:cl-demo + (:use #:cl) + (:local-nicknames + (#:rdb #:cl-rocksdb) + (#:v #:org.shirakumo.verbose) + (#:bt #:bordeaux-threads) + (#:cli #:clingon)) + ;; db.lisp + (:export + ;; #:make-db + ;; #:with-db + ;; #:db + ) + ;; demo.lisp + (:export + #:main + #:demo-path + #:db-path + #:cli-opts + #:cli-handler + #:cli-cmd) + ;; ui.lisp + (:export + #:on-new-window + #:start-ui) + ;; tk.lisp + (:export + #:random-id + #:scan-dir)) diff -r 000000000000 -r eb8ed24e8a76 readme.org --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/readme.org Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,8 @@ +#+TITTLE: cl-demo + +This is a demo software suite which showcases the power of Common Lisp and Rust. + +* Make +* Run +* Play +* Config diff -r 000000000000 -r eb8ed24e8a76 ros/build.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/build.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,20 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t) + ) + +(defpackage :ros.script.build.3891893519 + (:use :cl)) +(in-package :ros.script.build.3891893519) + +(defun main (&rest argv) + (declare (ignorable argv)) + (asdf:load-asd "cl-demo.asd") + (asdf:load-system "cl-demo") + (asdf:make :cl-demo)) +;;; vim: set ft=lisp lisp: diff -r 000000000000 -r eb8ed24e8a76 ros/clean.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/clean.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,20 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" ; +|# + +;; clean:;rm -rf out *.fasl;pushd rust;cargo clean;popd + +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t) + ) + +(defpackage :ros.script.clean.3891893753 + (:use :cl)) +(in-package :ros.script.clean.3891893753) + +(defun main (&rest argv) + (declare (ignorable argv))) +;;; vim: set ft=lisp lisp: diff -r 000000000000 -r eb8ed24e8a76 ros/compile.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/compile.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,15 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (in-package :cl-user) + (ros:ensure-asdf) + (asdf:load-asd #P"~/dev/cl-demo/cl-demo.asd") + (asdf:load-asd #P"~/quicklisp/local-projects/cl-rocksdb/cl-rocksdb.asd") + #+quicklisp(ql:quickload '(cl-demo) :silent t)) + +;; TODO 2023-02-25: opts (system, config, user input) +(defun main (&rest argv) + (declare (ignorable argv))) diff -r 000000000000 -r eb8ed24e8a76 ros/db.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/db.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,12 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t)) + +(defun main (&rest argv) + (declare (ignorable argv)) + (format t "hello world")) diff -r 000000000000 -r eb8ed24e8a76 ros/demo.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/demo.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,12 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t)) + +(defun main (&rest argv) + (declare (ignorable argv)) + (format t "hello world")) \ No newline at end of file diff -r 000000000000 -r eb8ed24e8a76 ros/docs.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/docs.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,12 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t)) + +(defun main (&rest argv) + (declare (ignorable argv)) + (format t "hello world")) diff -r 000000000000 -r eb8ed24e8a76 ros/pack.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/pack.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,17 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t) + ) + +(defpackage :ros.script.pack.3891893796 + (:use :cl)) +(in-package :ros.script.pack.3891893796) + +(defun main (&rest argv) + (declare (ignorable argv))) +;;; vim: set ft=lisp lisp: diff -r 000000000000 -r eb8ed24e8a76 ros/test.ros --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ros/test.ros Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,12 @@ +#!/bin/sh +#|-*- mode:lisp -*-|# +#| +exec ros -Q -- $0 "$@" +|# +(progn ;;init forms + (ros:ensure-asdf) + #+quicklisp(ql:quickload '() :silent t)) + +(defun main (&rest argv) + (declare (ignorable argv)) + (format t "hello world")) diff -r 000000000000 -r eb8ed24e8a76 rustfmt.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rustfmt.toml Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,3 @@ +edition = "2021" +tab_spaces = 2 +wrap_comments = true \ No newline at end of file diff -r 000000000000 -r eb8ed24e8a76 tests.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,1 @@ +(in-package :cl-demo) diff -r 000000000000 -r eb8ed24e8a76 tests/prime-test.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/prime-test.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,67 @@ +;; (defun is-prime(n) +;; (do ((num 2 (+ num 1))) +;; ((> num (/ n 2)) t) +;; (if (= 0 (mod n num)) +;; (return-from is-prime nil)))) + +;; (defun kth-prime(k) +;; (do ((candidate 2 (+ candidate 1))) +;; ((< k 1) (- candidate 1)) +;; (when (is-prime candidate) +;; (decf k)))) + +;; (time (kth-prime 10000)) + +;; (declaim (inline is-prime)) +;; (defun is-prime (n) +;; (loop for num of-type fixnum from 3 to (isqrt n) by 2 +;; when (zerop (mod n num)) +;; return nil +;; finally (return t))) + +;; (defun kth-prime (k) +;; (declare (optimize (speed 3) (safety 0)) +;; (fixnum k)) +;; (if (zerop k) +;; 2 +;; (loop for candidate of-type fixnum from 3 by 2 +;; when (<= k 0) return (- candidate 2) +;; when (is-prime candidate) do (decf k)))) + +;; (declaim +;; (optimize (speed 3) (safety 0)) +;; (inline is-prime)) + +;; (defun is-prime(n) +;; (declare (fixnum n)) +;; (do ((num 2 (+ num 1))) +;; ((> num (floor n 2)) t) +;; (declare (fixnum num)) +;; (if (= 0 (mod n num)) +;; (return-from is-prime nil)))) + +;; (defun kth-prime(k) +;; (declare (fixnum k)) +;; (do ((candidate 2 (+ candidate 1))) +;; ((< k 1) (- candidate 1)) +;; (declare (fixnum candidate)) +;; (when (is-prime candidate) +;; (decf k)))) + +;; (time (kth-prime 10000)) + +(declaim (inline is-prime)) +(defun is-prime (n) + (loop for num of-type fixnum from 2 to (ash n -1) + when (zerop (mod n num)) + return nil + finally (return t))) + +(defun kth-prime (k) + (declare (optimize (speed 3) (safety 0)) + (fixnum k)) + (loop for candidate of-type fixnum from 2 + when (<= k 0) return (1- candidate) + when (is-prime candidate) do (decf k))) + +(time (kth-prime 10000)) diff -r 000000000000 -r eb8ed24e8a76 tk.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tk.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,8 @@ +(in-package #:cl-demo) + +(defun random-id () + (format NIL "~8,'0x-~8,'0x" (random #xFFFFFFFF) (get-universal-time))) + +(defun scan-dir (dir filename callback) + (dolist (path (directory (merge-pathnames (merge-pathnames filename "**/") dir))) + (funcall callback path))) diff -r 000000000000 -r eb8ed24e8a76 ui.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui.lisp Sun Apr 30 22:01:32 2023 -0400 @@ -0,0 +1,14 @@ +(in-package :cl-demo) + +(defun on-new-window (body) + "Handle new window event." + (let ((elt (clog:create-child body "

foobar

"))) + (clog:set-on-click + elt + (lambda (o) + (setf (clog:color elt) "green"))))) + +(defun start-ui () + "Start the UI." + (clog:initialize #'on-new-window) + (clog:open-browser))