[HN Gopher] KamilaLisp - A functional, flexible and concise Lisp
___________________________________________________________________
KamilaLisp - A functional, flexible and concise Lisp
Author : tluyben2
Score : 89 points
Date : 2024-03-02 07:29 UTC (15 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| tluyben2 wrote:
| Impressive feature list with a book to learn the language.
|
| Featured on Arraycast:
|
| https://www.arraycast.com/episodes/episode74-kamilalisp
| hyperbrainer wrote:
| This could actually be nice for code golf.
| mm007emko wrote:
| Looks great, however it's licensed under GPL. Does it mean that
| ALL programs in that language have to be GPL as well?
| Zambyte wrote:
| No.
|
| Edit: though I thought about it a little more. The more
| interesting question is regarding the standard library, rather
| than the compiler. Applying different licenses to the two is
| not unusual (gcc is GPL, glibc is LGPL). From what I can see,
| the standard library is embedded entirely into the compiler,
| and thus yeah, I do think programs that use this would actually
| have to be GPL. Not that that's a bad thing though :)
| Tomte wrote:
| More important than the standard library (which isn't so
| standard, just conventional, see musl) is the GCC Runtime
| Library, which is GPLv3, but with the "GCC Runtime Library
| Exception".
|
| There is also an interesting question about license
| compatibility between GPLv3 and GPLv3 with RLE, but that is
| mostly ignored by everybody.
| anthk wrote:
| No. If you are a GCC user, you should know that.
| kazinator wrote:
| You don't need to combine your program with GCC in order to
| ship it.
|
| Except in the case of libgcc, which is not just GPLed, but
| has a GCC Runtime Library Exception.
| mm007emko wrote:
| As a GCC user I know that GCC has a runtime library exception
| in the license. This doesn't.
| kazinator wrote:
| Unless KamilaLisp specifies exceptions to the GPL, it means
| that if you ship your own KamilaLisp program in a way that is
| combined with KamilaLisp (for instance compiled into one big
| executable that includes the KamilaLisp run-time) then the
| entire combination has to be distributed under the GPL, meaning
| that your program has have a GPL-compatible open source
| license.
|
| Programs that are not combined with KamilaLisp, only requiring
| an installation of KamilaLisp for their execution, almost
| certainly don't have to be GPLed.
| hislaziness wrote:
| Inspired by MalbolgeLISP which was a lisp written in Malbolge.
| anonzzzies wrote:
| Are they related? I mean same author, but they seem not related
| besides the Lisp part. Both are pretty impressive feats for
| someone who is only 19 though.
| ergonaught wrote:
| "KamilaLisp, the language described in the book, originates
| from its previous iterations - v0.1 and MalbolgeLISP."
| anonzzzies wrote:
| Ah! I stand corrected, thanks. I opened the github and saw
| APL, Haskell, Lisp. Interesting as this new effort looks
| pretty serious while the Malbolge, while an incredible
| feat, is more a joke I guess.
| jonahx wrote:
| Really impressive for any age.
|
| Quotes about Malbolge:
|
| "The day that someone writes, in Malbolge, a program that
| simply copies its input to it's output, is the day my hair
| spontaneously turns green. It's the day that elephants are
| purple and camels fly, and a cow can fit through a needle's
| eye."
|
| "There's a discussion about whether one can implement
| sensible loops in Malbolge--it took many years before the
| first non-terminating one was introduced. A correct 99
| Bottles of Beer program, which deals with non-trivial loops
| and conditions, was not announced for seven years; the first
| correct one was by Hisashi Iizawa in 2005."
| trymas wrote:
| I thought I have seen this name...
|
| malbolge-lisp: https://github.com/kspalaiologos/malbolge-lisp
|
| HN discussion: https://news.ycombinator.com/item?id=28048072
|
| She's a genius prodigy.
| oumua_don17 wrote:
| >> genius prodigy
|
| https://palaiologos.rocks/about/
| bjoli wrote:
| Don't forget bzip3.
| karmakaze wrote:
| It would be helpful if the Features were separated by language vs
| library. I don't know what to make of No memory
| side effects, all collections are persistent.
|
| This can't be relevant when the objects referenced by these
| collections are mutable.
| kazinator wrote:
| > _separated by language vs library_
|
| You're totally new to Lisp, right? There is no such clear
| boundary in Lisp languages.
|
| > _This can 't be relevant when the objects referenced by these
| collections are mutable._
|
| Why not? Explain your reasoning. E.g. why is not not relevant
| that we can make a longer list by adding an element to the
| front of a shorter list, without mutating that shorter list, if
| the elements are objects that support mutation?
| karmakaze wrote:
| How so? Tail-call optimization would be a language feature.
| The math/graph operations in a lib/module etc.
|
| An example would be if presence in a collection is dependent
| on mutable properties of its entries.
| Kamq wrote:
| > Tail-call optimization would be a language feature.
|
| Most lisps generally do it this way (except maybe emacs
| lisp?), but there's not really a requirement for it to be a
| language feature. TCO is really just AST manipulation, and
| lisp macros are more than capable of that, although you
| might want to hook into the reader as well if Kamila
| supports it (I didn't see anything about that in the github
| readme).
| James_K wrote:
| > TCO is really just AST manipulation
|
| While it is true that tail call relationships can always
| be represented using goto, it requires that all related
| code is known to make this conversion. For instance:
| (defun f (x) (a x) (g x)) (defun g (x) (b x) (h x))
| (defun h (x) (c x) (f x))
|
| You cannot remove the tail call by altering the AST of F,
| G, or H. Instead, a third function must be instroduced
| that contains the bodies of all functions in the loop.
| (defun fgh-loop (start-at x) (tagbody
| (case start-at ((f) (go f))
| ((g) (go g)) ((h) (go h))) f (a
| x) (go g) g (b x) (go h) h (c x)
| (go f))) (defun f (x) (fgh-loop 'f x)) (defun
| g (x) (fgh-loop 'g x)) (defun h (x) (fgh-loop 'h
| x))
|
| You can only apply such optimisations in retrospect, but
| a macro would only have access to the body of F at the
| point of definition for F. And even then, you cannot TCO
| any lambdas that are passed around. A simple example is
| the Y combinator: ((lambda (x) (x x))
| (lambda (x) (x x)))
| kazinator wrote:
| _cons_ is a graph operation and _+_ is a math operation. Go
| on ...
| anthk wrote:
| Check out stutter from the Computational Beauty of Nature too:
|
| https://github.com/gwf/CBofN cat data/demo.lisp
| | ./bin/stutter
|
| Have a look on the file on how integers and aritmetics are
| implemented.
|
| The books explains that, but is not free. But you can get it
| somewhere else.
| bloopernova wrote:
| Slightly related question:
|
| Do any editors have a "translator" kind of tooltip or panel that
| explains what each symbol does in languages like APL or
| KamilaLisp?
|
| I was thinking about how I'd go about learning the various
| symbols involved in such a language, and I learn best by reading
| and modifying existing code, so something that helps me
| understand what I'm looking at would be nice.
| shrubble wrote:
| Although Dyalog APL is slightly different from other APLs,
| their editor does have exactly that in their REPL; it is a good
| way to learn the basics.
| mlochbaum wrote:
| Language-specific web editors often do. I think Uiua
| (https://www.uiua.org/) is the state of the art here, with the
| minor issue that most of the symbols aren't used in any other
| language. Several APL-likes have language bars at the top, with
| names shown on hover.
|
| - Dyalog APL: https://tryapl.org/
|
| - Kap: https://kapdemo.dhsdevelopments.com/clientweb2/
|
| - ngn/apl: https://abrudz.github.io/ngn-apl/web/
|
| - BQN (my language): https://bqn.funmaker.moe/
| abrudz wrote:
| Dyalog APL's RIDE interface doesn't even need you to find the
| symbol on a language bar; just hover the mouse over it, and a
| tooltip appears: https://i.imgur.com/XtzRGUs.png
| lispm wrote:
| The KamilaLisp repository contains a version of ABCL (Armed Bear
| Common Lisp for Java) and of Fricas (a computer algebra system
| written in CL).
|
| What are those used for?
| James_K wrote:
| > 0.3.x.y where a bump of x signifies a breaking change, while
| the bump of y signifies a non-breaking change
|
| If only regular version numbers had some way to encode this
| relationship.
| shrubble wrote:
| This is the second Lisp, in addition to APRIL, which combines
| Lisp concepts with APL concepts. Wonder if that is going to be a
| trend in the future?
| behnamoh wrote:
| I said this in another thread too, but the problem with Lisp is
| that it's sorta bundled with Emacs, so if you want to use LISP's
| powerful REPL you really have no choice other than learning
| Emacs. Essentially, Lisp is not just a "language"; it's a whole
| system designed to explore programming ideas. It includes the
| IDE, the minimal syntax, REPL, compiler, etc. All of this
| together makes "Lisp" the powerful and enlightening tool that
| people talk about.
|
| I think the other "inconveniences" of Lisp could be more
| tolerable for beginners if learning the language didn't require
| learning a new IDE (or OS, depending on how you define Emacs!).
| But at that point you'd have to forego a major benefit of using
| Lisp (its REPL); you'd be back to writing "dead" programs, not
| image-based "live" ones.
|
| Another problem I've faced with Lisp is lack of good
| documentation (except for Racket, but then again, Racket doesn't
| have Common Lisp's powerful REPL). Every website that teaches
| Lisp is in ugly HTML+CSS-only style, compare that to the more
| user-friendly websites of other languages.
|
| Then there's the issue of up-to-date learning material. Aside
| from the fact that there are very few resources to learn Lisp,
| the ones that are available are too old too. "Practical Common
| Lisp" (2005), "Common Lisp Recipes" (2015), "ANSI Common Lisp"
| (1995), etc.
|
| I like the philosophy of (s-exp) but modern lisps have ruined its
| simplicity for me by introducing additional bracket notations
| [like this]. It's confusing for me as a beginner to distinguish
| between (this) and [that], and honestly goes against the whole
| idea of "code and data look the same" motto.
| gumby wrote:
| > I said this in another thread too, but the problem with Lisp
| is that it's sorta bundled with Emacs, so if you want to use
| LISP's powerful REPL you really have no choice other than
| learning Emacs.
|
| You can use Medley which is Interlisp-D, a different, parallel
| strain of Lisp, a descendent of MACLISP, itself an ur-lisp
| ancestor of Interlisp, emacs lisp (older than EMACS, which
| didn't start out as a lisp program at all), CommonLisp, Multics
| MACLISP and that even begat Scheme.
|
| Interlisp didn't even keep its code as text files (though I
| wrote an eMacs for it at PARC back in the early 80s) so you may
| find it more accessible.
| jabradoodle wrote:
| While I use emacs and I'm not too familiar with other editors
| I'd question how true this is today, clojure in particular is
| often written with vscode, intelij and vim, all seem to have
| good repl support.
| egnehots wrote:
| What about clojure? IntelliJ & VS Code are also popular IDEs
| for it. It also support datastructure literals vec [1 2 3], map
| {:a 1 :b 2} which are mostly considered as helpful for
| beginners since it's closer to what they are used to in other
| languages.
___________________________________________________________________
(page generated 2024-03-02 23:00 UTC)