Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sxiii
7 лет назад

[ПРОГРАММИРОВАНИЕ] Обзор языков. Необычные, экзотические языки программирования. БОНУС - Познакомьтесь: Piet. [REVIEW]

Многие (обычно - не связанные с программированием), наверное, считают, что программирование - это очень скучно только лишь о цифрах (максимум, о буквах). В этом небольшом обзоре необычого ЯП (Языка Программирования) Piet я постараюсь показать вам всё разнообразие языков и доказать, что кодинг может быть очень разным!

Programming

Традиционные ЯП

На иллюстрации выше (кликабельна) можно в графической форме определиться с "традиционными" языками (Python, C, PHP, Java, Ruby и т. д.). Но что, если вам неинтересны традиционные языки (или вы их уже хорошо знаете)?

Общий "рынок" ЯП

Wikipedia насчитывает более 700 языков (относительно) активных программирования. С учетом необычных языков, а также того, что в Wiki упущено, можно смело говорить о 1000 языках (забавно, числа по ЯП коррелируют с дистрибутивами Linux: их тоже около 700 активных, и около 1000 всего).

PL

Типы языков (по режиму компиляции)

  • Ассемблерные
  • Компилируемые
  • Интерпретируемые
  • Смешанные
  • Машинный код

Assembler

Язы́к ассе́мблера — машинно-ориентированный язык низкого уровня с командами, не всегда соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ. Выражаясь более простым языком, язык ассемблера - условно (не всегда, но чаще всего) процессорно- и архитектурно- ориентированный язык, находящийся на максимально близком к "железу" уровне. Перевод программы на языке ассемблера в исполнимый машинный код (вычисление выражений, раскрытие макрокоманд, замена мнемоник собственно машинными кодами и символьных адресов на абсолютные или относительные адреса) производится ассемблером — программой-транслятором, которая и дала языку ассемблера его название. Примеры ассемблерных языков: Motorola MC6800, TASM, NASM, YASM.

CompiledvsInterpret

Если по-простому, работа программиста с компилируемым языком происходит так: пишется исходный код, проверяется на наличие ошибок (автоматически, вручную или обеими способами), компилируется специальной программой-компилятором, далее тестируется в виде двоичного кода (бинарника). Сама программа на выходе - машинный, двоичный код, трудно поддающийся реверс-инжинирингу (т.е. обратно "сделать" исходный код программы из бинарника довольно тяжело, а такой, как был у программиста, и вообще в 99.999% случаев невозможно). Под каждую отдельную платформу нужно делать свои бинарники, например, ELF64 - стандартные бинарные программы для Linux x64 bit, а Win32 .EXE - стандарт бинарников для 32-битной Win-платформы. Примеры компилируемых языков: C, Assembler, Basic, Fortran. В большинстве случаев, когда говорят о "традиционном программировании", имеют ввиду именно этот тип ЯП.

Interpret

Интерпретируемый язык выполняет "команды" программиста прямо в процессе работы. За счет этого достигается высокая прозрачность и портируемость кода - например, HTML, Javascript, Bash, Java, Python, Ruby - это интерпретируемые языки, и мы в любой момент можем посмотреть код программы (иногда с определенными ограничениями). Хотя, HTML - это по большому счету язык разметки, но для упрощения сути назовём его тоже ЯП. Если говорить о недостатках, то очевидный - медленная работа программы, так как она каждый раз при запуске "адаптируется" интерпретатором для работы на ПК. Снова и снова. В какой-то степени, это лишний расход ресурса. Также нередко может применяться словосочетание "скриптовые языки" или "языки скриптинга/написания скриптов".

Mixed

Смешанные языки - это такие, на которых можно написать интерпретируемый код, а потом при необходимости его также скомпилировать. Ярким примером может служить ранее лишь интерпретируемый язык PHP, который благодаря Facebook и HHVM стал также компилируемым языком.

MachineCode

Машинный код не совсем можно считать языком программирования, ведь на нём крайне затруднительно, если вообще возможно, писать комплексные программы без внешней помощи более высокоуровневых собратьев (даже такие низкоуровневые языки, как язык ассемблера, является высокоуровневым по отношению к машинному коду). Маши́нный код (платфо́рменно-ориенти́рованный код), маши́нный язы́к — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины. По своей сути машинный код - двоичная запись системы команд для конкретной аппаратной платформы (процессора).

