Секреты механизмов подпрограмм: параметры и локальные переменные::Журнал СА 7-8.2015
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

Принципы проектирования  

Dependency Inversion Principle. Принцип инверсии зависимостей в разработке

Мы подошли к последнему принципу проектирования приложений из серии SOLID – Dependency

 Читать далее...

Рынок труда  

Вакансия: Администратор 1С

Администратор 1С – это специалист, который необходим любой организации, где установлены программы

 Читать далее...

Книжная полка  

Книги для профессионалов, студентов и пользователей

Книги издательства «БХВ» вышли книги для тех, кто хочет овладеть самыми востребованными

 Читать далее...

Принципы проектирования  

Interface Segregation Principle. Принцип разделения интерфейсов в проектировании приложений

Эта статья из серии «SOLID» посвящена четвертому принципу проектирования приложений – Interface

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 10795
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 9042
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 9090
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5735
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6429
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 3736
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2731
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3531
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3521
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6016
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

Друзья сайта  

 Секреты механизмов подпрограмм: параметры и локальные переменные

Архив номеров / 2015 / Выпуск №7-8 (152-153) / Секреты механизмов подпрограмм: параметры и локальные переменные

Рубрика: Карьера/Образование /  Кафедра

Алексей Вторников АЛЕКСЕЙ ВТОРНИКОВ, ЗАО КБ «Ростовский Универсальный», ведущий программист, pdp8dec@gmail.com

Секреты механизмов подпрограмм:
параметры и локальные переменные

Какие задачи возникают при реализации механизмов подпрограмм в языках высокого уровня (таких, например, как C, C++, Java и им подобных)?

Человеку свойственно ошибаться, но окончательно все запутать может только компьютер.

Из законов Мэрфи

Исходная точка

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

Источники проблем

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

Проблема номер 1 – отсутствие структуры

Программы на ассемблере с точки зрения их организации примитивны: последовательность машинных инструкций, прерываемая командами безусловных и условных переходов (вызов подпрограммы и возврат из нее, если помните, – это фактически специальные формы безусловных переходов). На уровне ассемблера нет ни блоков, ни составных операторов («begin ... end» или «{ ... }»), ни условных конструкций («if ... else ...», «switch ... case …» и т.п.), ни конструкций циклов («while (condition) ...» и т.п.). Код тела подпрограммы синтаксически неотличим от кода любого другого участка программы, и только команда RET (если она есть) дает слабые намеки. Если же в исходном коде еще и нет комментариев, то дела совсем плохи.

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

Статью целиком читайте в журнале «Системный администратор», №7-8 за 2015 г. на страницах 121-125.

PDF-версию данного номера можно приобрести в нашем магазине.


  1. Вторников А. Секреты механизмов подпрограмм.// «Системный администратор», №4, 2015 г. – С. 76-81 (http://samag.ru/archive/article/2933).
  2. А.Ахо, Р.Сети, Дж.Ульман. Компиляторы: принципы, технологии и инструменты. – М.: «Вильямс», 2003 (любое издание). Знаменитая «книга дракона», обязательная к прочтению для всякого, кто изучает компиляторы языков программирования.
  3. Д. Грис. Конструирование компиляторов для цифровых вычислительных машин. – М.: «Мир», 1975. Довольно старая и редкая, но по-прежнему ценная и с методической и с практической точки зрения книга.
  4. Т. Пратт. Языки программирования. Разработка и реализация. – М.: «Мир», 1979 (любое издание). Лучший, на наш взгляд, обзор «устройства» языков программирования. Настоятельно рекомендуем найти и прочесть: очень многое станет ясным, а еще больше представится в ином свете.
  5. Л. Бек. Введение в системное программирование. – М.: «Мир», 1988. Исключительно ценное руководство по системному программированию (прежде всего низкоуровневых ассемблеров и загрузчиков). Читайте и экспериментируйте.
  6. М. Зелковиц, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. – М.: «Мир», 1982. В последней главе этой книги подробно и неформально рассматривается построение компилятора для небольшого языка, близкого к Pascal. Приведены исходные коды.
  7. Б. Ренделл, Л. Рассел. Реализация АЛГОЛа-60. – М.: «Мир», 1967. Редкая, необычная, но интригующая по стилю и содержанию книга. С изматывающими подробностями (на языке вышедших из моды блок-схем) описывается реализация языка Алгол-60 (предшественника Pascal) на стековой машине.

Комментарии отсутствуют

Добавить комментарий

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

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru