Языки программирования — яп,архитектуре, взаимодействия ЯП


Содержание

Языки и системы программирования, их эволюция

Язык программирования — это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме. Процессор компьютера непосредственно понимает язык машинных команд.

Классификационные группы языков программирования

Степень близости ЯП к архитектуре ПК

Fortran, Pascal, ADA, Basic, С и др.

Потенциальная или реальная область применения

Общего назначения (универсальные)

Algol, PL/1, Simula, Бейсик, Паскаль

Fortran (инженерные расчёты), Cobol (Коммерческие задачи), Refal, Lisp(символьная обработка), Modula, ADA(программирование в реальном времени)

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

Ассемблер, Fortran, Basic, Pascal, ADA

Визуальный язык программирования [visual programming language] — язык взаимодействия пользователя с системой программирования, реализуемый диалоговыми средствами графического интерфейса пользователя. На визуальном языке программирования можно разрабатывать как оболочки к уже существующим программам, так и программировать новые программные продукты. Одним из первых визуальных языков программирования является язык интегрированной инструментальной оболочки Visual Basic, позволяющий даже начинающим программистам разрабатывать программные изделия малой и средней степени сложности, ориентированные на работу в среде Windows.

Машинно-независимый язык [computer independent language] — язык программирования, структура и средства которого не связаны с конкретной ЭВМ и позволяют выполнять составленные на нем программы на любых ЭВМ, снабженных трансляторами с этого языка. Машинно-независимыми языками являются все языки программирования высокого уровня.

Машинно-ориентированный язык, машинно-зависимый язык [computer-sensitive language, computer-oriented language] — язык программирования, который отражает архитектуру данной ЭВМ или данного класса ЭВМ. Машинно-ориентированный язык может обладать набором основных операторов типичного языка программирования высокого уровня, типы и структура данных которого соответствуют архитектуре определенного класса ЭВМ и при этом иметь средства, позволяющие при программировании учитывать особенности системы команд, организации памяти, способа адресации и представления данных.

Проблемно-ориентированный язык [problem-oriented language] — язык программирования высокого уровня, предназначенный для решения определенного класса задач (проблем). Проблемно-ориентированный язык по возможности использует символику и систему понятий соответствующей проблемной области. Например, для подготовки на компьютере научно-технических книг, статей и других публикаций, содержащих математические формулы, предназначен проблемно-ориентированный язык. Тех, в который в качестве ключевых слов входят некоторые полиграфические и математические термины.

Формализованный язык [formalized language] — язык, полностью или частично определенный по некоторым формальным правилам. К формализованным языкам относятся искусственно созданные алгоритмические языки и языки программирования, основанные на точном предварительном описании алфавита, синтаксиса и семантики. Формализованный язык противопоставляется естественному языку.

Естественный язык [natural language] — язык общения между людьми, правила которого основываются на текущем употреблении, а не на точном предварительном описании. Например, любой национальный разговорный язык. Естественный язык противопоставляется формализованному языку.

Понятия системы программирования

Система программирования представляет собой совокупность средств разработки программ (языки программирования, текстовые редакторы, трансляторы, редакторы связей, библиотеки подпрограмм, утилиты и обслуживающие программы), обеспечивающих автоматизацию составления и отладки программ, подготовку соответствующей документации. Как правило, включает не эталонный вариант языка, а его версию, содержащую определенные упрощения иди расширения. Некоторые системы программирования могут поддерживать разработку программ на нескольких языках. Наиболее известные системы программирования для персональных компьютеров: Visual Studio, созданная фирмой Microsoft, поддерживающая языки программирования Бейсик, Java, C++; Delphi.

Типовая система программирования состоит из следующих компонент:

  • * язык программирования — семантическая система описания алгоритмов или иных действий по обработке информации;
  • * транслятор (интерпретатор или компилятор) — обработчик языка программирования, переводящий символические директивы на язык машинных кодов;
  • * библиотека стандартных программ и функций — совокупность отлаженных программных модулей, вызываемых из пользовательской программы для выполнения стандартных действий;
  • * средства трассировки (отладки), текстовый редактор и ряд других служебных утилит.

Эволюция языков программирования

В 1950-х гг. появляются первые средства автоматизации программирования — языки Автокоды. Позднее для языков этого уровня стало применяться название «Ассемблеры». Появление языков типа Автокод-Ассемблер облегчило участь программистов. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические (словесные) обозначения, которые легче запомнить. Чтобы компьютер мог исполнять программы на Автокоде, потребовался специальный переводчик — транслятор. Транслятор — это системная программа, переводящая текст программы на Автокоде в текст эквивалентной программы на языке машинных команд.

Компьютер, оснащенный транслятором с Автокода, понимает Автокод. В этом случае можно говорить о псевдо-ЭВМ (аппаратура плюс транслятор с Автокода), языком которой является Автокод.

Первыми популярными языками высокого уровня, появившимися в 1950-х гг., были Фортран, Кобол (в США) и Алгол (в Европе). Языки Фортран и Алгол были ориентированы на научно-технические расчеты математического характера. Кобол — язык для программирования экономических задач. В Коболе по сравнению с двумя другими названными языками слабее развиты математические средства, но зато хорошо развиты средства обработки текстов, организация вывода данных в форме требуемого документа. Для первых ЯПВУ предметная ориентация языков была характерной чертой.

Большое количество языков программирования появилось в 1960 — 1970-х гг. А за всю историю ЭВМ их было создано более тысячи. В 1965 г. был разработан язык Бейсик. По замыслу авторов это простой язык, легко изучаемый, предназначенный для программирования несложных расчетных задач.

В эпоху ЭВМ третьего поколения получил большое распространение язык PL/I. Это был первый язык, претендовавший на универсальность, т.е. на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако PL/I оказался слишком сложным языком.

Значительным событием в истории языков программирования стало создание в 1971 г. языка Паскаль. Наибольший успех в распространении этого языка обеспечили персональные компьютеры. В США разработали систему программирования Турбо Паскаль для ПК. Турбо Паскаль — это не только язык и транслятор с него, но еще и операционная оболочка, обеспечивающая пользователю удобство работы. Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. В силу названных достоинств Паскаль стал основой многих современных языков программирования, например, таких как Ада, Модула-2 и др.

Язык программирования Си создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Так же как и Паскаль, Си — это язык структурного программирования, но, в отличие от Паскаля, в нем заложены возможности непосредственного обращения к некоторым машинным командам, к определенным участкам памяти компьютера. Дальнейшее развитие Си привело к созданию языка объектно-ориентированного программирования Си++.

Модула-2 основан на базе языка Паскаль и содержит средства для создания больших программ.

ЭВМ пятого поколения называют машинами «искусственного интеллекта». Но прототипы языков для этих машин были созданы существенно раньше их физического появления. Это языки ЛИСП и Пролог.

Язык ЛИСП основан на понятии рекурсивно определенных функций. А поскольку доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций, то ЛИСП, по сути, является универсальным языком. С его помощью на ЭВМ можно моделировать достаточно сложные процессы, в частности интеллектуальную деятельность людей.

Язык Пролог используется для решения проблемы «искусственного интеллекта». Пролог позволяет в формальном виде описывать различные утверждения, логику рассуждений и заставляет ЭВМ давать ответы на заданные вопросы.

З. Поколения и классификация языков программирования

Рассматривают пять поколений языков программирования (ЯП). Первые три поколения ЖЕ характеризовались более сложным набором зарезервированных слов и синтаксисом. Языки четвертого поколения все еще требуют соблюдения определенного синтаксиса при написании программ, но он значительно легче для освоения. Естественные ЯП, разрабатываемые в настоящее время, составят пятое поколение и позволят определять необходимые процедуры обработки информации, используя предложения языка, весьма близкого к естественному и не требующего соблюдения особого синтаксиса.

Поколения ЯП

Поколения Языки программирования Характеристика
Первое (начало 50-х гг.) Машинные Ассемблер Ориентированы на использование в конкретной ЭВМ, сложны в освоении, требуют хорошего знания архитектуры ЭВМ
Второе(конец 50-х — начало 60-х гг.) Символический ассемблер, Макро ассемблеры Более удобны для использования, но по-прежнему машинно-зависимы, появилось понятие переменной
Третье (60-е гг.) Языки высокого уровня Мобильные, человеко-ориентированные, проще в освоении
Четвертое (с начала 70-х гг.) Непроцедурные, объ­ектно-ориентированные, языки запросов, параллельные Ориентированы на непрофессионального пользователя и на ЭВМ с параллельной архитектурой
Пятое (с середины 90-х гг.) Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки Ориентированы на повышение интеллектуального уровня ЭВМ и интерфейса с языками

В первое поколение входят языки, созданные в начале 50-х годов, когда первые компьютеры только появились на свет. Это был первый язык ассемблера, созданный по принципу «одна инструкция — одна строка».ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.

Расцвет второго поколения языков программирования пришелся на конец 50-х -начало 60-х годов. Тогда был разработан символический ассемблер, в котором появилось понятие переменной. Он стал первым полноценным языком програм­мирования. Благодаря его возникновению заметно возросли скорость разработки и надежность программ. Языки ассемблерного типа (ассемблеры, макроассемблеры), позволили вместо двоичных и других форматов машинных команд использовать их символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).

Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ.

Вскоре после языка Fortran появились такие ныне широко известные языки, как Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.

Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные языки имеют минимальное число син­таксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.

