Commit graph

16 commits

Author SHA1 Message Date
sterni
02566cdcfb feat(nix/buildLisp): add ecl
Adds ECL as a second supported implementation, specifically a statically
linked ECL. This is interesting because we can create statically linked
binaries, but has a few drawbacks which doesn't make it generally
useful:

* Loading things is very slow: The statically linked ECL only has byte
  compilation available, so when we do load things or use the REPL it is
  significantly worse than with e. g. SBCL.

* We can't load shared objects via the FFI since ECL's dffi is not
  available when linked statically. This means that as it stands, we
  can't build a statically linked //web/panettone for example.

Since ECL is quite slow anyways, I think these drawbacks are worth it
since the biggest reason for using ECL would be to get a statically
linked binary. If we change our minds, it shouldn't be too hard to
provide ecl-static and ecl-dynamic as separate implementations.

ECL is LGPL and some libraries it uses as part of its runtime are as
well. I've outlined in the ecl-static overlay why this should be of no
concern in the context of depot even though we are statically linking.

Currently everything is building except projects that are using cffi to
load shared libaries which have gotten an appropriate
`badImplementations` entry. To get the rest building the following
changes were made:

* Anywhere a dependency on UIOP is expressed as `bundled "uiop"` we now
  use `bundled "asdf"` for all implementations except SBCL. From my
  testing, SBCL seems to be the only implementation to support using
  `(require 'uiop)` to only load the UIOP package. Where both a
  dependency on ASDF and UIOP exists, we just delete the UIOP one.
  `(require 'asdf)` always causes UIOP to be available.

* Where appropriate only conditionally compile SBCL-specific code and
  if any build the corresponding files for ECL.

* //lisp/klatre: Use the standard condition parse-error for all
  implementations except SBCL in try-parse-integer.

* //3p/lisp/ironclad: disable SBCL assembly optimization hack for all
  other platforms as it may interfere with compilation.

* //3p/lisp/trivial-mimes: prevent call to asdf function by substituting
  it out of the source since it always errors out in ECL and we hardcode
  the correct path elsewhere anyways.

As it stands ECL still suffers from a very weird problem which happens
when compiling postmodern and moptilities:
https://gitlab.com/embeddable-common-lisp/ecl/-/issues/651

Change-Id: I0285924f92ac154126b4c42145073c3fb33702ed
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3297
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: eta <tvl@eta.st>
2021-08-24 22:00:15 +00:00
Vincent Ambo
4bbbb58cb5 chore: Rename pkgs->depot in all Nix file headers 2020-02-21 13:54:53 +00:00
Vincent Ambo
253a166bbc refactor(lisp/dns): Return dns-answer from query functions 2020-01-27 02:10:39 +00:00
Vincent Ambo
ca1217655d docs(lisp/dns): Add initial README file 2020-01-27 00:49:34 +00:00
Vincent Ambo
90dd824606 feat(lisp/dns): Support CNAME & NS record RDATAs 2020-01-27 00:47:53 +00:00
Vincent Ambo
a8c9058a58 refactor(lisp/dns): Refactor structure of lookup-generic calls 2020-01-27 00:15:58 +00:00
Vincent Ambo
479510005b chore(lisp/dns): Remove unused dependencies 2020-01-26 21:06:59 +00:00
Vincent Ambo
3f9546197e feat(lisp/dns): Export struct fields 2020-01-26 20:34:03 +00:00
Vincent Ambo
4c109f66b6 feat(lisp/dns): Introduce enum for DNS types & decode RDATA
Adds some of the most common DNS types in the enum (others TBD), and
starts decoding RDATA for TXT and A.
2020-01-26 20:29:30 +00:00
Vincent Ambo
72abb43577 chore(lisp/dns): Add 'message.lisp' to build instructions 2020-01-26 20:00:22 +00:00
Vincent Ambo
8f805a29d1 feat(lisp/dns): Use new DNS deserialiser in dns:lookup-generic
This enables arbitrary DNS lookups (with the caveat that RRDATAs are
currently not deserialised into a record-type-specific format).

An error condition has been defined for error-responses from the HTTP
server which provides interactive restarts for attempting a new call
with different parameters.
2020-01-26 19:58:52 +00:00
Vincent Ambo
1440fc0dd7 feat(lisp/dns): Implement qname compression parsing
Implements support for the compresion scheme used in binary DNS
messages.

This makes it possible to decode messages entirely, but not yet
actually resolve the labels to their "real" values.

All qnames are stored with file-offsets pointing at the position at
which their reading started, which enables the implementation of a
function to resolve pointers internally.
2020-01-26 18:27:35 +00:00
Vincent Ambo
cefb60f20c refactor(lisp/dns): Introduce structured QNAME representation
Adds a struct that represents QNAMEs, tracks the stream offset at
which the QNAME parsing began and makes it possible to resolve
pointers inside of the QNAME.

Note that resolving pointers needs to happen *after* the call to
lisp-binary currently. It might be possible to implement this inside
of lisp-binary in the future by switching on the top two bits of the
qname field, but since this is happening *inside* of a reader function
I'm not currently sure how to implement it.
2020-01-26 02:51:29 +00:00
Vincent Ambo
7ef14db936 feat(lisp/dns): Check in initial DNS message implementation
This uses lisp-binary to define serialisation types for the DNS
messages defined by RFC 1035.

Currently the compression scheme used for QNAMEs is not supported,
hence deserialisation of even simple records fails after the header
and question sections are read.
2020-01-26 01:20:45 +00:00
Vincent Ambo
09621f5371 refactor(lisp/dns): Split package into multiple files
Adds a package definition file and moves the current client into
client.lisp

Note that the client is not working at all at this commit as this is a
work-in-progress snapshot.
2020-01-26 01:20:45 +00:00
Vincent Ambo
e50c362244 feat(lisp/dns): Check in very early DNS-over-HTTPS client
This includes very barebones support for querying TXT and MX records
right now. The returned structure is not turned into a more convenient
format and error handling is, well, NIL.
2020-01-22 18:04:26 +00:00