Написать пост

Редкие языки программирования: зачем они нужны и что на них пишут

Современные разработчики все чаще обращаются к редким языкам программирования, чтобы решить специфические задачи проекта. Разбираемся, как и когда их нужно использовать.

Редкие языки программирования: зачем они нужны и что на них пишут

Сейчас самые популярные языки программирования — JavaScript (с ним работают 25,2 млн разработчиков), Python (18,2 млн) и Java (17,7 млн). Но иногда проект требует специфичного кода, который невозможно написать с помощью топа популярных технологий. Ниже — подборка редких языков программирования, о которых многие девелоперы даже не слышали, но которые могут дать большой буст разработке.

COBOL

COBOL (Common Business Oriented Language) появился в 1959 году благодаря Грейс Хоппер (ее еще называют «бабушкой Кобола»). Изначально он был императивным и процедурным, а с 2002 года стал объектно-ориентированным. Распространился он по инициативе Минобороны США, а затем стал широко использоваться в финансовых вычислениях.

Редкие языки программирования: зачем они нужны и что на них пишут 1
«Использование Кобола калечит ум. Его преподавание, следовательно, должно рассматриваться как уголовное преступление» — Эдсгер Дейкстра

В какой-то степени Дейкстра прав — у Кобола действительно сложный и громоздкий синтаксис в отличие от менее «многословных» языков. Тем не менее он крут в задачах, с которыми не справляются другие технологии. Дело в том, что Кобол проводит десятичные вычисления не с плавающей, а с фиксированной точкой — не нужны сложные правила округления, как, например, на Java, и операции производятся быстрее. К тому же код будет одинаково работать на 8-битной и 64-битной архитектурах, поскольку COBOL может хранить переменные разных типов вне зависимости от компилятора и архитектуры системы.

Именно поэтому Кобол незаменим в денежных операциях. В США язык используют банки и система здравоохранения — транзакции через терминалы, торговля на бирже и зарплаты врачам проходят именно через него.

Вот пример «простенького» кода:

			IDENTIFICATION DIVISION.
PROGRAM-ID. IDSAMPLE.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
    DISPLAY 'HELLO WORLD'.
    STOP RUN.
		

Не спорим, выглядит не так элегантно, как Python, но зато все деньги и суммы будут подсчитаны верно, поскольку округлением чисел занимается не процессор и арифметико-логическое устройство, а человек.

Lua

Lua — это скриптовый язык программирования с исходным кодом на C. Ближе всего он к JavaScript с такой же прототипной моделью ООП, но LUA более мощный и гибкий. Массивы, структуры, множества и остальные составные пользовательские типы данных реализуются с помощью таблиц, а механизмы ООП — через метатаблицы.

Изначально язык разрабатывался для промышленности, скорее, для конкретной нефтяной компании Petrobras. Сейчас же его используют для разработки массового ПО, например, для графического интерфейса Adobe Lightroom, и игр. Так, с помощью Луа можно легко закодить поведение NPC (Non-playable characters) и других персонажей, под которых не придётся переписывать движок. Среди таких игр — Garry’s Mod, Roblox, Stalker и даже World of Warcraft.

Вот пример кода из «Сталкера»:

			local members = {}