Второй тенденцией развития ЯП четвертого поколения являются объектно-
ориентированные
языки, базирующиеся на понятии программного объекта,
который состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. Такими свойствами обладают объектно-ориентированные Pascal, Basic, C++, SmallTalk, Simula, Actor и ряд дру­гих языков программирования.

Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Среди языков запросов фактическим стандартом стал язык SQL (Structured Query Language).

И, наконец, четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Occam, SISAL, FP и др.), которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные, мультипроцессорные среды и др.).

К интенсивно развивающемуся в настоящее время пятому поколению относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SAIL и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями — Clout, Q&A, HAL и др.).

Классификация ЯП. Изучение ЯП часто начинают с их классификации. Опи­шем наиболее часто применяемые факторы для классификации ЯП.

Классификация ЯП

Дата добавления: 2020-11-22 ; просмотров: 782 | Нарушение авторских прав

Обзор языков программирования

Читайте также:

  1. I. ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
  2. I. Общий обзор развития гносеологии в ее основных проблемах
  3. Алгоритмы на различных языках программирования. Заполнение массивов
  4. АНАЛИТИЧЕСКИЙ СПОСОБ РЕШЕНИЯ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
  5. Базовые средства программирования
  6. Базовые структуры языков программирования
  7. Введение в основы программирования
  8. Внеположенность и межъязыковая омонимия
  9. Дар языков
  10. ДИСКУРС-АНАЛИЗ КАК ПАРАДИГМА В ИЗУЧЕНИИ ЯЗЫКОВОГО ОБЩЕНИЯ
  11. Единичность языковых явлений
  12. Заключительный обзор

Тема 6. Знакомство с языками программирования.

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

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

В тот период (начало 50-х гг.) средства программирования и программное обеспечение только зарождались и были еще не развиты. Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, придумали символический язык ассемблер, близкий к машинному (конец 50-х -начало 60-х гг.), в котором появилось понятие переменной. Ассемб­лер стал первым полноценным языком программирования. Благода­ря этому заметно уменьшилось время разработки и возросла надеж­ность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения, позволяющие записывать числа и текст в общепринятом виде, для кодов команд приняты мнемонические обозначения. Для обозначе­ния величин, размещаемых в памяти, можно применять имена. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Исполь­зование ассемблера сделало процесс программирование более нагляд­ным. Дальнейшее развитие этой идеи привело к созданию языков программирования высокого уровня, в которых длинные и сложные последовательности машинных кодов были заменены одним един­ственным обозначающим их словом — операторы.

Сегодня практически все программы создаются с помощью язы­ков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически пере­вести такую программу в машинный код пока невозможно.

Языки программирования это формальные искусственные язы­ки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

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

Грамматика — это конечная система правил, определяющих язык.

Грамматика определяет способы построения изменения и сочетания слов.

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

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

Взаимодействие синтаксических и семантических правил опре­деляет основные понятия языка, такие как операторы, идентифика­торы, константы, переменные, функции, процедуры и т.д. В отличие от естественных, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила грам­матики и семантики, как и для любого формального языка, явно однозначно и четко сформулированы.

Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентиро­ваны на конкретные команды процессора.

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

Языки программирования, имитирующие естественные, обладающие укрупненными командами, ориентированные «на человека», называют языками высокого уровня. Чем выше уровень языка, тем ближе структуры данных и конструкции, использующиеся в програм­ме, к понятиям исходной задачи. Особенности конкретных компь­ютерных архитектур в них не учитываются, поэтому исходные тек­сты программ легко переносимы на другие платформы, имеющие трансляторы этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще; число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов).

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

Язык высокого уровня «непонятен» компьютеру, поэтому суще­ствуют специальные программы-трансляторы, переводящие опера­торы языка высокого уровня в машинные коды.

Существуют два типа программ-трансляторов: компилятор и ин­терпретатор.

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

Интерпретатор работает с исходным модулем по шагам. Он раз­бирает (интерпретирует) каждый оператор исходного модуля и вы­полняет его. В режиме интерпретации проще отлаживать програм­му, однако программа работает значительно медленнее, чем ском­пилированная программа.

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

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

Иерархическая модель строится по следующим правилам:

— каждый модуль может быть связан только с одним модулем верхнего уровня и с несколькими модулями нижнего уровня;

— для каждого модуля нижнего уровня имеется выход в модуль верхнего уровня;

— связи между модулями организуются сверху вниз;

— обращение к одному модулю возможно несколько раз, при этом он изображается один раз и оформляется как подпрограмма.

Модульное программирование предполагает независимое программи­рование каждого модуля, начиная с верхнего уровня иерархии. При осу­ществлении тестирования модулей верхнего уровня на модули нижне­го уровня ставится «заглушка», чаще всего в виде оператора печати. Модули добавляются по одному. После окончания разработки каждого модуля тестируется весь комплекс в целом.

Модульное программирование позволяет существенно сокра­тить время, необходимое на отладку программ.

Структурное программирование — это процесс программирова­ния на алгоритмическом языке с использованием определенных конструкций. При этом следует соблюдать следующие правила:

— любая программа составляется на базе основных алгоритми­ческих структур трех видов: линейного, разветвляющегося, цикли­ческого;

— между этими структурами производится передача управления только вперед — от более высокого уровня иерархии к более низкому;

— запрещается использовать команду переходов «GOTO». Структурное программирование используется в основном для программирования отдельных модулей.

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

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

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

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

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

Простота языка обеспечивает легкость понимания семантики языковых конструкций и запоминания их синтаксиса.

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

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

Суммарная стоимость использования языка программирования складывается из нескольких составляющих. В нее входят:

• стоимость обучения языку;

• стоимость создания программы;

• стоимость трансляции программы;

• стоимость выполнения программы;

• стоимость сопровождения программы.

Языки программирования или алгоритмические языки классифицируются: по степени их зависимости от вычислительной машины; по ориентации на сферу применения; по специфике организационной структуры языковых конструкций и т.п. (рис. 6.1),

Рис. 6.1. Классификация языков программирования

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

Знание концептуальных основ языков программирования с точки зрения использования и реализации базовых языковых конструкций позволит:

— более обоснованно выбрать язык программирования для реализации конкретного проекта;

— разрабатывать более эффективные алгоритмы;

— систематически пополнять набор полезных языковых конструкций;

— ускорить изучение новых языков программирования;

— использовать полученные знания как методологическую основу для разработки новых языков программирования;

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

Все эти языки называются еще и формальными. Нас более всего интересуют алгоритмические языки, к которым относятся все известные языки программирования.

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

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

Цукерберг рекомендует:  Взгляд изнутри как работается в «Альфа-Банке»

В языке символического кодирования (ЯСК), в отличие от машинного, цифровые коды заменены буквенными или буквенно-цифровыми (мнемоническими) обозначениями. Это облегчает работу по составлению программы и позволяет автоматизировать действия, связанные с размещениями программы и данных в памяти ЭВМ. Каждой команде языка символического кодирования при трансляции соответствует одна машинная команда. Такие языки называются мнемокодами или языками ассемблеров.

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

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

Большинство производственных задач решают с помощью программ, написанных на процедурно — ориентированных языках. Средства этих языков позволяют наиболее просто описать часто встречающиеся фрагменты действий в соответствующих задачах. Процедурно-ориентированные языки предполагают знания пользователя в области математических (численных) методов и основ алгоритмизации (базовый язык для научно-технических расчетов ФОРТРАН, БЕЙСИК (персональные ЭВМ — основной), современный ПАСКАЛЬ).

В процессе развития созданы многоцелевые (универсальные) языки программирования, объединяющие основные средства и возможности многих процедурно — ориентированных языков, например: ПЛ/1 -используемый для решения задач обработки экономической и научно-технической информации, задач управления объектами и т.п.; язык АДА — многоцелевой стандартный язык, способный заменить множество других языков и на длительный период обеспечить разработку и совершенствования программ обеспечения; язык МОДУЛА — объединяет средства и особенности . машинно-ориентированных и процедурно — ориентированных языков; включает средства для написания подпрограмм управления устройствами, управления потоками сообщений, для чего традиционно использовались языки ассемблерного типа.

Для пользователей, не имеющих специальной подготовки, но нуждающихся в оперативном использовании ЭВМ для решения стереотипных задач, разрабатываются специальные проблемно — ориентированные языки(непроцедурные), которые не требуют подробной записи алгоритма решения задачи. На таком языке лишь формулируется задача и указывается последовательность подзадач из готового набора с указанием исходных данных и форм требуемых документов. Специальные средства программы-генераторы из готовых блоков автоматически формируют программу для решения поставленной задачи. Эти языки ещё более высокого уровня, т.е. удалены от машины более, чем процедурно-ориентируемые языки. К ним относятся языки для задания и обработки таблиц данных при решении экономических задач, а также языки моделирования сложных систем СИМУЛА, НЕДИС и другие (СИМСКРИПТ).

Граница между проблемно — и процедурно — ориентированными языками очерчена не очень четко (условно) — ЛИСП, ПРОЛОГ.

Дата добавления: 2014-11-20 ; Просмотров: 1342 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Обзор языков программирования

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

Компьютерные программы часто описываются как “наборы инструкций”, и компьютерные языки воспринимаются многими только как словарный и синтаксический способ обеспечения этих инструкций.

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

Но реальность программирования гораздо сложнее.

Программирование сегодня

Это странно, но большинство действительно “глобальных” идей в компьютерном программировании были разработаны еще в 1950-х и 60-х годах. С тех пор появилось много новых языков, но ни один из них не реализует действительно нового подхода к логике и вычислениям.

