Текст
                    
                                           
                      ! "  # $     ! "! # $     !  ! % !    # % &  %&'( )*+,)*-.++ ' ()*+ ,  ,# -.( / )' (#  *()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' пытается по-своему переосмыслить и переоткрыть основные законы вычислений. Самое существенное, что содержание понятия вычисления не остается чем-то неизменным, но периодическим меня­ ется. Тем самым вновь и вновь возникает необходимость выработки надлежащих теоретических оснований, приемов и методов формали­ зации, которые хотя бы на время удовлетворяли новым требованиям. Цель книги Одна из основных идей книги - показать важность развития видения программы в терминах объектов или функций. Даже если синтак­ сически это не очевидно, и программист имеет дело с конструкциями выражений и команд, то семантика может быть построена на принци­ пах исчислений объектов. В этой связи описание конструкций языков программирования средствами денотационной семантики характери­ зует именно объекты и их взаимосвязи, а ее возможности сравнитель­ но недавно осмыслены и только начали себя проявлять на практике. Извлекаемый практический результат состоит в развитии навыка со­ ставления модели вычислений, кратко и вместе с тем исчерпывающе описывающей все существенные черты разрабатываемого программ­ ного обеспечения. Кому адресована книга Эта книга написана в помощь тем программистам, которые хотят при­ вести свои знания в систему и переосмыслить тот круг идей, с кото­ рым приходится сталкиваться на практике. Книга призвана оказать помощь в чтении и изучении оригинальных работ в области компыо­ терных наук, информационных технологий и программирования, а также в случае необходимости произвести проработку вновь создава­ емых механизмов программирования. Книгу можно использовать в качестве учебника или справочного пособия. Она будет полезна как студентам и аспирантам, так и про­ фессионалам в этих областях.