Выбрать книгу по жанру
Фантастика и фэнтези
- Боевая фантастика
- Героическая фантастика
- Городское фэнтези
- Готический роман
- Детективная фантастика
- Ироническая фантастика
- Ироническое фэнтези
- Историческое фэнтези
- Киберпанк
- Космическая фантастика
- Космоопера
- ЛитРПГ
- Мистика
- Научная фантастика
- Ненаучная фантастика
- Попаданцы
- Постапокалипсис
- Сказочная фантастика
- Социально-философская фантастика
- Стимпанк
- Технофэнтези
- Ужасы и мистика
- Фантастика: прочее
- Фэнтези
- Эпическая фантастика
- Юмористическая фантастика
- Юмористическое фэнтези
- Альтернативная история
Детективы и триллеры
- Боевики
- Дамский детективный роман
- Иронические детективы
- Исторические детективы
- Классические детективы
- Криминальные детективы
- Крутой детектив
- Маньяки
- Медицинский триллер
- Политические детективы
- Полицейские детективы
- Прочие Детективы
- Триллеры
- Шпионские детективы
Проза
- Афоризмы
- Военная проза
- Историческая проза
- Классическая проза
- Контркультура
- Магический реализм
- Новелла
- Повесть
- Проза прочее
- Рассказ
- Роман
- Русская классическая проза
- Семейный роман/Семейная сага
- Сентиментальная проза
- Советская классическая проза
- Современная проза
- Эпистолярная проза
- Эссе, очерк, этюд, набросок
- Феерия
Любовные романы
- Исторические любовные романы
- Короткие любовные романы
- Любовно-фантастические романы
- Остросюжетные любовные романы
- Порно
- Прочие любовные романы
- Слеш
- Современные любовные романы
- Эротика
- Фемслеш
Приключения
- Вестерны
- Исторические приключения
- Морские приключения
- Приключения про индейцев
- Природа и животные
- Прочие приключения
- Путешествия и география
Детские
- Детская образовательная литература
- Детская проза
- Детская фантастика
- Детские остросюжетные
- Детские приключения
- Детские стихи
- Детский фольклор
- Книга-игра
- Прочая детская литература
- Сказки
Поэзия и драматургия
- Басни
- Верлибры
- Визуальная поэзия
- В стихах
- Драматургия
- Лирика
- Палиндромы
- Песенная поэзия
- Поэзия
- Экспериментальная поэзия
- Эпическая поэзия
Старинная литература
- Античная литература
- Древневосточная литература
- Древнерусская литература
- Европейская старинная литература
- Мифы. Легенды. Эпос
- Прочая старинная литература
Научно-образовательная
- Альтернативная медицина
- Астрономия и космос
- Биология
- Биофизика
- Биохимия
- Ботаника
- Ветеринария
- Военная история
- Геология и география
- Государство и право
- Детская психология
- Зоология
- Иностранные языки
- История
- Культурология
- Литературоведение
- Математика
- Медицина
- Обществознание
- Органическая химия
- Педагогика
- Политика
- Прочая научная литература
- Психология
- Психотерапия и консультирование
- Религиоведение
- Рефераты
- Секс и семейная психология
- Технические науки
- Учебники
- Физика
- Физическая химия
- Философия
- Химия
- Шпаргалки
- Экология
- Юриспруденция
- Языкознание
- Аналитическая химия
Компьютеры и интернет
- Базы данных
- Интернет
- Компьютерное «железо»
- ОС и сети
- Программирование
- Программное обеспечение
- Прочая компьютерная литература
Справочная литература
Документальная литература
- Биографии и мемуары
- Военная документалистика
- Искусство и Дизайн
- Критика
- Научпоп
- Прочая документальная литература
- Публицистика
Религия и духовность
- Астрология
- Индуизм
- Православие
- Протестантизм
- Прочая религиозная литература
- Религия
- Самосовершенствование
- Христианство
- Эзотерика
- Язычество
- Хиромантия
Юмор
Дом и семья
- Домашние животные
- Здоровье и красота
- Кулинария
- Прочее домоводство
- Развлечения
- Сад и огород
- Сделай сам
- Спорт
- Хобби и ремесла
- Эротика и секс
Деловая литература
- Банковское дело
- Внешнеэкономическая деятельность
- Деловая литература
- Делопроизводство
- Корпоративная культура
- Личные финансы
- Малый бизнес
- Маркетинг, PR, реклама
- О бизнесе популярно
- Поиск работы, карьера
- Торговля
- Управление, подбор персонала
- Ценные бумаги, инвестиции
- Экономика
Жанр не определен
Техника
Прочее
Драматургия
Фольклор
Военное дело
Программист-прагматик. Путь от подмастерья к мастеру - Хант Эндрю - Страница 80
• Известно расстояние между компьютерами.
• Временем, необходимым для переноса информации на ленту и с ленты, можно пренебречь.
• Потери данных при хранении на ленте примерно равны их потерям при передаче по каналу связи.
Упражнение 10 из раздела "Оценка"Ответ: Учитывая допущения ответа 9: Объем информации, содержащейся на стриммерной кассете (4 Гбайт), составляет 32 х 10^9 бит, так что передача эквивалентного объема по каналу со скоростью 1 Мбайт/с заняла бы около 32000 сек. (примерно 9 ч). Если человек движется с постоянной скоростью 3,5 мили в час, то, для того чтобы канал связи превзошел курьера, два компьютера должны располагаться друг от друга на расстоянии не менее 31 мили. Если это расстояние меньше, то победа остается за человеком.
Упражнение 11 из раздела "Обработка текста"Ответ: Ответ к данному упражнению составлен на языке Perl.
my @consts;
my $name = ;
die "Invalid format – missing name" unless defined($name);
chomp $name;
# Read in the rest of the file
while () {
chomp;
s/"\s*//; s/\s*$//;
die "Invalid line: $_" unless /"(\w+)$/;
push @consts, $_;
}
# Now generate the file
open(HDR, ">$name.h") or die "Can't open $name.h: $!";
open(SRC, ">$name.c") or die "Can't open $name.c: $!";
my $uc_name = uc($name);
print HDR "/* File generated automatically – do not edit */\n";
print HDR "extern const char *$ {ucjiame)_name[];";
print HDR "typedef enum {\n"; print HDR join",\n", @consts;
print HDR "\n) $uc_name;\n\n";
print SRC "* File generated automatically – do not edit */\n";
print SRC "const char *$ {uc name}_name[] = {\n \"";
print SRC join "\",\n \"", @consts;
print SRC "\"\n};\n";
close(SRC);
close(HDR);
Используя принцип DRY, мы не будет вырезать и вклеивать этот вновь написанный файл в нашу программу. Вместо этого мы «включим» его – данный плоский файл является главным источником этих констант. Поэтому нам понадобится файл сборки для восстановления заголовка при изменении файла. Следующий фрагмент содержится в системе отладки в исходном дереве (имеется на web-сайте).
etest.c etest.h: etest.inc enumerated.pl
perl enumerated.pl etest.inc
Упражнение 12 из раздела "Обработка текста"Ответ: Вот ответ, написанный на языке Perl.
my $dir = shift or die "Missing directory" ,
for my Sfile (glob(u$dir/*.pr)) {
open(IP, "$file") or die "Opening $file: $!";
undef $/; # Turn off input record separator -
my Scontent = ; # read whole file as one string.
close(IP);
if (Scontent Гrusestrict/m) {
rename Sfile, "$file.bak" or die "Renaming $file: $!"; open(OP, ">$file") or die "Creating $file: $!";
# Put 'use strict' on first line that
# doesn't start #
Scontent =" sr(V.#)/\nuse strict;\n\n/m',
print OP Scontent; close(OP);
print "Updated $file\n";
)
else {
print "Sfile already strict\n":
)
}
Упражнение 13 из раздела "Генераторы исходных текстов"Ответ: Решение реализовано на языке Perl. В программе происходит динамическая загрузка модуля для генерации требуемого языка, так что добавление новых языков не представляет труда. Главная программа загружает внутреннюю часть (основанную на параметре командной строки), затем считывает ее входные данные и вызывает подпрограммы генерации текста, основанные на содержимом каждой из строк. Мы особенно не суетимся, если речь идет об обработке ошибок: если что-то не так, узнаем об этом довольно быстро.
my lang = shift or die "Missing language";
$lang .= "_cg.pm";
require or die "Couldn't load $lang";
# Read and parse the file
my $name;
while () {
chomp;
if (/^ \s*$/) {CG::blankLine();)
elsif ((/^ \#(.*)/) {CG::comment($1);}
elsif ((/^M\s*(.+)/) {CG::startMsg($1); $name = $1;}
elsif ((/^E/) {CG::endMsg($name);}
elsif (/^F\s*(\w+)\s+(\w+)$/) {CG::simpleType($1,$2);}
elsif (/^F\s*(\w+)\s+(\w+)\[(\d+)\]$/) {CG::arrayType $1,$2,$3);}
else {
die "Invalid line: $ ";
}
}
Написание языковой серверной части не составит труда: создайте модуль, который реализует шесть точек входа. Вот генератор текста на языке С:
#!/usr/bin/perl – w
package CG;
use strict;
# Code generator for 'C' (see cg_base.pl)
sub blankLine() {print "\n"; }
sub comment() {print "/*$_[0] */\n"; }
sub startMsg() {print "typedef struct {\n"; }
sub endMsg() {print "} $_[0];\n\n"; }
sub arrayType() {
my ($name, $type, $size) = @_;
print " $type $name\[$size];\n":
}
sub simpleType{) {
my ($name, $type) = @_;
print " $type $пате;\п";
}
1;
А вот генератор текста на языке Pascal:
#!/usr/bin/perl – w
package CG;
use strict;
# Code generator for 'Pascal' (see cg_base.pl)
sub blankLine() {print "V;)
sub comment() {print "{$_[0] }\n";)
sub startMsg() {print "$_[0] = packed record\n"; }
sub endMsg() {print "end;\n\n"; }
sub arrayType() {
my ($name, $type, $size) = @_;
$size--;
print" $name: array[0…$size] of $type;\n";
)
sub simpleType() {
my ($name, $type) = @_;
print" $name: $type;\n7 ',
}
1;
Упражнение 14 из раздела "Проектирование по контракту"Ответ: Этот пример на языке Eiffel удачен. Мы требуем передачи непустых данных и гарантируем, что семантика циклического двунаправленного списка будет соблюдена. Это также способствует нахождению сохраненной строки. Поскольку это некий отложенный класс, то действительный класс, его реализующий, допускает использование любого основного механизма по своему усмотрению. Он может использовать указатели или массив, или что-то еще; пока он соблюдает контракт, мы не беспокоимся.
Упражнение 15 из раздела "Проектирование по контракту"Ответ: Это неудачно. Математическое действие в индексном выражении (index-1) не будет работать с граничными условиями, подобными первой точке входа. Постусловие предполагает определенную реализацию; контракты должны быть более абстрактными по сравнению с указанным выше.
Упражнение 16 из раздела "Проектирование по контракту"Ответ 16: Это удачный контракт, но неудачная реализация. Здесь высовывает свою уродливую голову ошибка типа "Heisenbug" [URL52]. Вероятно, программист допустил опечатку – набрал pop вместо top. Хотя это простой и надуманный пример, весьма трудно диагностировать побочные эффекты в утверждениях (или в любом, самом неожиданном месте в программе).
Упражнение 17 из раздела "Проектирование по контракту"Ответ: Мы продемонстрируем функциональные сигнатуры на языке Java, обозначая предусловия и постусловия в соответствии с iContract. Сначала инвариант для класса:
/**
* @invariant getSpeed() >0
* implies isFull() // Не запускать пустое
* @invariant getSpeed()>=0 &&
* getSpeed() 10 // Проверка границ
* @post getSpeed() == х // Проверка скорости
*/
public void setSpeed (final int x)
/**
* @pre !isFull() // Heзаполнять дважды
* @post isFull() // Убедитесь, что было выполнено
*/
void fill()
/**
* @pre isFull() // He очищатьдважды
* @post !isFull() // Убедиться, что выполнено
- Предыдущая
- 80/84
- Следующая