5 свежих языков программирования

Официально они еще даже не появились.
15 мая 2017326451Илья Бубнов5600528

Причин для создания нового языка программирования может быть множество: банальная скука, желание изменить традиционный подход, доработать существующий язык, предложить свой личный взгляд на «правильное» программирование. Однако до вершин и большой популярности добираются лишь те, что реально упрощают жизнь программиста и увеличивают его производительность с помощью синтаксиса или прилагаемых инструментов. Так, например, Go или Rust не просто предложили разработчикам удобный язык, они создали экосистему, в которой хочется работать. Именно поэтому их рейтинги так стремительно растут.

Перед вами 5 совершенно новых языков программирования. У них пока нет таких мощных покровителей, как Google или Mozilla, но определенно есть душа, способная в перспективе привлечь и их, и вас.

Stanza

L. B. Stanza — язык, вот уже несколько лет разрабатываемый в стенах Беркли. На текущий момент свежая версия — 0.11.8.

Что хорошего: удобный синтаксис, схожий с Python или Java. Компиляция непосредственно в машинный код, что делает язык чрезвычайно производительным. Динамическая типизация и параллелизм. Гибкая архитектура, предполагающая мультметоды и перегрузки функций, обеспечивающие всю мощь функционального программирования.

Пример:

defn lazy-flatten (x) :
  generate :
     defn loop (x) :
        match(x) :
           (x:List) : do(loop, x)
           (x) : yield(x)
     loop(x)

val first-4 = take-n(4, lazy-flatten(`(a b (c (d e f (g) (h)) (i j)))))
println(first-4)

Nim

Nimrod, предшественник Nim, появился на свет еще в далеком 2004 году, компилятор в 2008, а первая официальная версия до сих пор не запущена. В январе этого года объявилась лишь ревизия 0.16.

Что хорошего: многие идеи Nim унаследованы от Python: чистый синтаксис, удобство, статическая типизация, собственная сборка мусора и управление памятью. Кроме того, здесь можно определять вручную операторы, использовать макросы и собирать приложения в автономные двоичные файлы без привязок.

Пример:

# Compute average line length
var
 sum = 0
 count = 0

for line in stdin.lines:
 sum += line.len
 count += 1

echo("Average line length: ",
    if count > 0: sum / count else: 0)

Crystal

Ruby-подобный язык Crystal придется по душе опытным рубистам, ведь им практически не придется тратить время на «вкатывание». Язык активно развивается последние 3 года, актуальная версия — 0.11.

Что хорошего: статическая типизация без указания типов переменных или аргументов метода. Привязка Си-кода с использованием биндингов. Оценка времени компиляции и генерации кода. Компиляция прямо в машинный язык. А еще русская версия официального сайта.

Пример:

# A very basic HTTP server
require "http/server"

server = HTTP::Server.new(8080) do |context|
 context.response.content_type = "text/plain"
 context.response.print "Hello world, got #{context.request.path}!"
end

puts "Listening on http://127.0.0.1:8080"
server.listen

Nit

Еще один наследник Python, разрабатываемый для обеспечения удобства взаимодействия с кодами на C/C++, Java и Objective-C. Самая свежая версия — 0.8.

Что хорошего: принцип KISS (keep it simple, stupid). Статическая типизация. Адаптация под разработку мобильных приложений: помимо подключения кодов на популярных языках, это возможность компилировать код для платформы Android.

Пример:

module fibonacci

redef class Int
# Calculate the self-th element of the fibonacci sequence.
fun fibonacci: Int
do
if self < 2 then return self
return (self-2).fibonacci + (self-1).fibonacci
end
end

Pony

Еще один набирающий популярность язык, не обретший пока официальное рождение, направленный на быстрое написание кода без мыслей о низкоуровневой составляющей. Последняя версия — 0.14.

Что хорошего: типобезопасность и, как одно из следствий, беспроблемная работа с памятью. Отсутствие дедлоков из-за отсутствия любых операций с блокировками. Исключения обрабатываются на семантическом уровне, что еще больше увеличивает безопасность выходного кода. AOT-компилятор. Возможность работы напрямую с Си-кодом.

Пример:

actor Doer
 be do1(n: U32) =>
   None

actor Main
 new create(env: Env) =>
   let a = Doer.create()
   let n: U32 = 5
   a.do1(n)