[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)