Здравствуйте, гость ( Вход | Регистрация )

Свернуть

Новости

Форум Лучшее из галереи Уроки и статьи
07.12.2015 Выставочный зал: кошарик - персональная выставка
31.08.2015 Интересные ссылки для рисовальщиков
21.01.2015 Выставочный зал 2: Игрушки Олеси Гавриленко

27.12.2014 Выставочный зал: кошарик - персональная выставка
17.11.2014 Дуэль "Рыбки" - победитель Лисичка
05.11.2014 Конкурс иллюстраций "Снежная королева", до 31 января
30.10.2014 Дуэль "Рыбки" до 16 ноября
14.07.2014 Мастер-класс Мини-мишка в технике фелтинга
26.05.2013 Ау! Мы ищем таланты! – приглашаем модераторов!
«Сказочное Дерево»
tn_gallery_3_6_23930.jpg
Aрт-полотно
© чудик
06.01.2016 Виртуальный Музей: Русский живописец Василий Дмитриевич Поленов
28.12.2015 Виртуальный Музей: Нидерландский живописец Квентин Массейс
16.12.2015 Виртуальный Музей: Итальянский живописец Франче́ско Айец
17.11.2015 Виртуальный Музей: Луи Анкетен (Louis Anquetin)
11.11.2015 Виртуальный Музей: Русский живописец Алексей Иванович Корзухин
Файловый архив
06.09.2013 Прочее: Файлы к уроку "Чайная церемония"
05.09.2013 Журнал Art Tower: ArtTower Magazine #8
16.05.2013 Adobe Photoshop: Кисти: Reid Southen brush
16.05.2013 Adobe Photoshop: Кисти: Goro Fujita brush
16.05.2013 Adobe Photoshop: Кисти: Кисти для рисования в Photoshop
Блоги Новости в цифровом мире и мире дизайна
02.12.2014 Дама с каменьями: Вести с крыши 2
08.11.2014 Timenews: Вассерман: прежняя модель мировой экономики исчерпала себя
06.11.2014 Дама с каменьями: Приятные вести с крыши))) от Гаргула)
02.11.2014 Spell: Книги Дж. Кэмерон
22.10.2014 Vjaz: от ФУ до МА
25.11.2015 Комментарий от Foxx в Costa Rica Adventure Divers, Логотип для компании и рисунок на майку (maria_mer)
18.11.2015 Комментарий от maria_mer в Spellforce - майка, для фанов игры (maria_mer)
18.11.2015 Комментарий от maria_mer в Белая книга. Целитель - любительский прект (maria_mer)
09.04.2015 Комментарий от Romana в Книги Дж. Кэмерон (Spell)
08.04.2015 Комментарий от Romana в Я решил вернуться... (Элбирет)
16.03.2015 ФОТОФОРУМ-2015
01.01.2015 ARQUTE.com и ArtTalk.ru закрываются
19.01.2017 Конкурс дизайна логотипов
26.12.2016 ру/Ководство: О творческом развитии
14.10.2016 ру/Ководство: Разнообразие

 
Добавить ответ в эту темуОткрыть тему
> Основоположения программирования - часть II, Введение: о языках программирования
V
Des
сообщение 25.03.2008 - 22:46
Сообщение #1


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


[продолжение. Начало здесь]

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

1) Что такое язык программирования

