Друзья, все мы знаем, что программирование — это очень важное и невероятно интересное занятие, которое может занять много времени и затратить много сил. Но что, если я вам скажу, что существуют языки программирования, которые могут выглядеть поистине безумными и странными? В этой статье я хочу поделиться с вами самыми экзотическими и уникальными языками программирования, которые я нашел. Эти языки программирования отличаются необычными синтаксисом, уникальными функциями и необычными названиями.

Промпт: "Нарисуй программиста который удивляется странному языку программирования"
Промпт: "Нарисуй программиста который удивляется странному языку программирования"

Уверен, что этот материал заинтригует вас и позволит взглянуть на мир программирования с еще более широкой и интригующей стороны. Давайте же начнем наше путешествие в мир самых странных языков программирования.

1. Пролог (Prolog) — это логический язык программирования, который используется для разработки систем искусственного интеллекта, экспертных систем, анализа данных и многих других задач. Пролог использует логический вывод для решения задач и оперирует с фактами и правилами.

Он используется для решения различных задач. В отличие от других языков программирования, таких как Java и Python, "Пролог" использует логическое программирование, что позволяет программистам задавать логические отношения и правила для решения различных задач.

Пролог использует предикаты и правила, чтобы создавать базу знаний. База знаний состоит из фактов, которые являются свойствами объектов, и правил, которые определяют отношения между объектами. Например, фактом может быть "кошка - это животное", а правилом может быть "если что-то имеет хвост и уши, то это скорее всего кошка".

Пример кода на Прологе, который выводит текст "Hello, World!":

% Определение правил и фактов hello_world :- write('Hello, World!'), nl.

% Вызов правила ?- hello_world.

2. Malbolge — это экзотический язык программирования, созданный для того, чтобы быть крайне сложным для написания в нем программ. Название Malbolge происходит от имени одного из девяти кругов ада из Божественной комедии Данте

Malbolge - это один из наиболее непонятных и сложных языков программирования. Основная идея за созданием этого языка программирования заключалась в том, чтобы создать язык, который был бы настолько сложным, что программисты не могли бы написать даже простой "Hello, world!" на нем без использования специальных инструментов.

Синтаксис языка программирования Malbolge крайне сложен и запутанный. Каждая команда содержит 3 бита, тем самым их всего 27, а каждый символ имеет свой номер, что усложняет работу со строкой.

Кроме того, Malbolge имеет нестандартный формат исполнения программы. Программа на этом языке, как правило, передается через командную строку вместо использования стандартного файлового формата.

В целом, Malbolge - это скорее вызов технической сложности, нежели язык программирования, который используют в повседневной работе программисты. Его использование связано с перфекционистскими исследованиями и желанием создать настолько сложный язык, который был бы настолько труден в чтении и написании программы, что мог бы стать своего рода техническим вызовом.

Пример кода на языке Malbolge, который выводит текст "Hello, World!":

