- •Введение
- •Стиль
- •Имена
- •Выражения
- •Стилевое единство и идиомы
- •Макрофункции
- •Загадочные числа
- •Комментарии
- •Стоит ли так беспокоиться?
- •Дополнительная литература
- •Алгоритмы и структуры данных
- •Поиск
- •Сортировка
- •Библиотеки
- •Быстрая сортировка на языке Java
- •"О большое"
- •Динамически расширяемые массивы
- •Списки
- •Деревья
- •Хэш-таблицы
- •Заключение
- •Дополнительная литература
- •Проектирование и реализация
- •Алгоритм цепей Маркова
- •Варианты структуры данных
- •Создание структуры данных в языке С
- •Генерация вывода
- •Java
- •AWK и PERL
- •Производительность
- •Уроки
- •Дополнительная литература
- •Интерфейсы
- •Значения, разделенные запятой
- •Прототип библиотеки
- •Библиотека для распространения
- •Реализация на C++
- •Принципы интерфейса
- •Управление ресурсами
- •Abort, Retry, Fail?
- •Пользовательские интерфейсы
- •Дополнительная литература
- •Отладка
- •Отладчики
- •Хорошие подсказки, простые ошибки
- •Трудные ошибки, нет зацепок
- •Последняя надежда
- •Невоспроизводимые ошибки
- •Средства отладки
- •Чужие ошибки
- •Заключение
- •Дополнительная литература
- •Тестирование
- •Тестируйте при написании кода
- •Систематическое тестирование
- •Автоматизация тестирования
- •Тестовые оснастки
- •Стрессовое тестирование
- •Полезные советы
- •Кто осуществляет тестирование?
- •Тестирование программы markov
- •Заключение
- •Дополнительная литература
- •Производительность
- •Узкое место
- •Замеры времени и профилирование
- •Стратегии ускорения
- •Настройка кода
- •Эффективное использование памяти
- •Предварительная оценка
- •Заключение
- •Дополнительная литература
- •Переносимость
- •Язык
- •Заголовочные файлы и библиотеки
- •Организация программы
- •Изоляция
- •Обмен данными
- •Порядок байтов
- •Переносимость и внесение усовершенствований
- •Интернационализация
- •Заключение
- •Дополнительная литература
- •Нотация
- •Форматирование данных
- •Регулярные выражения
- •Программируемые инструменты
- •Интерпретаторы, компиляторы и виртуальные машины
- •Программы, которые пишут программы
- •Использование макросов для генерации кода
- •Компиляция "на лету"
- •Дополнительная литература
- •Эпилог
- •Приложение: свод правил
- •Стиль
- •Интерфейсы
- •Отладка
- •Тестирование
- •Производительность
- •Переносимость
JIT-компилятор сгенерирует более быстрый код, если сможет заменить выражения, содержащие только константы, такие как тах(3*3, 4/2), их значением. Опознав такое выражение, как он должен вычислять его значение?
Упражнение 9-19
Как бы вы тестировали JIT-компилятор?
Дополнительная литература
В книге Брайана Кернигана и Роба Пайка "The Unix Programming nvironment" (Brian Kernighan, Rob Pike. The Unix Programming nvironment. Prentice Hall, 1984) широко обсуждается инструментальный подход к программированию, который так хорошо поддерживается! Unix. В восьмой главе ее содержится полная реализация — от грамматики уасс до выполнимого кода — простого языка программирования.
Дон Кнут в своей книге "ТЕХ: The Program" (Don Knuth. TEX: The\ rogram. AddisonWesley, 1986) описывает этот сложнейший текстовый эоцессор, приводя всю программу целиком — около 13 000 строк на ascal — в стиле "грамотного программирования", при котором пояснения комбинируются с текстом программы, а для форматирования документами и выделения соответствующего кода используются соответствующие эограммы. То же самое для компилятора ANSI С проделано у Криса Фрейзера и Дэвида Хэнсона в книге "A Retargetable С Compiler" (Chris raser, David Hanson. Л Retargetable С Compiler. Addison-Wesley, 1995).
Виртуальная машина Java описана в книге Тима Линдхольма и Франк Еллина "Спецификация виртуальной Java-машины", 2-е издание fim Lindholm, Frank Yellin. The Java Virtual Machine Specification. 2"d ed. ddison-Wesley, 1999).
Кен Томпсон (Ken Thompson) описал свой алгоритм (это один из самых первых патентов в области программного обеспечения) в статье legular Expression Search Algorithm" в журнале Communications of the CM (11, 6, p. 419-422, 1968). Работа с регулярными выражениями весьма подробно освещена в книге Джеффри Фридла
"Mastering Regular xpressions" (Jeffrey Friedl. Mastering Regular Expressions. O'Reilly, 1997).
JIT-компилятор для операций двумерной графики описан в статье Эба Пайка, Барта Локанти (Bart Locanthi) и Джона Рейзера CJonn eiser) "Hardware/Software Tradeoffs for Bitmap Graphics on the Blit", опубликованной в Software — Practice and Experience (15, 2, p. 131-152, ;bruary 1985).