mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-19 03:14:03 +00:00
lambda-lisp: init at 2022-08-18
This adds lambda lisp, and the lambda-lisp-blc backend. Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
parent
0f69b59be2
commit
52bdc84582
82
pkgs/development/interpreters/lambda-lisp/default.nix
Normal file
82
pkgs/development/interpreters/lambda-lisp/default.nix
Normal file
@ -0,0 +1,82 @@
|
||||
# Lambda Lisp has several backends, here we are using
|
||||
# the blc one. Ideally, this should be made into several
|
||||
# packages such as lambda-lisp-blc, lambda-lisp-lazyk,
|
||||
# lambda-lisp-clamb, etc.
|
||||
|
||||
{ lib
|
||||
, gccStdenv
|
||||
, fetchFromGitHub
|
||||
, fetchurl
|
||||
, runtimeShell
|
||||
}:
|
||||
|
||||
let
|
||||
stdenv = gccStdenv;
|
||||
s = import ./sources.nix { inherit fetchurl fetchFromGitHub; };
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "lambda-lisp-blc";
|
||||
version = s.lambdaLispVersion;
|
||||
src = s.src;
|
||||
flatSrc = s.flatSrc;
|
||||
blcSrc = s.blcSrc;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p ./build
|
||||
cp $blcSrc ./build/Blc.S
|
||||
cp $flatSrc ./build/flat.lds
|
||||
cd build;
|
||||
cat Blc.S | sed -e 's/#define.*TERMS.*//' > Blc.ext.S;
|
||||
$CC -c -DTERMS=50000000 -o Blc.o Blc.ext.S
|
||||
ld.bfd -o Blc Blc.o -T flat.lds
|
||||
cd ..;
|
||||
mv build/Blc ./bin
|
||||
install -D -t $out/bin bin/Blc
|
||||
install -D -t $out/lib bin/lambdalisp.blc
|
||||
|
||||
cd build;
|
||||
$CC ../tools/asc2bin.c -O2 -o asc2bin;
|
||||
cd ..;
|
||||
mv build/asc2bin ./bin;
|
||||
chmod 755 ./bin/asc2bin;
|
||||
install -D -t $out/bin bin/asc2bin
|
||||
|
||||
echo -e "#!${runtimeShell}\n( cat $out/lib/lambdalisp.blc | $out/bin/asc2bin; cat ) | $out/bin/Blc" > lambda-lisp-blc
|
||||
chmod +x lambda-lisp-blc
|
||||
|
||||
install -D -t $out/bin lambda-lisp-blc
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
|
||||
a=$(echo "(* (+ 1 2 3 4 5 6 7 8 9 10) 12020569 (- 2 5))" | $out/bin/lambda-lisp-blc | tr -d "> ");
|
||||
test $a == -1983393885
|
||||
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A Lisp interpreter written in untyped lambda calculus";
|
||||
homepage = "https://github.com/woodrush/lambdalisp";
|
||||
longDescription = ''
|
||||
LambdaLisp is a Lisp interpreter written as a closed untyped lambda calculus term.
|
||||
It is written as a lambda calculus term LambdaLisp = λx. ... which takes a string
|
||||
x as an input and returns a string as an output. The input x is the Lisp program
|
||||
and the user's standard input, and the output is the standard output. Characters
|
||||
are encoded into lambda term representations of natural numbers using the Church
|
||||
encoding, and strings are encoded as a list of characters with lists expressed as
|
||||
lambdas in the Mogensen-Scott encoding, so the entire computation process solely
|
||||
consists of the beta-reduction of lambda terms, without introducing any
|
||||
non-lambda-type object.
|
||||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ cafkafk ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
50
pkgs/development/interpreters/lambda-lisp/sources.nix
Normal file
50
pkgs/development/interpreters/lambda-lisp/sources.nix
Normal file
@ -0,0 +1,50 @@
|
||||
let
|
||||
lambdaLispVersion = "2022-08-18";
|
||||
blcVersion = "2";
|
||||
# Archive of "https://justine.lol/lambda/";
|
||||
justineLolArchive = "https://web.archive.org/web/20230614065521if_/https://justine.lol/lambda/";
|
||||
in
|
||||
{ fetchFromGitHub, fetchurl }: {
|
||||
inherit blcVersion;
|
||||
inherit lambdaLispVersion;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "woodrush";
|
||||
repo = "lambdalisp";
|
||||
rev = "2119cffed1ab2005f08ab3cfca92028270f08725";
|
||||
hash = "sha256-ml2xQ8s8sux+6GwTw8mID3PEOcH6hn8tyc/UI5tFaO0=";
|
||||
};
|
||||
|
||||
uniCSrc = fetchFromGitHub {
|
||||
owner = "tromp";
|
||||
repo = "tromp.github.io";
|
||||
rev = "b4de12e566c1fb0fa3f3babe89bac885f4c966a4";
|
||||
hash = "sha256-JmbqQp2kkkkkkkkSWQmG3uBxdgyIu4r2Ch8bBGyQ4H4=";
|
||||
};
|
||||
|
||||
# needed later
|
||||
clambSrc = fetchFromGitHub {
|
||||
owner = "irori";
|
||||
repo = "clamb";
|
||||
rev = "44c1208697f394e22857195be5ea73bfdd48ebd1";
|
||||
hash = "sha256-1lGg2NBoxAKDCSnnPn19r/hwBC5paAKUnlcsUv3dpNY=";
|
||||
};
|
||||
|
||||
# needed later
|
||||
lazykSrc = fetchFromGitHub {
|
||||
owner = "irori";
|
||||
repo = "lazyk";
|
||||
rev = "5edb0b834d0af5f7413c484eb3795d47ec2e3894";
|
||||
hash = "sha256-1lGg2NBoxAKDCSnnPn19r/hwBC5paAKUnlcsUv3dpNY=";
|
||||
};
|
||||
|
||||
blcSrc = fetchurl {
|
||||
url = "${justineLolArchive}Blc.S?v=${blcVersion}";
|
||||
hash = "sha256-qt7vDtn9WvDoBaLESCyyscA0u74914e8ZKhLiUAN52A=";
|
||||
};
|
||||
|
||||
flatSrc = fetchurl {
|
||||
url = "${justineLolArchive}flat.lds";
|
||||
hash = "sha256-HxX+10rV86zPv+UtF+n72obtz3DosWLMIab+uskxIjA=";
|
||||
};
|
||||
}
|
@ -17354,6 +17354,9 @@ with pkgs;
|
||||
|
||||
konf = callPackage ../development/tools/konf { };
|
||||
|
||||
lambda-lisp = callPackage ../development/interpreters/lambda-lisp { };
|
||||
lambda-lisp-blc = lambda-lisp;
|
||||
|
||||
lolcode = callPackage ../development/interpreters/lolcode { };
|
||||
|
||||
love_0_10 = callPackage ../development/interpreters/love/0.10.nix { };
|
||||
|
Loading…
Reference in New Issue
Block a user