Разработка новых языков программирования в течение последних нескольких десятилетий была основана на опыте разработчиков. Это означает, что появился код, который стало проще писать (движущая сила Ruby) и проще читать (Python), и делать определенные типы логических структур и способы решения проблем более интуитивными.

Некоторые языки были разработаны для решения конкретных проблем в программировании (например PHP и SASS), чтобы управлять определенными типами систем (SQL), или для работы в определенной среде или на определенной платформе (Java и JavaScript). Некоторые языки были разработаны специально для того, чтобы помочь новичкам научиться программировать (классическими примерами являются BASIC и Scratch).

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

Относительно недавнее развитие включает в себя такое понятие, как SOA (Service Oriented Architecture- сервисо-ориентированная архитектура) и MVC (Model-View-Controller), а также фреймворки, такие как Ruby on Rails, позволяющие программистам легко работать в рамках этих парадигм.

Список языков программирования

Пополняющийся список популярных языков программирования, разметок и протоколов. Ссылки на описание каждого из них:

Как происходит взаимодействие нескольких языков программирования? [закрыт]

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

Опыта разработки подобных систем у меня нет, поэтому не совсем могу представить, как это происходит. Подозреваю, что взаимодействие идет через независимые от языков средства. Например, нечто написанное на одном языке, шлет через TCP-IP пакет, который ловится и обрабатывается чем-то написанным на другом языке. Либо через HTTP запросы. Либо через запись/чтение из БД. Либо через файловый обмен, XML например.

Хотелось бы, чтобы знающие люди привели пару примеров, как это обычно происходит. Не просто в двух словах, мол «фронт на яваскрипте, бэк на яве», а с техническими нюансами. Заранее спасибо.

Закрыт по причине того, что вопрос слишком общий участниками aleksandr barakin, user194374, AseN, Alex, Denis Bubnov 1 дек ’16 в 8:19 .

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

3 ответа 3

Несколько языков могут сосуществовать как в рамках одного процесса, так и в рамках нескольких.

Проще всего сосуществовать в рамках нескольких процессов: если процессы обмениваются данными, то совершенно всё равно (ну, в известных рамках), на каком языке эти данные были созданы, и какой язык их читает. Например, вы можете генерировать данные в виде HTML сервером на ASP.NET, а читать браузером, написанным на C++. (Да, пара из сервера и клиента — тоже взаимодействие языков.)

Теперь, если мы хотим взаимодействие в рамках одного процесса, нам нужно уметь вызывать друг друга. Для этого нужен общий стандарт вызова. Часто таким общим стандартом являются бинарные соглашения C ( extern «C» , экспорт из DLL в Windows).

Ещё пример общего стандарта — COM: COM-объекты можно писать на многих языках, так что если в языке есть часть, реализующая стандарт COM, он может вполне пользоваться им.

Отдельная возможность, популярная сейчас — языки, компилирующиеся в общий промежуточный код. Например, Java и Scala компилируются в один и тот же код для JVM, поэтому объекты, созданные в Java, просто доступны для Scala-программ (так как доступность определяется не на уровне исходного языка, а на уровне JVM-метаданных). То же касается .NET-языков.

Ну и ещё есть набор glue-технологий. Например, для вызова в .NET нативный функций есть P/Invoke, который создаёт автоматический маршаллирующий stub для нативных функций. (Маршаллирование нужно, чтобы данные в формате, «понятном» .NET, перегнать в данные в формате, ожидаемом нативным кодом.)

Языки программирования

Материал из Lurkmore

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

Известны 10 преимуществ Паскаля перед Си:) Я приведу только одно, но самое важное. На Си вы можете написать: for(;P(«\n»).R-;P(«\ «))for(e=3DC;e-;P(«_ «+(*u++/8)%2))P(«| «+ (*u/4)%2); На Паскале Вы НЕ МОЖЕТЕ такого написать. [1]

»
— Анонимус

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

Содержание

[править] Быдлокодерские языки программирования

Хороший язык программирования помогает программистам писать хорошие программы. Ни один из языков программирования не может запретить своим пользователям писать плохие программы

» — Киз Костер

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

  • Visual Basic — зачастую — единственное что знают (и потому яростно любят) школьники. Удобен для тех, кто из всего «компьютерного» знает английский язык или где лежит словарь. Кроме того, существует Visual Basic .net, который к обычному Бейсику имеет весьма смутное отношение, и является альтернативным синтаксисом C#.
  • PHP — почва для самореализации каждого начинающего веб-девелопера, благодаря чему этот язык здесь и находится. Обладает минимальным порогом входа (и выхода). На нем написана куча этих ваших CMS, включая популярные drupal, joomla, wordpress и нашу уютненькую mediawiki — которая, впрочем, будет скоро выпилена Новым Движком™ на расовом erlang.
  • Python — идеальный язык для обучения программированию школоты, так как даже обезьяна осилит. Да что уж там обезьяна, даже 1Сник или похапэшник не облажается. Тем не менее, на нём иногда пишут и серьёзные вещи. Огромный плюс языка — синтаксис, всячески ограничивающий говнокодера в вымещении своих влажных фантазий в файл со скриптом в необработанном виде. В результате даже ОЧЕНЬ ПЛОХО написанный код таки поддаётся синтаксическому разбору среднестатистическим программистом. Ещё одно непревзойдённое достоинство языка и компиляторов для него — феерическая скорость работы программ, что позволяет даже самому бездарному учащемуся для простейших вычислений заранее получать результат, вычисленный столбиком до окончания работы программы.
  • w:Ruby — тот же Python, только с принудительным ООП и парой-тройкой дополнительных свистоперделок. В своё время взлетел исключительно благодаря рельсам и, собственно, сейчас без них никому не упал. Породил целый пласт веб-разработчиков, мнящих себя (абсолютно безосновательно) илитой среди программистов и считающих (опять-таки безосновательно), что раз илита, то всё позволено и можно хоть в одну строчку программу запихать (в Python’е, к слову, подобный функционал был благоразумно отключён).
  • Javascript — ужас и кошмар любого вменяемого разработчика, на фоне которого PHP выглядит, мать его, Haskell-ем. Несмотря на отсутствие нормальной структурированности и баги в базовой архитектуре, горячо любим нублом за предельно низкий даже среди ближайших конкурентов порог вхождения, а также работодателями, готовыми взять на фирму долбоёба с двухмесячным стажем, который быстро-решительно наваяет им относительно рабочую, но при этом абсолютно неподдерживаемую систему без всякой перспективы к дальнейшему развитию.
  • Pascal — используется для обучения юных, пока не догадались о ещё более упрощённых языках. Когда-то позиционировался как идеальный структурный язык (хотя по факту оным не является). Сам по себе ничего плохого не представляет, однако, в своё время застыл в развитии и в результате стал не нужен. А поскольку во многих вузах этой и не только стран он до сих пор используется для обучения студентоты, после выпуска сталкивающейся с тотальным отсутствием вакансий, обиженные вопли о том, что Pascal — говно, звучат на удивление часто.
  • Delphi — да-да, так называется не только среда, но и сам язык, причём с версии 7 — официально™ [2] .
  • COBOL — незаслуженно забытый ужас, летящий на крыльях ночи. Незаслуженно: так как время от времени кто-то должен писать с глобальными переменными, чтобы не терялся полезный опыт.
  • 1С — Кобол, переведенный промтом.
  • ABAP4 — внутренний язык сапа. При этом является самым высокооплачиваемым языком программирования.
  • Java — потому что её пихают везде, куда не лень и ждут, что она там не будет тормозить.
  • C# — результат скрещивания Java, С++ и Delphi c элементами функциональщины. Медленно, но верно, превращается в самый упоротый из промышленных языков (хотя до C++ ему ещё далеко).
  • FoxPro — до недавнего времени был довольным распространенным СУБД. То немногое, что на нём сделано до сих пор, сука, живет, адски глючит и не собирается подыхать. Типичный пример — «Смета-Багира». Вы не любите кошек? Да вы просто не умеете их готовить! Исторически сложилось так, что на FoxPro переходили с куцего FoxBase и dBase III и прочие клипперасты. Быдлокодеры не использовали новшества чуть менее чем полностью.
  • SAS — внутренний язык системы SAS.
  • PL/SQL — язык СУБД. Если PHP — почва для самореализации каждого начинающего уеб девелопера, то PL/SQL — почва для вхождения в мир начинающих Database Developer-oв. Язык процедурный, нехитрый и вполне доступен для каждого [3] .
  • ActionScript — язык Flash. На нем пишутся, в частности, игры и приложения Вcuntакте, а также видеоплееры на YouTube и других видеохостингах.
  • C++ — surprise! То, что С++ приемлем для быдлокодеров, уже давно известно, в том числе и Линусу Торвальдсу. Очень популярен, всем известен, есть много IDE для программирования мышкой. Нуфф саид.
  • Lua — скриптовый язык, напоминающий C++. Используется в некоторых играх (wow, например) и эмуляторах для реализации ИИ и пр. хрени. Грядет на замену убогим шаблонам MediaWiki, в Википедиях уже доступен.
  • Лара Профт (Простая Русскоязычная Общедоступная Функциональная Технология программирования, тихий ужас). Для желающих поблевать, картинка справа, кликать на свой страх и риск.

И хотя на этих языках пишут и годные программисты (как правило, только после того, как к ним применят физические методы воздействия), но, в связи с огромной популярностью среди быдлокодеров, эти языки программирования заслужили сию сомнительную славу. Кроме того, на просторах интернетов можно встретить очень большое количество наполненных ФГМ быдлокодерских обсуждений, связанных с вышеперечисленными языками, например, семяизвержения анонимуса в истории правок этой страницы.

