Автор: Вольфенгаген В.Э.
Теги: программирование компьютерные науки языки программирования издательство центр юринфор
Год: 2001
Текст
! " # $ ! "! # $ ! ! % ! # % & %&'( )*+,)*-.++ ' ()*+ , ,# -.( / )' (# *()0(( ( $(1 (/ 20(3 (1$ ( ,4# ( 2 0( *5 ,4 /), $611( (/ 7 8( *5 (1 ( 2" */ / $(1 9 (- " 0( 3 1 ((# $)*/-. 3 $* 3 1 ()* 85 $ (12. ': 9( ( 6 $"4"# 8 # 8 1 8 # $)*/ $ ( 5 )2*5 (2-.2- ,8(*( *5 2- 1" *5 8( 2 0( *5 6 ($ )*+ ( 1 (* $+" / " *5 )' ,1( $(9 1 1(# , '+ , 11 (/1(# $16-.(1( 2/ ( 5 *()0(- 20(3 )*(8 ,4 /), (62 1+ ($*5) 5 8 28 ' ( (*( $8 6 $9 '(/ '2" $* ) 2" 1 ( $( 1# ( $ (9 *1 '* ( 1$5- ,4 2# ( 10( ,4 4 *6(3 ( $611( (/ ! " #$ % &'() *+,- . /01 02&0& 3&4+56- #7 8 $ 9 977 :! ;; 9 ! &&<2=
/ / / / ,! / 0 1 )1+ ( 1" *( ,8(* (3 ;( (# 1 ( ( $61 ( <1*5 / 1 ( ( )1+ ( 0( / 1 ( = ' , ': , & > 4 *6(8 / ((0(/ *6(( $611 ( ( 1 ') " ,4 2! / , (" ( (( ,8(* (3 ,+ (/# $ " */-.( ?* 1 , >+" / 2 0(/ / 2 0(/ @() " ( ;211 @ " * ( "(6111( ,+ (/# $ " */-.( "(611, ( 21 "*/ 2+" (/ "(6114 , 1 1 (8 ( $ / (/ ( $ " * (/ = " / $ ,4 "(611 = @ ( ' $(1( ( ,4 2. 3 & ' / $ / 1A( = & = = &
>? $ & 7 8 ( ,+ (3 & 0 (-. '+ ( & ) 8( ( BCDEF90(* = (*(8 ( "(611, = G ;( (8 (3 *() & 3! / 1 / / 0 1 & H 1*5 ,3 ( ( & H 1*5 / 1 ( & H 1*5 / 1 ( ,+ (3 &= H 1*5 / 1 ( 1 " & <1*5 / 1 ( &G ;( ( &G ; / ( # $1/ 5# 4"# ,4" ( ) 8 ( &G ; 1 (8 ( 2 0(( & ; 1 (8 ( $ "*+ (/ = ' ( 1*5 3 1 (( 4! 5 / 06 0 1 = ' ,3 ( ( = @"4", $ (- 1 (( 1 , G 2( $ " * , 2 0(( G 2( $ " * , 1 + G > (/ ,8(* (3 G 1 ()0(/ $611( (( G $ " * ( "1 G ; " , "1 , G 8 , "1 , G 2 , "1 G "( "1 G = <2 0(( GG = I1'"9') 8 (/ G = <2 0(( ,A(4 $/" = ;6*A (/ ' $2 (( ' = ( ( & == * , 2 0(( G =& JKLF9 20(/
$ >?? = <2 0(( 0(( =G @+"-.( 2 0(( = ;$', $ " * (/ 2 0(3# *-8/ 29 (- = *-8 ( $ 1 ,4 = MCFNF9 20(/ = 1$)(0(/ ( $ ( $* " *5 ( = )! / $ / / 0 1 = ' ,3 ( ( = ;( (8 ( "1 , = ;( (8 ( $ "*+ (/ = ; 1 ( = ; 1 (8 ( "1 , = $16 *5 , 2 0(( = ; 1 (8 ( 2 0(( = ; 1 (8 ( $ "*+ (/ 7! 8/ & @"*+ (/ & @ " * ( O $611,P & @"*+ (/ 1 " = & @"*+ ( ,+ (/ & & H $ " / 1 ( ( 1 ( $9 "*+ (3 & & )1 . ( # )$ ( " & )" * ( & @ 1 / ( )1 . ( G & 7$ G & ; " & ; " , "1 , ) 8 (3 & *(# " *0(( ( "($) , &= ; " , "1 , $"*+ (3 &= @"*+ ( 1 ", &= @"*+ ( ,+ (/ &= @"*+ ( " *0(( && ; " , 1 (8 ( 2 0(( & @ ') ( $"*+ (3 =
>??? $ &G @(( ( ( ) 8 (/ Q# R G & @0 "2, ( 2 0(( & @0 "2, & <2 0(( & ;" ,4 A (3 .! / $ 1 = @(1 ( ( & ;( (8 ( "1 , & ;( (8 ( $ "*+ (/ & @(1 1 (( ; 1 (8 ( "1 , ; 1 (8 ( 2 0(( G ; 1 (8 ( $ "*+ (/ G @(1 ) 8( (/ *! 5 / /0 = G ,4", = G ,4", () 1 " = G ,4", () ,+ (3 G SKETU ( NFLVEWDL G G @ 4", G ; 1 ( $ 4" = G $* ( *5 , $ , 1 (( $ 4" = G @(( ( $ 1 ,1 1 8 ) 9 8 (3 == +! / $/ $1 = X(* $1 =G @0 "2, ( 2 0(( ' ) $1 =G @0 "2, ( 2 0(( '* # 8 1 " (1 $9 1 1 = 2( , $0 "2, ( 2 0(( & ; (8 ( "( 1(8 /), ( & ; 1 ( /), (/ & ' ( "( 1(8 6 /), (/ & 4 ()1, $ "8( $1 & ,) $ ) 8 (- & ,) $ ,* &&
$ ?@ ,) $ ) 8 (- ( )2*5 2 & 4 ()1, ,) $0 "2 &G = ,) $ )1, (- & = ,) $ 2 = ,) $ ') 8 (- = 20(( 0( ( (/ & (3 ') 1 4 ()1 ,) ( $ "8( ' 0((! ,+ (/# ') 8-.( $0 "2, ( 2 0(( G 4 ()1, /), (/ " *0(3 = ,-! 8 /5 $ 0(( " 1 + 1( G ;,*( (, 7$(( G = ,+ (/# (1 -.( 2 22 " ,4 8 ) 8 (/ G & <3*, G= ; 1 ( 3* G& ,,! # $ $1 G NFYFKW J VZWDE [ G (*, FSFZW G \TN9$ "*+ (/ ''. (/ UTN9$ "*+ (/ ,2! 9 = ) (" ( ($ & @(*5 ($()( , $611, ( $ ($& @ ($ ;4 1 " 0( 6 $( (/ $ ( ($ G ; 1 ( ($ ,3! : $ @'* 1 ( , 4 ( (( 2 0( *5 ,4 /), @ " * ( $ ,4 2 0( *5 ,4 /),9 =
@ $ ]FWK QKZ^VK^F , 1 ", *()0(( & _[J`91A( & "20(/ 6 6(*5 / ' / 1A( G = @* ) , 8 2 0( *5 6 $611( (/G = @ 1 (( = @ ( $611, = @ ') ( $611, & ;( ( 2$. 6 2 0( *5 6 /), & <2 0( *5 ,3 /), $ 6 $/" & <2 0( *5 ,3 /), ,A(4 $/" @*28 ( () 9,+ (3 1A( ,4 ( 20(3 = 1$(*( ( $(* ,8(* (/ 1$(*( ( 2$* (/ "3 *5A3 $(1 G I (, ( +" , ,8(* (/ == ; = /1 & 1
1$5- , 2( abTcYVWFN LbDFZbFd ( ( 10( , 4 *9 6(( *( )" 2.(1( ( $"*+- 2*( 5 $ 1 ,# , . '*5A ) 6(- $ (8 ( , A 3 +() ( @ +" 6 , 4 *6(( A(/- " 2$ ) ') 3 ( 9 10(( ( $"20(2- 12 ( 10((# $ " * 3 ?* 9 3 1 # ()1 // 4 2"# ( 6 )2*5 , 3 ( *5 # 1 6( $"2 ,# $*5)2-.( / 1,1 $1# ,$2- / (" $* " *5 ( '( # 1$ (4 ()1 (3 ',83 , )1 /- / " *5 , $ ((# ( 0 *, *( ( "29 (( (*( ) (/ @92 (# )( ( ( 10( ,4 4 *6(3 "9 * ( 2*5 2- *5 5# 3 1 '. *5 8( "$ ( 5/ ( )1+ ( 3 " 8 ', (- / e*( (4 "(/4 $611( ( $ " */* '3 (" (2 # 6" $611( $(* $6112 "*/ A (/ $ " * 3 )"8( ( $+"* '* (*( 1 $"' 9 * 3 "21 0( 3# $ 5 )" 1. / ( "2 (/ $9 611( (/ $2 2-. 3 3 ( + ( 3 $611( (/ /. 1/ (* " (/4 $ $611( (- (*( 9 1$5- ,4 2# $(*# $"" +(- / ' ,# 9 ,4 ( / '*5A 2*28A ( A (( 2+ 4A () 3 $'* 1, 1 1 () ("2 2$2- / " 3 ( *5 + , ( 2 "1 *5 , (* " (/# "2.( $(2 ,4 0 $0(3 ,8(* (3 1$5- ( " 8 (1 ( 2" 9 */ / $* (- ) (3 '* ( $611( (/ @2'*(0(( ? 3 (( )"21 , $"*+-.(3/ /" 9 ' '* ( 1$5- ,4 2# ( 10( ,4 4 *6(3 ( $611( (/# $' 2-.(4 $* (- ) (3 ? (4 '*9
A 7$ 7 ! /4 @ "$*6 /# 8 $2'*(2 1, ' , 162 ', 5 ($*5)9 , "*/ ()*+ (/ " *5 ,4 2 ( 1 1 $' 5 28 ,1 (* " (/1 $(*# (6( (( $ " ) 8- 9 / "*/ 2"* (/ 8( * 3 16 )*(8 6 2 / % 29 " # /.(4 $ " '3 0 *5- $ (8 ) 1* ( 1(1 $ "1 1# " $ 0(*( )" *4 1$5- ,4 2 >(1 ')1 $2'*(0(/4 (( $ "$*6 / + 5 9 2. / ( " * " 3 '* ( ( " 5 2 "*/ ( 19 (8 6 ()28 (/ )" * 1$5- ,4 2# ( 10( ,4 4 *6(3 ( $611( (/
Предисловие Тот, кто вступает в разговор о языках программирования, обычно предполагает удовлетворить определенные ожидания. На практике ожиданий оказывается целый спектр - в полной зависимости от про фессиональных интересов пользователя. Прагматически настроенный человек хотел бы усвоить определенный круг идей, пользуясь которы ми можно продвигаться в освоении конструкций конкретно выбран~ ного - для вполне определенных целей - языка программирования. Действительно, на сегодня еще недавно популярная тема об уни версальных языках программирования отошла на задний план. поль зователю предлагается большой набор языков и обширных руководств к каждому из них, настолько обширных, что изучение хотя бы одного из них требует значительных усилий. Типичное руководство по язы ку программирования выглядит наподобие 'руководства пользовате ля' и оказывается построенным рецептурным способом по принципу: делайте именно так, тогда получите определенный желательный эф фект, причем никогда не делайте некоторых вещей, поскольку полу чится нежелательный эффект. Во многих случаях это действительно хорошая манера изложения, которая помогает сравнительно быстро начать что-то практически записывать, компилировать и исполнять. Однако в такого рода руководствах по языкам программирования полностью обходится вопрос, ради чего строится язык как система программирования и что же лежит в его основе. Между тем без чрез мерных усилий можно выделить некоторую центральную сущность, которая подразумевается в каждом без исключения языке програм мирования, и этой сущностью оказывается процесс в математическом смысле этого слова, называемый 'вычислением'. Вычисление как та ковое может быть вычленено и рассмотрено с точки зрения описыва ющих его конструкций конкретного языка.
Более того, вычисление как самостоятельный объект исследова ния давно подвергается массированным математическим "натискам". По-видимому, каждое очередное поколение математиков от science computel' пытается по-своему переосмыслить и переоткрыть основные законы вычислений. Самое существенное, что содержание понятия вычисления не остается чем-то неизменным, но периодическим меня ется. Тем самым вновь и вновь возникает необходимость выработки надлежащих теоретических оснований, приемов и методов формали зации, которые хотя бы на время удовлетворяли новым требованиям. Цель книги Одна из основных идей книги - показать важность развития видения программы в терминах объектов или функций. Даже если синтак сически это не очевидно, и программист имеет дело с конструкциями выражений и команд, то семантика может быть построена на принци пах исчислений объектов. В этой связи описание конструкций языков программирования средствами денотационной семантики характери зует именно объекты и их взаимосвязи, а ее возможности сравнитель но недавно осмыслены и только начали себя проявлять на практике. Извлекаемый практический результат состоит в развитии навыка со ставления модели вычислений, кратко и вместе с тем исчерпывающе описывающей все существенные черты разрабатываемого программ ного обеспечения. Кому адресована книга Эта книга написана в помощь тем программистам, которые хотят при вести свои знания в систему и переосмыслить тот круг идей, с кото рым приходится сталкиваться на практике. Книга призвана оказать помощь в чтении и изучении оригинальных работ в области компыо терных наук, информационных технологий и программирования, а также в случае необходимости произвести проработку вновь создава емых механизмов программирования. Книгу можно использовать в качестве учебника или справочного пособия. Она будет полезна как студентам и аспирантам, так и про фессионалам в этих областях.