Добавлен: 13.05.2023
Просмотров: 319
Скачиваний: 3
Введение
Любой документ, который встречается в сети, помимо собственно текста обязательно имеет строгую внутреннюю структуру. Реализация клиентской стороны пользовательского интерфейса (front end), естественно, невозможна без использования языков гипертекстовой разметки.
Это базис которым должен владеть любой опытный разработчик. Именно повсеместная распространённость языков текстовой разметки обуславливает актуальность данного исследования.
Теоретическая значимость исследования связана с необходимостью систематизировать, классифицировать и упорядочить разрозненные данные об истории языков гипертекстовой разметки, о классификации этих языков, их взаимосвязи и функциях.
Объектом работы выступают языки программирования в целом, предметом - языки гипертекстовой разметки в частности, их взаимосвязь, история и иерархическая структура.
Цель работы вытекает из теоретической обоснованности и формулируется следующим образом: в процессе исследования необходимо провести комплексный анализ языков гипертекстовой разметки как предмета изучения информатики, выявить парадигмы их развития и актуальное состояние на сегодняшний день.
Цель работы последовательно решается посредством следующих задач:
- Проанализировать понятийный аппарат темы;
- Вывести классификацию и функции языков текстовой разметки;
- Определить, принадлежат ли языки разметки к классу языков программирования;
- Проследить развитие языков разметки в исторической динамике;
- Обозначить основные характеристики наиболее распространённых и важных языков разметки.
Структура работы повторяет выше обозначенные задачи. Работа состоит из двух глав, девяти параграфов и библиографического списка. Первая глава посвящена теоретическим вопросам (понятийный аппарат, историческая справка), вторая глава - практическим аспектам темы.
В процессе проведения исследования автор ссылается на отечественные и зарубежные учебники, книги, статьи научных журналов, интернет-ресурсы и собственный опыт веб-разработчика.
Глава I. Языки гипертекстовой разметки: понятийный аппарат, функции, история
1.1. Понятийный аппарат
Приступая к любому теоретическому исследованию, необходимо первоначально определить понятийный аппарат. Разобрать основные термины и понятия, дать им главную характеристику.
Итак, что же такое язык гипертекстовой разметки? Это определённая совокупность символов, последовательностей, которые интегрированы с текстом и передают устройству информацию о строении текстового массива, об особенностях его вывода.[1]
Языки гипертекстовой разметки формально принадлежал к классу компьютерных языков, вопрос об отнесении языков разметки к языкам программирования достаточно спорный и будет детально разобран в данной главе.
Итак, гипотетический текстовый документ может содержать язык разметки. Кроме самого текста (совокупности знаков препинания и слов) в документе будет содержаться информация об особенностях отображения фрагментов этого текста. Мы передаём устройству информацию о том, что в этой части должен быть заголовок, а этот кусок должен быть выделен, следующей - выведен списком и так далее.[2]
Современные языки разметки позволяют выводить различные интерактивные элементы или даже содержания других электронных документов.
Выделим основные свойства языков разметки, подытожив раздел:
- Язык разметки имеет свой синтаксис, лексику, семантику;
- Язык разметки используется не отдельно, а совместно с основным текстом;
- Язык разметки призван передать устройству информацию о строении текста или об особенностях вывода информации.
Мы выделили три основных критерия, по которым можно ориентироваться, классифицируя компьютерные языки для выделения из них языков разметки.
1.2. Языки, разметки как языки программирования
Как было сказано выше, вопрос отнесения языков разметки к языкам программирования является достаточно дискутивным.[3]
Для начала, по знакомой методологии, выделим основные черты и функции языков программирования.
Итак:
Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.[4]
Большинство ресурсов либо полностью употребляет это определение, либо вольно излагает его без потери смысла. Рассмотрим поподробнее составные части определения ЯП:
- Формальный язык — это множество конечных слов (строк, цепочек) над конечным алфавитом.
- Знаковая система — это система однообразно интерпретируемых и трактуемых сообщений/сигналов, которыми можно обмениваться в процессе общения. Иногда знаковые системы помогают структурировать процесс общения с целью придания ему некой адекватности в плане реакций его участников на те или иные «знаки». В качестве примера знаковой системы обычно приводят язык (как в письменной форме так и, в случае естественных языков, в форме речи).[5]
- Компью́терная програ́мма — последовательность инструкций, предназначенных для исполнения устройством управления вычислительной машины.
- Ле́ксика — совокупность слов того или иного языка, части языка или слов, которые знает тот или иной человек или группа людей.
- Синтаксис — сторона языка программирования, которая описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию). Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.[6]
- Сема́нтика в программировании — дисциплина, изучающая формализации значений конструкций языков программирования посредством построения их формальных математических моделей. В качестве инструментов построения таких моделей могут использоваться различные средства, например, математическая логика, λ-исчисление, теория множеств, теория категорий, теория моделей, универсальная алгебра. Формализация семантики языка программирования может использоваться как для описания языка, определения свойств языка, так и для целей формальной верификации программ на этом языке программирования.
- Язы́к — знаковая система, соотносящая понятийное содержание и типовое звучание (написание)
Более простым языком это может быть изложено так:
Язык программирования — множество заранее определенных, однообразных и понятных исполнителю (читай: интерпретатору/компилятору/компьютеру/программисту) инструкций, предназначенных для записи последовательно с целью их исполнения неким устройством, являющимся частью вычислительной машины.
Также язык программирования должен обладать рядом особенностей: инструкций должно быть ограниченное число, и все их должны знать; инструкции должны выстраиваться определенным образом для получения определенных результатов, и все должны об этом знать; должны существовать правила написания инструкций и все должны их знать; каждая конструкция языка должна однозначно соотносить то что написано с тем, что требовалось обозначить.[7]
Рассмотрим классификацию видов различных языков программирования:
- Аспе́ктно-ориенти́рованное программи́рование (АОП) — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.
- Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.[8]
- Процедурное программирование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка.[9]
- Логи́ческое программи́рование — парадигма программирования, основанная на автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий принципы логического вывода информации на основе заданных фактов и правил вывода. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.
- Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
- Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).[10]
- Мультипарадигма́льный язы́к программи́рования — как правило, язык программирования, который был разработан специально как инструмент мультипарадигмального программирования, то есть изобразительные возможности которого изначально предполагалось унаследовать от нескольких, чаще всего неродственных языков.[11]
- Эзотерический язык программирования — язык программирования, разработанный для исследования границ возможностей разработки языков программирования, для доказательства потенциально возможной реализации некой идеи (так называемое «доказательство концепции», англ. proof of concept), в качестве произведения программного искусства[en], или в качестве шутки (компьютерного юмора).
И, в конце концов, рассмотрим вопрос полноты по Тьюрингу как критерия полноты языка программирования.
Как известно, в теории вычислимости исполнитель (множество вычисляющих элементов) называется тьюринг-полным, если на нём можно реализовать любую вычислимую функцию. Другими словами, для каждой вычислимой функции существует вычисляющий её элемент (например, машина Тьюринга) или программа для исполнителя, а все функции, вычисляемые множеством вычислителей, являются вычислимыми функциями (возможно, при некотором кодировании входных и выходных данных).[12]
Название пошло от Алана Тьюринга, который придумал абстрактный вычислитель — машину Тьюринга и дал определение множества функций, вычислимых посредством машин Тьюринга.
Другими словами язык является полным по Тьюрингу, если любая вычислимая функция, которая Вам нужна, может быть записана на этом языке и решена его исполнителем.
Теперь, имея соответствующие теоретическую подготовку, мы в рамках исследования можем сделать вывод относительно принадлежности или, наоборот, не принадлежности языка разметки к классу языков программирования.
Ответим на основные вопросы:
- Языки разметки - это всё же языки, которые имеют все свойства, присущие языкам.
- В общем и целом, языки разметки соответствуют конвенционально принятым, формальным определениям, которые даются классы языков программирования. Можно даже конкретизировать и отнести его к декларативным языкам программирования.
- Языки разметки не удовлетворяют критерию полноты по Тьюрингу. С помощью языков разметки мы можем реализовывать только лишь узкую, ограниченную область действий, которые интерпретируются устройством.
- В зависимости от контекста и при всех возможных допущениях, мы можем назвать язык разметки языком программирования. Однако следует понимать, что при таких допущениях языками программирования можно с равным успехом назвать с CSS, и SQL, и в том числе язык XML.
- Вопрос о том, является ли HTML в частности полноценным языком программирования или в целом языком разметки, несмотря на дискутивность, решается по простому сопоставлению признаков. Языки разметки не приспособлены для проведения вычислений, они не соответствуют критерию полноты по Тьюрингу и поэтому их нельзя назвать полноценными языками программирования. [13]