UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
hoc1hoc2hoc3lexhoc4hoc5hoc6Конечно, эти значения были вычислены программным способом: $
sed '/$/d' `pick *.[chyl]` | wc -lБезусловно, развитие языка может быть продолжено, и вам предоставляется такая возможность в приведенных ниже упражнениях.
Измените
hoc6$1Сейчас все переменные глобальны, за исключением параметров. Уже есть большая часть механизма для введения локальных переменных, хранимых в стеке. Одно из решений заключается во введении описания
autoКак бы вы ввели массивы в язык
hocОбобщите работу со строками так, чтобы переменные могли хранить строки, а не только числа. Какие операции потребуются для этого? Самая трудная часть управление памятью добейтесь динамичного хранения строк: память должна освобождаться, когда строки перестают быть нужными. В качестве промежуточного шага добавьте более развитые форматы печати, например, обеспечьте возможность использования некоторых форм стандартной Си функции
printf8.7 Оценка времени выполнения
Мы сравнивали
hocack(3,3)func ack() { if ($1 == 0) return ($2+1) if($2 == 0) return (ack($1 - 1, 1)) return (ack($1 - 1, ack($1, $2 - 1)))}ack(3,3)Второй тест — стократное вычисление чисел Фибоначчи со значениями, меньшими 1000. В этом случае выполнялись в основном арифметические операции с периодическим вызовом функций:
proc fib() { a = 0 b = 1 while (b < $1) { с = b b = a+b a = c }}i = 1while (i < 100) { fib(1000) i = i + 1}Тест выполнялся на четырех языках:
hocbc(1)basЧисла, приведенные в табл. 8.1, являются суммой пользовательского и системного времени процессора и вычислены с помощью функции
time| Программа | (3,3) | 100*fib(1000) |
|---|---|---|
hoc | 5.5 | 5.0 |
bas | 1.3 | 0.7 |
bc | 39.7 | 14.9 |
c | <0.1 | 0.1 |
Таблица 8.1: Время работы на PDP-11/70 (в секундах)
Можно также приспособить Си программу для определения количества времени, используемого каждой функцией. Программу нужно перетранслировать в режиме профилирования, введя флаг
-pmakefilehoc6: $(OBJS) сс $(CFLAGS) $(OBJS) -lm -о hoc6чтобы команда
ссCFLAGS$ make clean; make CFLAGS=-pто результирующая программа будет выполняться с профилированием. После выполнения программы остается файл
mon.outprofДля иллюстрации изложенного мы протестировали
hoc6$ hoc6 <fibtest $ prof hoc6 | sed 15q name %time cumsec #call ms/call_pop 15.6 0.85 32182 0.03_push 14.3 1.63 32182 0.02mcount 11.3 2.25csv 10.1 2.80cret 8.8 3.28_assign 8.2 3.73 5050 0.09_eval 8.2 4.18 8218 0.05_execute 6.0 4.51 3567 0.09_varpush 5.9 4.83 13268 0.02_lt 2.7 4.98 1783 0.08