Любая программа в конечном итоге (для процессора) - это последовательный набор инструкций (команд) процессора, записанный в двоичном коде.
Выглядит такой набор инструкций для нас как совершенно бессмысленный набор цифр. Это процессору понятно, что, напр., «00000000 00010101 11101000 00000000 00000000 00000111 11111111 01100100 11100100 11100010....» (в двоичной системе счисления) или «00 15 1D 00 00 AF 40 00 00 3F FB 27 27...» (в шестнадцатиричной) означает то-то и то-то, но мы не сможем ни писать программы на таком «языке», ни понимать уже написанные. Впрочем, когда компьютеры были большими, а Интернета не было вовсе - именно так, прямо «ноликами» и «единичками», все программы и писались. Тогда же был придуман Ассемблер - т.е. практически запись команд процессора условными названиями, которые потом специальной программой превращались в собственно коды процессора - которые и можно было загрузить в память какого-нибудь многотонного «Эниака», туда же загрузить превращенные в такие же коды данные и, наконец, запустить на выполнение.
Напр., Move AX, DX означало «переместить число из регистра процессора AX в регистр DX». Так уже можно было писать программы - но напрямую для процессора. Контролируя, так сказать, каждый его шаг.

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

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

Эта специальная программа называется компилятор, а языки, так устроенные - языками высокого уровня.
«Уровень» здесь означает степень абстрагирования от конкретной технической реализации, от самого процессора. Чем выше уровень языка программирования, тем меньше программист занимается тем, что непосредственно происходит в процессоре и в системе, тем более для него компьютер становится абстрактной «числодробилкой», тем более «виртуальными» (пока еще в переносном смысле) становятся для него составные части компьютера, и тем более он может заниматься более общими проблемами: организацией структур данных, оптимизацией алгоритмов, взаимодействием различных частей программы, взаимодействием программ между собой... или, например, красотой кнопочки в флэш-ролике.
К тому же для того чтобы одну и ту же программу заставить работать на различных компьютерах (компьютерах разных фирм - напр., у компании Apple еще недавно компьютеры оснащались совершенно другими процессорами) и под управлением различных операционных систем - достаточно уже (теоретически...) создать компиляторы соответствующего языка для различных процессоров / ОС. Что и делалось - когда более успешно, когда менее...Во всяком случае - это уже далеко от машинного кода. Куда ведь проще написать «FOR (I= 0; I<1000;I++) {S=S+I }», чем три сотни ассемблерных инструкций, которые обеспечивают выполнение этой операции, да и то - только на одном виде машин.

Однако до той «языковой группы», к которой относится Action Script 2.0 - еще несколько ступеней «удаления от уровня процессора», «восхождения» по уровням абстракции.

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

Абстрагироваться от «железных» проблем помогают и современные ОС. Пересылать данные мы будем не на «реальный винчестер», а отсылать некоему абстрактному «виртуальному устройству - виртуальному винчестеру», который нам «подставляет» ОС, а уж записать все это на настоящий, невиртуальный, винчестер - забота ОС. Мы даже и помнить не будем при этом о том, как этот винчестер размечен, какая у него «геометрия» (набор физических параметров). Нас будет волновать только - разрешено ли нашей программе записывать что-то туда, куда мы хотим записать, и хватит ли там для этого места.
Все для нас, программирующих на современном языке высокого уровня, представлено в виде «виртуальных устройств», которые обладают ровно тем набором «виртуальных» же параметров, который нам действительно нужен. Зачем нам знать, какой именно MAC-адрес имеет сетевая карта? - да ни к чему, если только драйвера (т.е. программы, как раз и управляющие устройствами физическими и создающими для нас представление соответствующих устройств «виртуальных») этой сетевой карты работают как надо - мы просто напишем «getBytesTotal();» - и программа уже будет иметь данные о том, какого размера ролик в данный момент закачивается в наш компьютер из Интернета для просмотра - а как там функционирует цепочка «броузер -> флэш-плагин -> операционная система -> драйвер сетевого адаптера» и еще полсотни блочков и модулей для того, чтобы получить эту цифирЬку - нам все равно. Нам (в нашей программе) нужна эта цифирЬка.
Правда, иногда связка «броузер <=> флэш-плагин» нас все же интересует. Чаще - в двух случаях: когда она не работает из-за того, что плагина нет, и когда она «зависает» (надолго останавливает работу, при этом подтормаживая работу остальных программ) из-за того, что мы что-то не то накодили. В первом случае мы плагин ищем и устанавливаем, во втором - средствами ОС останавливаем и выгружаем нашу зацикленную программу и ищем ошибку в наших исходных кодах.
Что нас по-прежнему будет интересовать - так это скорость работы программы (производительность). Ни один процессор не справится с криво написанной программой, которая делает 100 операций там, где можно сделать одну, и миллион там, где можно обойтись тысячей. Тем более что один из двух недостатков (пока кардинально неисправимых, к сожалению) того языка программирования, на примере которого мы знакомимся с кодингом - как раз-таки низкая производительность. Отчего это так - мы узнаем из следующей главки.

2) Какие бывают языки программирования

Компилируемые, интерпретируемые и с промежуточным байт-кодом - это классификация языков программирования по способу исполнения.
В предыдущей главке мы говорили о том, что после того, как мы написали исходный текст программы на каком-либо языке программирования, мы с помощью специальной программы - компилятора - превращаем его в исполняемый машинный код. Все файлы расширениями *.exe, например, - именно такие файлы в машинных кодах (если точнее - то это т.н. PE-файлы, и это еще не то, что прямо передается процессору - кроме машинных кодов, эти файлы содержат еще специальные «указания» и данные для операционной системы, чтобы ОС могла организовать выполнение машинных кодов). Так «устроены», напр., языки C/C++ и Паскаль.
Достоинство такого способа - в производительности. Кроме того, получить из исполняемого файла исходный текст программы фактически невозможно - можно только получить представление в виде машинных команд - ассемблера. Эта «скрытость» кода в мире коммерческого программирования очень удобна. «Защита» программы - это на 99% затруднение превращения ее обратно в исходный код (дизассемблирования). Ведь дизассмеблировав программу, можно «вырезать» из исходного кода, напр., участок, отвечающий за регистрацию легального пользователя и скомпилировать программу заново - что, собственно, и называется «хакнуть».
Если вы думаете, что это не имеет отношения к Action Script и Флэш - то вы ошибаетесь: Флэш может «компилировать» особенный вид exe-файлов для Windows, и вопрос защиты вашей программы там вполне актуален - когда и если мы с вами дойдем до разработки коммерчески ценных программ на AS2.
Недостаток компилируемых языков программирования в том, что в скомпилированной программе уже ничего просто так не изменить. Изменение одного символа в исходном коде требует полной перекомпиляции.
Для запуска скомпилированной программы не нужно ничего, кроме ее самой и ее компонентов («большие» программы содержат в «пакете поставки» еще и внешние «библиотеки» (в Windows - *.dll-файлы, напр.), файлы конфигурации (напр., *.ini-файлы, хотя все чаще параметры хранятся в виде XML-файлов) и многие другие данные, к которым программа обращается по мере надобности...) Процесс установки такой программы на компьютер пользователя - это «распаковка» и копирование самой программы + всех нужных ей дополнительных файлов на винчестер пользователя и «прописывание» ее в операционной системе (Windows, например, позволяет программам хранить некоторые свои данные - вроде даты установки - в т.н. «реестре»; там же в процессе установки зачастую «прописываются» и пути к нужным программе файлам / каталогам - ведь на различных машинах они могут быть различными). Скомпилированная программа «привязана» к конкретной операционной системе (или, как мин., семейству операционных систем). «Экзешник» для Windows невозможно запустить под Linux или MacOS.

Но есть и другой способ выполнить программу, представленную в виде исходных текстов. Некоторые языки программирования выполняются по-другому, а именно: запускается специальная программа - интерпретатор этого языка, и она получает исходный текст программы в качестве данных, «читает» его строка за строкой и построчно выполняет. Так работают Javascript, который используется на веб-страницах (интерпретатором в этом случае выступает броузер), Python, который часто используется в компьютерных играх и «больших» пакетах 3D-графики (в Poser, напр.) в качестве «внешнего» языка, позволяющего пользователю задать параметры или написать дополнительный модуль к основному пакету, или автоматизировать какую-то последовательность действий, нужную пользователю, PHP, на котором работает огромное количество сайтов ( в т.ч. и этот сайт). Такие языки называют «интерпретируемыми» (или - скриптовыми, а программы на них - скриптами).
Кстати говоря, название «Action Script» к этому отношения не имеет - поскольку AS не относится ни к «чисто компилируемым», ни к «чисто интерпретируемым» языкам. Flash в этом смысле - большое исключение из классификаций (впрочем, с приходом MSIL - системы программирования от MS, претендующей на всеобщую универсальность - становящееся правилом)

Достоинство скриптовых языков в том, что исходный текст можно изменить в любой момент. Для программиста исходный и исполняемый код программы на скриптовом языке - фактически одно и то же. В т.ч. может это сделать и пользователь - переделав программу (хоть в notepad-е, хотя для каждого языка программирования существуют куда более удобные средства разработки) и тут же, без всяких компиляций, запустить ее на исполнение. Так пишутся участки Javascript-кода для веб-сайтов, так пишутся PHP-программы, результат работы которых - сайт...
Для запуска программы на скриптовом языке нужен установленный и запущенный в системе интерпретатор этого языка. Зато сама скриптовая программа не требует установки.
Сама скриптовая программа не «привязана» к операционной системе: если для этой системы есть интерпретатор какого-то скриптового языка, то можно выполнить скрипт на этом языке под этой ОС без проблем. Напр., Javascript выполняется и под Linux, и под Windows - был бы броузер с поддержкой этого языка, - без изменения кода самой программы*. PHP работает и на серверах под Linux +Apache, и на серверах под Windows + IIS, благо интерпретаторы этого языка под эти ОС имеются.
Недостаток скриптовых языков - низкая производительность. Ведь интерпретатору нужно «на лету» выполнить всю ту работу, которую компилятор делает заранее. Именно это определяет их область применения: небольшие задачи, которые не требуют большой скорости обработки данных, специализированные языки, являющиеся частью больших программных пакетов (Adobe Script, 3DMax Script), которые позволяют автоматизировать выполнение функций, заложенных в этих программных пакетах, веб-дизайн. Относительная простота программирования на скриптовых языках способствует тому, что как минимум основы некоторых из них - от PHP до того же Python-а - осваивают и используют люди, вообще-то далекие от программирования, в т.ч. дизайнеры.

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

Так к каким же языкам относится Action Script 2.0? Хороший вопрос...
Отчасти это язык компилируемый, поскольку требует предварительной компиляции созданного ролика. По другим признакам - скриптовый, потому что требует интерпретатора (плагина к броузеру или специального flash-плеера) для запуска. По-третьим - язык с промежуточным байт-кодом, поскольку «скомпилированный» ролик (*.swf) не является исполняемым файлом, а представляет из себя сокращенную запись скрипта и описание анимации (данные) в специальном сжатом формате, который "понимает" интерпретатор flash.
И хотя можно «скомпилировать» флэш-ролик и в формат *.exe, этот исполняемый файл фактически будет представлять из себя тот же swf-файл + встроенный в «экзешник» флэш-плеер. Внешне-то это выглядит почти как «взрослая» компиляция, но по сути - совершенно другое.
Достаточно сказать, что даже сама фирма Macromedia, придумавшая и разработавшая этот язык, не придумала названия для процесса «компиляции» ролика и вместо «compile» (скомпилировать) или save (сохранить) использовала нейтрально-хитрое «Publish» («опубликовать») в соответствующем пункте меню Flash-редактора, а процесс «компиляции» ролика называется «генерацией», а не компиляцией или сохранением.

С одной стороны, Flash - это специализированный язык, являющейся частью системы разработки интерактивных анимационных роликов для интернет и (реже) локально - на CD/DVD, т.е. весьма узкой задачи. В этом смысле Action Script занимает скромное место среди «больших» языков, наследником которых он в каком-то смысле является - C/C++, Java и Паскаль. С другой - на Flash можно писать настоящие приложения (программы, предназначенные для решения той или иной задачи пользователем; напр., Photoshop - это приложение), а в состав пакета Flash 8 Pro уже входят компоненты, причем вполне серьезные, в т.ч. - парсер XML («декодировщик» файлов на языке разметки; о таких языках чуть-чуть будет ниже), стандартные элементы пользовательского интерфейса вроде «окна» (window), «индикатора прогресса» (progress bar) и др., и система разработки компонентов - а это уже позволяет рассматривать Flash как систему RAD (Rapid Applicatiion Developement, «Быстрая Разработка Приложений), что ставит его как минимум в один ряд с Java и другими «большими» языками. Если добавить к этому тот факт, что Flash - полностью объектно-ориентированный язык (о процедурных и объектно-ориентированных языках и о том, какое место среди них занимает AS2, мы поговорим в следующей главе), т.е. использует наиболее «продвинутую» парадигму программирования - приходится отнестись к AS весьма и весьма серьезно.

Продолжение


______________
* теоретически. Практически проблемы могут быть с самим интерпретатором под конкретную ОС и с тем, как его авторы трактуют стандарты того или иного языка, насколько точно их соблюдают. Из-за «вольностей» в этой трактовке у разработчиков веб-страниц и по сию пору немало головной боли с Javascript...
** За исключением FlashLite - разновидности Flash для мобильных устройств, которая с большим или меньшим успехом «наступает на пятки» Java в соответствующем сегменте.


-------------------------------------------------------------------

Автором урока является Des.
Запрещается копирование и публикация урока на других сайтах без письменного согласия автора и размещения ссылок.


The tutorial is written by Des.
No part of this tutorial can be copied/pasted on any other website without the author's express written permission.


Сообщение отредактировал Des - 15.01.2009 - 22:15


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
олечка
сообщение 24.04.2008 - 11:46
Сообщение #2



****

2 местоКаляки-Маляки, 1 место1 место1 местоКаляки-Маляки, 1 местоЗа вклад в развитие ArtTower.ru2 место3 место2 местоМеткий стрелок
Меткий стрелокМеткий стрелок
Группа: Почетные граждане
Сообщений: 994
Регистрация: 30.09.2006
Из: Новосибирск
Пользователь №: 969
Галерея Блог


Симпатии:  137  


прочитала, интересно, с нетерпением жду пролжения smile.gif


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Beny
сообщение 26.01.2009 - 15:31
Сообщение #3






Группа: Туристы
Сообщений: 6
Регистрация: 25.01.2009
Пользователь №: 11530



Симпатии:  0  


Des, ты просто умница!

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

Что ж, как говаривал мой папа, "Кто ясно мыслит, тот ясно излагает"!

Единственное, что для меня пока не ясно в этой теме - где куча восторженных комментов?

Des, долгия тебе лета, за твои прекрасные труды!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Constantine
сообщение 10.04.2009 - 00:29
Сообщение #4


все гениальное-просто
**


Группа: Жители
Сообщений: 124
Регистрация: 4.12.2008
Из: коломна
Пользователь №: 10918
Галерея Блог


Симпатии:  5  


если серъезно то это пожалуй самое вменяемое и легкоусваиваемое о программировании что я когда либо читал.
если кстати книгу напишешь-обязательно возьму.
возможно я что то упустил-что такое т.н. что так часто мелькает в уроках?


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Des
сообщение 10.04.2009 - 04:40
Сообщение #5


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


Спасибо) Рад, что в тему)
_______

"т.н." - общераспространенное сокращение от "так называемый" (-ое, -ие)


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Быстрый ответДобавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия форума Сейчас: 17.12.2017 - 05:35