Was it Alexander Pope who said, “Hope springs forever in human breasts”? Pope was a poet, not a hacker, but I believe he will understand the anticipation of discovering a new programming language. He would know that software developers always hope for that this languagewith its unique combination of characters in Unicode, it will finally solve all our problems, making coding easy with just a few clicks.
Pope would certainly understand the desire for a new syntax so intuitive that we just have to imagine an answer and see it translated into logical rules that are wonderful, complex and above all correct. He would appreciate the longing in our fingers to spin a new code that looks seamless and elegant like a triple axel, three and a half inwards in a pike position or a giant slalom at the Olympics.
However, most modern languages are not designed to whimsy or demonstrate our coding skills. They are made in response to a common problem that the creators want to solve. While most developers will continue to do our daily coding in one or more older, more established languages, we are always looking for new tools to help us solve our coding problems. We can see this trend, especially in the rise of domain-specific languages or DSL. These languages are compact and focused. They are not intended for general use. But some could gain a special place in your toolbox for just that reason.
Here are 11 newer languages that have found their niche. Some are DSL designed to do one thing and do it well. Others seem to be trying to save the world. Even if they are not what you need right now, they all have something to learn about making our computers do what they do, but Better.
When you marry Clojure with React, this is what you get: a system that combines all the capabilities of jet fronts with the solid, functional power of Clojure. At best, Reactive Clojure allows you to display a complex collection of components at the front end and arrange them along with features. The reactive frame fills in the details and ensures the smooth flow of application data between your components and the database. Clojure carries the functional basis to make possible even unusual cases of use – and debugging.
Is this coincidence made in heaven? Time will tell. Reactive Clojure is a good option for writing the glue code that holds the front components together. Its multi-threaded model is a natural match for complex and reactive control panels that take into account multiple tasks simultaneously.
One of the more ironic games that programmers play is directing most of our work to configuration files. These files, often encoded in JSON, YAML or even XML, are a good encoding idea that metastasizes into a complex ritual. In some cases, you don’t even need to write actual code; just endlessly scroll through the various configuration files to do what you need.
Then it makes sense that we have nickel: programming language for creating configuration files. Nickel is like a template with built-in logic that you can use to create configuration files that are not static. The parameter can be one value during the week and different on weekends. When running, Nickel creates a new configuration file that meets all the parameters it has received.
The nickel structure is largely functional and a type check is available if it happens to help. A big topic is “correctness”, because Nickel’s well-written piece of code largely ensures that the output will follow both the syntactic rules and all the other rules that need to be applied. Nickel’s compiler allows you to write contracts, then checks to see if they work. Of course, there is something funny about writing code to create configuration files that then manages your code. But this is a very practical solution for modern architectures.
CobraThe creators wanted a language that opened up machine learning to engineers, scientists and other less professional programmers. The result is what they call machine learning visual language. The Kobra editor composes code-like slide-and-drop sequences that are common built-in routine programs for statistical analysis and machine learning. The process feels like an R with data frames made up of tabular data and a collection of graphical display functions for creating dashboards and documents.
One of the most useful features of the cloud is the ability to start and crash servers to handle data leaps. It once took weeks for the data center’s hardware team to request, install, test, and configure a machine. Now the cloud allows you to do all this in minutes or even seconds.
Many devops teams have started writing code for different APIs supported by different clouds. Microsoft has decided to go a little further and create a simplified language for starting machines in Azure, as part of its infrastructure philosophy as code.
The language called Biceps, offers an effective, declarative format for writing most of the various bits that a developer may want to convert to a new copy. Some basic type safety precautions can help prevent errors, and there is an editor who knows the syntax available in VS Code. The language itself is designed for higher-order thinking about infrastructure, with a highly declarative structure that allows you to include instructions in random order, then let Azure’s resource manager optimize performance.
A friend claims that his only requirement for choosing a bank is to ensure that the bank’s accounting software uses whole numbers to count pennies, not floating point numbers for parts of a dollar. The dangers of floating point errors are well known and too great. How many mistakes have been caused by throwing numbers without much attention?
Frink is a unit recognition language designed specifically for this problem. Each variable in Frink not only contains a number, but also an indication of the unit of measurement, be it tons, watts, feet or meters. Converting units is easy thanks to Frink configuration file. Frink’s main mechanism also uses numbers with random accuracy to reduce rounding problems. It’s like type checking, but for digital units.
Sound synthesis may seem like a narrow focus, but it’s very useful for game development, virtual reality, and any application that relies on good sound quality. Enter Fausta domain – specific language that gets its name from the amalgam of functional audio stream. The structure of Faust is purely functional and all its functions form a pipeline for sound processing. Its rear end breaks the input sound into a numerical representation, and the code itself is a set of functions that can be composed or combined in the end. As an example, you can create an echo or reverb by splitting the source code and entering a delay. Faust code is translated into C ++, C, LLVM bit code, WebAssembly, Rust and several other languages, so you can use it with almost any project.
Melrose and Glycol
Anyone who writes code knows how a programmer will create a band: instead of running an ad to find a drummer and then interviewing anyone who responds, just write some code to clarify the rhythms of a drum machine. Once this is done, you can also replace all other members of the group with routines. You can even build an entire symphony orchestra this way.
Melrose and glycol are two music programming languages designed for this style of music creation. Both allow you to create complex compositions with just a few keystrokes. Melrōse works at a high level around the standard octave of twelve tones, common in Western music. The notes are grouped in sequences and the software handles much of the skate’s work as transposition. The output goes to each MIDI-capable instrument and the code can also respond to input signals via the MIDI port, so the Melrōse code can be a member of the group.
Glicol is a Rust-based tool that performs many of the same tasks, but at a lower level. The code integrates with digital signal processing to offer a wide range of music options. The tool is designed to produce browser-ready sounds with its open source audio engine. The developer of Glicol says that the language has a “low entrance fee and high ceilings” to encourage collaboration with other people of all skill levels.
WebAssembly and Wase
Many developers will use WebAssembly without writing it directly, using compilers that convert higher-level languages to WebAssembly, which will run in browsers. There is also a move to create low-level languages that reveal much of the basic structure of WebAssembly in human-readable form. Wase is one such option offering C-like syntax with strong input.
WebAssembly is also used outside of web browsers as a common way to encode instructions with a stack machine similar to Java’s JVM. Redpandafor example, it is a streaming platform that offers developers the ability to change or modify data as it comes with code written in WebAssembly.
Technically Java is not a new language. In fact, one of the great things about Java is that its developers have done a great job of maintaining compatibility with older versions. It is usually quite easy to compile code that is 10 or even 20 years old for the latest JVMs. The code is not guaranteed to work, but it is still easier to compile than almost any other language. The Java team has a set of millions of integration tests and it shows.
I include Java 17 in this list because it is so modernized that it would be almost unrecognizable to a traveler in the 90’s. Java 17 has so many additional features and extensions that change the way we encode.
Some, such as the improved random number generator or the stricter floating-point mathematical semantics, tackle the challenge of writing very complex numeric code. Developers who write accounting systems may miss the use of integers to keep the number of cents, but those who deal with AI algorithms and complex linear algebra need a floating point.
Others, such as strong encapsulation and expanded semantics of the switch, bring a mixture of discipline and flexibility to the main language. In general, it’s easier than ever to write stronger, more secure, and more secure code thanks to all these improvements. It’s still basically Java, but the extras make a difference.
Copyright © 2022 IDG Communications, Inc.