к алгоритмизации   алгоритмы, струкутуры данных и программирование   СУБД   ЯиМП   3GL   4GL   5GL   технологии прогр.

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

Статические и динамические языки и процессоры

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

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

К динамическим языкам относятся: Basic, Perl, Tcl, Python, PHP, Ruby, Smalltalk, JavaScript.

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

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

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

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

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

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

Разработчики все чаще отдают предпочтение подходам, которые предусматривают использование динамических языков. Среди этих подходов AJAX (Asynchronous JavaScript and XML), LAMP, Linux; Web-сервер Apache; СУБД MySQL, а также Perl, PHP или Python) и Ruby on Rails. К тому же крупные компании, в том числе Microsoft и Sun Microsystems, поддерживают динамические языки в своих платформах разработки.

Автор языка Python Гвидо ван Россум, в настоящее время работающий в компании Google с исследованиями, связанными с разработкой, подчеркивает, что динамические языки обладают большей гибкостью, чем статические, и позволяют разработчикам писать более функционально насыщенный код, причем быстрее и проще. Кроме того, подчеркнул старший аналитик исследовательской компании Blackfriars Communications Карл Хоув, давно занимающийся вопросами развития ядра ОС Unix, многие динамические языки являются свободно распространяемыми, что дает им дополнительное преимущество в глазах разработчиков.

Типизация в динамических языках

Типизация — главный, но не единственный фактор, определяющий, является ли язык динамическим.

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

Статические языки в большинстве своем (но не всегда) поддерживают строгую и статическую систему типов. Динамические языки, как правило (но тоже не всегда), слабо и динамически типизированы. К примеру, некоторые динамические языки, такие как Lisp, строго типизированы; некоторые статические языки, такие как Си и C++, слабо типизированы.

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

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

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

Достоинства и недостатки статических и динамических языков

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

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

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

Автор платформы Ruby on Rails Дэвид Хайнмейер Хенссон, один из руководителей компании 37signals, занимающейся разработкой Web-приложений, заметил, что применение в процессе разработки всех правил статической типизации может привести к неоправданным задержкам при выполнении проектов и получении их результатов.

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

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

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

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

Большая гибкость

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

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

Однако и в этой области всё может поменяться кардинальным образом после разработки соотвествующих оптимизаторов для компиляции и сборки исполняемых модулей.

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

Обзор динамических языков

Динамические языки вещь далеко не новая. К примеру, BASIC, APL и Lisp были разработаны еще в конце 50-х годов. С того времени появилось множество других языков, в том числе ABAP, Groovy, SAS и Tcl; часть из них, как показывает таблица, становятся очень популярными.

JavaScript и ECMAScript

В 1995 году компания Netscape Communications создала строго типизированный язык скриптов JavaScript, слабо связанный с языком Java, тоже поддерживающим строгую типизацию. Его можно встраивать в HTML-код Web-страницы, что позволяет добавлять динамический контент, который может реагировать на движение мыши и другие действия пользователя.

ECMAScript, одобренный ISO и европейской организацией по стандартизации ECMA, представляет собой кроссплаторменный язык скриптов общего назначения. Он создан для того, чтобы объединить основные базовые элементы JavaScript, и сравним с Jscript корпорации Microsoft.

PHP

В 1995 году программист Расмус Лердорф предложил PHP, самый популярный из динамических языков, согласно данным опроса Tiobe.

PHP (первоначально это название расшифровывалось как personal home page, «персональная домашняя страница») представляет собой свободно распространяемый серверный кроссплатформенный объектно-ориентированный язык скриптов, предназначенный для создания динамических Web-страниц. Пользователи добавляют код PHP в HTML-код страницы.

Расширение PHP Data Objects определяет простые и согласованные интерфейсы для доступа к различным реляционным базам данных.

Компания Zend Technologies, выпускающая продукты и сервисы PHP, сотрудничает с корпорацией Microsoft, благодаря чему этот язык поддерживается в операционной системе Windows.

