34
\$\begingroup\$

We've decided to revive the Language of the Month event. We've also decided to start a new post for nominations. (You can see the old nominations post here.) So let's get to nominating!

Procedure

A language can be nominated for Language of the Month by posting an answer to this thread. We all vote on the languages we'd like to see featured. At the beginning of each month, the nomination with the highest net vote total is chosen as the Language of the Month. (This nomination process was modeled after Lit.SE's reading challenges.)

The person who nominated the language will post a new question on meta, declaring that language to be Language of the Month, with an answer to collect all related golf submissions, tips, and challenges during the month. (See the previous posts, linked below, for a good format to follow.)

  • If the person who nominated the language is not able to make the post by the 3rd of the month, anyone else can make the post.
  • If there is a tie in the voting, the tied language that was nominated earlier will be Language of the Month.

The chosen language will have a chatroom created for it, if it doesn't already have one. During the month, everyone who wants to participate will:

  • Learn the basics of the language (if they don't know it already)
  • Answer challenges in it (new ones or old ones, doesn't matter)
  • Try to outgolf each other's answers
  • Discuss all of the above in the language's chatroom

Past Languages of the Month will be added to a list at the bottom of this post. Their nomination posts should be deleted (preferably by the person who made the post) to reduce clutter.

What sort of languages should I nominate?

We hope to see a wide variety! But not every language is a good choice for Language of the Month. Some things to consider before nominating, and when voting on nominations:

  • It should be somewhat general-purpose and possible to program in. Bubblegum isn't a good choice, because it's only capable of solving a small subset of challenges. Neither is Malbolge a good choice, because it's prohibitively hard to create a working program in it at all.
  • It should not be one of our most commonly used languages on PPCG. The point of this event is to bring attention to lesser-known languages. We don't need to bring more attention to Python or JavaScript. Suggested rule of thumb: if there are fewer than 10 PPCG users who regularly golf in this language, it's a good nomination.*
  • It should have a freely available implementation. This can be TIO, some other online source, or a downloadable interpreter/compiler.
  • It should be fairly stable. Most languages change over time, even well-established ones, so this is a subjective criterion. But if a language is likely to experience significant modifications in the next month, don't nominate it yet.
  • It can be either esoteric or practical. Of course we like our esolangs around here, but it's also cool to study lesser-known "real" languages.

* Better rules of thumb are welcome. Here are a couple SEDE queries for estimating how commonly a language is used: a strict version (useful for languages with short names that could show up as false positives within other languages' names or URLs) and and a loose version (useful for languages whose headers frequently mention a flavor or version number with the name).

What should I include in a nomination post?

At a minimum, your nomination must include:

  • The language's name.
  • A link to a free implementation (or more than one, if available).
  • A short description of the language, for those unfamiliar with it.
  • Why you think this would make a good Language of the Month.

Ideally, your nomination should also include:

  • Some links to documentation and other good resources for learning the language.
  • A link to the language's question, if it has one.

You can also include ideas for one or more language-specific challenges that will provide an interesting experience beyond answering regular challenges in this language. These can be , , , ... you name it. Good language-specific challenges will focus on some aspect of the language that makes it unique, such as an ability or a weakness that most other languages don't have.

Feel free to re-nominate a language that was nominated last time but never won. You can copy over the old nomination post if you like. Languages that have previously been Language of the Month are not eligible.


List of past and current Languages of the Month

2018

2020

2021

2022

Don't forget to keep nominating and voting on languages for next month!

\$\endgroup\$
2
  • 1
    \$\begingroup\$ By the way, the top few languages have been downvoted, so make sure you look at the upvotes. \$\endgroup\$
    – user
    Dec 1, 2020 at 17:41
  • 3
    \$\begingroup\$ @user the language is chosen by net vote score, not by number of upvotes. \$\endgroup\$
    – pxeger
    Sep 1, 2021 at 12:58

6 Answers 6

10
\$\begingroup\$

J-uby

In my search for peculiar and interesting golfing related languages, I came across a particularly cool fusion of J's modifiers and ruby's metaprogramming called J-uby.

Why J-uby?

  • If you like Ruby, J-uby is effectively a tacit-enabled superset of it.
  • J-uby has complex, highly varied methods of compositional function programming through its operators that apply on functions and arrays.
  • It is relatively unused outside of its creator, Cyoce, so there are many simple questions to practice on.
  • There are many new tricks to be discovered in J-uby due to its unorthodox approach to tacit programming, which is also made even more wonky by ruby's evaluation order.

Resources

In June 2021, Cyoce posted a new answer in J-uby, where I asked them about a tutorial beyond the readme on the github page: Link

@Razetime The Readme is it. I might make a better tutorial some time if people are interested – Cyoce

So if you're interested in learning this fun looking ruby contraption as well, do vote for J-uby!

\$\endgroup\$
8
\$\begingroup\$

Knight

Knight is a new programming language created back in April 2021 by sampersand.

Interpreters

There is a list of interpreters on the official GitHub page. It has been ported to many languages, even itself.

Here is an interpreter on TIO, a patch to a previous commit to c/golf which updates and fixes some conformance issues. (Note that it memory leaks like crazy and segfaults on malformed inputs).

However, the "preferred" interpreter is c/ast, which is the fastest, most up-to-date interpreter and has actual error checking.

Description

Knight is a Polish notation language (meaning x + y is + x y, and everything has fixed arity) which is relatively simple. It has some useful string manipulation tools, eval, shell commands, and type coercion.

Reasoning

  • It is a new language which deserves some attention.
  • It is simple and very easy to pick up.
  • It is surprisingly golfable despite not being a dedicated golfing language.
  • Knight has some qualities/quirks that make it very unique to golf.
    • Polish notation
    • Tokens are separated by their character class. So, for example, WX is WX, while Wx is W x. This makes ordering very important.
    • Only the first statement is executed, everything must be chained (typically using ;).

I have posted some solutions here already.

Resources:

\$\endgroup\$
2
  • \$\begingroup\$ Food for thought: maybe we have a golfing challenge where people golf knight? \$\endgroup\$
    – Sampersand
    Jun 9, 2021 at 20:09
  • \$\begingroup\$ Usually they don't do that here, what some people like to do is create a bounty for the first programs in that language \$\endgroup\$
    – EasyasPi
    Jun 9, 2021 at 22:59
8
\$\begingroup\$

Piet

Piet is a classic esolang that dates back to 2001 (according to Esolangs article), which is unique in that it operates on an image rather than source code.

But "source code being an image" is only part of its uniqueness. The instruction pointer moves around in the unit of single-colored areas, as opposed to individual cells. Also, the commands execute when the IP crosses the border, and the relative difference between two colors defines the command. Finally, pushing a large number can be done in one step but it requires an area of that many cells, which gives a metagolfing potential for pushing number constants.

Why Piet?

  • Being a language defined before CGSE was even created, it has a long history on CGSE, though it hasn't been seriously picked up.
  • But a recent LYAL event for Piet was pretty successful, leading to a bit of better recognition and a small increase in activity on the main site.
  • Piet has unique semantics in many ways, and I believe it is a must-try for esolangers.
  • It was somewhat painful to play with Piet until recently, but I (Bubbler) am trying to change that with a new web-based Piet editor/interpreter. Currently its basic features are complete and mostly usable. If you find bugs or have feature requests, please visit the Piet chat room and leave a message.

Caveats

  • The scoring method has been under a hot debate for a long period of time. However, following the current consensus, all Piet programs (as images) must be scored by the number of bytes of the image. Thankfully due to DLosc, we can now use an ascii-based encoding of Piet programs, which guarantees that bytes scoring in the encoding is at least as good as "codel scoring" (1 per pixel).

Resources

\$\endgroup\$
7
\$\begingroup\$

Nim

The Nim programming language is a ergonomic general purpose programming language.

Features good for golfing

  • Concise string handling
  • First class functions, called "procedural types"
  • User-defined iterators
  • Metaprogramming of all sorts, everything from text-substitution, to macros that operate on its AST (Introduction to metaprogramming in Nim)
  • Great C/C++/JS interop
  • Large stdlib
  • Usually quick compile/run time (good for challenges)

Features bad for golfing

  • Whitespace-oriented syntax, much like Python
  • Static typing
  • Long-ish keywords

It has a very active community. (Forum, subreddit).

Resources

A quick intro, covering only the most basic constructs:

For more extensive reading:

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Nim looks like a really neat language. afaik there's multiple GC's to fit your purposes, right? \$\endgroup\$
    – user
    Sep 12, 2021 at 18:34
  • \$\begingroup\$ Yes, that is true. See nim-lang.github.io/Nim/gc. \$\endgroup\$
    – Pyautogui
    Sep 12, 2021 at 23:39
  • 2
    \$\begingroup\$ Downvotes: I would appreciate a reason. Thanks. \$\endgroup\$
    – Pyautogui
    Feb 19 at 22:06
5
\$\begingroup\$

Arn

Arn is a rather new J-like language I designed back in mid-August (2020). It's designed to beat out its inspiration and also be competitive against other, older golfing languages.

Reasons

  • it does well at what’s it meant to, consistently beating J and APL. I’ve also seen it do better than languages such as Vyxal.
  • The tutorial has been finished, making it easy to start.
  • Done with a major rewrite. TLDR new features, adding new ones easier
  • Has entered a semi stable state. I have a feeling a few larger changes are due in the future, but for now I’ll probably just be adding a few new symbols every once in a while.
  • There are very few (if any, other than me) people who use this language (as far as I'm aware) so this will help spread the language around.

Caveats

  • Does not currently have a chatroom, as I don't believe there are enough people to warrant one.
  • The online version is out of date and has some bugs.
  • I believe there’s a bug in the lexer that shows when using symbols that take multiple expressions on the same side, which I’m looking into.

Resources

\$\endgroup\$
1
\$\begingroup\$

J

J is a high-level, general-purpose programming language that is particularly suited to the mathematical, statistical, and logical analysis of data. It is a powerful tool for developing algorithms and exploring problems that are not already well understood.

(copied from the J site because I'm lazy)

Resources

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .