# brev Scheme is a beautiful minimalist language, the barest of building blocks that can make anything. So let's make anything. I just want to sand down every edge. I'm sick of boilerplate and of re-typing things that the compiler should do. In other words, I love anaphora, clojurian, miscmacros and similar. I sometimes wish I could use a language where all that stuff was just built-in right away. Hence brev. It depends on and reexports the following extensions as is: * (chicken file posix) * (chicken file) * (chicken io) * (chicken pathname) * (chicken port) * (chicken pretty-print) * (chicken process-context posix) * (chicken process-context) * (chicken random) * (chicken string) * anaphora * acetone * brev-separate * clojurian * define-options * dwim-sort * fix-me-now * html-parser * http-client * logical-combinators * miscmacros * scsh-process * srfi-1 * srfi-42 * srfi-69 * strse * sxml-serializer From `sxml-transports` it reexports `pre-post-order*` and `pre-post-order-splice*`, from `sxpath` it rexeports the eponymous `sxpath` procedure, and from `bi-combinators` it reexports the exceptionally useful `bi-each` combinator. From `uri-common` it reexports everything but from some (not all!) of the procedures it removes "uri-" or "-uri" from the name, as follows: (rename uri-common (uri-reference reference) (absolute-uri absolute) (uri-path path) (uri-query query) (uri-fragment fragment) (uri-host host) (uri-reference? reference?) (absolute-uri? absolute?) (uri-path-absolute? path-absolute?) (uri-path-relative? path-relative?) (uri-relative-to relative-to) (uri-relative-from relative-from)) From srfi-1, to prevent collisions with `sequences`, it adds a `-list` suffix to `filter`, `take-while`, `drop-while` and `span`. From `sequences`, in order to match srfi-1, it renames `take` and `drop` to `take-while` and `drop-while` respectively, and `split` to `span`. It renames `index` to `seq-index` to remove a collision with SRFI-42. It also changes the semantics of `filter` to have both a triadic variant (like the upstream `sequences` egg) and a biadic variant (to match srfi-1). It removes `is?` and `empty?` in favor of the ones from `brev-separate`. This egg also contains the `mdg` extension (short for "match define generics"), which imports `define-dx` from `match-generics` and renames it `define`, so you can have [the fanciest define of all time][1]. [1]: https://idiomdrottning.org/mdg "The fanciest define of all time" It's a separate extension to work around a since-fixed bug in older versions of Chicken. It'll become oart of `brev` instead (and the `mdg` extension deprecated) when the new Chicken becomes part of Debian stable. ## Compiling brev code `.brev` files are scheme files that have an implicit `(import brev mdg)` at the start of them. On zsh you can use csc -prologue <(echo "(import brev mdg)") your-file-name.brev to compile them. On POSIX, you can use this shell script: #!/bin/sh echo "(import brev mdg)" > /tmp/brev-prol.scm csc -prologue /tmp/brev-prol.scm "$@" This is provided in the egg repo with the name `brev`. It also passes through any other flags you add, like `-O3` or whatever. brev -O3 your-file-name.brev This is great for quick little apps and pocs and explorations. If you are making modules (especially if you are making eggs), instead please just make them as normal `.scm` files that import only the modules they actually need, including `brev-separate` if needed. There is a `brev2scm` program included that helps you do that. ## .brev files in Emacs Just add (add-to-list 'auto-mode-alist '("\\.brev$" . scheme-mode)) in your init file to load .brev files with scheme-mode. (Or change to taste if you like other modes for your scheming.) ## Source code git clone https://idiomdrottning.org/brev ## License Brev is just a meta package so it's up to the license of stuff it links in. The meta-package itself is just public domain. The new stuff in `brev-separate` is BSD 1-clause. ## Mailing list - Subscribe: [brev-dev+subscribe@zebra.idiomdrottning.org](brev-dev+subscribe@zebra.idiomdrottning.org) - Post: [brev-dev@zebra.idiomdrottning.org](brev-dev@zebra.idiomdrottning.org) - [Archive](https://zebra.idiomdrottning.org/brev-dev/)