
Ask HN: What are you using new programming languages for? - go_prodev
Hi HN,<p>It seems like a new language is being announced on HN every month or so.<p>I&#x27;m curious why there is a need for new programming languages, and what purposes they serve that existing languages aren&#x27;t well suited for.  Do you have any experience you can share?<p>Companies I have worked for will always use technologies that have a large ecosystem and are battle hardened.  What is driving the need for new languages, and who are the early adopters?
======
frompdx
> I'm curious why there is a need for new programming language

In a way, this question is answered by your follow up question.

> and what purposes they serve that existing languages aren't well suited for

New languages are made because existing languages are not well suited for a
given purpose. But, I don't think there needs to be a reason at all. The
exercise of creating one is its own motivation and reward.

For me, I find a lot of the very popular languages to be mundane and boring to
work with at best, and painful at worst. I would much prefer to work with
Clojure instead of Java. Likewise, I would rather work with ClojureScript over
JavaScript.

If I still want to work with a Lisp but I need something with a smaller
footprint than Clojure I can reach for Janet or Guile Scheme. Currently I am
using Janet for writing command line tools and I am exploring building webapps
with Janet as well. I like the fact that it can produce statically linked
binaries for the major operating systems and it is possible to port to others
as well.

Although all of those are new languages they are all based on a very old
concept (as far as computers are concerned), Lisp. Forth is another old
concept that probably seems new simply because it isn't popular. However, I
would rather use Forth than C or C++ to program my Arduino because it is
interactive and I can program directly on the microprocessor.

Overall, I think a lot of companies and individuals choose what is popular
because it is viewed as a safe choice. I prefer to explore the fringes because
it is more interesting.

~~~
scared2
I don't agree. Mostly new languages are developed for the sake of creating a
"new" language.

------
mamcx
> I'm curious why there is a need for new programming languages

Exist a kind of self-defeating idea where "programming languages", "shell",
"os", "editor" are in this "special" category of software that "must not be
changed".

Is pretty weird. Specially from programmers: Why are we building new software?
Anything we do, somebody have done before.

Somehow, is important to make the connection that our tools are alike _any
other software_ , and we are like _any other user_.

If the regular user want/need/deserve new software, so as we.

\---

> I'm curious why there is a need for new programming languages

Because all of them sucks. For different reasons. Some have nulls, some have
bad errors, some are crash-prone, some have dangling else, some are too
obfuscate, some are too complex, or too simple, or slow, or take too much
resources, or bad for imperative code, or bad for functional code, or bad for
concurrency, or parallelism, or data transformation, or querying, or manage
decencies, or scale....

Some are bad at many things at once ( _cough_ c _cough_ ). Few are good at
many things. None, so far, is good at all.

Maybe is like the "theory of everything" and not exist "the perfect" lang. If
that is the case, then we must chose "the best tool for the job".

Some langs, are picked NOT because are "the best tool for the _job_ ", but
because are "the best tool for the _job recruiters_ " or something like that.

Despite that langs cause millions of dollars of losses.

You know how in certain niches exist that incredible, pathetic, terrible,
software that also is the number 1?

And that thing is the bedrock of a billon dolar industry?

And you think, how is possible that humans allow them to use THAT?

And you think, how is possible that industries with $$$$$ "just not use
something better?"

Yep?

That is our industry.

~~~
poisonborz
> Anything we do, somebody have done before.

I strongly disapprove of this thinking, it's simply a fallacy. There are
constantly new problems created by technical advances, new tools and the
evolving nature of everyday life and software.

Basic algorithmic solutions and libs like http in a specific language were
"always there" and they're being redone forever. Things like controlling your
light strip from your Switch are not, and there is always a need for such.

~~~
mamcx
I fail to make it more obvious but this was the idea:

>Exist a kind of self-defeating idea .. (programing langs)

So

> Is pretty weird. Specially from programmers: Why are we building new
> software (other than programming langs)? Anything we do, "somebody have done
> before" (I must have put this in quotes!).

------
hootbootscoot
Crystal lang. Web transported applications, as it was apparently intended.
(HTTP requests being part of the std-lib and all...)

The syntax is like Ruby, but it's statically typed and compiled and the
executable uses very little RAM.