(=<:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy>=|{zyxwvutsrqponmlkjihgfedcba_^][ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543wvutsrqponmlkjihgfedcba`,/.

Обратите внимание на сумасшедший синтаксис и сложность кода, что характерно для этого языка.

3. LOLCODE — язык программирования, созданный для написания остроумных и смешных программ. Он основан на интернет‑мемах, что делает его уникальным и привлекательным для новичков в программировании.

LOLCODE - это язык программирования, который был создан для написания оригинальных и забавных програм с помощью привычных для интернет-пользователей выражений и мемов. Это делает его уникальным и привлекательным для новичков в области программирования, которые хотят научиться программировать, не чувствуя скучным и серьезным.

Синтаксис LOLCODE напоминает обычные языки программирования. Код LOLCODE имеет блоки, которые выделяются ключевыми словами, например, "HAI" для начала программы и "KTHXBYE" - для ее завершения. Числовые значения в коде обозначаются числами, строки пишутся в кавычках и работают с помощью конкатенации. Однако LOLCODE также имеет уникальные ключевые слова, такие как "CAN HAZ" для написаниия блока условия "if" и "IZ" для "else". Кроме того, поскольку язык был создан для создания забавных программ, в нем присутствуют и уникальные выражения, такие как "BTW" для комментирования кода и "O RLY?" для начала нового блока кода.

Пример Hello World на языке LOLCODE:

HAI
CAN HAS STDIO?
VISIBLE "HELLO WORLD!"
KTHXBYE

4. Brainfuck — минималистичный язык программирования, который состоит всего из 8 команд. Он был создан для уменьшения размера программ и повышения их производительности. Написание программ на Brainfuck обычно требует большого количества времени и умственных усилий.

Синтаксис Brainfuck довольно простой: программа на этом языке состоит из последовательности команд, каждая из которых может быть одной из 8 команд:

  • ">": перемещает указатель на следующую ячейку

  • "<": перемещает указатель на предыдущую ячейку

  • "+": увеличивает значение текущей ячейки на 1

  • "-": уменьшает значение текущей ячейки на 1

  • ".": выводит значение текущей ячейки на экран в виде символа ASCII

  • ",": считывает символ с клавиатуры и сохраняет его в текущей ячейке

  • "": начинает цикл, который продолжается, пока значение текущей ячейки не равно 0

  • "": завершает цикл

Хотя Brainfuck прост в своем синтаксисе, написание программ на нем может потребовать много времени и умственных усилий из-за отсутствия высокоуровневых конструкций и неочевидных последствий выполнения команд. Некоторые программы на Brainfuck способны выполнять сложные задачи, но они обычно довольно объемные и сложночитаемые.

Пример Hello World на языке Brainfuck:

+++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

5. Ook!Forth - это язык программирования, который был разработан на основе двух основных инструкций - "Ook." и "Ook?" - представляющих собой наборы из трех "Ook"-слов. Эти инструкции эквивалентны инструкциям Forth, таким как ":", ";", и "dup".

Ook!Forth является по сути вариантом языка программирования Forth, но вместо обычных команд, он использует команды, написанные с помощью наборов слов "Ook".

Синтаксис языка программирования Ook!Forth крайне простой:

  • Команды должны начинаться с ключевых слов "Ook." или "Ook?".

  • "Ook." обозначает инструкцию начала новой функции.

  • "Ook?" используется для завершения функции.

  • "Ook Ook." обозначает добавление нового числа в стек.

  • "Ook. Ook?" обозначает извлечение числа из стека и помещение его в вершину стека.

  • "Ook! Ook!" обозначает сложение двух верхних чисел в стеке.

  • "Ook! Ook?" обозначает вычитание двух верхних чисел в стеке.

  • "Ook? Ook." обозначает вывод верхнего числа стека.

Пример кода на языке Ook!Forth, который выводит текст "Hello, World!":

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.

Обратите внимание на странный синтаксис и абсурдную природу этого языка.

6. ArnoldC - это язык программирования, который основан на фразах и цитатах Арнольда Шварценеггера. Он имеет характерный синтаксис, использующий ключевые слова из сцен его фильмов, такие как "IT'S SHOWTIME" и "HASTA LA VISTA, BABY!".

Этот язык программирования создан для развлечения, но в то же время он является полностью функциональным. Например, в ArnoldC можно создавать переменные, присваивать им значения и выполнять математические операции.

Несмотря на необычный синтаксис, код на ArnoldC можно компилировать и запускать на компьютере. Из-за своей уникальности и забавности ArnoldC получил большую популярность среди программистов и любителей языков программирования.

IT'S SHOWTIME
TALK TO THE HAND "HELLO WORLD"
YOU HAVE BEEN TERMINATED

7. Redcode - это язык программирования, который используется для написания ассемблерных программ для виртуального процессора в игре Core War. В этой игре две программы вступают в сражение друг с другом посредством исполнения инструкций виртуального процессора.

Синтаксис Redcode напоминает языки ассемблера. Программы на Redcode состоят из набора инструкций, каждая из которых содержит операционный код (опкод) и, возможно, адрес ячейки памяти. Инструкции могут использовать различные режимы адресации, такие как непосредственная адресация, адресация по значению и адресация по регистру.

В Redcode присутствуют различные инструкции, такие как MOV, ADD, JMP и SLT, которые используются для перемещения данных, выполнения вычислений, изменения порядка выполнения программы и управления условиями выполнения программы.

Redcode является очень мощным языком программирования, который позволяет написать сложные стратегии боя для игры Core War. Он также может быть использован для обучения основам ассемблера и алгоритмического мышления.

Пример кода на языке Redcode, который выводит текст "Hello, World!":

START   SPL   #1
        DAT   #101, #"Hello, World!", #0
        MOV   #0, @#-1
        ADD   #4, #-2
        JMP   START

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

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

При написании программы на языке программирования Piet пользователь должен соблюдать строго заданные правила, такие как правило связи между блоками и правило использования цветов. Это делает язык программирования Piet очень сложным для понимания и изучения, но при этом он предоставляет необычный и интересный способ написания программ.

Программа на языке Piet, выводящая "Hello World" :

Результат кода
Результат кода

Обратите внимание на абсолютную необычность этого языка, который использует рисунки вместо код.

9. Unlambda - это язык программирования, созданный для тестирования теорий проектирования языков программирования. Он имеет очень сложный синтаксис, который направлен на обеспечение максимальной гибкости при написании программ. В основном, он используется для учебных целей, а также для разработки других языков программирования.

В Unlambda синтаксис представляется в виде функций, называемых "комбинаторами". Каждый комбинатор имеет определенное количество аргументов, и каждый из этих аргументов может быть другой функцией или переменной. Есть также специальные символы, называемые "спины", которые используются для управления порядком вычислений в программе.

Программы на Unlambda выглядят очень необычно и часто не имеют никакого прямого смысла. Они могут быть очень сложными и трудными для чтения и выполнения. В целом, Unlambda является очень экспериментальным языком программирования, который используется для изучения теорий проектирования языков программирования.

Пример кода:

`r
.H.e.l.l.o. .W.o.r.l.d.!

10. Chef - это непривычный язык программирования, который использует сравнения с кулинарией. Каждая строка кода в программе имеет вид рецепта или инструкции по приготовлению еды. При этом ключевые слова широко используются в кулинарных терминах, таких как "mix", "stir", "cook" и т.д.

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

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

Пример Hello World на языке Chef:

Hello, world souffle.
This recipe prints a simple greeting.
Ingredients.
72 g flour
101 g eggs
108 g milk
111 g butter
32 g world
10 g space
Method.
Put flour into mixing bowl.
Put eggs into mixing bowl.
Put milk into mixing bowl.
Put flour into baking dish.
Fold eggs into mixing bowl.
Stir eggs for 1 minute.
Fold milk into mixing bowl.
Stir milk for 1 minute.
Fold mixture into baking dish.
Put butter into mixing bowl.
Fold butter into mixing bowl.
Stir butter for 1 minute.
Pour contents of the mixing bowl into a bowl.
Serve with world.
Serve with space

11. Befunge - это очень необычный язык программирования, который представлен в виде двухмерной сетки символов. Программист может управлять набором инструкций, перемещая их в различные направления по шахматной доске, чтобы управлять потоком программы.

Befunge включает в себя множество инструкций, включая арифметические, логические и управляющие операторы, такие как "!", "?", ":", ">" и "^".

Когда программа Befunge запускается, исполнение начинается с левого верхнего угла. Далее программа перемещает по сетке, следуя указанным инструкциям. Если движение достигает края сетки, оно продолжается с противоположной стороны.

Befunge используется для обучения и развлечения. Как правило, этот язык программирования не используется для реальных проектов, но он может помочь программистам лучше понимать основы программирования и развивать навыки решения задач.

Пример кода Hello World:

"dlroW olleH",,,,,,,,@

12. White Space — это язык программирования, в котором программа представлена только символами пробела, табуляции и перевода строки. Инструкции и данные кодируются длиной последовательности пробелов, табуляций и переводов строк.

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

Все значения в White Space представляются в бинарном виде, а целочисленные значения записываются с использованием отрицательных значений и битовых операций.

Несмотря на свою необычность, White Space может быть эффективным инструментом, поскольку позволяет сохранять программы в самых компактных форматах. Однако людям, не знакомым с языком, может быть сложно разобраться в коде, написанном на этом языке.

Пример кода на языке White Space, который выводит текст "Hello, World!":

Space   Space   Space   Space   Space   Space   Tab     Tab
Space   Tab     Space   Tab     Space   Space   Tab     Tab
Space   Tab     Space   Tab     Tab     Space   Tab     Tab
Space   Space   Space   Space   Space   Space   Tab     Space
Tab     Tab     Space   Space   Space   Space   Tab     Tab
Tab     Tab     Space   Space   Tab     Space   Space   Space
Space   Tab     Space   Space   Tab     Space   Tab     Tab
Space   Tab     Space   Space   Tab     Space   Tab     Space
Space   Space   Space   Space   Tab     Space   Tab     Tab

Каждый из перечисленных языков программирования обладает своей уникальной синтаксической структурой и набором ключевых слов. Интересно, что некоторые из них даже могут быть использованы для написания программ, которые выполняют реальные задачи. Но независимо от того, это просто игра или серьезная разработка, эти самые странные языки программирования доказывают, что мир IT - это всегда путь к новым открытиям и экспериментам.

Комментарии (12)


  1. LeshaRB
    10.04.2023 09:39
    +2

    https://habr.com/ru/companies/ua-hosting/articles/339304/

    И что-то еще на хабре видел


  1. Javian
    10.04.2023 09:39
    +2

    у MUMPS специфический вид при использовании сокращения слов до одного-двух символов.
    PS на хабре чуть сокращений нашлось


    1. kuza2000
      10.04.2023 09:39
      +1

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


  1. Jianke
    10.04.2023 09:39

    А есть практически применимый аналог UnLabmda?

    (Иными словами, основанный на той же идее воплощения ФП, но созданный не ради прикола, а ради практического использования).


  1. vassabi
    10.04.2023 09:39

    хмм ... а ведь при помощи White Space можно прятать код в текстовых документах!


  1. AnnaRubkaleva
    10.04.2023 09:39
    +7

    Ook! - это оммаж конкретному орангутану, библиотекарю из Незримого Университета Анк-Морпорка (персонаж книг сэра Терри Пратчетта серии «Плоский мир»).


  1. pda0
    10.04.2023 09:39
    +12

    Статья напоминает выступление усталого, потерявшего интерес ко всему экскурсовода.

    Здесь мы видим Malbolge, видите какая непонятная мешанина символов?

    А здесь мы видим Branfuck, другая непонятная мешанина значков.

    Вот здесь Ook!Forth, программы состоят из нелепого повторения "Ook". Не задерживаемся, идём дальше.

    Здесь мы видим Piet...


    1. Kostik_s_v
      10.04.2023 09:39
      -1

      Полностью согласен.


  1. JQuery567
    10.04.2023 09:39
    +5

    // Your First Program

    class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }

    Обратите внимание на странный синтаксис и абсурдную природу этого языка :-)

    package main

     import "fmt";

     // Main function

    func main() {

         fmt.Println("!... Hello World ...!")

    }

    Обратите внимание на странный синтаксис и абсурдную природу этого языка :-)


  1. kmeaw
    10.04.2023 09:39

    Было бы интереснее увидеть примеры кода, показывающие характерные особенности каждого языка вместо печати "Hello, World!". Например, решение задачи Эйнштейна на Prolog или иммутабельные структуры данных на Unlambda.



  1. Ugli
    10.04.2023 09:39

    • "": начинает цикл, который продолжается, пока значение текущей ячейки не равно 0

      здесь видимо пропущен знак [