5 свежих языков программирования
Причин для создания нового языка программирования может быть множество: банальная скука, желание изменить традиционный подход, доработать существующий язык, предложить свой личный взгляд на «правильное» программирование. Однако до вершин и большой популярности добираются лишь те, что реально упрощают жизнь программиста и увеличивают его производительность с помощью синтаксиса или прилагаемых инструментов. Так, например, 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)