Для начала определимся, что понимается под «высоким уровнем»? Традиционно языки программирования разделяются на поколения. Сам термин поколения языка достаточно редко используется в русской технической литературе, да и сам язык не всегда можно четко и категорично отнести к тому или иному поколению. Поэтому давайте разберемся, сначала с ним, а потом перейдем собственно к PHP.
Поколение языка к его возрасту имеет косвенное отношение. Словом «поколение» выражается лишь общие тендении и абстрактность языковых терминов. Даже в наши дни до сих пор создаются языки «младших» поколений, для решения каких либо конкретных задач, если для этого есть предпосылки.
Языком первого поколения является машинный код. Он и сейчас используется, в него в конечном итоге транслируют все другие языки программировния. Молодежь может быть не в курсе, но еще лет 30-40 тому назад на нем писали живые люди. Кроме шуток. Не хакеры, а прикладные программисты. Прямо так байтик по байтику составляли прикладные программы, например расчет зарплаты сотрудникам завода.
Наиболее известный представитель второго поколения — Ассемблер (ASM). С помощью него повысилась скорость написания программ и совместимость при переносе на родственное оборудование. Ассемблер не просто привел в соответствие машинным кодам какие-то мнемонические команды, а позволил абстрагироваться от многих технических деталей, позволив больше сосредоточится на решении прикладной задачи. Собственно этот последний тезис является главным признаком индукции при переходе от одного поколения языка к другому.
Третье поколение языков позволило практически полностю абстрагироваться от «железа». Их уже столько много, что перечислить затруднительно. Одни из пионеров — Фортран, Паскаль, Бейсик. Языки третьего поколения до сих пор самые используемые и кажется, что покрывают все необходимые потребности современного программирования. Однако прогресс не стоит на месте. Теория программирования сделала следующий шаг и породила четвертое поколение языков (4GL).
Не каждый язык имеет ярлык конкретного поколения и свое четкое место на шкале. Примером такого является Си. Хотя Си появился, когда эра третьего поколения была уже в разгаре, но родился он с явними признаками языка второго поколения. Это нисколько не аттавизм и не деградация. Он именно таким и задумывался – язык для написания операционных систем. Взяв все необходимые новшества и синтаксические удобства языков третьего поколения, он позволяет писать программы, практически оптимизировануми также, как на Ассемблере. Можно сказать, что он находится на отметке 2 ½ поколения.
Не меннее интересна картина с С++. Синтаксически это тот же Си с дополнительными прибамбасами. Но из-за них С++ перестал быть языком. Сам по себе он не представляет бОлшей ценности, чем Си. Интересным он становится тогда, в нем создана та или иная объектная иерархия, переопределены операторы и т.п. Когда мы получаем новую концепцию работы с данными. Практически это новый язык с Си синтаксисом, который может соответствовать любому поколению. То есть по сути С++ не язык, а инструмент для создания языков. К сожалению большинство програмистов звезд с неба не хватают. Какая бы не была навороченная иерархия объектов, созданная в С++, она будет соответствовать банальному третьему поколению языков. ООП находится в полном перпендикуляре к линии повышения абстракций.
Мы сейчас живем на стыке эпох третьего и четвертого поколения. Многие просто недопонимают самого смысла появления нового поколения, при том, что старые языки так прекрасно решают все вопросы. Суть индукции следующего шага все та же — абстракция от технических деталей с целью более быстрого решения прикладной задачи.
Здесь следовало бы привести примеры языков четвертого поколения. Перед этим необходимо сделать оговорку, что упомянутые далее языки могут обладать в той или иной мере свойствами четвертого поколения. Синтаксически это может быть не выражено явно. 4GL — это новая концепция, а не новый синтаксис. Синтаксически язык может быть похож на язык третьего поколения, но подход при работе с ним будет другим.
Формально к языкам четвертого поколения можно отнести SQL. Это наиболее известный представитель, но посколько он используется в очень узкой специфической задаче, то наглядно не демонстрирует все аспекты 4GL. Одну из ранних попыток предпринял Informix. Вместе со своей базой данных и набором стандартных библиотек для других популярных языков третьего поколения, они предлагают свой собственный язык Informix-4GL. В качестве синтаксической модели они взяли SQL и дополнив другими языковыми конструкциями сделали из него полноценную среду разработки, в котором SQL команды явлются не чем-то инородным, заключенным в кавычки, а нативной частью языка. В этом смысле к языкам четвертого поколения можно отнести семейство dBase, FoxBase, Clipper и им подобные.
Внимательный читатель может заметить из нескольких перечисленных примеров, что здесь говорится даже больше не о языке, а о среде разработки. Это будет правильное замечание, поскольку современые прикладные задачи требуют баз данных, не просто как нечто, где можно сохранить кое-какие конфигурационные данные. База данных (в широком смысле этого слова) становится ядром, вокруг которого строится приложение. Поэтому не удивительно, что она уже не хочет довольствоваться правами сторонней библиотеки (бедного родственника). Из-за естественных ограничений мы получаем ситуацию, когда не к языку привязывается база данных, а вокруг какой-то конкретной реализации базы возводится язык. Универсальные решения мне пока не известны.
В последнее время дополнительно к базам данных появился еще один столп, вокруг которого необходимо строить приложения, и который запросил свою львиную долю внимания – веб. Но об этом ниже.
Продолжение следует…
Высокоуровневое программирование на PHP.
Часть 2. Место PHP на шкале поколений.
Поколение языка к его возрасту имеет косвенное отношение. Словом «поколение» выражается лишь общие тендении и абстрактность языковых терминов. Даже в наши дни до сих пор создаются языки «младших» поколений, для решения каких либо конкретных задач, если для этого есть предпосылки.
Языком первого поколения является машинный код. Он и сейчас используется, в него в конечном итоге транслируют все другие языки программировния. Молодежь может быть не в курсе, но еще лет 30-40 тому назад на нем писали живые люди. Кроме шуток. Не хакеры, а прикладные программисты. Прямо так байтик по байтику составляли прикладные программы, например расчет зарплаты сотрудникам завода.
Наиболее известный представитель второго поколения — Ассемблер (ASM). С помощью него повысилась скорость написания программ и совместимость при переносе на родственное оборудование. Ассемблер не просто привел в соответствие машинным кодам какие-то мнемонические команды, а позволил абстрагироваться от многих технических деталей, позволив больше сосредоточится на решении прикладной задачи. Собственно этот последний тезис является главным признаком индукции при переходе от одного поколения языка к другому.
Третье поколение языков позволило практически полностю абстрагироваться от «железа». Их уже столько много, что перечислить затруднительно. Одни из пионеров — Фортран, Паскаль, Бейсик. Языки третьего поколения до сих пор самые используемые и кажется, что покрывают все необходимые потребности современного программирования. Однако прогресс не стоит на месте. Теория программирования сделала следующий шаг и породила четвертое поколение языков (4GL).
Не каждый язык имеет ярлык конкретного поколения и свое четкое место на шкале. Примером такого является Си. Хотя Си появился, когда эра третьего поколения была уже в разгаре, но родился он с явними признаками языка второго поколения. Это нисколько не аттавизм и не деградация. Он именно таким и задумывался – язык для написания операционных систем. Взяв все необходимые новшества и синтаксические удобства языков третьего поколения, он позволяет писать программы, практически оптимизировануми также, как на Ассемблере. Можно сказать, что он находится на отметке 2 ½ поколения.
Не меннее интересна картина с С++. Синтаксически это тот же Си с дополнительными прибамбасами. Но из-за них С++ перестал быть языком. Сам по себе он не представляет бОлшей ценности, чем Си. Интересным он становится тогда, в нем создана та или иная объектная иерархия, переопределены операторы и т.п. Когда мы получаем новую концепцию работы с данными. Практически это новый язык с Си синтаксисом, который может соответствовать любому поколению. То есть по сути С++ не язык, а инструмент для создания языков. К сожалению большинство програмистов звезд с неба не хватают. Какая бы не была навороченная иерархия объектов, созданная в С++, она будет соответствовать банальному третьему поколению языков. ООП находится в полном перпендикуляре к линии повышения абстракций.
Мы сейчас живем на стыке эпох третьего и четвертого поколения. Многие просто недопонимают самого смысла появления нового поколения, при том, что старые языки так прекрасно решают все вопросы. Суть индукции следующего шага все та же — абстракция от технических деталей с целью более быстрого решения прикладной задачи.
Здесь следовало бы привести примеры языков четвертого поколения. Перед этим необходимо сделать оговорку, что упомянутые далее языки могут обладать в той или иной мере свойствами четвертого поколения. Синтаксически это может быть не выражено явно. 4GL — это новая концепция, а не новый синтаксис. Синтаксически язык может быть похож на язык третьего поколения, но подход при работе с ним будет другим.
Формально к языкам четвертого поколения можно отнести SQL. Это наиболее известный представитель, но посколько он используется в очень узкой специфической задаче, то наглядно не демонстрирует все аспекты 4GL. Одну из ранних попыток предпринял Informix. Вместе со своей базой данных и набором стандартных библиотек для других популярных языков третьего поколения, они предлагают свой собственный язык Informix-4GL. В качестве синтаксической модели они взяли SQL и дополнив другими языковыми конструкциями сделали из него полноценную среду разработки, в котором SQL команды явлются не чем-то инородным, заключенным в кавычки, а нативной частью языка. В этом смысле к языкам четвертого поколения можно отнести семейство dBase, FoxBase, Clipper и им подобные.
Внимательный читатель может заметить из нескольких перечисленных примеров, что здесь говорится даже больше не о языке, а о среде разработки. Это будет правильное замечание, поскольку современые прикладные задачи требуют баз данных, не просто как нечто, где можно сохранить кое-какие конфигурационные данные. База данных (в широком смысле этого слова) становится ядром, вокруг которого строится приложение. Поэтому не удивительно, что она уже не хочет довольствоваться правами сторонней библиотеки (бедного родственника). Из-за естественных ограничений мы получаем ситуацию, когда не к языку привязывается база данных, а вокруг какой-то конкретной реализации базы возводится язык. Универсальные решения мне пока не известны.
В последнее время дополнительно к базам данных появился еще один столп, вокруг которого необходимо строить приложения, и который запросил свою львиную долю внимания – веб. Но об этом ниже.
Продолжение следует…
Высокоуровневое программирование на PHP.
Часть 2. Место PHP на шкале поколений.