[HN Gopher] Cell Lang: Why yet another programming language?
       ___________________________________________________________________
        
       Cell Lang: Why yet another programming language?
        
       Author : luu
       Score  : 252 points
       Date   : 2022-06-29 02:52 UTC (1 days ago)
        
 (HTM) web link (www.cell-lang.net)
 (TXT) w3m dump (www.cell-lang.net)
        
       | Lramseyer wrote:
       | This is really great, because it touches on the concepts of
       | hardware design. I've thought a lot about this myself, and I'm
       | honestly surprised to see someone else discussing this. Maybe I'm
       | way out of my depth here, but the idea of stateful programming
       | doesn't actually fall under the paradigm of sequential
       | programming (think single threaded programming.) We all like
       | sequential programming for the same reasons we like _linear_
       | signal processing and _euclidean_ geometry. When things break
       | those paradigms, we of create mental models (transformation
       | functions) to try to emulate it back in the linear world where
       | the math is easier (for the most part, I 'm not too well versed
       | in those subjects. It's more of an analogy.) And I think that's
       | what this language is trying to do, except for certain concepts
       | of non-sequential programming.
       | 
       | Now I sort of disagree with the author when they state that no
       | high level language exists for stateful programming, because a
       | HDL (used for designing chips and programming FPGAs) is exactly
       | this. Now is System Verilog a high level language? Maybe not,
       | maybe the author is right.
       | 
       | Interestingly enough, a lot of hardware blocks (think like a
       | ethernet controller) use a special purpose hardware based state
       | machine to control and manage the link status. While this is less
       | flexible and less programmable than a CPU (which is also a state
       | machine at it's core,) it uses far less power.
       | 
       | You can think of a CPU as a state machine that can emulate other
       | state machines (though that's probably not a great way of
       | thinking of a CPU because it can do many other things.) However,
       | an FPGA can do it far more efficiently, but it's a pain in the
       | butt to program. Now I'm not suggesting we do everything on
       | FPGAs, but as we start to run up against the physical limitations
       | of speed and transistor density, I think it's good to think about
       | other paradigms of computing and how we can more efficiently
       | compute things.
        
       | ktpsns wrote:
       | I love the concept and would like to see some real world programs
       | to be implemented in that language :)
        
       | rkagerer wrote:
       | It's neat this can compile to C# and Java.
        
       | verdagon wrote:
       | > The state of the application can be partitioned in separate
       | components (called automata) that do not share any mutable state
       | and can be safely updated concurrently.
       | 
       | This is the right direction! Pure computations on (somewhat)
       | centralized data has proven to be very resilient to bugs. It's
       | kind of like how React organizes its programs.
       | 
       | I like how Cell is tackling this problem at the language level. A
       | language's programs will (in practice) often be a reflection of
       | what the language makes easy and what it makes hard, so designing
       | a language to handle this complexity would be a boon to the
       | world.
       | 
       | Pony also has this via its `iso` keyword and actors [0]. Cone is
       | also exploring this notion, with an interesting actor/async/await
       | hybrid [1].
       | 
       | > The first one is the ability to "replay" the execution of a
       | Cell program. One can easily reconstruct the exact state of a
       | Cell program at any point in time. Obviously that's very useful
       | for debugging, but there are others, more interesting ways of
       | taking advantage of that.
       | 
       | This sounds like Vale's "Perfect Replayability" feature [2] which
       | captures all IO for a program and deterministically replays it.
       | It's an incredibly useful feature, and I hope Cell exposes it
       | well!
       | 
       | [0] https://tutorial.ponylang.io/reference-
       | capabilities/referenc...
       | 
       | [1] https://cone.jondgoodwin.com/
       | 
       | [2] https://verdagon.dev/blog/perfect-replayability-prototyped
        
         | tacotacotaco wrote:
         | > A language's programs will (in practice) often be a
         | reflection of what the language makes easy and what it makes
         | hard...
         | 
         | In industrial design this is called an affordance. The product
         | is designed to encourage correct usage and make incorrect usage
         | difficult. I would like it if more language designers will
         | carefully consider their language's features like this. The Elm
         | language is a good example.
        
         | pca006132 wrote:
         | I think this may also be a good way to separate libraries from
         | application code, by considering the library as another actor
         | instead of a direct function call. We are allowed to panic
         | within the same abstraction layer (application or in a
         | library), but panic should not cause another application using
         | it to abort, there should be a way to let the application
         | recover from it and decide whether to cancel the operation or
         | do other actions. If the mutable states are not shared and
         | execution can be recorded, we can just restart the library
         | after abort and resume to the previous state.
        
         | rapind wrote:
         | I heartily recommend you take a look at Elm if you find this
         | interesting.
        
       | pier25 wrote:
       | Reminds me a lot of Alan Kay's ideas about biology and code.
        
       | germandiago wrote:
       | A spreadsheet becoming a language. :)
        
       | dagss wrote:
       | Very interesting.
       | 
       | In my domain of backend business rule + SQL development I think a
       | perfect programming language would combine ideas from "Out of the
       | tar pit" with event sourcing.
       | 
       | So perhaps something in sort of the same direction as Cell, but
       | also focused on state changing (really, aggregate computation)
       | from certain events having happened...
        
       | com2kid wrote:
       | > and how tedious and time consuming it often is to implement
       | even trivial things like sending data from the client to the
       | server and vice-versa.
       | 
       | Let's be clear here, the complications there are as follows:
       | 
       | 1. Authentication and permissions in regard to the end user who
       | is making the change or fetching the data. (E.g. internal web
       | app, the AWS hosted database has no knowledge of my corporate AD
       | accounts)
       | 
       | 2. Authentication/permissions of the service/software that is
       | talking to the database
       | 
       | 3. The crap tons of network problems and errors that can occur.
       | 
       | 4. Dealing with other possible errors, such as malformed input,
       | or data not being present, data being stale, write conflicts,
       | etc.
       | 
       | 5. My backend service is running in a private cluster and my DB
       | is running in a different private cluster.
       | 
       | 6. My backend service is running in a private cluster and because
       | of that the nifty subscription DB engine can't try and reach out
       | to reconnect to my service if something goes wrong with the
       | connection because there isn't a routable IP address.
       | 
       | Writing data to a table isn't the problem!
        
         | verdagon wrote:
         | I think a more charitable interpretation would be that they're
         | highlighting how much work has gone into that area (web server
         | frameworks come to mind), compared to how little work they've
         | seen on cleaner techniques and language assistance for managing
         | local state.
         | 
         | That's how I read it at least, reasonable interpretations may
         | differ.
        
           | worik wrote:
           | But I cannot agree. I am very down on this. I think this a
           | colossal waste of time.
           | 
           | I do not see the problem they are trying to solve. Doing I/O
           | is hard, not because sending bytes on a wire is hard but
           | because of everything that can go wrong. It is the
           | "everything that can go wrong" part that is hard.
           | 
           | They are going to solve the problem of state with "algebraic
           | data types". That is not new. I am trying to think of a
           | language at a higher level than machine code that does not
           | use algebraic data types. ("Algebraic data types" are not an
           | invention, they are a description)
           | 
           | I cannot see anything new in this. I fear it is another
           | example of making easy things easier and pretend the hard
           | things do not matter.
           | 
           | There have been huge strides in the development of computer
           | languages in recent years. Rust, Go, Swift, Dart.... All of
           | them with slightly different use cases and solving slightly
           | different problems in slightly different ways. But the author
           | knows of Closure... Yes, but.
           | 
           | "One can easily reconstruct the exact state of a Cell program
           | at any point in time." Really? I spend my entire professional
           | life doing exactly that, whatever the system I work in.
           | 
           | This is engineering with machines. State is part of the
           | nature of those machines. It is very well understood and is
           | not a problem (handling state) that we are struggling to
           | solve.
        
             | verdagon wrote:
             | It's pretty bold to say that their programming language
             | project is a colossal waste of time. I recommend steel-
             | manning [0] and reading their post with a more open and
             | curious mindset.
             | 
             | They could have phrased their article better, sure. But
             | lets not cherry-pick one sentence that's barely relevant to
             | the rest of the article and use it to fuel our anger that
             | they aren't solving Our Favorite Problem. Instead, let's
             | focus on what the author is really trying to get across:
             | that a language can help manage the complexity that can
             | come from mutable state.
             | 
             | If you read the article with a more charitable lens, you'll
             | see that the author is saying a lot that could be new to
             | many readers: a language can combine relational data with
             | functional transformations, a language can expose these
             | patterns to enable more solid architecture, a language
             | might support first-class reactive programming, and a
             | language could (if high level enough) offer replaying and
             | snapshots.
             | 
             | That's honestly fascinating, and I would love to see what
             | kind of ecosystem can grow around a language offering such
             | features.
             | 
             | [0] https://themindcollection.com/steelmanning-how-to-
             | discover-t...
        
       | _3u10 wrote:
       | Isn't SQL the language of state keeping?
        
         | convolvatron wrote:
         | yes. and we could really use some effective new blood in that
         | space.
        
       | blippage wrote:
       | This seems like an interesting idea for microcontrollers, where
       | you're often wrestling with state and concurrency.
       | 
       | I'm guessing it's too heavyweight, though.
        
       | ArrayBoundCheck wrote:
       | When I clicked on the page I wanted to see an example and know if
       | the language is meant for someone like me
       | 
       | I saw a huge page and clicked on links to find more pages just as
       | big. I figure it's not for me because I love mini examples and
       | low level and saw nothing like that.
       | 
       | So I wanted to say, you're probably not targeting me but make
       | sure whoever you are targeting will know it's for them based on
       | your site. No matter how nice the page looks, it's a large page
       | and it's hard to know who it's for at a glance
        
         | porcoda wrote:
         | It has a link labelled "Introductory example" at the top left
         | of the linked page. ...in the section called "Start Here". I'm
         | not sure how much easier they could make it to see some example
         | code with detailed explanations.
        
           | ArrayBoundCheck wrote:
           | wc says it's 5645 words. Thats 10 pages. Are you saying 10
           | pages printed pages isn't a large page? I'm not sure how much
           | easier you could have understood me
        
       | sebastianconcpt wrote:
       | On a technology that has proper closures, there is no reason why
       | OOP used functionally wouldn't be a good fit for the proposed
       | problem.
        
       | dgb23 wrote:
       | I think robust information software (AKA "CRUD" apps, data
       | visualization and interaction etc.) should definitely be built
       | with higher level paradigms, DSLs or a language that provides
       | such capabilities out of the box for these reasons:
       | 
       | - principle of least power
       | 
       | - can often be talked and reasoned about more easily
       | 
       | - lends itself to visualization
       | 
       | - can be tested more easily and uniformly
       | 
       | - eliminates certain classes of accidental complexity
       | 
       | So yes it makes sense to use...
       | 
       | - relational algebra for data manipulation where feasible,
       | functional programming for the rest
       | 
       | - (data driven / functional) state machines for control
       | 
       | ...like the article is suggesting. I also kind of like the idea
       | about I/O but I'm not 100% sure there, because I never played
       | with such a system. Reactive programming is powerful too to
       | manage data flow and again hides away plumbing and side-effects.
       | 
       | In a sense this is kind of already how many are programming in
       | modern FP languages like Clojure (via libraries).
       | 
       | What we possibly lose with these approaches is performance,
       | except the runtime/macros are fine tuned to make automatic
       | optimizations, so some of that can be gained back in the long
       | term. But I generally agree that there is tons of leverage in
       | programming these things at a higher level.
        
         | throwamon wrote:
         | > this is kind of already how many are programming in modern FP
         | languages like Clojure (via libraries).
         | 
         | Would you have links about this programming style and some of
         | these libraries?
        
         | dlojudice wrote:
         | > higher level paradigms, DSLs or a language that provides such
         | capabilities out of the box for these reasons
         | 
         | Based on exactly this arguments that we created HerbsJS [1], a
         | domain-first library to build microservices. While the
         | essential complexity can't be removed [2], we should put effort
         | to remove the accidental complexity as much as possible.
         | 
         | BTW, great to see this kind of discussion here and
         | congratulations to the team responsible for Cell Lang.
         | 
         | [1] https://herbsjs.org/
         | 
         | [2] https://en.wikipedia.org/wiki/No_Silver_Bullet
        
       | jolux wrote:
       | This looks very interesting. I'm curious if the author has looked
       | at Erlang/Elixir -- my first reaction on reading this is that it
       | sounds similar to the actor model and the way that Erlang handles
       | state and state updates: as messages to autonomous processes that
       | are modeled as a continuous fold over the message stream.
        
       | xigency wrote:
       | This is an inspiring read. Without looking at the code, there are
       | so many revolutionary ideas in here for more usable programming
       | languages. The ideas regarding stateful execution seem both
       | useful for highly parallel tasks and even hardware description.
        
       | WhitneyLand wrote:
       | > _Then there 's support for reactive programming, which is still
       | in its infancy_
       | 
       | State management for UI I would think should be a first class
       | objective rather than 3rd on the todo list. See SwiftUI for
       | something evolving toward this direction.
       | 
       | > _The best way to illustrate the advantages of functional
       | /relational programming over OOP is through a case study_
       | 
       | No, the best way is to be right up front with a real life common
       | problems and code examples that make life better. I'd prefer not
       | to read this many dry theoretical pages before seeing any of
       | those.
        
         | pavon wrote:
         | > real life common problems and code examples that make life
         | better
         | 
         | That is exactly what a case study is. Looking at examples of
         | real world cases.
        
           | WhitneyLand wrote:
           | No it's not. Case studies are usually retrospective. That's
           | not very practical when a language is in the
           | design/implementation stages.
           | 
           | It is possible to present common problem scenarios and
           | examples up front, even if something is at the idea stage.
           | 
           | It's commonly done, and can be an effective way of conveying
           | your ideas and getting feedback without pages on end of
           | speculative requirements.
        
       | daltont wrote:
       | I've always been intrigued by the idea of a language that
       | enforces a separation of queries and command. Functions (queries)
       | return values and have no side-effects, where procedures
       | (commands) that can have side-effects and don't return a value.
        
         | quickthrower2 wrote:
         | Solidity does this out of necessity. A command might cost you a
         | week's rent, whereas a pure query is free.
         | 
         | The pure query inside a command might still add cost to the
         | command though.
        
         | eterps wrote:
         | Nice! I had the same thought :)
        
       | hinkley wrote:
       | Don't worry yourself about when the next programming language
       | will be written.
       | 
       | Worry instead about when the _last_ one will be written.
        
         | amelius wrote:
         | I hope that Rust is the last language to be written, because
         | frankly there is so much rewriting-into-Rust going on that it
         | will be super demotivating if it turned out that everything has
         | yet to be rewritten again!
        
       | daenz wrote:
       | Great stuff! Reactive programming is seriously undervalued as a
       | paradigm. I suspect we'll see a lot more work with it in the
       | future.
        
       | danellis wrote:
       | What's with people tacking "Lang" on to the end of language
       | names? I can kind of understand it with Go, since Google didn't
       | exactly come up with a very searchable name, but now I'm seeing
       | it spread to other languages like Rust, and now here with Cell.
        
         | the_af wrote:
         | "Rust", "go", "cell", all of those words have a preexisting
         | meaning which is more common than the corresponding programming
         | languages.
        
         | bobajeff wrote:
         | Odin is one language that could use this convention. My
         | Searches often turn up things on The Odin Project.
        
         | brundolf wrote:
         | "Cell" is going to have lots of search-collisions, and it can
         | also help with finding a domain name
        
         | pavon wrote:
         | I like the convention. Even if you pick a word that isn't very
         | common, you are still unlikely to be able to register a domain
         | name for that word, and will have to amend it somehow, and
         | search engines will still have to guess which use of the word
         | you meant. Having a common convention simplifies searching for
         | things, as opposed to having to type out "Rust Programming
         | Language" every search.
        
         | Tade0 wrote:
         | First result in Google for "Rust" is this:
         | 
         | https://store.steampowered.com/app/252490/Rust/
         | 
         | Rust the language is three years older, but I suppose those who
         | bought the domain were aware that it's a common noun likely to
         | be used elsewhere.
        
         | dysoco wrote:
         | Well, "cell" isn't too searchable either
        
         | 10e23 wrote:
         | Lisp does it too (https://lisp-lang.org/) - I think it's a
         | reasonably familiar convention
        
           | danellis wrote:
           | I'm not talking about domain names. I'm talking about people
           | referring to the language itself as, for example, Rustlang.
        
             | 10e23 wrote:
             | Right, but the colloquial usage stemmed from the domain
             | name :)
        
       | froggertoaster wrote:
       | "Because there's currently no high-level programming language for
       | writing stateful software that I'm aware of. That's the short
       | answer."
       | 
       | Huh?
        
       | Scandiravian wrote:
       | I came across cell-lang a few years and really liked the ideas in
       | it. It does a lot of the things that was proposed in Out of the
       | Tar Pit, which is probably the paper that has influenced my
       | opinions about programming the most
       | 
       | For applications that don't have high performance requirements I
       | could see this getting adopted - automation and IoT devices are a
       | couple of areas that spring to mind
        
         | wrycoder wrote:
         | Summary of that paper [0]. Referenced paper is linked.
         | 
         | [0] http://kmdouglass.github.io/posts/summary-out-of-the-tar-
         | pit...
        
       | the_duke wrote:
       | So basically an actor system with relations between actors,
       | reactivity and automatic persistence.
       | 
       | Very interesting concept!
       | 
       | Although I do wonder if this couldn't be implemented as a library
       | for an existing language.
       | 
       | Doesn't seem like it is actively developed though, the compiler
       | repo hasn't seen updates since November and the runtime repo
       | since 2018.
        
         | dustingetz wrote:
         | temporal.io = durable actors for microservices workflows
        
           | sitkack wrote:
           | See also https://www.fluvio.io/
        
           | samuell wrote:
           | Trying to understand what this is. A kind of Erlang runtime
           | for Go/Java/PHP/TS?
        
             | acjohnson55 wrote:
             | I'd describe it as a system that let's you write software
             | without regard for the lifecycle of the OS and hardware
             | running it. The Temporal runtime takes care of rehydrating
             | your program in the correct state if the underlying
             | computer is killed. This eliminates a tremendous amount of
             | incidental complexity most traditional monolithic and
             | distributed architectures.
        
             | samuell wrote:
             | Ok, found a good explanation now:
             | https://news.ycombinator.com/item?id=30368838
        
             | Myrmornis wrote:
             | The "Concepts" section is a good intro:
             | https://docs.temporal.io/temporal
        
         | runeks wrote:
         | > Although I do wonder if this couldn't be implemented as a
         | library for an existing language.
         | 
         | It definitely could. So could Elm, which -- nonetheless -- is
         | an interesting and useful language (bordering on DSL).
        
           | quickthrower2 wrote:
           | Elm is very interesting. Also the evolution of Elm from
           | something more resembling Reactive Extensions to the current,
           | more opinionated Elm-Architecture version.
           | 
           | Also there is an Elm-Architecture clone in almost every
           | language. You could also emulate it in React (probably using
           | top level state, prop drilling and following the same
           | patterns, typescript would help)
        
       | imachine1980_ wrote:
       | Where is the source?, this proyect is still
       | active(https://github.com/cell-lang) don't have activities in the
       | compiler the last 4 months
        
       | superb-owl wrote:
       | I too am disappointed by the lack of innovation around state
       | management in applications. But I don't think this solves the
       | problem.
       | 
       | A lot of developers think what we need is additional abstraction
       | on top of the way data is stored and retrieved, to remove all the
       | annoying CRUD boilerplate that goes into building an app. This
       | seems to make sense because devs think in terms of simple
       | examples like TODO lists.
       | 
       | But in a real production application with heavy scale, you need a
       | lot of low-level control over precisely how state is managed.
       | Tweaking a SQL query or table structure can be the difference
       | between minutes of latency and milliseconds.
       | 
       | I'm not sure what the path forward is here, but I hope smart
       | people keep thinking about it.
        
         | pphysch wrote:
         | > But in a real production application with heavy scale, you
         | need a lot of low-level control over precisely how state is
         | managed.
         | 
         | Very much this. "State is managed automatically!" can very
         | quickly become "this frequent operation is automatically doing
         | a huge amount of DB work which should actually be deferred
         | until later"
        
         | brundolf wrote:
         | We've also seen that sometimes working at a lower level can
         | actually make performance worse; there are cases where eg.
         | describing something abstractly to a smart compiler gives it
         | more opportunities to optimize
         | 
         | Personally I think a better way is "high-level with trapdoors",
         | where you can pierce the abstraction if you _really_ need to
         | spot-optimize but higher-level code is the norm
        
       | whereisceylon wrote:
       | This reminded me of the Ceylon language. So I created
       | https://news.ycombinator.com/item?id=31932085
        
       | kortex wrote:
       | It's frustrating that innovators are constantly having to justify
       | "why yet another". Folks should just be able to freely innovate
       | without fear of getting spammed with xkcd#927. You wanna make yet
       | another programming language, compiler, JSON-alternative,
       | container format, or trivial FTP+SVN killer, go for it! This is
       | how we innovate.
        
         | Scandiravian wrote:
         | Agreed! Even if the new thing doesn't reach mainstream adoption
         | it might still cause change in the mainstream choices - like
         | how redux was inspired by Elm
         | 
         | Secondly I think it's sad that someone building something will
         | be asked to justify their decision in terms of economics. If it
         | makes that person excited and happy to build a thing then I
         | don't think any further justification is needed
        
           | verdagon wrote:
           | In my experience, people believe that programming languages
           | are a solved space, and we should stick with what we have.
           | It's an unfortunate view.
           | 
           | Languages are actually very polarized today. I think there's
           | a lot of room for a mainstream language that could be safe,
           | fast, and most importantly, _easy._ Today 's languages are
           | generally two out of three.
           | 
           | Luckily, a lot of languages are exploring that space!
           | 
           | * Vale is blending generational references with regions, to
           | have memory-safe single ownership without garbage collection
           | or a borrow checker. [0]
           | 
           | * Cone is adding a borrow checker on top of GC, RC, single
           | ownership, and even custom user allocators. [1]
           | 
           | * Lobster found a way to add borrow-checker-like static
           | analysis to reference counting. [2]
           | 
           | * HVM is using borrowing and cloning under the hood to make
           | pure functional programming _ridiculously fast._ [3]
           | 
           | * Ante is using lifetime inference and algebraic effects to
           | make programs faster and more flexible. [4]
           | 
           | * D is adding a borrow checker! [5]
           | 
           | [0] https://vale.dev/
           | 
           | [1] https://cone.jondgoodwin.com/
           | 
           | [2] https://www.strlen.com/lobster/
           | 
           | [3] https://github.com/Kindelia/HVM
           | 
           | [4] https://antelang.org/
           | 
           | [5] https://dlang.org/blog/2022/06/21/dip1000-memory-safety-
           | in-a...
        
             | avgcorrection wrote:
             | Languages are not that polarized. Most languages are in
             | fact compromises, design-wise, rather than very principled
             | (polarized). Rust[1] and ATS are the only no-compromise
             | newish (this century) languages that are very principled.
             | (EDIT: in the high-level with low-level control category.)
             | 
             | Being supposedly easier is also easier (design-wise) than
             | being principled, since you are able to compromise on
             | whatever dimension (like e.g. memory safety) as long as you
             | make things just a bit easier than the competition.[2] A
             | language like Rust, on the other hand, has to (1) make Safe
             | Rust memory safe and (2) make make it possible to create
             | Safe Rust APIs using Unsafe Rust.
             | 
             | Polarized design is the road less travelled.
             | 
             | [1] All your examples mention "borrow checker"...
             | 
             | [2] For propaganda purposes, a subjective criteria like
             | "easier to use" (than e.g. Rust, if that is applicable) is
             | better than a technical criteria like being memory safe.
        
         | goodpoint wrote:
         | > innovators are constantly having to justify ... This is how
         | we innovate
         | 
         | Quite the opposite.
         | 
         | Having to explain the benefits of an idea do not thwart
         | innovation - if anything it promotes it.
         | 
         | The software industry is littered with novelties that have
         | little innovative value other than being the new shiny thing
         | that people want to put on their CV.
         | 
         | Churn is at a historical high.
         | 
         | Providing solid reasons for adopting new technology is a breath
         | of fresh air.
        
         | pavon wrote:
         | I don't see this as a problem. If someone is creating something
         | new they have a reason, something that is motivating them.
         | Explaining these reasons lets others know if the project is
         | something that interests them or not. This is especially
         | important for collaborative projects to attract people whose
         | goals meet your own and who can contribute additional ideas
         | that you wouldn't have thought of without being a distraction
         | because they are trying to pull the project in different
         | direction than you had in mind. It is also important to attract
         | users if that is something you want.
         | 
         | Its not justification, it is just communication.
        
         | thejammahimself wrote:
         | I think the reason for the justification is because in a field
         | like programming where we have so many different languages, if
         | there are any newcomers you'd want to know what sort of gap
         | they have found which existing languages do not fill.
         | 
         | As others have pointed out, there's a difference between
         | creating something just for the experience of it, and creating
         | something because no other similar solutions exist. This
         | project seems to fit in the latter category hence why a
         | justification has been offered.
        
         | culturedsystems wrote:
         | When people write "why yet another", they usually mean "why
         | this one specifically". And that's the case here, where the
         | author lists what they think are the weaknesses of the state of
         | the art, and explains why they think their innovations help
         | with these problems. Innovation on its own isn't particularly
         | interesting - I want to know why the author is innovating.
        
           | keithalewis wrote:
           | My Bayesian priors want to know more about the author.
        
         | ModernMech wrote:
         | IMO it's important to distinguish between projects that are
         | following a well beaten path just to follow it (I.e. writing a
         | toy lisp), and projects that are intentionally trailblazing. If
         | you want to find innovation you want to follow the later
         | projects rather than the former.
        
         | omoikane wrote:
         | I find it valuable that they spelled out their motivations and
         | agenda for creating this language, which will help prospective
         | users to decide whether they need to take this language
         | seriously or not. This helps attract users, and arguably the
         | main value of any language is how well users can interoperate
         | with it.
         | 
         | Folks can freely create anything, but it might be a shame for
         | such efforts to go to something that only few people will use.
        
       | gscho wrote:
       | > Why yet another programming language?
       | 
       | 'Because I wanted to' is a sufficient reason. Create all the
       | programming languages you want and share it with the world!
        
         | bobajeff wrote:
         | Yeah, I plan on making at least 5 of them for one project. I
         | think more people/project should reach for making/using
         | different programming languages. Instead of trying to solve
         | every problem in the same language.
        
         | zzo38computer wrote:
         | It is a sufficient reason, but that does not mean that you
         | cannot also mention other reasons, and how it might be better
         | for some kinds of uses, etc.
        
         | new_stranger wrote:
         | I know some people are afraid of change and competition, but
         | I'm thrilled everytime someone shares their new language or
         | library. I don't have to learn or use them all, but it's great
         | to basically have unlimited research and approaches to skim on
         | github/gitlab/etc.. for any language and any problem.
        
           | abirch wrote:
           | Programming languages can be similar to bacterial DNA. Even
           | if the language never gains broad acceptance, parts of it may
           | be incorporated into other languages.
        
             | gscho wrote:
             | I like to think of it like music. For each Nirvana type
             | band there needed to be many Pixies and Melvins type bands
             | to influence them.
        
         | _greim_ wrote:
         | Agreed. I think a reason some would react negatively is every
         | new language decreases the ratio of things-I-know : things-I-
         | dont-know which feels threatening to those who are in a habit
         | of zero-sum thinking.
        
         | spicybright wrote:
         | I know it's a total pipe dream, but this is what makes me most
         | sad about lisp never being taken seriously.
         | 
         | It could have been common practice to create and pull in new
         | language constructs like what this is doing.
        
           | WalterBright wrote:
           | Languages that rely on the user creating their own language
           | constructs suffer from a balkanization of the language - each
           | team creates their own language, and cannot share code.
           | 
           | This is why D does not have a macro preprocessor.
        
             | spicybright wrote:
             | I agree it's much easier to make a mess, but I can see
             | doing it the right way being extremely powerful.
             | 
             | One (slightly contrived) example is javascript's different
             | (sub?) languages. JSX, await/async, typescript, pre-
             | processors, etc.
             | 
             | It would be best practice to pull in popular versions of
             | these things as opposed to rolling your own.
             | 
             | However, I also don't think there's much issue with some
             | custom languages as part of a normal codebase when used in
             | moderation.
             | 
             | There's not that much difference between using a
             | traditional API that requires function calls in the right
             | order, maybe some testing to ensure you're using it
             | correctly, etc.
             | 
             | With a "new" language you can put a lot of that as static-
             | typing style compile requirements. Essentially more guard
             | rails to using a library correctly, and an opportunity to
             | make a set of scoped primitives specific to what problem
             | you're trying to solve. Ruby on rails is the best example
             | of this sort of system.
             | 
             | Again though, I know it's a huge pipe dream, and for these
             | ideas to go forward will require a LOT of change in our
             | intuitions and methods of developing software. I'll never
             | stop dreaming though ;)
        
               | ModernMech wrote:
               | With great power comes great responsibility, and
               | unfortunately relying on everyone to be responsible
               | doesn't scale.
        
               | WalterBright wrote:
               | There's no doubt it is extremely powerful. But the result
               | is everyone invents their own DSL, which is inevitably
               | undocumented and nobody else wants to touch it.
               | 
               | > However, I also don't think there's much issue with
               | some custom languages as part of a normal codebase when
               | used in moderation.
               | 
               | Easy to say, but too many step over the line.
        
           | jjtheblunt wrote:
           | in some sense Lisp was taken seriously:
           | 
           | Go is pretty similar to a lovechild of C and Scheme, for
           | instance, Python and Ruby have many handy pragmatisms from
           | Lisp style development, and so on.
        
           | ilikehurdles wrote:
           | Clojure seems to be gaining more and more momentum,
           | unfortunately just as I changed jobs away from a clojure
           | shop.
        
             | ithrow wrote:
             | How is it gaining momentum? "Who's hiring" posts have zero
             | clojure positions and that is a place where you might
             | expect to see such positions.
        
               | spicybright wrote:
               | While a fair assumption, we're only seeing a small subset
               | of software jobs here: mostly SV-style big tech. And with
               | that a set of specific technologies that have become
               | popular in the space.
               | 
               | A lot of smaller shops use more unique technologies for
               | different fields that I'm sure are using clojure for some
               | things.
               | 
               | Frankly, I'm just guessing, and would love to see some
               | hard data on this stuff.
        
       ___________________________________________________________________
       (page generated 2022-06-30 23:00 UTC)