It appears to be the sweet-spot (a GC'ed but typed/compiled lang) as I've yet
to achieve high productivity on web apps with C or C++

FWIW it's worth, I gave Rust and Rocket a whirl. It seems nice. I didn't quite
understand the borrow-checker... I'm familiar with RAII, ARC, pool-based
approaches, trying to implement a malloc myself once (very badly) on an mcu...
didn't get Rust yet...

One occasionally has to deal with Go, and it's getting rather widespread.
Luckily, it's rather easy to transpose concepts to from your general algol
family style stuff. I wasn't excited by Go, but it's not been frustrating
either, and there's a LOT of stuff out there that has been getting it's
"generational rewrite" in Go during the last few years... (wkhtmltopdf will be
rewritten in trending languages every decade or so, right?)

------
captn3m0
Crystal, to power simple cli applications that are easy to write (it is
basically Ruby), fast (it is statically typed, and compiled), and easy to
distribute (static binaries are supported, and Windows builds are possible.

~~~
EdwinLarkin
Windows builds are possible? Can you tell me more?

I skipped Crystal because I absolutely need windows binaries.

~~~
captn3m0
You can't cross-compile yet, and it depends on WSL. I think proper windows
support is one of the v1 (or soon after v1) targets.

------
lanecwagner
Go and Rust are two of my favorite examples. Go has a focus on minimalism and
concurrency that makes backend engineering enjoyable. Rust is C without the
memory problems and a decent package manager. Cool stuff for sure. I've
recently built a Go-in-the-browser course for those who want to dip their toes
in [https://qvault.io/go-mastery/](https://qvault.io/go-mastery/)

~~~
hevelvarik
It looks good, I’m getting my feet wet but find the modules and importing my
own code and correct project set up rather obscure, but the code writing is
pretty straight forward. Looks like your course speaks to the latter but not
the former: any advice about where to read up on the former?

~~~
dysoco
I would say read this:
[https://golang.org/doc/code.html](https://golang.org/doc/code.html)

------
satvikpendem
Nim

To practice coding interview algorithms and data structures problems. It is
basically like Python but statically typed and compiled.

~~~
mlthoughts2018
If you enjoy Nim, I encourage you to try Cython, which is more mature and
enables much more practical applicability in most job settings. It’s virtually
never worthwhile for an employer to switch to supporting Nim if they already
use Python and can just use Cython for targeted use of static typing in the
small set of cases where it’s useful.

~~~
satvikpendem
I've tried it but I like the other features in Nim as well such as algebraic
data types. As well, Cython isn't usually available in online coding
environments while Nim is, at least sometimes.

~~~
zinclozenge
Are algebraic data types supported? Can you do compiler checked exhaustive
pattern matching on a sum type?

~~~
beagle3
Yes, they are supported.

There are a few libraries for that, e.g. Patty, which IIRC supports exhaustive
pattern matching.

Nim macros are as-powerful-as-Lisp-sans-reader-macros, and usually easier to
write and use. A lot of things that require language revisions in most
languages (e.g. async/await and pattern matching in Python/C#/JavaScript) are
user-level constructs in Nim.

------
orev
Just because something is announced doesn’t mean that everyone is using it, or
even that it should be used. Many projects are created by people interested in
the idea of writing languages, so they go off and do it then tell some people.
They may be trying to solve a specific problem or just exploring some ideas,
and other people might also join in to go along for the ride. It does not mean
that they solved all programming language problems, or that it should be used
as a general purpose language, and especially should not be pushed into
production.

Don’t mistake the number of announcements with people actually using these
things. Many will last only a short time and then go away.

There are many other considerations you need to account for before you use a
language for real work. The people constantly jumping from one fad to the next
are not the ones you should be concerned with following.

------
lambdatronics
Learning Julia for doing scientific machine learning & numerical optimization.
Faster to run than other interactive languages like Python or IDL, faster to
write/iterate than compiled languages C/Fortran.

------
muzani
At the time I started using Kotlin, I was a freelancer. My selling point was
that I got things done 4x faster and at similar quality, but charged 2x the
hourly rate as your average full-time programmer. It was a win-win for both me
and my clients, but I had to keep doing better.

There were two bottlenecks to coding better. One was how much code I could
"keep in my head". That translated pretty quickly to how much code I could
keep within one laptop screen, or rather shortening method sizes to be no
longer than my monitor screen.

The other bottleneck was Java boilerplate. We spent a _lot_ of time fixing
this. With Android, there were bulky solutions like ActionBarSherlock. To put
it one way, it was like writing articles in HTML, and we'd find Markdown-style
hacks.

Default code would be for example, CodeView X = (CodeView)
findElementById(R.id.codeview), when it could just be CodeView X = codeview.
Multiply this by every single element on the page. Imagine doing enterprise
forms for a city council (which was my job at the time). I was happy to spend
non-billed time looking for solutions to this so that I can do better during
by billed hours.

It was made worse that Android advancements drastically increased the length
of code, with new things like RecyclerView/Adapters and Fragments.

Kotlin solved all these problems and very elegantly. It was simply part of the
code, no special hacks needed. It did everything you'd need from Java. And
there were things like functional programming and null safety which was a nice
bonus.

Similar reasoning applies to Swift.

------
filleduchaos
Crystal has completely taken over my personal work. I have three projects in
the pipeline (none public yet) that are mostly written in it: a 2D pixel art
adventure game (desktop), a heavily scriptable email client (web service), and
a sheet music reader/manager (largely a hardware project as well, targets a
raspi hooked up to an e-paper display). The language has been such a breeze to
use for all three.

------
verdverm
Cuelang is an example. It's for configuration where we really need a dedicated
and common language, because Yaml is being abused at this point.

Golang is an interesting example as a language which decided to be minimal,
opinionated, leave out fancy language features. It was built to be "in the
service of software engineering."

Largely, the world evolves, tech evolves, and so will out languages for
translation between the two.

------
thelastinuit
Rust. Embedded. Firmware from Scratch. Satellites/cubesat/space related.

~~~
bmitc
How did you approach this in your workspace and successfully steer people away
from C and C++?

I have successfully avoided C and C++ my entire career, for good reasons, but
I am getting more and more interested in doing more true embedded system type
of work. Rust is certainly the leading candidate for me.

------
berkas1
Hi, right now I'm learning Go (to write an access control system for our
makerspace). For me this is a pretty new language but currently at the point
where I see quite large community and available libraries (wait, it is called
a module, isn't it?).

Why? I love C language (static typing, you can shoot yourself in a leg == you
can do almost anything, etc..), but C is not suited to write this kind of
application. I also like PHP - large community, libraries, large OS systems
written in it... But I miss some C features and getting bored by having dozens
of dependencies for a simple project. Python - is slow (yes, can be tuned
somehow, but brings more work to do) and I do not like the syntax and I miss
brackets. For me, Go seems like a way to go from now on.

So, to sum it up - for me a new language is a way to solve some set of
problems much easier (and sometimes more efficient and/or secure) than with an
existing language. I wouldn't be happy if I had to write anything larger than
hello world in assembly :)

~~~
rhn_mk1
> you can shoot yourself in a leg == you can do almost anything

That doesn't really follow. A language with plenty of undefined behaviour =>
shooting yourself in a leg. A language with plenty of defined behaviour => you
can do almost anything. C falls somewhere in between.

------
bmitc
To learn, have some fun, and think differently and more optimally. Most of the
older and more mainstream programming languages like Python, Java, C, C++,
etc. are simply uninspired. They have very mainstream and convoluted ways of
thinking that bind you in ways that I personally can't take.

When I program, I try and think of the problem and possible solutions in the
same way that I would if working with a human colleague. That is, I design
systems in a human way. I try to program in such a way that maps to how I
would explain the domain to someone else and not how the computer thinks of
it.

Thus, I primarily think in terms of data, transformations on that data,
interactivity, and concurrent or parallel operations. This approach almost
chooses languages for me. My primary languages I am learning and using at home
right now are F#, Racket, and Elixir. These are new (-ish) languages with new
ideas based upon the strong foundation of old languages that had revolutionary
ideas, so it's not surprising I landed on these, for me personally. Also,
although each one is a complex language, they each have a simple core, which
is another plus. Then there are visual languages like TouchDesigner and
LabVIEW.

However, the curse is finding a place that uses the road less traveled because
it requires the company and its employees to have made the non-standard choice
and to consider the tools as important as whatever else they're working on.
There are few places that use newer languages, but I am trying to become more
agressive in just using them at my work. If they solve problems in an
efficient way, you shouldn't necessarily need to ask for permission. People
can be trained. Nobody asks for permission when they use Python or C or
whatever else. They use it because that's all they know. The other way is to
merge your personal interests with work by creating your own company, but that
is an obvious high hurdle.

When using new languages, there is the problem of ecosystem, particularly in
libraries. However, I am of the opinion that this isn't as big of a problem as
often reported. It's a problem but not the no-go problem it is usually
presented as.

------
megameter
Programming languages, being engineered constructs, take a multitude of
shapes.

It's not different in that respect from any other popular mode of software
exploration like graphics programming or small webapps.

The more relevant question is with what makes a language "industry ready", and
the answer there is mostly libraries, tooling and positioning. C is crude for
many tasks, but its conjoinment with Unix gave it a leg up. JavaScript is the
same way with the Web. More recently we have had some waves of corporate-
backed languages in Java, C#, Swift, and Go.

New languages fall out of just about anything that has a data structure with
control flow constructs, though.

------
quaintdev
Dart

For building rapid GUI applications in Flutter

~~~
ArtWomb
Noticed the other day Canonical and Google teaming up:

[https://ubuntu.com/blog/canonical-enables-linux-desktop-
app-...](https://ubuntu.com/blog/canonical-enables-linux-desktop-app-support-
with-flutter)

I have many cli tools that could use front ends ;)

------
JulianWasTaken
Lean [1] [2] [3]

To try and revitalize my math life a bit... There are some things I quite
miss, and learning Lean was my idea to force myself to get back in the swing
of things.

[1]: [https://leanprover-community.github.io/](https://leanprover-
community.github.io/)

[2]:
[https://wwwf.imperial.ac.uk/~buzzard/xena/natural_number_gam...](https://wwwf.imperial.ac.uk/~buzzard/xena/natural_number_game/)

[3]: [https://www.youtube.com/watch?v=Dp-
mQ3HxgDE](https://www.youtube.com/watch?v=Dp-mQ3HxgDE)

------
zeroc8
We are using Go for all of our backend services and business logic. We needed
something that is statically compiled, easiliy deployable and sufficiently
fast.

------
ibains
We’re using Go for writing a kubernetes operator to deploy our product.

Rest of our stack is in Scala - primarily since it is very good for writing
compilers - we have a few in our product.

We’re a data engineering product - think Spark IDE.