local moved = {}
zone = nil
-------------------------------------------------------------------------
function add_member (npc)
    --проверим: а наш ли это мужик ?
    local ini = npc:spawn_ini ()
    if ini == nil or ini:section_exist ("escape_raid") == false then 
       return 
    end
    --наш, блин. Если уже есть, то пшел вон.
    for a = 1, table.getn (members), 1 do
        if members[a] == npc.id then 
           return 
        end
    end    
    --нету :( Внесем нахала в черный список.
    table.insert (members, npc.id)
    printf ("Stalker %s is added to list", npc:name ())
    -- и изгоним из мира живых
    this.switch_offline (npc.id)    
end
		

Кстати, потренировать свои навыки Lua можно в игре Retro Gadgets. Рассказывали о ней в нашей статье.

F#

F Sharp — мультипарадигмальный язык, который поддерживает не только процедурное и объектно-ориентированное программирование, но еще и функциональное. Его разработали в Microsoft Research, а затем компания интегрировала среду разработки F# в Visual Studio 2010 и последующие версии.

У F Sharp лаконичный код с выводом типов. Он ориентирован на данные, параллельный ввод-вывод, параллельные вычисление и часто используется в научных исследованиях, анализе данных, машинном обучении и веб-разработке. К тому же он интегрируется с .NET платформами.

Язык действительно редкий и непопулярный, а специалистов, знающих его, в 100 раз меньше, чем С#-разработчиков. Однако в некоторых специфических задачах, связанных с Big Data и ML, «фаршик» может быть крайне полезен.

Вот пример кода:

			module Integers =
   let sampleInteger = 176
   /// Do some arithmetic starting with the first integer
   let sampleInteger2 = (sampleInteger/4 + 5 - 7) * 4
   /// A list of the numbers from 0 to 99
   let sampleNumbers = [ 0 .. 99 ]
   /// A list of all tuples containing all the numbers from 0 to 99 and their squares
   let sampleTableOfSquares = [ for i in 0 .. 99 -> (i, i*i) ]
   // The next line prints a list that includes tuples, using %A for generic printing
   printfn "The table of squares from 0 to 99 is:\n%A" sampleTableOfSquares
		

R

Еще один язык для подсчета цифр и чисел — R был создан специально для статистического анализа данных. В общем, очередное машинное обучение и Big Data. Он появился в Оклендском университете взамен платному и недоступному большинству разработчиков языку S.

Сейчас популярность R начинает расти, и им пользуются многие крупные компании, например, Amazon, Deloitte, Accenture, Google и другие. Тем не менее синтаксис не похож на другие языки — это в первую очередь статистическая технология, поэтому начинающим разработчикам разобраться в нем будет непросто. Среди функций — объединение данных из таблиц, создание интерактивных графиков, статистическое тестирование. Кстати, на R можно написать и веб-приложение с помощью библиотеки Shiny.

Вот пример кода, который делает из двоичного кода десятичный:

			# Program to convert decimal
# number into binary number
# using recursive function

convert_to_binary <- function(n) {

    if(n > 1) {
        convert_to_binary(as.integer(n/2))
    }
    cat(n %% 2)
}
		

Clojure

Clojure — это современный, динамичный и функциональный «диалект» языка Lisp на платформе Java. Появился в 2007 году благодаря Ричу Хики. Разработан как язык общего назначения — он сочетает доступность и интерактивную разработку языка сценариев с надежной инфраструктурой для многопоточного программирования. Clojure известен своей интерактивной средой REPL и мощной поддержкой параллельного программирования.

Одна из ключевых характеристик языка — функциональность, а это значит, что в нем особое внимание уделяется применению функций и неизменности данных. Он также предоставляет доступ к Java-фреймворкам и может компилироваться как с байт-кодом Java, так и с JavaScript — это полезно и для серверной, и для клиентской разработки.

Clojure используют в крупных банках, например, в Raiffeisen, а также в Netflix, Amazon, Apple и других гигантах. Так, в Apple с помощью него собирают данные и статистику.

Вот, например, код Hello, world на Conjure:

			(ns hello
  (:gen-class
   :methods [[sayHi [] String]]))

(defn -sayHi [this]
  (println "hello world"))
		

Haskell

Еще один чистый функциональный язык программирования. Среди особенностей — строгая типизация, почему он и назван в честь Хаскелла Карри, исследователя теории типов и создателя комбинаторной логики. Также язык поддерживает отложенные вычисления.

Haskell отличается не только простым и элегантным синтаксисом, но и быстротой и производительностью. Он применяется в инвестиционном банкинге, а также для создания системных продуктов и ПО. Разумеется, его тоже используют в крупных компаниях: в Meta*, IBM, Twitter, Bank of America и других. Например, Facebook* борется с помощью Haskell со спамом.

Очередной Hello World, только на Haskell:

			main = putStrLn "Hello World!"
		

Да, это все. putStrLn можно заменить на print.

Elixir

Тоже язык программирования общего назначения, который использует динамическую типизацию данных и функциональную парадигму. Elixir использует виртуальную машину Erlang, известную своей способностью запускать распределенные и отказоустойчивые системы с низкой задержкой.

Среди особенностей — возможность метапрограммирования, которые позволяют разработчикам писать код, который сам пишет код, и поддержка параллельного программирования. Elixir также предоставляет мощные встроенные инструменты для тестирования и отладки программного обеспечения.

Язык широко используется в веб-разработке, особенно в среде Phoenix Framework, а также при создании распределенных и отказоустойчивых систем, благодаря базовой платформе Erlang/OTP. Для разработчиков, не знакомых с парадигмами функционального программирования, освоить будет не так просто, зато какие преимущества — эффективность, масштабируемость и надежность приложений.

Вот код, который продублирует строки множество раз:

			"AAA" = String.duplicate("A", 3)

"HELLO HELLO " = String.duplicate("HELLO ", 2)
		
На самом деле, нишевых и редких языков программирования очень много. И даже опытные разработчики могли никогда о них не слышать. Зато такие языки помогают решать специфические задачи, когда популярные решения бессильны.

Делитесь в комментариях, на каких редких языках ходили и как вам это помогло в разработке проекта.

*Компания Meta признана экстремистской и запрещена на территории РФ

Следите за новыми постами
Следите за новыми постами по любимым темам
13К открытий52К показов