Levels

Уровни языков

  • Машинный код
  • Низкоуровневые
  • Среднего уровня
  • Высокоуровневые
  • Сверхвысокоуровневые

Что касается машинного кода, см. раздел ^ выше.

Низкоуровневые языки. Среди характеристик часто встречаются: ограничения на абстракции данных, сильная статическая типизация, отсутствие промежуточной среды выполнения, прямой доступ к памяти. Говоря более простым языком, низкоуровневый язык - это такой, который рассчитан на "максимально непосредственный" запуск на железе, и не требует много работы по компиляции/интерпретации. Язык ассемблера можно с уверенностью отнести к низкоуровневому языку.

К языкам среднего уровня следует относить самые первые попытки "надстройки" более высоких уровней над низкоуровневыми языками. В англоязычном вебе термин "язык программирования среднего уровня" не существует, вместо него может использоваться "early high-level languages". Примеры: C, Fortran, Pascal.

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

Сверхвысокоуровневые языки это языки абстракций данных и языки описания структур, языки описания систем искуственного интеллекта и языки, основанные на других языках в той или иной степени.

Evolution

Виды языков

  • Машинный код
  • Парадигмальные
    • Языки, основанные на акторах
    • Языки описания массивов
    • Аспекто-ориентированные
    • Классо-ориентированные
    • Конкатенативные
    • Параллельные
    • Структурные
    • Потоковые
    • Декларативные
    • Предметно-ориентированные
    • Динамические
    • Эзотерические
    • Событийно-ориентированные
    • Расширяемые
    • Функциональные
    • Императивные
    • Логические
    • Макро-языки
    • Языки метапрограммирования
    • Символьные
    • Языки основанные на объектах
    • Объектно-ориентированные языки
    • Пайплайновые
    • Процедурные языки
    • Языки основанные на прототипах
    • Рефлективные
    • Языки основанные на правилах
    • Скриптовые
    • Синхронные
    • Шаблонные
  • Мульти-парадигмальные

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

GL

Поколения языков

Langs

Категории языков

  • Общего назначения
  • Специальные языки для осуществления определенных задач (математика, физика, статистика)
  • Языки программирования, созданные для работы внутри одного приложения
  • "Эзотерические" языки программирования

Так что же Piet?

Piet - очень необычный язык. Его относят к "эзотерическим" языкам программирования. Возможно, изначально создатель языка руководствовался правилом: "а почему бы не создать такой язык? я ведь могу!".

Суть языка Piet в том, что вы не совсем... программируете...! Для написания программ на Piet, вам необходимо... Рисовать! Причем не скучные интерпретируемые схемы, как во многих "визуальных" языках, а именно вполне творческие "картины-программы".

Вот пример программы Hello world на Piet:

HW

А вот - другой пример все той же hello world:

HW2

Или же - программа для рассчета числа Пи:

Pi

Как же программировать на Piet? Суть в том, что изменяя яркость и оттенок, мы задаем определенные инструкции компилятору. Вот общие принципы построения программ (базовые инструкции):

Instructions

Что можно?

Printer
На иллюстрации выше что-то странное. Это реализованный шифр типа ROT13 (подстановка) на языке Piet, который транслирует ввод пользователя и распечатывает его на термопринтере. Так-то!

Где взять?

Бонус

Текстовая адвенчурка! Просто скомпилируйте её в Piet.

Adventure

Фидбэк

Знаю, в этой статье имеет место много допущений. Да и очень трудно оценивать и классифицировать нечто, в чем есть 1000 и 1 направление. Но я очень надеюсь что статья была для вас полезной, и хочу её сделать ещё более полезной. Поэтому, комментируйте, что стоит на ваш взгляд исправить, что дополнить, ну и конечно же расскажите о вашем опыте кодинга! :)

С вами, как всегда
кодер, линуксоид и просто увлеченный человек
Den Ivanov aka @SXIII


Кинорецензии Краудсписок Презентации Аналитика
СПО Криптовалюты Linux Скрипты

15
246.714 GOLOS
На Golos с January 2017
Комментарии (6)
Сортировать по:
Сначала старые