Perl

В 1987 году Ларри Уолл представил Practical Extraction and Reporting Language (www.perl.org).

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

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

Python

Ван Россум создал Python (www.python.org) в 1990 году. Это свободно распространяемый интерпретируемый объектно-ориентированный язык с динамической типизацией, похожий на Perl. Язык Python, который ван Россум назвал в честь популярного телевизионного шоу «Летающий цирк Монти Питона» (Monte Python’s Flying Circus), удобен для восприятия и известен своим ясным и простым синтаксисом.

Это легко переносимый язык; многие операционные системы, в том числе Mac OS, Unix и Windows, могут интерпретировать его операторы.

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

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

Ruby

Специалист в области информационных систем Юкихиро Матсумото публично представил Ruby в 1995 году.

Ruby похож на Perl и Smalltalk. Это свободно распространяемый интерпретируемый полностью объектно-ориентированный язык. Он известен своей ясностью, точностью, согласованностью, структурированностью и расширяемостью. Ruby легко переносится на различные операционные системы — Linux, Mac OS, Unix и Windows.

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

Ruby поддерживает динамическую типизацию и объектно-ориентированное, процедурное и функциональное программирование.

Расширенная поддержка

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

LAMP. Платформа LAMP (www.lampware.org) создана для разработки приложений, требующих гибкого подхода, в первую очередь для Web. Последние два года она приобретает все большую популярность, поскольку простые Web-приложения нужным многим. С недавнего времени компании начали использовать LAMP для разработки более сложных программ. Кроме LAMP появилось много аналогичных пакетов для разных ОС, с том числе и кроссплатформенные сборки.

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

Seaside. Платформа Seaside (www.seaside.st), выпущенная в 2004 году, представляет собой AJAX-подобную оболочку для создания Web-приложений с помощью динамического языка Smalltalk.

Ruby on Rails. Язык Ruby составляет основу платформы Ruby on Rails, популярность которой растет, поскольку она является свободно распространяемой и удобна в использовании. Платформа Rails использует интегрированные пакеты программирования и готовый код, называемый конвенциями (convention). Хенссон создавал ее так, чтобы она была полной и не требовала никакой предварительной конфигурации. Сторонники Rails считают, что данная платформа лучше подходит для создания инфраструктур, которые передают информацию из базы данных в Web-приложение. Подобные решения используются в электронной коммерции, онлайновых сообществах и для извлечения данных.

Eclipse Foundation. Некоммерческая организация Eclipse Foundation, занимающаяся развитием свободно распространяемой, написанной на Java платформы разработки Eclipse, добавляет к ней PHP-интегрированную среду разработки.

Microsoft. Корпорация Microsoft поддерживает динамические языки, такие как Iron Python, JScript и PHP и предусматривает их использование, например, в среде исполнения CLR (common language runtime) в платформе .NET. Эта среда управляет выполнением программ, написанных на любом из поддерживаемых языков.

В то же время Microsoft предлагает на своем портале совместной разработки CodePlex компилятор Phalanger. Этот компилятор позволяет скриптам на PHP без каких-либо изменений работать в .NET.

Sun. «Из трех компонентов платформы Java — виртуальной машины, прикладных программных интерфейсов и языка — можно заменить именно язык», — подчеркнул Тим Брей, директор Sun Microsystems по Web-технологиям. Он отметил, что Sun намерена реализовать в Java поддержку различных языков, в том числе и динамических.

В настоящее время компания поддерживает JavaScript на своих платформах Java и через интегрированную среду разработки NetBeans. Недавно, по словам Брея, Sun пригласила на работу специалистов для создания Java-реализации Ruby, получившей название JRuby.

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

к алгоритмизации   алгоритмы, струкутуры данных и программирование   СУБД   ЯиМП   3GL   4GL   5GL   технологии прогр.

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

Bourabai Research Institution home page

Боровское исследовательское учреждение - Bourabai Research Bourabai Research Institution