[править] Олдфаги не помнят, ньюфаги не знают.

Что ни Васик, ни Посраль всерьёз даже не рассматривались, вообще, от слова совсем. Васик был создан как недо-Фортран для учебных целей, а Посраль — как недо-Алгол для учебных же целей. И предполагалось, что изучивший Васик на достигнутом бы не остановился, а освоившись с программированием перешёл бы с учебного языка на серьёзный Фортран. Ну, а изучивший Посраль, соответственно — мог бы перейти и на Алгол.

[править] Небыдлокодерские языки программирования

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

Академические языки — на них никто не программирует, но очень модно хвастать знанием их:

  • M4 — специально спроектированный быдлокодероустойчивый язык, созданный с целью защиты от быдлокодеров в 1977 году. Долгое время препятствовал простому вхождению в разработку ПО, пока не появилась Delphi и другие революционные языки разработки в один (иногда бездумный) клик, на которых можно и толково зарабатывать деньги, а можно и быдлокодить.
  • Objective-C — необыкновенно высокий порог вхождения которого обусловлен необходимостью быть геем для написания более-менее полезных программ. Всякие хелло-ворлды, на нём написанные, можно компилировать и под другие платформы, но большинству быдлокодеров это не нужно.
  • Swift — переделанный Objective-C от всё той же Apple, но без наркоманского синтаксиса и с автоматическим смазыванием сфинкстера программиста для более губокого зонда в виде серверов Корпорации Содомии. Стал OpenSource и все хейтеры соснули, в будушем планируется, как full stack язык, так как, помимо ios и mac os, можно поднимать сервер, а скоро вкатываться и под Android.
  • Smalltalk — «мама» вышеуказанной НЁХ («папой» является ANSI C), разработанный яйцеголовыми бородачами из Xerox PARC. Первый (да в общем-то и единственный) Ъ-объектный язык в мире, отличается челябинской суровостью подхода (в нём ВСЁ объекты, даже цифра «3», которой можно передавать сообщения прямо в коде) и эпической слоупочностью. Вызывает у быдлокодеров короткое замыкание мозга, а у их компьютеров — работу кипятильником, особой популярности не снискал.
  • Ада — боевой язык, разработанный американской военщиной в Пентагоне с целью установления военной гегемонии Соедёнённых Штатов в мире. Применялся и применяется в основном в ПО управления самолётами, подводными лодками, космическими ракетами и огромными боевыми человекоподобными роботами. Технически является жёстко расширенным и невъебически усложнённым диалектом Паскаля. Вроде бы как должен был быть запредельно безопасным и удобным в разработке сложных систем, но сложилось как-то не очень. Название языка — традиционный источник шуток на тему сотонизма, Ада и Израиля. Например, известны случаи, когда старушки, увидев книгу с надписью «Язык Ада», либо орали на весь город, либо падали в обморок. А сам язык назван в честь самого первого в мире программера, который, кстати, был женщиной [1].
  • Perl — старейший из ныне используемых скриптовых ЯП. 20 лет выносит быдлокодерам мозг своим синтаксисом, 10 лет из которых оналитики его закапывают. Объект лютого баттхёрта со стороны малолетних питоноводов, впадающих в когнитивный диссонанс при мысли о том, что не распиаренный гуглом язык может обладать такими же возможностями, как и их прелесть. Взрослые же питонщики существование перла игнорируют.
  • Tcl — всем быдлокодерам вход строго воспрещен. Язык не отвечает достаточно большому количеству понятных для быдла стандартов. Во-первых, синтаксис — это ёбаный кошмар для всех поклонников мейнстримовых языков, такие конструкции, как set set set просто взрывают мозг неподготовленного хомячка. Далее — не нужно состоять ни в одной из популярных сект, в том числе не нужно быть борщехлебом и евангелистом GNU, язык не требует быть геем, не требует поклонение Дяди Билли как пророку мелкомягкой компании. Во-вторых, там метапрограммирование и требование к пониманию св. Матана. Да, анон, это один из немногих языков, в котором ты сможешь описать звук — стулом, а цвет — запахом. В-третьих, жёсткие требования к построению архитектуры приложений. Малоопытный программист превратит код на tcl в АдЪ и Израиль уже на уровне написания учебного калькулятора. В-четвёртых, очень большое количество синтаксического сахара, регулярок и списков, где любой Я-гей теряется, а сишарпист стреляется нахрен. Есть бесконечное число способов достичь результата и снести выстрелом в ногу нахуй свою голову и всех окружающим в радиусе пары сотен километров. В-пятых, язык придуман в том же ВУЗе, что и ЛСД и BSD.
  • Make — язык написания программ для автоматизации процедур сборки других программ или иных хитрых целей, в сочетании с Autotools выносит мозг позволяет творить чудеса.
  • APL — прославился тем, что требует специальной клавиатуры с мат.символоами, а код выглядит как математическое выражение. Алсо, способен легко оперировать с матрицами на уровне простейших операторов, не требуя каких-либо библиотек для этого.
  • ML — несколько функциональных языков разной степени кошерности. Характерны развитой системой вывода типов, благодаря чему языки статически и неявно типизированы одновременно (ИЧСХ, довести до ума эту систему не могут уже с OCamlа, хотя альтернатив всё равно нет). Самый современный из адской семейки — F#, OCaml, скрещенный с типовой системой .net и зависимыми типами, тихий ужас.
  • Lisp — позволяет достраивать синтаксис с помощью макросов и получать новые языки. Считается, что для этого достаточно трёх символов: двух скобок и пробела. На данный момент имеет как коммерческие реализации, так и бесплатные. Наиболее живым из последних можно назвать Racket и Clojure. Оба нелюбимы фонатами CommonLisp.
  • Haskell — тот же матан, только шрифты заменили. И припаяли костыль в виде монад. По сути — лагерь штангистов разделился на две составляющие: 1. смотрят на пользователей монад как на гавно и продолжают дрочить матан и жать штангу, сохраняя волосы чистыми и шелковистыми и создавая чёрную дыру на мамкином диване при поглощении в космических масштабах такие вещи как мамкин борщ. 2. не знают мотана и удливляются, что их хацкель — функциональный язык. Всё решают через монады, не понимают ленивости и лямбд, скорее всего берут хацкель, чтобы рассказывать быдлокодирам из мира PHP, что научились забивать гвозди микроскопом (ну или чтобы в среде яблочников считали, что не гей).
  • Erlang — единственный реально необходимый на продакшене функциональный язык, знающие который чуть более чем все — штангисты, презирающие куцые поделки вроде лишпика, хацкеля и прочего грязного дерьма. Алсо, на нем написано много вполне годных ынтэрпрайзных продуктов.
  • Prolog — некогда позиционировался, как серебряная пуля, которая убьёт все остальные языки, но выяснилось, что пуля на самом деле из говна, а почему блестит — неизвестно. Крайне упорот в своей сути, причем упоротость сия никакими практическими преимуществами не обосновывается. Взлетел, но упал, и притом достаточно больно. Ныне почил в бездне отчаяния и безысходности. Goodnight, sweet prince.
  • PL/1 — легендарный хтонический пиздец! Которым пугали людей ещё во времена войн между Фортраном и Алголом. Мало кто осиливал выучить язык в полном объёме, что ещё прокатывало когда писали код с нуля, но превращалось в полнейший пиздец когда нужно было разбираться в чужом коде написанном на незнакомой части языка.
  • DYNAMO — разработан случайно в 1950-е под руководством Дж. У. Форрестера в MIT. Сначала трудился на IBM 704, IBM 709 и IBM 7090, позже появились версии для всего, что шевелитися. Специально заточен под динамическое моделирование, вроде траекторий на Луну и Марс и посадок Шаттлов.
  • StrongTalk — наркоманская идея скрестить функциональщину, мету и объекты. Делался как диалект Smalltalk, так и остался академическим.
  • D1/D2 — так и сдохший в агонии выродок Александреску. Ответ на самый монументальный вопрос: «Что было бы если бы ТрупСтрауса курил еще больше ганжи, но обладал зойчатками погромирования». Конвульсируют до сих пор. Переодически его выкапывают, насилуют в целях создания в Новозадрюпинске «крутого продукта для академических целей», где собственно его и задрачивают вусмерть, превращая код в еще большую мусорку, чем С++.
  • Rebol3 — к сожалению, мёртвый язык. Мог бы стать идеальным или даже мейнстримом в плане технологичности языка. Имел наркоманский синтаксис, функциональщину и метапрограммирование и ещё много инноваций. Сейчас развивается рассово-немецкой Saphirion, перспектив нет.
  • Groovy — уродец на JVM, нечто среднее между «ужом» и «каменюками». Отсутствие вменяемых инструментов стало последнем гвоздём и язык передан в Apache, как и полагается: гомункулов — в кунцкамеру.
  • Nemerle — попытка польской студентоты взять этот ёбаный C# и довести его до ума. Имеет нормальную функциональщину, метапрограммирование и макросы, при этом не скатился в ML с монадами, функторами и прочей хуитой. То есть удобен, мощен и относительно прост одновременно. Эталон промышленного языка. При этом оказался нахуй никому не нужен, sad but true.
  • Dylan/OpenDylan — попытка Корпорации Содомитов изобрести лишпек, с синтаксисом без скобок. Провалилось, ибо геи не поняли, зачем нужен инструмент, где (в том числе) есть и вагина.
  • Rust — всё, хватит. Кто в 16 лет не был программистом, у того нет сердца. А кто и в 40 лет продолжает этим заниматься — у того нет мозгов.
  • Go — создан для холиваров Rust vs Go. Несмотря на то, что разрабатывается Главной Корпорацией Поиска в Интернете, язык плохо приспособлен к поиску информации о нем в интернете. Посему имеет альтернативное широкоиспользуемое и куда как лучше подходящее для поиска в интернете погоняло golang.
  • BrainFuck — ёбаная мозгодробительная херня, которая применяется биологами для моделирования ДНК и прочей псевдо-научной поебени. Больше непригоден ни для чего. Ну и для обучения курсу по написанию интерпретаторов. Создавался как самый минималистичный Тьюринг-полный язык программирования: имеет аж 9 операторов.
  • Befunge — любопытный двумерный язык, в котором программа представляет поле, наполненное командами. Для особых извращенцев есть 3-х мерные, 4-х мерные и прочие n-мерные версии.
  • Whitespace — язык, состоящий из пробелов и табов целиком и полностью. Программа выглядит… Интересно.
  • Malbolge — предельно невменямый тринарный язык, призванный стать самым сложным в истории. Таки да, окромя вывода строк на нём так ничего и не смогли сделать, да и то — пришлось использовать специальную аналитическую программу на Лиспе. Чтобы оценить всю красоту этого монстра, достаточно посмотреть на «Hello World» на нём: (= [править] Ворнинг, пиплы!

Ворнинг, пиплы! Непрокостанный тикет за отмазку не катит. Следующая вписка в Лужах.

Внимание, функциональщина. Будьте осторожны.

Именно с этими языками можно наблюдать следующее: какая-нибудь фирмешка, перешедшая в состояние «клюй ближнего — плюй на нижнего», вдруг выбрасывает вакансию вроде «крупная компания, лидер на рынке заказных разработок, от так от надо Lisp-сокровище в интересный проект». Так появляются ужастики и страшилки на форумах, что встречаются конторы-самоубийцы, которые вместо того, чтобы спокойно подохнуть, стараются захватить с собой кого-нибудь из прохожих. На самом деле, всё просто, и никакого заговора против несчастных программистишков не было и нет.

[править] Экологические ниши

Запрет вина — закон,
Считающийся с тем,
Что пьётся, и когда,
И много ли, и с кем.
Когда же учтены все эти оговорки,
Пить — признак мудрости, а не порок совсем.

Самые первые языки, появившиеся в 50-е годы, относились к разным группам и занимали разные экологические ниши в мире программирования. Компьютеры тогда были до́роги, профессия программиста была редкостью, и было мало желающих создать новый язык, когда такой же точно язык уже есть.

Если кратко, то низкоуровневное программирование велось на всевозможных Автокодах, алгоритмы описывали на Алголе (откуда происходят процедурные языки и ООП), вычислительные программы делали на Фортране, и были ещё две ниши: декларативные языки, такие, как Лисп, и языки для описания бизнес-процессов, такие, как Кобол.

За прошедшие несколько десятилетий ничего не изменилось. Некоторые языки почти полностью повторяют своих предшественников, и различий между Паскалем и Алголом меньше, чем между разными диалектами Лиспа.

[править] Низкоуровневые языки

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

[править] Процедурные и объектные языки

Прямые потомки Алгола-58, откуда убрали оператор перехода (вернее, научились обходиться без него, а на уровне машинных команд прыжки вперёд через участки кода по-прежнему есть). Программы на них представляют собой последовательности действий, от «x := 2*2» до «господьБог.создатьВселенную()»:

— тысячи их! какой случайный язык, используемый (или использовавшийся) на практике, ни возьми — с высокой вероятностью он будет принадлежать к этой группе. Что и неудивительно: само название «Алгол» происходит от «Algorithmic Language», то есть язык для описания алгоритмов (но сам он, разделив судьбу птеродактилей, полетел в мир иной).

Язык C — особая мякотка. Несмотря на то, что он, строго говоря, является высокоуровневым языком, на фоне таких быдлоязычков, как Жаба или C# его называют низкоуровневым, так как уровень абстракций неприлично низок. Более того, именно на нем в 95% случаев пишут околосистемные вещи, вроде драйверов и ядер ОС, используя, впрочем, тонны ассемблерных вставок. Поэтому однозначно отнести его к какой-то категории, не вызвав бурления говн, невозможно. Иногда даже говорят, что C — «язык среднего уровня».

[править] Прикладные языки

Это внезапно не Алгол! Языком прикладного программирования считали Фортран, на котором изначально предполагалось описывать вычислительные процессы. У него не было и до сих пор нет даже названия: «фортран» означает «транслятор формул», и так назывался не язык, а его компилятор. Изначально там не было даже правил видимости переменных, а все данные лежали в общей области данных: посчитал — и напечатал результат:

  • Фортран всех версий — классика
  • В нынешние времена благодаря Microsoft — Visual Basic (в том числе и VBA)
  • Javascript (в том числе и node.js)
  • Python, Perl, PHP, Ruby и Groovy

Иногда в прессе и на форумах поминают Фортран как что-то плохое. Возможно, так и было, но обижаться на то, что современные скриптовые языки происходят от него — глупость. Именно это направление развивалось больше всего (оно было прикладным) и именно на скриптах были обкатаны многие нововведения (такие, как словари), позже перенесённые в другие языки.

Лет 30-40 тому назад вопрос «Фортран или Алгол» был вполне насущным вопросом, и задавались им всерьёз. Даже был забытый ныне мем: «настоящие програмисты пишут на Фортране».

[править] Языки для написания проводок

Они же «бизнес-ориентированные языки». Первоначально эту нишу занимал простецкий «Common Business-Oriented Language», который использовался в банках. Супермаркеты, ресторашки, кафэтэрии, склады, турагентства, таксопарки, железные дороги, госструктуры и т. п. — так до сих пор и используют его или один из его многочисленных диалектов:

А теперь о грустном, да. Кобол был выблядком среди других языков, и проклятие тяготело над ним с самого начала: данные хранились вместе с кодом и внутри кода, в блоках «var» в заголовках модулей — и там неизбежно накапливался мусор. Позже этот приём перешёл в языки Алгол и Паскаль, а всё это ваше современное ООП — нежизнеспособный гибрид Алгола с Коболом. И какие молитвы ни возноси разным там компиляторам — не взлетит, и всё тут.

Привет из 50-х, коллеги!

[править] Декларативные языки

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

[править] Функциональные языки

Лисп когда-то был автокодом в скобочной записи, но этим дело не ограничилось:

[править] Логические языки

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

[править] Функционально-логические языки

Глубокая идея функциональных языков на самом деле гораздо глубже, чем кажется на первый взгляд. Джон Маккарти, автор Лиспа, перевернул всё программирование 50-х и 60-х годов с головы на ноги: он поставил на первое место не данные, вокруг которых суетятся мелкие программки (как гномы, прыгающие вокруг Белоснежки в диснеевском мультике), а сами эти программки. Данные же он предлагал протаскивать через цепочки выполнения, а язык для описания этого дела был назван «List Processor», то есть Язык Обработки Списков.

А ещё, люди, которые пишут на Коболе, не пишут на этих языках. Так что сохраняй ледяное спокойствие, Анон, выгребая очередную порцию лживых обещаний с какого-нибудь Х#$хантера.

[править] Идеологии aka Парадигмы

Разделяй и властвуй (лат. divide et impera)

» — формула римского Сената

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

В разное время разным теоретикам приходили в голову разные умные мысли. Одни из этих идей вошли в арсенал процедурного программирования, другие остались чистой теорией, воплощённой в малоизвестных экзотических языках. В конце концов, практическое применение смогло найти ООП, оно же объектное программирование. Также особняком держится функциональное программирование.

[править] Экскурс в историю

Многие элементы языков программирования, кажущиеся естественными, на самом деле были придуманы не сразу и не в готовом виде.

[править] Процедурное программирование

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

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

[править] Структурное программирование

Придумано Дейкстрой, форсилось Виртом, придумка заключалась в дальнейшем разбиении кода подпрограмм на более мелкие фрагменты, а именно — на блоки begin и end, а также в отказе от оператора перехода GoTo. Но, кстати, вложенные begin и end появились в Алголе раньше, чем Дейкстра придумал свою парадигму, то есть Алгол появился раньше, чем идея о том, каким он «должен» быть (спойлер: это потому, что Дейкстра участвовал в разработке Алгола ). А ещё, в отличие от Алгола, в ранних реализациях Паскаля, который форсили как новейший структурный язык, дело с возможностью вложить в один begin и end сколько угодно других обстояло довольно туговато, так что он был шагом не вперёд, а назад…

Алсо, оператор GoTo стал на долгие годы предметом специальной олимпиады, в которой противники GoTo ссылались на Дейкстру, а сторонники — на Дональда Кнута. Сей именитый срач (со ссылкой на имена авторитетных теоретиков) постепенно затих с распространением ООП.

[править] Модульное програмирование

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

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

[править] Объектно-ориентированное програмирование

Появилось после того, как кто-то из хороших парней в стопицотый раз прошёлся по граблям с диким криком «почему йА». Идея заключалась в том, чтобы разделить код, разделить данные — а затем соединить соответствующие кусочки кода и данных. Но чтобы данные, ставшие ненужными — выбрасывались, в отличие от Кобола. Начальные подвижки к ООП появились уже в языке Simula, но первым объектно-ориентированным языком стал Smalltalk: собственно, его авторами и был введён сабжевый термин.

Однако кто-то что-то недопонял, поэтому Simula ВНЕЗАПНО обнаружила себя объектно-ориентированным языком, причем эталонным. Сначала ее недо-ООП слизал C++, а постепенно это веяние перешло и в другие языки. Самое смешное, что классическое ООП из Simula, используемое в Java, C#, C++ же и прочем мейнстриме, нихуя не канонично и имеет весьма мутное отношение к идеям, который вкладывались в ООП его создателями. Но всем как всегда.

ООП — не серебряная пуля и рядовому программистишке не даёт ничего. И при первой же возможности вырождается обратно в Кобол. (спойлер: Ведь проще всего, не думая, создать один-единственный класс на всю программу — и получается форменный Кобол с глобальными переменными. )

Все мейнстримовые языки сейчас — объектно-ориентированные. Так что применяется ООП почти везде, где надо и где не надо. Иногда — даже работает. Помимо классической C+±подобной реализации, характерные для C++ и потомков (Java, C#, но сходные вещи есть и в PHP), есть более мягкая реализация без приватных полей (Python, Ruby), чуть другое OOP через prototype (характерен для JavaScript, но средний веб-проггер на него забивает) и более хитрый и новомодный «через подмешивание» (Scala, Rust, Go). Последний грозятся добавить в C++, чтобы олдфаги точно на стенку полезли.

[править] Не могу молчать!

В своё время был эпичный срач, в котором олдфаги утверждали что любой алгоритм можно написать и без ООП, а потому оно не нужно. На что сторонники ООП утверждали, что ООП улучшает структуру программы, а «любой алгоритм» можно написать на любом тьюринг-полном языке, включая Brainfuck и Assembler. На это утверждение шёл ответ, что ООП не улучшает структуру, а превращает программу в mind-fuck с трудноуловимыми ошибками и утечками памяти. Что для нуба и в самом деле правда, и потому сторонники ООП это обвинение не только не отрицали, но и указывали на рукожопость и скудоумие, особенно популярным троллингом было «старую собаку не научишь новым фокусам». Финальную точку в сраче ВНЕЗАПНО поставила Windows с ее объектно-ориентированным WinAPI (ЧСХ, со своей реализацией ООП на C). Это был EPIC WIN ООП.

Конкретно соснувшие хуйца олдфаги возненавидели лично Билла Гейтса (который в общем-то объективно говоря ничем не хуже Стива Джобса), и стали дружно фапать на тогда ещё полностью консольный UNIX с его чисто процедурным POSIX, вызывавший у них слезу умиления и ностальгию по тем временам, когда ещё не было ненавистных им юзеров, сидящих на винде. Ну а вчерашнее школоло, студенты-первокурсники, не понимая, где ООП нужен, а где нет, попыталось сесть на оба этих взаимоисключающих стула сразу: с одной стороны, прониклись модным и крутым ООП, развивающимся под Windows же (sic!), а с другой — стали подражать олдфагам, ненавидящим Гейтса, без понимания причин этой ненависти. Вот так: весь этот ихний Масюкль — обезьянничание с ненавидимых и проклинаемых ими же технологий.

[править] Продолжение банкета

Постепенно роль основных критиков ООП перешла к фанатам Лиспа. Забавно, что волну погнал Джон Бэкус, автор Фортрана: получая премию Тьюринга, он высказался в том смысле, прямо со сцены, что «все эти годы мы писали код неправильно». И вот недавно Micro$oft (уже без Била Гейтса) выпустила гибрид ежа с ужом — язык F#, сочетающий в себе «несовместимое»: ООП и функциональное программирование (на самом деле F# — это oCaml с блекджеком и LINQом под .net). Есть аналог и для JVM — Scala. И совсем уж левый Nemerle. Так что готовимся к продолжению банкета со вкусной едой.

[править] Функциональное программирование

Появилось ещё до языков программирования, когда умный математик Алонзо Чёрч придумал лямбда-исчисление. Впервые было реализовано в Lisp (вторым по счёту ЯП после Фортрана). Заключается в низведении функций до уровня данных, а переменных до уровня констант. Идея здравая, поэтому настоящим программистам нравится, а заказчикам нет. А всё потому, что в функциональной парадигме нужно много думать, а потом написать десяток строчек, в то время как при императивном подходе можно написать 100 строчек вообще не думая — с тем же эффектом. Заказчик видит, что производительность (строчек в час) при использовании императивных языков выше, а значит, они лучше. Такие дела.

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

Функциональное программирование окружает масса мифов. Перечитавшие Джоэла Спольски фонаты уверены, что любая программа на функциональном языке (даже если это домашка из первой главы SICP) автоматически масштабируется, летает и гарантирует, что его возьмут работать в Гугл. Конечно, функциональный код действительно неплохо масштабируются, но только если хорошенько попотеть. Даже общеизвестный LISP-овый факториал ни фига не пакетен, не масштабируем и тем более не поддерживает потоков. По сути, функциональная парадигма — это отличный инструмент для решения узкого круга задач, но уж никак не серебряная пуля, как рассказывают нам воннаби-небыдлокодеры. К примеру, попытка смоделировать систему с постоянно изменяющимся состоянием на каком-нибудь тру-функциональном Хаскеле превратится в монадный ад.

Поэтому функциональные языки всегда были в жопе, в серьёзном бизнесе не использовались и оставались уделом гиков, ибо деньги ими заработать нельзя. Так что функциональщикам только и остаётся, что после очередного высера на форуме: «вы все быдло с вашим ООП, смотрите как я получу бесконечную последовательность факториалов одной строчкой… как нахуй не надо?!», идти кодить на ненавистных Джавашарпах. Кушать-то хочется.

[править] Событийно-ориентированное программирование

Парадигма, которая представляет программу как набор реакций на изменяющееся состояние. Ближайший аналог ИРЛ — условные рефлексы. Это позволяет здорово упростить представление: вместо одной обширной и необъятной блок-схемы, не умещающейся на листе ватмана формата A0, получается более удобный список небольших блок-схем, повешенных на события, что изрядно улучшает структуру обычной программы. Событийные языки поддерживают встроенный обработчик событий (к таковым относятся Delphi и C#), но при желании можно легко реализовать события на любом ООП языке с помощью паттерна en.w:Observer, чем и пользуются разработчики на C++ и Java. Раньше событийная парадигма была золотым стандартом фреймвёрков (её используют такие мастодонты, как Delphi, WinForms и ранние версии QT), но с популяризацией паттернов en.w:MVC и en.w:MVVM веяние сошло на нет.

Дело в том, что у событий есть одна маленькая проблема. Обработчики, висящие на событии, могут быть объявлены где угодно и кроме как при отладке нигде не видны. Причем они могут изменить состояние вызвавшего их объекта (традиция передавать sender как первый параметр тянется уже добрых четверть века) или вызывать следующие обработчики (ведь события это ни что иное, как реинкарнация оператора goto на более высоком уровне). В итоге простейший код можно превратить в эталонную лапшу. Что быдло и делает.

[править] Визуальное программирование

Вот она перед вами, коробка с карандашами
В неё совершенно свободно помещается что угодно.

Бывает для взрослых и детей.

[править] Для взрослых

Суть в том, что вместо написания кода рисуешь то, что нужно:

полностью визуальные

  • ДРАКОН — просто рисуешь блок-схемы (требуется: космоплан «Буран»). Среди разработок примечательны: алгоритм «Кровохарканье» и алгоритм «Острая диарея».
  • LabVIEW — язык и среда разработки. На сегодняшний день является самым мощным и развитым инструментом визуального программирования. Основан на параллельно выполняющихся потоках данных. Позиционируется как инструмент для студентов, учёных и инженеров, не имеющих профильного образования в области программирования. Используется в основном для работы с железом и создания автоматизированных систем. Позволяет писать программы под Windows, Mac OS, Linux, операционные системы реального времени и FPGA (разумеется, только при наличии фирменного оборудования). Имеет бесчисленное количество библиотек, тулкитов и модулей на все случаи жизни — от обработки радиосигналов до разработки промышленных SCADA-систем. Язык имеет чрезвычайно низкий порог вхождения, однако содержит и продвинутые элементы: событийно-управляемое программирование, ООП, взаимодействие с .NET, Фреймворк акторов. Программирование в LabVIEW существенно отличается от того, к чему привыкли пользователи традиционных языков. Например, в нём считается дурным тоном использовать переменные, операторы if/else и последовательно выполняющийся код.

частично визуальные

  • Delphi — рисуешь кнопочки и лепишь на них события: нажатие мышки, отжатие и так далее, «а всё остальное умный Дельфин сделает сам»;
  • WinForms — то же, что и Delphi, только на C#.
  • QT — ещё один аналог, уже на C++. А вообще, тысячи их.
  • SQL Manager Studio и аналоги — вместо написания SQL рисуешь структуру базы данных со связями (спойлер: работает через жопу, но тем не менее запросы быдлокодера, не знающего SQL, более-менее удовлетворяет — через жопу же! LOL

    [править] Для детей

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

    • Logo — самый знаменитый из таких языков, учит программировать алгоритмы, доставляет тем, что знаменитая «черепашка» для рисования на экране существует и в варианте программируемого робота => суть обучения сводится к весёлой игре «научи Черепашку рисовать на экране или на полу». Язык учит сразу функциональному программированию и основан на LISPе, а точнее, является одной из немногих более-менее успешных попыток запилить в Лисп M-выражения, благодаря чему в отличие от чистого Лиспа гораздо более читабелен и понятен новичкам.
    • Scratch — имеет занятное отображение алгоритмов: вместо традиционных блок-схем используется более красивое и наглядное отображение, показывающее, где у какой команды begin, а где end, вот так, что является нехилым плюсом для обучения и, без сомнения, WINом.
    • Blockly — конструктор Лего от Google — косплеит Скретч.
    • EToys также известный как Squeak — учит ООП и основан на Smalltalk. Любишь котегов? Так-то.
    • Alice визуальный ООП язык
    • КуМир и ПиктоМир — российские языки для детей, основанные на «Ершоле» (поскольку сочинены в основном ершовским учеником Кушниренко), наш ответ Scratch’у. Сначала осваивается ПиктоМир, а затем при помощи КуМира осуществляется переход от визуального программирования к абстрактному, подобно тому как Scratch является визуальной надстройкой над Смоллтоком. Кстати, Андрей Ершов и Джон МакКарти в жизни были большими друзьями, и последние версии ершола — это собственно такой лисп и есть. А Алан Кей, автор Смоллтока и Скрэтча, у МакКарти учился.

    [править] Какой язык учить?

    Какой язык учить? Хочешь программировать на выразительном и мощном языке: Python Нужно по-быстрому веб-сайт: PHP Желаешь в тусовку зовущих себя «рок-звездами» программирования: Ruby Реально нужно научиться программировать: C Ищешь просветления: Scheme Уйти в хандру: SQL Потерять одну хромосому: Microsoft Visual Basic Для получения постоянной, заурядной, но хорошо оплачиваемой работы по созданию финансовых приложений в офисной загородке под лампами дневного света: Java Тоже самое, но с аббревиатурами и списком сертификатов в своей подписи: C# Для получения волшебного, забытого в детстве, ощущения избавления от мании величия: Objective C

    С закрытой части быдлохабра

    Какой язык учить? если реально нужно научиться программировать, но лень — си-шелл если вы недоучили C и хотите искупить вину страданием — шелл если у вас испорчено большинство кнопок клавиатуры — брейнфак если вы снисходительно относитесь к низшим по званию — ада если вам платят по строчкам кода — фортран если ваша пенсия по старости недостаточна — кобол если ваши программы записаны на магнитофонные кассеты — фокал если вы не доверяете компилятору перемножить два числа — язык ассемблера наоборот делать всегда если — форт если вы ностальгируете по модему без коррекции ошибок — перл если у вас чудовищная память, вмещающая две тысячи ключевых слов — PL/1 если вы хотите это, и то, и чтобы сразу — эрланг если процедуры вам удобно держать в массивах — алгол-68 если всё это для вас детский лепет — хаскелл

    Там же в мудрых комментариях

    [править] Алсо, немного занудства

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

    Если вы вдруг нашли язык, с которым работаете, в разделах «быдлокодерские/небыдлокодерские языки», не спешите огорчаться или радоваться. Сами по себе вышеуказанные языки ничего не пишут и получающийся код является исключительно плодом вашего собственного моска и ручек. Другой вопрос, что некоторые языки проще для освоения и быстрого создания говна в промышленных масштабах, без значительных умственных и физических затрат, что делает их прекрасной средой для размножения быдлокодеров.

    Для чего тогда сделано в этой статье вышеуказанное разделение? Just for lulz and holywars.

    Также, закон Холивара применительно к языкам программирования звучит так:

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

    Язык сам по себе ничего не решает, главное то, что находится в верхней голове, брат.

    ТОП-10 языков программирования

    Перед началом прочтении данного поста, хочу предупредить, что моё мнение может отличаться от вашего, своё мнение напишите в комментариях

    10 место: ASP.NET

    ASP.NET — технология создания веб-приложений и веб-сервисов от компании Майкрософт. Она является составной частью платформы Microsoft .NET и развитием более старой технологииMicrosoft ASP. На данный момент последней версией этой технологии является ASP.NET 4.5.1

    9 место: Objective-C

    Objective-C — компилируемый объектно-ориентированный язык программирования, используемый корпорацией Apple, построенный на основе языка Си и парадигм Smalltalk. Язык Objective-C является надмножеством языка Си, поэтому Си-код полностью понятен компилятору Objective-C.

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

    7 место: C# (Си шарп)

    C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
    6 место: PHP

    PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста»; произносится пи-эйч-пи) — скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.
    5 место: Javascript

    JavaScript — прототипно-ориентированный сценарный язык программирования.

    JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.
    4 место: SQL

    SQL (Structured Query Language — «Структурированный язык запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.

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

    C++ — компилируемый статически типизированный язык программирования общего назначения.

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

    Си (англ. C) — язык программирования, разработанный в 1969—1973 годах сотрудниками Bell Labs Кеном Томпсоном и Деннисом Ритчи как развитие языка Би. Первоначально был разработан для реализации операционной системы UNIX, но, впоследствии, был перенесён на множество других платформ. Благодаря близости по скорости выполнения программ, написанных на Си, к языку ассемблера, этот язык получил широкое применение при создании системного программного обеспечения и прикладного программного обеспечения для решения широкого круга задач. Язык программирования Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал основой для таких языков программирования как C++, C# и Java.

    Классификация языков программирования

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

    Рисунок 1. Классификация языков программирования. Автор24 — интернет-биржа студенческих работ

    Процедурные языки

    Процедурные языки являются языками высокого уровня, в которых используется метод разбиения программ на отдельные связанные между собой модули – подпрограммы (процедуры и функции). Компоненты языка состоят из последовательности операторов, которые используют библиотечные процедуры и функции. Первым процедурным языком был Fortran, затем появился Cobol, Algol, Pascal, C, Ada.

    Языки программирования низкого уровня

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

    Попробуй обратиться за помощью к преподавателям

    К языкам низкого уровня относится:

    • программирование в машинных кодах;
    • ассемблер;
    • макроассемблер.

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

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

    Языки программирования высокого уровня

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

    Задай вопрос специалистам и получи
    ответ уже через 15 минут!

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

    Языки высокого уровня делятся на универсальные и проблемно-ориентированные.

    Наиболее распространенные универсальные языки C#, C++, Basic, Pascal (Delphi) используются для разработки Windows-приложений. Большой вклад в программирование на начальных этапах внесли языки Fortran, Cobol, Algol, C и др.

    Языки программирования для разработки Интернет-приложений скорее относятся к универсальным языкам. К ним относятся современные версии C#, Basic, J#.

    Проблемно-ориентированными языками, которые используются на Интернет-серверах и клиентских Интернет-приложениях, являются PHP, Perl, JavaScript, VBScript.

    Объектно-ориентированные языки

    Объектно-ориентированные языки стали дальнейшим уровнем развития процедурных языков, основной концепцией которых есть совокупность программных объектов. Написание программы на языке представляется в виде последовательности создания экземпляров объектов и использование их методов. К ним относятся из первых языков Simula и SmallTalk, далее C++, Java.

    Декларативные языки программирования

    В декларативном программировании задается спецификация решения задачи, то есть дается описание того, что представляет собой проблема и какой ожидается результат. Программы, созданные с помощью декларативного языка, не содержат переменные и операторы присваивания. К декларативным языкам можно отнести SQL и HTML. К подвидам декларативного программирования относится функциональное и логическое программирование.

    Функциональные языки программирования

    Функциональные языки являются языками искусственного интеллекта. Программа, написанная на функциональном языке, состоит из последовательности функций и выражений, которые необходимо вычислить. Основной структурой данных является связный список. Функциональное программирование принципиально отличается от процедурного. Основными функциональными языками являются Lisp, Miranda, Haskel.

    Логические языки программирования

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

    Языки сценариев (скрипты)

    Языки относятся к объектно-ориентированным языкам, используются для написания программ, которые исполняются в определенной программной среде. Тексты программ, написанные на языке сценариев, можно включать в тело Html-документа. Первыми скриптами были Perl и Python, которые изначально были разработаны для операционной системы Unix, а уже в дальнейшем появились версии языков для операционных систем Windows и Macintosh. Для написания программ на языке сценариев необходимо знание процедур и функций системных библиотек.

    Языки, ориентированные на данные

    Языки ориентированы на работу с одним определенным типом данных. Например, APL работает с матрицами и векторами, Snobol обрабатывает строки, SETL выполняет операции над множествами.

    Особое развитие получили языки для работы с базами данных:

    Широкими возможностями обработки документов текстового процессора Microsoft Word, электронных таблиц MS Excel, баз данных MS Access и даже программ подготовки слайдовых презентаций MS PowerPoint обладает встроенный язык системы MS Office – Visual Basic for Application (VBA).

    Так и не нашли ответ
    на свой вопрос?

    Просто напиши с чем тебе
    нужна помощь

    Загадочный Forth. Знакомимся с одним из важнейших языков программирования, о котором мало кто знает

    Содержание статьи

    Создатель Forth Чарльз Мур изначально описал его так:

    FORTH — это программа, которая связывает клавиатуру с компьютером.

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

    Получившийся язык достаточно мощный, чтобы описать сам FORTH, и достаточно гибкий, чтобы делать запросы. Он может быть легко расширен для обработки стольких и столь сложных приложений, насколько позволяет аппаратное обеспечение.
    FORTH — это компьютерная программа. Он обеспечивает полный программный интерфейс между терминалом и компьютером. Включая язык, на котором пользователь может описать свое приложение. И на котором написан FORTH.

    Сегодня существует масса языков программирования, и в каждой из областей свои лидеры. Но для Мура проблема разработки языка была гораздо более глобальной: как кодифицировать мысленные абстракции, чтобы ими можно было оперировать программно?

    Похожие идеи привели к созданию абстрактных типов данных (в каждом языке есть библиотека, реализующая списки, очереди, словари и тому подобное) и объектно ориентированного программирования. Но существуют и другие примеры, как разные идеи могут изменить наши представления о том, что мы называем программированием. Так, идея безопасного программирования породила функциональные языки, где нет операторов, а в некоторых из них — и переменных тоже.

    А что же Forth? Пока другие языки эволюционировали, он остался тем же, потому что практически любую из упомянутых идей в нем и так можно воплотить. Причем сделать это не так тяжело. Представь: ты сможешь создать свою реализацию, которая будет подходить для решения именно твоей задачи.

    Основы синтаксиса, идеология

    Вот еще одно определение Forth, на этот раз из «Википедии»:

    Форт (англ. Forth) — один из первых конкатенативных языков программирования, в котором программы записываются последовательностью лексем («слов» в терминологии языка Форт). Математические выражения представляются постфиксной записью при использовании стековой нотации. Поддерживает механизмы метарасширения семантики и синтаксиса языка для адаптации к нужной предметной области. Синтаксис базового уровня в Форте прост и состоит из единственного правила: «все определения разделяются пробелами».

    Увы, несмотря на всю свою точность, оно не позволяет прочувствовать суть языка. Поэтому покажу на примерах.

    Форт интерактивен, то есть сразу начинает работать. Запускаем Gforth (популярная опенсорсная реализация) и набираем

    Вот это и есть постфиксная запись и стековая нотация. Но где же результат? Результат в стеке. Чтобы его увидеть, нужно ввести точку и снова нажать Enter. Вот как он выглядит:

    Программирование на форте состоит в определении новых слов на основе слов, определенных в словаре. Допустим, ты хочешь написать знаменитую программу «Здравствуй, мир!». Для этого определяем слово:

    Ладно, знакомство состоялось. Предположим теперь, что надо сложить несколько чисел. Можно, конечно, на каждое число ввести по одному плюсу и получить результат. Но почему бы не поручить это сделать самому форту? Определяем слово сумма :

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

    Тестируем программу. Наберем несколько произвольных чисел:

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

    Чтобы не думать о том, что для правильной работы цикла нужно указывать число на единицу меньшее, чем количество чисел, пусть само слово сумма этим и занимается:

    И получаем правильный ответ.

    Где применяется Forth и какой он бывает

    Изначально Forth применялся для программирования встроенных приложений (embedded) и приложений реального времени. Сегодня же на нем можно писать программы для Windows и разных вариантов Unix, включая macOS. Кроме того, коммерческие кросс-компиляторы Forth генерируют высокооптимизированный код, который работает на хорошо зарекомендовавших себя микропроцессорах и микроконтроллерах.

    Open Firmware

    У Forth есть все необходимое, чтобы управлять вычислительной системой в целом, независимо от того, на каком железе она реализована и какая у нее периферия. Это свойство Forth интенсивно используется в разных системах.

    Open Firmware (OpenBoot) — это стандарт, определяющий интерфейсы компьютерной микропрограммной системы. Он был разработан в Sun, и его поддержали Apple, IBM, ARM и большинство других поставщиков чипсетов PCI, отличных от x86. Открытая прошивка позволяет системе загружать независимые от платформы драйверы непосредственно с карты PCI, что повышает совместимость.

    Обращаться к Open Firmware можно с помощью командной оболочки на языке Forth, и большая часть кода написана на нем же. Код Forth может быть скомпилирован в байт-код FCode, независимый от таких деталей компьютерной архитектуры, как набор инструкций и иерархия памяти. Поэтому Open Firmware предоставляет платформенно независимые средства для диагностики во время загрузки и для конфигурирования.

    Микроконтроллеры

    Forth часто применяют для программирования микроконтроллеров. Множество ссылок по этой теме ты можешь найти в топике на русском Forth Forum. Встречаются решения на ARM, AVR, MSP430 и PIC.

    Мне также попалась занимательная книга на русском о применении контроллеров PIC в измерительной технике (PDF) и компилятор программы на форте для микроконтроллеров серии 16Cxx.

    Если же тебе интересен Arduino, можешь использовать AmForth — легко расширяемый интерпретатор команд для Atmel, AVR8 ATmega, T1 MSP430, 32-разрядных вариантов ARM и RISC-V.

    Также из интересного: британская компания MpeForth разработала VFXforth для использования во встроенных решениях; RoboForth — программное обеспечение, которое работает в контроллере робота.

    Ну и конечно же, Forth летал в космос, причем неоднократно. Список миссий и систем, которые работали на Forth, можно найти на сайте NASA. Точнее, можно было некоторое время назад.

    Процессоры на Forth

    В разное время предпринимались разные по подходу и по успешности попытки создать процессор, который бы работал с инструкциями на Forth. В частности, в середине двухтысячных годов такой процессор проектировали в России на основе ПЛИС.

    Но наиболее продвинутая реализация на данный момент — это чипы SEAforth. Создатель Forth Чарльз Мур еще с восьмидесятых годов работает над их архитектурой и успел поучаствовать в создании череды предприятий, которые занимаются коммерческим продвижением этих чипов. Последняя из таких компаний называется GreenArrays и выпускает чипы GA144.

    SEAforth можно рассматривать как однородную вычислительную структуру, изготовленную на одном кристалле. Она состоит из асинхронно работающих вычислительных узлов (nodes). Топология двумерной решетки, лежащая в основе SEAforth, легко масштабируется: созданы мультикомпьютеры, имеющие 24, 40 и 144 узла на кристалле (тот самый GA144).

    Отдельный узел выполняет около 700 миллионов операций в секунду. Пиковое быстродействие мультикомпьютера S40 можно оценить в 28 миллиардов операций в секунду. Подробнее смотри в даташите (PDF).

    Наука и обучение

    Помимо перечисленного, Forth также применяется в академической среде — в аппаратном обеспечении курсов по цифровой обработке сигналов, параллельного программирования, архитектуры вычислительных систем и так далее. А для научных расчетов существует семейство библиотек Forth Scientific Library.

    Одна из новейших реинкарнаций Forth — это Telegram Open Network Virtual Mashine, или TVM (PDF). Она разработана для того, чтобы выполнять код смарт-контракта в блокчейне TON. TVM является стековой машиной.

    Язык программирования Fift (PDF) специально разработан для создания смарт-контракта TON Blockchain, управления им и взаимодействия с TVM и блокчейном TON.

    В руководстве к Fift написано, что Fift основан на стековом языке и мало чем отличается от форта. Так что учти: знание форта пригодится для понимания Fift!

    Еще больше интересных вещей, связанных с Forth, ты можешь найти на ForthHub, на страничке Dr. Cactus и в вики wiki.forth.org.ru.

    Реализуем пример посложнее: код Грея

    В качестве более продвинутого примера, чем «Привет, мир», рассмотрим реализацию генератора кода Грея. Это двоичный код, в котором две соседние кодовые комбинации отличаются цифрой только в одном двоичном разряде. Это свойство кода Грея проявляется в упорядоченном наборе.

    Продолжение доступно только участникам

    Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

    Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

    Язык программирования

    Материал из ПИЭ.Wiki

    Язык программирования (programming language) — формализованный язык, предназначенный для описания программ и алгоритмов решения задач на ЭВМ. Языки программирования являются искусственными; в них синтаксис и семантика строго определены, поэтому они не допускают свободного толкования выражения, что характерно для естественного языка. Языки программирования разделяются на две основные категории: языки высокого уровня и языки низкого уровня.

    Эволюция языков программирования

    В развитии инструментального программного обеспечения рассматривают пять поколений языков программирования (ЯП). Языки программирования как средство общения человека с ЭВМ от поколения к поколению улучшали свои характеристики, становясь все более доступными в освоении непрофессионалам.

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

    Поколения Языки программирования Характеристика
    Первое Языки машинных команд (ЯМК) Ориентированы на использование в конкретной ЭВМ, сложны в освоении, требуют хорошего знания архитектуры ЭВМ
    Второе Ассемблеры, Макроассемблеры Более удобны для использования, но по-прежнему машинно-зависимы
    Третье Языки высокого уровня Мобильные, человеко-ориентированные, проще в освоении
    Четвертое Непроцедурные, объектно-ориентированные, языки запросов, параллельные Ориентированы на непрофессионального пользователя и на ЭВМ с параллельной архитектурой
    Пятое Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки Ориентированы на повышение интеллектуального уровня ЭВМ и интерфейса с языками

    ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.

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

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

    Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. За короткое время Fortran становится основным ЯП при решении инженерно-технических и научных задач. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов — от микро- до супер-ЭВМ, а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры.

    Вскоре после языка Fortran появились такие ныне широко известные языки, как Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, Modula и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.

    Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алгоритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные языки имеют минимальное число синтаксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.

    Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии программного объекта, впервые использованного в языке Simula-67 и составившего впоследствии основу известного языка SmallTalk. Программный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться совершенно разными алгоритмами при выполнении действий, определенных одним и тем же ключевым словом (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выполнения операции умножения. Такими свойствами обладают объектно-ориентированные Pascal, Basic, C++, SmallTalk, Simula, Actor и ряд других языков программирования.

    Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов имеют свой особый синтаксис, который должен соблюдаться, как и в традиционных ЯП третьего поколения, но при этом проще в использовании. Среди языков запросов фактическим стандартом стал язык SQL (Structured Query Language).

    Четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Occam, SISAL, FP и др.), которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные, мультипроцессорные среды и др.), в отличие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.

    К интенсивно развивающемуся в настоящее время пятому поколению относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertList, IQLisp, SAIL и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями — Clout, Q&A, HAL и др.).

Цукерберг рекомендует:  Вакансии NNFormat
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих