авторефераты диссертаций БЕСПЛАТНАЯ БИБЛИОТЕКА РОССИИ

КОНФЕРЕНЦИИ, КНИГИ, ПОСОБИЯ, НАУЧНЫЕ ИЗДАНИЯ

<< ГЛАВНАЯ
АГРОИНЖЕНЕРИЯ
АСТРОНОМИЯ
БЕЗОПАСНОСТЬ
БИОЛОГИЯ
ЗЕМЛЯ
ИНФОРМАТИКА
ИСКУССТВОВЕДЕНИЕ
ИСТОРИЯ
КУЛЬТУРОЛОГИЯ
МАШИНОСТРОЕНИЕ
МЕДИЦИНА
МЕТАЛЛУРГИЯ
МЕХАНИКА
ПЕДАГОГИКА
ПОЛИТИКА
ПРИБОРОСТРОЕНИЕ
ПРОДОВОЛЬСТВИЕ
ПСИХОЛОГИЯ
РАДИОТЕХНИКА
СЕЛЬСКОЕ ХОЗЯЙСТВО
СОЦИОЛОГИЯ
СТРОИТЕЛЬСТВО
ТЕХНИЧЕСКИЕ НАУКИ
ТРАНСПОРТ
ФАРМАЦЕВТИКА
ФИЗИКА
ФИЗИОЛОГИЯ
ФИЛОЛОГИЯ
ФИЛОСОФИЯ
ХИМИЯ
ЭКОНОМИКА
ЭЛЕКТРОТЕХНИКА
ЭНЕРГЕТИКА
ЮРИСПРУДЕНЦИЯ
ЯЗЫКОЗНАНИЕ
РАЗНОЕ
КОНТАКТЫ


Pages:     | 1 |   ...   | 13 | 14 ||

«АНДРЕЙ АЛЕКСАНДРЕСКУ Язык программирования D 16 лет вместе с профессионалами The D Programming ...»

-- [ Страница 15 ] --

13.16.1. Разделяемые классы Херлиховские доказательства универсальности спровоцировали появ­ ление и рост популярности множ ества структур данны х и алгоритмов в духе нарождающ егося «программирования на основе cas». Но есть один нюанс: хотя реализация на основе cas и возможна теоретически для любой задачи синхронизации, но никто не сказал, что это легко. Опреде­ ление структур данных и алгоритмов на основе cas и особенно доказа­ тельство корректности их работы - дело нелегкое. К счастью, однажды 512 Глава 13. Параллельные вычисления определив и инкапсулировав такую сущ ность, ее можно повторно ис­ пользовать для решения самы х разны х задач [57].

Чтобы ощ утить благодать программирования без блокировок на основе cas, воспользуйтесь атрибутом shared применительно к классу или структуре:

shared s t r u c t LockFreeStruct { } shared c l a s s LockFreeClass { Обычные правила относительно транзитивности в силе: разделяемость распространяется на поля структуры или класса, а методы не предо­ ставляют никакой особой защ иты. Все, на что вы можете рассчиты­ вать, —это атомарные присваивания, вызовы cas, уверенность в том, что ни компилятор, ни маш ина не переупорядочат операции, и собственная безграничная самоуверенность. Однако остерегайтесь: если написание кода - ходьба, а передача сообщ ений - бег трусцой, то программирова­ ние без блокировок —Олимпийские игры, не меньше.

13.16.2. Пара структур без блокировок Д л я разминки реализуем стек без блокировок. Основная идея проста:

стек моделируется с помощью односвязного списка, операции вставки и удаления выполняются для элементов, расположенных в начале это­ го списка:

shared s t r u c t Stack(T) { p r iv a te shared s t r u c t Node { T _payload;

Node * _next;

} p r iv a te Node - _root;

void push(T value) { auto n = new Node(value);

shared(Node)* oldRoot;

do { oldRoot = _root;

n._next = oldRoot;

} while (!cas(&_root, oldRoot, n));

} shared(T)* pop() { ty p e o f( r e tu r n ) r e s u lt;

shared(Node)- oldRoot;

do { oldRoot = _root;

13.16. Кодирование без блокировок с помощью разделяемых классов i f (!oldRoot) return n u ll;

r e s u l t = & oldRoot._payload;

} w hile (!cas(&_root, oldRoot, oldRoot._next));

return r e su lt;

} Stack является разделяемой структурой, отсюда прямое следствие: внут­ ри нее практически все тож е разделяется. Внутренний тип Node - клас­ сическая структура «полезные данные + указатель», а сам тип Stack хранит указатель на начало списка.

Циклы do/while в теле обеих ф ункций, реализую щ их базовые операции над стеком, могут показаться странноватыми, но в них нет ничего осо­ бенного;

медленно, но верно они проклады вают глубокую борозду в ко­ ре головного мозга каж дого будущ его эксперта в саэ-программирова нии. Ф ункция push работает так: сначала создается новый узел, в кото­ ром будет сохранено новое значение. Затем в цикле переменной _root присваивается указатель на новый узел, но т олько если тем временем никакой другой поток не изменил eeI Вполне возмож но, что другой по­ ток такж е выполнил какую-то операцию со стеком, так что ф ункции push нуж но удостовериться в том, что указатель на начало стека, кото­ рому, как предполагается, соответствует значение переменной oldRoot, не изменился за время подготовки нового узла.

Метод pop возвращает результат не по значению, а через указатель. При­ чина в том, что pop мож ет обнаруж ить очередь пустой, ведь это не явля­ ется нештатной ситуацией (как было бы, будь перед нами стек, предна­ значенный лишь для последовательных вычислений). В случае р азде­ ляемого стека проверка наличия элемента, его удаление и возврат со­ ставляют одну согласованную операцию. За исключением возвращ ения результата, функция pop по реализации напоминает функцию push: за­ мена _root выполняется с большой осторожностью, так чтобы никакой другой поток не изменил значение этой переменной, пока извлекаются полезные данные. В конце цикла извлеченное значение отсутствует в стеке и мож ет быть спокойно возвращено инициатору вызова.

Если реализация класса Stack не показалась вам такой у ж слож ной, возьмемся за реализацию более богатого односвязного интерфейса;

в конце концов большая часть инфраструктуры у ж е выстроена в рам­ ках класса Stack.

К сожалению, в случае со списком все угрож ает быть гораздо слож нее.

Насколько сложнее? Нечеловечески слож нее. Одна из фундаменталь­ ных проблем - вставка и удаление узлов в произвольных позиц иях спи­ ска. П редположим, есть список значений типа in t, а в нем есть узел с числом 5, за которым следует узел с числом 10, и требуется удалить узел с числом 5. Тут проблем нет - просто пустите в ход волш ебную опе­ рацию cas, чтобы нацелить указатель _root на узел с числом 10. Пробле­ ма в том, что в то ж е самое время другой поток мож ет вставлять новый 514 Глава 13. Параллельные вычисления узел прямо после узла с числом 5 — узел, который будет безвозвратно потерян, поскольку _ r o o t ничего не знает о нем.

В литературе представлено несколько возмож ны х решений;

ни одно из них нельзя назвать тривиально простым. Реализация, представленная н и ж е, впервые была предлож ена Тимоти Харрисом в его работе с мно­ гообещ ающ им названием «Прагматическая реализация неблокирую­ щ и х односвязны х списков» [30]. Эта реализация немного шероховата, поскольку ее логика основана на установке младш его неиспользуемого бита указателя _ n e x t. И дея состоит в том, чтобы сначала сделать на этом указателе пометку «логически удален» (обнулив его бит), а затем на вто­ ром ш аге вырезать соответствующ ий узел целиком.

shared s t r u c t SharedList(T) { shared s t r u c t Node { p r iv a te T _payload;

p r iv a te Node * _next;

6property shared(Node)* next() { return c le a rls b (_ n e x t) ;

bool removeAfter() { shared(Node)* thisNext, afterNext;

/ / Ш 1: сбросить младший бит поля _next узла, аг / / предназначенного для удаления do { thisNext = next;

i f (!th isN ex t) return f a lse ;

afterN ext = thisN ext.next;

} while (!cas(& thisN ext._next, afterN ext, se tls b ( a f te rN e x t)) );

/ / Ш 2: вырезать узел, предназначенный для удаления аг i f (!cas(&_next, thisNext, afte rN e x t)) { afterN ext = th isN ext._next;

while ( ! h a s ls b ( a f te rN e x t)) { thisN ext._nex t = thisNext. next.next;

} _next = afterNext;

} void in se rtA f te r( T value) { auto newNode = new Node(value);

for ( ;

;

) { / / Попытка найти место вставки auto n = _next;

while (n & h a s lsb (n )) { & n = n._next;

} / / Найдено возможное место вставки, попытка вставки auto afterN = n._next;

13.17. Статические конструкторы и потоки newNode._next = afterN;

i f (cas(&n._next, afterN, newNode)) { b re a k ;

} } } p r iv a te Node * _root;

void pushFront(T value) {.. / / To же, что Stack.push shared(T)* popFront() { / / To же, что Stack.pop Реализация непростая, но ее мож но понять, если, разбирая код, дер ­ жать в голове пару инвариантов. Во-первых, для логически удаленны х узлов (то есть объектов типа Node с полем _next, младш ий бит которого сброшен) вполне нормально повисеть какое-то время среди обычных у з ­ лов. Во-вторых, узел никогда не вставляют после удаленного узла. Та­ ким образом, состояние списка остается корректным, несмотря на то, что узлы могут появляться и исчезать в любой момент времени.

Реализации функций clearlsb, setlsb и haslsb грубы, насколько это воз­ можно;

например:

Т. setlsb(T)(T* p) { return cast(T*) ( c a s t( s iz e _ t) p | 1);

} 13.17. Статические конструкторы и потоки В одной из преды дущ их глав была описана конструкция s ta tic th is(), предназначенная для инициализации статических данны х модулей и классов:

module c o u n t e r s ;

in t counter = 0;

sta tic th is() { counter++;

} Как у ж е говорилось, у каж дого потока есть локальная копия перемен­ ной counter. К аж ды й новый поток получает копию этой переменной, и при создании этого потока запускается статический конструктор.

1 О писание этой части я зы к а не бы ло вкл ю чен о в о р и ги н ал к н и ги, но п о­ ско л ьк у эта возм ож н ость п ри сутствует в тек у щ и х р е а л и за ц и я х я зы к а, м ы д о б а в и л и е е о п и с а н и е в п е р е в о д.Прим. науч. ред.

516 Глава 13. Параллельные вычисления im p o rt std.concurrency, std.stdio;

i n t counter = 0;

s ta tic th is () counter++;

writeln(''CiaTH4ecKHfi конструктор: counter = " counter);

} v o id main() { поток");

w riteln("0cH O B H O ti spawn(&fun);

} v o id fun() { writeln("fl04epHkM поток");

} Запустив этот код, получим вывод:

С тати ч еск и й к о н с т р у к т о р : c o u n t e r = О сновной п о то к С тати ч еск и й к о н с т р у к т о р : c o u n t e r = Д очерний п о то к Объявить статический конструктор, исполняемый один раз при запус­ ке программы и предназначенны й для инициализации разделяемых данны х, мож но с помощью конструкции shared s ta tic th is(), а объя­ вить разделяемы й деструктор - с помощью конструкции shared sta tic ^thisQ:

im p o rt std.concurrency, std.std io ;

s h a r e d i n t counter = 0;

sh a re d s t a t i c t h i s ( ) { counter++;

иг^е1п("Статический конструктор: counter = " counter);

) v o id main() { поток");

writeln("0cHOBHOfl spawn(&fun);

v o id fun() { writeln("flo4epHk^ поток'');

} 13.18. Итоги В этом случае конструктор будет запущ ен только один раз:

С тати ч ески й к о н ст р у к т о р : c o u n te r = Основной п оток Дочерний п оток Разделяемыми могут быть не только конструкторы и деструкторы мо­ дуля, но и статические конструкторы и деструкторы класса. Порядок выполнения разделяемых статических конструкторов и деструкторов определяется теми ж е правилами, что и порядок выполнения локаль­ ных статических конструкторов и деструкторов.

13.18. Итоги Реализация функции setlsb, грязная и с потеками масла на сты ках, была бы подходящ им заключением для главы, которая началась со строгой красоты обмена сообщ ениями и постепенно спустилась в под­ земный мир разделения данны х.

D предлагает широкий спектр средств для работы с потоками. Н аибо­ лее предпочтительный механизм для большинства прилож ений на со­ временных маш инах - определение протоколов на основе обмена сооб­ щениями. При таком выборе мож ет здорово пригодиться неизменяемое разделение. Отличный совет для тех, кто хочет проектировать н ад еж ­ ные, масштабируемые прилож ения, использую щ ие параллельные вы­ числения, - организовать взаимодействие м еж ду потоками по методу обмена сообщениями.

Если требуется определить синхронизацию на основе взаимоисключе­ ния, это можно осуществить с помощью синхронизированны х классов.

Но предупреждаю: по сравнению с другим и язы кам и, поддерж ка про­ граммирования на основе блокировок в D ограничена, и на это есть ос­ нования.

Если требуется простое разделение данны х, мож но воспользоваться раз­ деляемыми (shared) значениями. D гарантирует, что операции с разде­ ляемыми значениями выполняются в порядке, определенном в вашем коде, и не провоцируют парадоксы видимости и низкоуровневые гонки.

Наконец, если вам наскучили такие аттракционы, как бандж и-дж ам пинг, укрощ ение крокодилов и прогулки по раскаленным углям, вы бу­ дете счастливы узнать, что сущ ествует программирование без блокиро­ вок и что вы мож ете заниматься этим в D, используя разделяемые структуры и классы.

Литература [1] Alagid, S., Royer, M. «Genericity in Java: Persistent and database system s implications». The VLDB Jou rn al, том 17, выпуск 4 (2008), 847-878.

[2] Aldrich, J., Kostadinov, V., Chambers, C. A lias annotations for prog­ ram understanding. Конференция «OOPSLA: Object-Oriented Prog­ ramming, System s, Languages, andApplications», Нью-Йорк, 2002, ACM Press, c. 311-330.

[3] Alexandrescu, A. «On iteration». In form IT (ноябрь 2009). h ttp:// erdan i.com /pu blication s/on -iteration.h tm l.

[4] Amsterdam, J. «Java’s new considered harmful». Dr. Dobb's Journal (апрель 2002). h ttp://w w w.ddj.com /java/184405016.

[5] Armstrong, J. «Programming Erlang: Software for a Concurrent World». The Pragm atic Programmers, 2007.

[6] Bacon, D. F., Strom, R. E., Tarafdar, A. «Guava: a dialect of Java without data races». Конференция «OOPSLA: Object-Oriented Prog­ ramming, System s, Languages, and Applications», Нью-Йорк, 2000, ACM Press, c. 382-400.

[7] Benoit, F., Reimer, J., Carlborg, J. «The D W idget Toolkit (DWT)».

h ttp ://w w w.dsou rce.org/projects/dw t.

[8] Bloch, J. «Effective Java Programming Language Guide». Sun Mic­ rosystem s, Inc., 2001. [9] Bloch, J. «Effective Java. Second edition». Prentice Hall PTR, 2008.

[10] Bohm, C., Jacopini, G. «Flow diagrams, turing machines and languages with only two formation rules». C om m unications of the A CM, том 9, выпуск 5 (1966), 366-371.

[11] Boyapati, C., Lee, R., Rinard, M. «Ownership types for safe program­ ming: Preventingdataracesanddeadlocks». Конференция «OOPSLA:

Object-Oriented Programming, Systems, Languages, and Applicati­ ons», Нью-Йорк, 2002, ACM Press, c. 211-230.

[12] Bright, W. «The D assembler», h ttp://digitalm ars.eom /d/l.0/iasm.h tm l.

1 Джошуа Блох «Java. Эффективное программирование». - Лори, 2002.

Литература [13] Brooks, Jr., F. P. *The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition». Addison-Wesley, 1995. [14] Cabana, B., Alagic, S., Faulkner, J. «Parametric polymorphism for Java: Is there any hope in sight?» S IG P L A N N o tices, том 39, вы­ пуск 12 (2004), 22-31.

[15] Cardelli, L. «Туре systems». Глава 103 из книги «The Computer Science and Engineering Handbook», A. B. Tucker, Ed. CRC Press, 1997, c. 2208-2236.

[16] Chang, R. «Near speed-of-light on-chip electrical interconnects».

Диссертация на соискание степени PhD, Стэнфордский универси­ тет, 2003.

[17] Cohen, Т. «Java Q&A: How do I correctly implement the equals() me­ thod?» Dr. Dobb’s Jou rn al (май 2002). h ttp ://w w w.d d j.co m /ja va / 184405053.

[18] Digital Mars, dmd - FreeBSD D Compiler, 2009. h ttp ://d ig ita lm a rs.

com /d/2.0/dm d-freebsd.h tm l.

[19] Digital Mars, dmd - Linux D Compiler, 2009. h ttp ://d ig ita lm a rs.

com /d/2.0/dm d-lin u x.h tm l [20] Digital Mars, dmd - OSX D Compiler, 2009. h ttp ://d ig ita lm a rs.

com /d/2.0/dm d-osx.h tm l [21] Digital Mars, dmd - Windows D Compiler, 2009 h ttp ://d ig ita lm a rs.

com /d/2.0/dm d-w indow s.h tm l.

[22] Drepper, U. «What every programmer should know about memory».

E klektix, Inc. (октябрь 2007).

[23] Easton, W. B. «Process synchronization without long-term interlock».

ACM SIGOPS O peratin gsystem s review, т. 6, вып. 1/2 (1972), с. 95-100.

[24] Findler, R. B., Felleisen, M. «Contracts for higher-order functions».

A C M SIG PLA N N otices, т. 37, вып. 9 (2002), 48-59.

[25] Flanagan, C., Abadi, M. «Object types against races». «CONCUR ’99:

Proceedings of the 10th International Conference on Concurrency Theory», Лондон, 1999, Springer-Verlag, c. 288-303.

[26] Friedl, J. «Mastering Regular Expressions». O’Reilly Media, Inc., 2006. 1 Фредерик Брукс «Мифический человеко-месяц, или как создаю тся программные системы». - СПб: Символ-плюс, 2000.

2 Д ж. Фридл «Регулярные выражения», 3-е издание. —СПб: Символ плюс, 2008.

520 Литература [27] Gamma, E., Helm, R., Johnson, R., and Vlissides, J. «Design Patterns: Elements of Reusable Object-Oriented Software». Addison Wesley, 1995. [28] Gove, D. «Solaris application programming». PrenticeHall PTR, 2008.

[29] Gropp, W., Lusk, E., Skjellum, A. «Using MPI: Portable parallel pro­ gramm ing with the M essage-Passing Interface». MIT Press, Кем­ бридж, 1999.

[30] Harris, T. L. «А pragmatic implementation of non-blocking linked lists». L ecture N otes in C om puter Science 2180 (2001), c. 300-314.

[31] Herlihy, M. «Wait-free synchronization». TOPLAS: A CM T ran sacti­ ons on P rogram m in g L an gu ages a n d S ystem s, т. 13, вып. 1 (1991), с. 124-149.

[32] Hoffman, D. M., W eiss, D. M., Eds. «Software fundamentals:

collected papers by David L. Parnas». Addison-Wesley, 2001.

[33] ISO. The ANSI C standard (C99). Tech. Rep. WG14 N1124, ISO/IEC, 1999.

[34] Kernighan, B. W., and Ritchie, D. M. «The C Programming Language». Prentice H all, 1978. [35] Knuth, D. E. «The A rt of Computer Programming. Vol. 2: Seminume rical Algorithms» Addison-Wesley, 1997. [36] Korpela, J. K. «Unicode explained». O’Reilly Media, Inc., 2006.

[37] Lee, E. A. «The problem with threads». Computer, т. 39, вып. 5 (2006), с. 33 -4 2.

[38] Liskov, B. «Keynote address - data abstraction and hierarchy». Кон­ ференция «OOPSLA: Object-Oriented Programming, Systems, Languages, and Applications», Нью-Йорк, 1987, c. 17-34.

[39] M artin, R. C. «Agile Software Development, Principles, Patterns, and Practices». Prentice Hall, 2002. 1 Гамма Э., Хельм P., Джонсон P., Влиссидес Дж. «Приемы объектно­ ориентированного программирования. Паттерны проектирования*.

- Питер, 2007.

2 Керниган Б., Ритчи Д. «Язык программирования С», 2-е издание.

Вильямс, 2008.

3 Кнут Д. «Искусство программирования, т. 2: получисленные алго­ ритмы». - Вильямс, 2007.

4 Мартин Р. «Быстрая разработка программ. Принципы, примеры, практика». - Вильямс, 2003.

Литература [40] Meyer, В. «Object-Oriented Software Construction». Prentice Hall, 1988. [41] Meyers, S. «How non-member functions improve encapsulation». C++ users jo u rn a l, т. 18, вып. 2 (2000), с. 44 -5 2.

[42] Milewski, B. «Race-free multithreading: Ownership». Блог h ttp :// b a rto szm ile w sk i.w o rd p re ss.c o m /2 0 0 9 /0 6 /0 2 /ra c e -fre e -m u ltith re a d ing-ownership/.

[43] Odersky, M., Wadler, P. «Pizza into Java: Translating theory into practice». 24 симпозиум «АСМ SIGPLAN-SIGACT», по теме «Prin­ ciples of programming languages», Париж, 1997, ACM, c. 146-159.

[44] Parnas, D. L. «On the criteria to be used in decomposing system s into modules». C om m unications of theA C M, т. 15, вып. 12 (1972), с. 1053 1058.

[45] Parnas, D. L. «А technique for software module specification with examples». C om m unications of th eA C M, т. 15, вып. 5 (1972), с. 3 3 0 336.

[46] Pierce, B. C. «Types and programming languages». MIT Press,. Кем­ бридж, 2002.

[47] Pike, R. «UTF-8 history». 2003. h ttp://w w w.cl.cam.ac.u k/-m gk25/ u cs/utf-8-h istory.txt.

[48] Press, W.H., Teukolsky, S. A., Vetterling, W. T., Flannery, B. P. «Nu­ merical Recipes: The art of scientific computing». Cambridge University Press, Нью-Йорк, 2007.

[49] Radenski, A., Furlong, J., Zanev, V. «The Java 5 generics compromise orthogonality to keep compatibility». J. Sust. S o ftw., т. 81, вып. (2008), с. 2069-2078.

[50] Schmidt, D. C. «Strategized locking, thread-safe interface, and scoped locking». C++ R eport, т. 11, вып. 9 (1999).

[51] Stepanov, A., Lee, M. «The Standard Template Library». Tech. rep., WG21 X 3J16/94-0095, 1994.

[52] Sutter, H. «Virtuality». C /C ++ Users Jou rn al (сентябрь 2001).

[53] Sutter, H. «The free lunch is over: A fundamental turn toward concurrency in software». Dr. Dobb’s Jou rn al, т. 30, вып. 3 (2005), с. 202-210.

[54] Sutter, H. «Use threads correctly = isolation + asynchronous messages».

Блог «Sutter’s Mill» (март 2009). http://herbsutter.com /2009/03/16/.

1 Мейер Б. «Объектно-ориентированное конструирование программ­ ных систем». - Русская редакция, 2005.

522 Литература [55] Sutter, H. and Alexandrescu, А. «С++ Coding Standards: 101 Rules, Guidelines, and Best Practices». Addison-Wesley, 2004. [56] The Unicode Consortium. «The Unicode Standard, Version 5.0».

Addison-Wesley, 2006.

[57] Valois, J. D. «Lock-free linked lists using compare-and-swap». 14 еже­ годный симпозиум ACM по теме *Principles of distributed comput­ ing» (1995), ACM,. Нью-Йорк, c. 214-222.

[58] Von Ronne, J., Gampe, A., Niedzielski, D., Psarris, K. «Safe bounds check annotations». C oncurrency an d Com putation: P ractice and E x­ p erien ce, т. 21, вып. 1 (2009).

[59] Wadler, P. «Proofs are programs: 19th century logic and 21st century computing». Dr. D obb’s J ou rn al (декабрь 2000).

[60] Wegner, P. «А technique for counting ones in a binary computer».

C om m unications o fth e A C M, т. 3, вып. 5 (1960), с. 322.

[61] Xu, D. N., Peyton Jones, S., Claessen, K. «Static contract checking for Haskell». SIG P L A N N otices, т. 44, вып. 1 (2009), с. 41-52.

1 Саттер Г., Александреску А. «Стандарты программирования на С++». - Вильямс, 2008.

Алфавитный указатель Спецсимволы, би н арн ы й оператор,, оп ератор, $, д л и н а м а с с и в а, 4 1, 6 2, 1 3 2, 13 4, |, о п е р а т о р, 9 4, 4 6 $, идентиф икатор, =, оператор п р и с в а и в а н и я,, (за п я тая ), оп ератор, 9 6, 4 6 = =, оператор, 92, 148, 154, 261,. ( п р е ф и к с н ы й о п е р а т о р - т о ч к а ),, оператор, 93, 265,. (т о ч к а ), о п е р а т о р, 8 «, би н арн ы й оператор, ;

(то ч к а с за п я т о й ), «, оператор, {} ( ф и г у р н ы е с к о б к и ), 3 =, оператор, 93, 265,... (м н о г о т о ч и е ), 2 0, оператор, 93, 26 5, +, б и н а р н ы й о п е р ат о р, 4 5 », би н ар н ы й оператор, +, оператор с л о ж е н и я, 9 », оператор, 9 +, у н ар н ы й оператор, =, оператор, 93, 265, +, у н ар н ы й плю с, », оператор, + +, оператор, 8 4, 4 4 5, -, оператор в ы ч и т ан и я, ++, п р еф и ксн ы й оператор, -, би н арн ы й оператор, -, б и н а р н ы й о п е р а т о р, 4 5 -, о п е р ат о р к о н к а т е н а ц и и, 52, 9 0, 149, -, у н а р н ы й м и н у с, 8 -, у н а р н ы й о п е р а т о р, 4 4 -, оператор о т р и ц а н и я, --, о п е р а т о р, 4 4 5, 4 4 -, у н ар н ы й оператор, ", п р е ф и к с н ы й о п ер ато р, - =, о п е р а т о р,l4o, *, б и н а р н ы й о п е р а т о р, 4 5 *, о п е р а т о р р а з ы м е н о в а н и я, 8 7, 1 6 Числа *, о п е р а т о р у м н о ж е н и я, 8 0x, п р еф и кс, *, у н а р н ы й о п е р а т о р, 4 4 0X, п р е ф и к с, /, б и н а р н ы й о п е р ат о р, 4 5 /, о п ер ато р, 8 А &, би н арн ы й оператор, &, оператор, 87, 9 4, 164 a b s tr a c t, к л ю ч е в о е сл о в о, &, у н ар н ы й оператор, 466 A c t i v e T e m p l a t e L i b r a r y (A T L ), 1 9 &&, оператор, 9 4, 4 6 6 a lia s, и н с т р у к ц и я, 190, 3 3 %, би н арн ы й оператор, 4 5 0 a lia s, к л ю ч е в о е сл о в о, 191, %, о б о зн ач ен и е с п е ц и ф и к а т о р а ф о р м а т а, a lia s th is, к о н с т р у к ц и я, 3 2 33 a lig n o f, с в о й с т в о т и п а, %, оператор, 89 a lig n, а т р и б у т, 3 3 ^, о п е р а т о р, 9 4 A S C I I, с т а н д а р т, 1 5 6, 157, 1 5 ^^, о п е р а т о р, 8 9 asm, к о н с тр у к ц и я, 125, 1, о п е р а т о р о т р и ц а н и я, 7 9, 8 8 a s s e rt, в ы р аж ен и е, 1( ш а р а м е т р ы т и п о в ), 3 9 A s s e rtE rro r, и с к л ю ч е н и е, 8 1=, о п е р а т о р, 9 2, 1 5 4, 2 6 1, 4 5 3 A s s e rtE rro r, к л а с с, 3 6 6, ?:, о п е р а т о р, 4 6 6 a s s e rt(fa ls e ), о с та н о в п р о г р а м м ы, ?:, о п е р а т о р с р а в н е н и я, 72 a.s ta r ts W ith ( b ), ф у н к ц и я, 4 524 Алфавитный указатель A S T -м ак р о с, 3 45 D SEL, класс язы к о в п рограм м ирования, a u to, к л ю ч е в о е с л о в о, 145, d s tr in g, т и п д а н н ы х, 72, В d u p, с в о й с т в о м а с с и в а, 3 8, 1 3 1, B a s ic M u ltilin g u a l P la n e, B M P, E b itf ie ld s, ф у н к ц и я, BOM (b y te o r d e r m a rk ), п р о т о к о л, 4 0 2 e ls e, о т н о ш е н и е к i f, 1 0 b o o l, т и п д а н н ы х, 6 0 e ls e, о т н о ш е н и е к s t a t i c i f, 1 0 e m p ty, п р и м и т и в п е р е б о р а, 4 5 b r e a k, и н с т р у к ц и я, E rro r, к л ас с, byK ey, м етод ассо ц и ати вн о го м асси ва, 155 E x c e p tio n, к л а с с, 3 6 5, 3 6 b y L in e, ф у н к ц и я, 4 6 E x c e p tio n, т и п и с к л ю ч е н и я, b y te, т и п д а н н ы х, 32, 60 e x p a n d, с в о й с т в о T u p le, 2 0 b y V a lu e, м е т о д а с с о ц и а т и в н о г о м а с с и в а, e x p o rt, с п е ц и ф и к а т о р д о с ту п а, 2 5 6, 155 e x p, ф у н к ц и я, e x te r n, о б ъ я в л е н и е я з ы к а, С F c, с у ф ф и к с, % f, C 9 9, с т а н д а р т, c a s, а т о м а р н а я о п е р а ц и я, 511 fa c to r y, м е т о д, c a s 2, а т о м а р н а я о п е р а ц и я, 511 fa c to ry, м ето д ко р н ево го к л ас са, f a ls e, л о г и ч е с к и й л и т е р а л, 6 0, c a se, к л ю ч е в о е слово, c a s t, о п ер ато р, 5 3, 8 8 F ile, с т р у к т у р а, c a tc h, к л ю ч е в о е сло во, 118 fin a lly, к л ю ч е в о е с л о в о, 118, c h a r, т и п д а н н ы х, 4 6, 6 0, 160 f i n a l s w itc h, и н с т р у к ц и я, fin a l, к л ю ч ев о е слово, и н и ц и а л и зи р у ю щ е е зн ач ен и е, c la s s, т и п д а н н ы х, 4 4 fin d, ф у н к ц и я, c le a r, ф у н к ц и я, 2 3 8, 31 5 flo a t, т и п д а н н ы х, 32, c o n s t, к в а л и ф и к а т о р т и п а, 176, 3 4 9, 3 5 9,fo r, к о н с т р у к ц и я, 4 5 fo re a c h, к о н с т р у к ц и я, 155, c o n tin u e, и н с т р у к ц и я п р о д о л ж е н и я fo re a c h, ц и к л, 31, ц и к л а, 3 7, 114 fro n t, п р и м и ти в перебора, c o re.m e m o ry, м о д у л ь, 2 3 8 f u n c t i o n, к л ю ч е в о е с л о в о, 74, 1 9 1, c o r e, п а к е т с т а н д а р т н о й б и б л и о т е к и, 4 3 0f, с у ф ф и к с, 6 co s, ф у н к ц и я, 218 F, с у ф ф и к с, 6 D G.d, р а с ш и р е н и е ф а й л а, 4 0 2 G C.f r e e ( ), ф у н к ц и я, 2 3 g e t, м е т о д а с с о ц и а т и в н о г о м а с с и в а, d, с у ф ф и к с, D B C S - D o u b le B y t e C h a r a c t e r S e t, 4 1 0 g o t o, и н с т р у к ц и я, 4 5, d c h a r, т и п д а н н ы х, 6 0, I и н и ц и а л и зи р у ю щ е е зн ач ен и е, -d e b u g, ф л а г к о м п и л я т о р а, 4 2 9 -I, ф л а г к о м п и л я т о р а, 4 0 debug, отладочное объявлени е, 429 % id, с п е ц и ф и к а т о р ф о р м а т а, d e f a u lt, к л ю ч е в о е сл о в о, 107 IE E E 7 5 4, ф о р м а т, d e le g a te, к л ю ч е в о е с л о в о, 74, 8 4, 192 if, и н с т р у к ц и я, d e p re c a te d, к л ю ч е в о е сло во, 427 if, к о м а н д а в е т в л е н и я,.d i, р а с ш и р е н и е ф а й л а, 4 0 2 if, о г р а н и ч е н и е с и г н а т у р ы, @ d is a b le, а т р и б у т, 3 2 6 im m u ta b le, к л ю ч е в о е слово, к в а л и ф и к а ­ D o m a in - S p e c if ic E m b e d d e d L a n g u a g e, то р т и п а, 3 2, 70, 160, 3 5 0, D SEL, d o u b le, т и п д а н н ы х, 3 2, 6 d o -w h ile, и н с т р у к ц и я, 1 0 Алфавитный указатель import, инструкция, 30 new, оператор, 84, сравнение с директивой #include из С Non-Virtual Interface, NVI, 270, и С++, 30 nothrow, атрибут функции, сравнение с командой import Python, nothrow, ключевое слово, 30 null, константа, 47, 62, 131, import, функция, 70 NVI, 270, сравнение с директивой #include С, 70 О in, бинарный оператор, 450 object.opEquals(a, b), метод, in, вид параметра, 36, 175 Object, корневой класс, 52, in, оператор, 37, 91, 153 object, модуль, 238, 261, пример, 37 -of, флаг компилятора, in, предусловие, 382 offsetof, свойство поля, lin, оператор, 91 opApply, метод, init, свойство типа, 232 opAssign, метод, inout, ключевое слово, 362 opAssign, оператор присваивания, interface, ключевое слово, 268 opBinaryRight, метод, int, типданных, 32, 60 opCast, метод, is, оператор, 82, 93, 148, 154, 466 opCmp, метод корневого класса, !is, оператор, 93 opCmp, метод типа, opCmp, упорядочивающий оператор, К opCmp, функция модуля object, keys, свойство ассоциативного массива, opDispatch, метод, 155 opDollar, метод, opEquals, метод корневого класса, L opEquals, оператор равенства, 318, opEquals, функция модуля object, L, суффикс, 63, opHash, метод типа, length, свойство массива, 132, 143, opIndex, метод, -lib, флаг компилятора, opOpAssign, метод, ln, суффикс, opUnary, метод, long, тип данных, 32, outer, свойство вложенного класса, 1-значение, 75,174, out, вид параметра, 36, м сравнение с ref, out, постусловие, main, функция, 29, 31, 139,173 override, ключевое слово, пример, 29, 140 OwnerFailed, тип исключения, вызов с параметром, 52 OwnerTerminated, тип исключения, -main, флаг rdmd, 173 4 8 8 - MessageMismatch, тип исключения, Message Passing Interface, MPI, 478 P message, поле PriorityMessageException, package, спецификатор доступа, 255, MFC, библиотека, Phobos, стандартная библиотека, mixin, выражение, 81, 338, 446, popFront(), примитив перебора, mixin, инструкция, пример, pow, функция, 35, module, ключевое слово, пример, module, объявление модуля, PriorityMessageException, тип исключе­ move, функция, ния, prioritySend, функция, N private state (локальное состояние), NaN, константа, 47 private, ключевое слово, 47, new, выражение, 226 private, спецификатордоступа, 255, 526 Алфавитный указатель @ p r o p e r ty, а т р и б у т ф у н к ц и и, 8 4 sp a w n, ф у н к ц и я, s p lit, ф у н к ц и я, @ p r o p e r ty, к л ю ч е в о е сл о в о, p ro te c te d, с п е ц и ф и к а т о р д о с т у п а, 255 S t a n d a r d T e m p la te L ib r a r y, S T L, 4 3 s t a t i c, к л а с с п а м я т и, 1 4 4, 1 78, 1 9 p tr, сво й ство м ас с и в а, s ta tic, к л ю ч ев о е слово, p u b lic, с п е ц и ф и к а т о р д о с т у п а, 2 5 6, 3 2 s t a ti c if, и н с т р у к ц и я, p u b lic im p o r t, к о м а н д а о б щ е д о с т у п н о г о s ta tic im p o rt, к о м ан д а стати ческого вклю чения, вк л ю ч ен и я, p u re, а т р и б у т ф у н к ц и и, s ta tic th is (), к о н с т р у к т о р м о д у л я, 42 R s ta tic th is (), с т а т и ч е с к и й к о н стр у к т о р, R A II, s ta tic -th is ( ), с та ти ч е с к и й дестр у к то р, R a n g e E rro r, и скл ю ч ен и е, r a n g e ( д и а п а з о н ), s td.

a lg o r ith m, м о ду л ь, 45, 201, 2 02, 228, rd m d, п р о гр а м м а, 313, re a d f, ф у н к ц и я, s td.a rra y, м о д у л ь, 43 re a l, т и п д а н н ы х, 3 2, 6 0, s td.b ig in t, м одул ь, 4 3 r e c e iv e O n l y, ф у н к ц и я, 4 8 2, 4 8 s td.b itm a n ip, м о д у л ь, 4 3 r e c e iv e T im e o u t, ф у н к ц и я, 4 8 s td.c o n c u rre n c y, м о д у л ь, 4 3 0, 4 9 4, 4 9 re c e iv e, ф у н к ц и я, 4 8 3, 4 8 9, 4 s td.c o n ta in e r, м о д у л ь, 4 3 re d u c e, ф у н к ц и я, r e f, к л а с с п а м я т и, 3 5, 1 2 7, 1 3 1, 1 47, 1 5 1, s t d. c o n t r a c t s s t d. e x c e p t i o n, м о д у л ь, 3 9 s td.c o n v.te x t, ф у н к ц и я, 1 7 4, 1 7 5, 1 7 6, s td.c o n v.to, ф у н к ц и я, 3 5 п р и м ер, 35, s td.c o n v, м о д у л ь, 140, 3 3 8, 4 3 re f, к л ю ч е в о е слово, 2 0 0, s td.d a te tim e, м о д у л ь, 4 3 re g e x, р е гу л я р н о е в ы р а ж е н и е, s td.f ile, м о д у л ь, 4 3 прим ер, -re le a s e, ф л а г к о м п и л я т о р а, 8 0, 1 3 4, 3 8 9 s td.f u n c tio n a l, м о д у л ь, 4 3 re m o v e, м е т о д а с с о ц и а т и в н о го м а с с и в а, s td.g e to p t, м о д у л ь, s td.js o n, м о д у л ь, s td.m a th, м о д у л ь, 379, r e t u r n, и н с т р у к ц и я, s td.n u m e r ic, м о д у л ь, г - з н а ч е н и е, 7 5, s td.p a th, м о д у л ь, s td.r a n d o m, м о д у л ь, 131, 2 24, s s td.r a n g e, м о д у л ь, 2 0 2, % s, с п ец и ф и к а то р ф о р м ата, 33 s td.r e g e x, м о д у л ь, 4 5, @ sa fe, а т р и б у т м о д у л я, 133, 42 1, 470 s td.s td io, м о д у л ь, 373, -sa fe, ф л а г к о м п и л я т о р а, 4 22 s t d.s t r in g, м о д у л ь, S a fe D, 16 6, 421 s td.tr a its, м о д у л ь, sco p e, м ас ш та б и р у е м о ст ь, 123 s td.ty p e c o n s, м о д у л ь, s c o p e ( e x i t), и н с т р у к ц и я, 121 s td.u tf, м о д у л ь, 162, п р и м е р, 121 s td.v a ria n t, м одуль, 431, s c o p e (fa ilu re ), и н с т р у к ц и я, 124 std, п а к е т стан д ар тн о й би блиотеки, sc o p e (s u c c e ss), и н с т р у к ц и я, 123 s t r i d e, ф у н к ц и я, sen d, м етод, 482 s trin g o f, свой ство, s e tO w n e r, ф у н к ц и я, 4 8 8 s t r i n g, т и п д а н н ы х, 37, 4 6, 7 0, 7 2, s h a re d, к в а л и ф и к а т о р т и п а, 3 50, 477, н е и з м е н я е м о с т ь, 4 9 3,5 0 2 псевдоним, sh eb an g, н о тац и я, 30 s tru c t, ти п д а н н ы х, sh o rt, т и п д а н н ы х, 32, 60 s u p e r, к л ю ч е в о е слово, sin, ф у н к ц и я, 218 su p e r, п сев д о н и м р о д и тел ьско го к л асса,.s iz e o f, с в о й с т в о т и п а, 3 3 9 s iz e _ t, п сев д о н и м т и п а д а н н ы х, 33 8 sw ap, в с п о м о га т е л ь н а я ф у н к ц и я, s lic in g, к л а с с о ш и б о к п р о г р а м м и р о в а ­ s w itc h, и н с т р у к ц и я, н и я, 57 s y n c h ro n iz e d, ат р и б у т, Алфавитный указатель sy n c h ro n iz e d, а т р и б у т к л а с с а, 5 0 2 н и ж н я я с у р р о г а т н а я зо н а, sy n c h ro n iz e d, и н с т р у к ц и я, 5 0 9 с у р р о г а т н ы е п а р ы, @ s y s te m, а т р и б у т м о д у л я, 1 3 3, 4 2 1 U T F -3 2, к о д и р о в к а, 1 5 6,1 6 к о д о в а я е д и н и ц а, T п р и м ен ен и е, U tfE x c e p tio n, к л а с с, 3 9 te m p la te, к о н с т р у к ц и я, 3 4 U T F, г р у п п а к о д и р о в о к, th is, к л ю ч ев о е слово, U /u, с у ф ф и к с, 6 th is, к о н с т р у к т о р с т р у к т у р ы, 2 3 2, 3 0 -th is (), д е с т р у к т о р с т р у к т у р ы, 237, V th is (th is ), к о н с т р у к т о р к о п и р о в а н и я, 307 v a lu e s, с в о й с т в о а с с о ц и а т и в н о г о м а с с и ­ T h r e a d ID, 4 8 2 в а, T h re a d -L o c a l S to r a g e, T L S, 4 7 7 V a ria n t, т и п д а н н ы х, 4 8 T h r o w a b le, к л а с с, 1 1 8, 3 6 6 -v e rb o se, ф л а г к о м п и л я т о р а, 4 0 th ro w, и н с т р у к ц и я, 118 v e rs io n, о б ъ я в л е н и е в е р с и и, 4 2 T id, т и п и д е н т и ф и к а т о р а п о т о к а, 4 8 2 -v e rs io n, ф л а г к о м п и л я т о р а, 4 2 to H a s h, м ет о д к о р н е в о го к л а с с а, 2 61 v o id, и н и ц и а л и з и р у ю щ е е з н а ч е н и е, 145, to H a s h, м ет о д т и п а, 156 to lo w e r, ф у н к ц и я, 4 7 v o id, т и п д а н н ы х, 5 9, 6 to S tr in g, м ето д к о р н е в о го к л а с с а, 2 6 w to, ф у н к ц и я, 140, 3 3 прим ер, 46 w, с у ф ф и к с, tr a n s ito r y s ta te (в р ем е н н о е с о с т о я н и е ), -w, ф л а г к о м п и л я т о р а, 4 2 217 w c h a r, т и п д а н н ы х, 6 0, tr u e, л о ги ч е с к и й л и т е р а л, 6 0, 62 и н и ц и а л и зи р у ю щ е е зн ач ен и е, @ tru s te d, атр и б у т м о д у л я, 133, 4 2 1, 422 w h ile, и н с т р у к ц и я, 1 0 tr y, и н с т р у к ц и я, 118 w ith, и н с т р у к ц и я, t u p le ( к о р т е ж ), 2 0 5 w rite ln, ф у н к ц и я, 31, 3 3, 2 0 T u p le, т и п д а н н ы х, 2 0 8 п ри м ер, 31, t u p le, ф у н к ц и я, 2 0 8 сп ец и ф и катор ф орм ата, ty p e id, в ы р а ж е н и е, 6 2 w s trin g, т и п д а н н ы х, 72, ty p e id, о п е р ат о р, 70, 4 6 6 W Y S IW Y G -с т р о к а, 67, 6 t y p e o f ( n u ll), т и п д а н н ы х, 5 9, 6 ty p e o f, о п е р ат о р, 7 0,1 8 3, 3 3 9 А автом ати ч еская п ерем ен н ая, и алгебраи чески й тип, u b y te, т и п д а н н ы х, 3 2, 6 0, 160 аллокатор, U C S -2, к о д и р о в к а, 1 5 9 анти си м м етри чность, u in t, ти п д а н н ы х, 3 2, 6 0, 160 а п п а р а т н а я за щ и т а п а м я т и, u lo n g, т и п д а н н ы х, 3 2, 6 0 атри б ут, о п ределен и е, u n i f o r m, ф у н к ц и я, u n i t t e s t, к л ю ч е в о е с л о в о, 4 0, 173 Б - u n i t t e s t, ф л а г к о м п и л я т о р а, базовы й к л асс, U N IX, базовы й т и п, 95, u s h o rt, т и п д а н н ы х, 3 2, 6 0, барьеры п ам яти, U T F -8, к о д и р о в к а, 1 5 6, 1 5 безоп асн ая п р о гр ам м а, к о д о вая е д и н и ц а, б езоп асн ое м н о ж ес т в о D, п ри м ен ен и е, безо п асн о сть п р о гр ам м ы, сво й ств а, н еоп ределен н ое поведение, U T F -1 6, к о д и р о в к а, 1 5 6, 1 5 оп ределен н ое п оведение, в ер х н я я с у р р о га тн а я зо н а, ош и бки врем ени и сп олн ен и я к о д о в а я е д и н и ц а, 159, 160, ди агностируем ы е, недостатки, 528 Алфавитный указатель ошибки времени исполненния недиагностируемые, 420 замыкание, библиотека времени исполнения, 52, 53, зарезервированные слова, 81,87 знак экранированный брендирование объекта, 235 backspace, вертикальная табуляция, В возврат каретки, верхняя суррогатная зона, 159 двойная кавычка, весХемминга, 119 звуковой сигнал, виртуализация памяти, 473 имя знака Юникод, включение, 403 обратная косая черта, в связке с alias, 413 перевод строки, избирательное, 411 прогон страницы, общедоступное, 409 символ UTF-8, с переименованием, 412 символ UTF-16, статическое, 410 символ UTF-32, со множеством модулей, 411 табуляция, вложенные функции, 193 значения,семантика, 56, внутренние указатели, внутренний перебор, время жизни, 305 идентификатор, встроенный ассемблер, 431 пример, архитектура x86, 432 чувствительность к регистру, архитектура x 8 6 -6 4,435 идентификатор потока, вторичное исключение, 371 инвариант, вывод типов, 179 инвертирование, выводы об универсальности, 511 инкапсуляция, 254, вызов метода, 199 инлайнинг, 200, вычисления во время компиляции инструкция сравнение с шаблонами С++, 224 alias, return, общий вид, Г with, общий вид, гонки за данными, 470, 499 пример, гравис, \ 68 безусловный переход внутри try-catch-finally, д использование в переключателе, дайджест, пример, 114, деаллокатор, 241, ветвление декорирование имен, каскадное, деструктор, общий вид, диапазон D, 172, 201, пример, 37, диапазон ввода, статическое, 104, динамический полиморфизм, выражение, динамический тип, ограничение, доказательство от противного, переключатель документирующие комментарии, в связке с перечисляемыми доступ к глобальному идентификатору, типами, масштабируемое решение, дочерний класс, метка, общий вид, Ж пример, жесткое кодирование, 179 статический, 108, Алфавитный указатель продолжения цикла, пример, 37 конструктор, 54, составная, 101 делегирование, цикл неизменяемый, просмотра, 31, 34, 37, 38, 110, 111, обращение к объекту, 112 перегрузка, со счетчиком, 109 пример, с постусловием, 109 статический, 242, с предусловием, 109 корневой, сравнение while и do-while, 109 метод интерфейс, 51, 268 абстрактный, выборочная реализация, 274 неизменяемый, защищенные примитивы, 272 финальный, 251, 252, невиртуальный, 269 наследование, 244, ограничения на содержимое, 268 дочерний класс, пример, объявление интерфейса, 51 обращение к родителю, исключение, 364 переопределение, 245, 248, вторичное, 370, 371 подкласс, первичное, 371 потомок, исключительныеситуации, 117, 364 предок (родитель), итоговая сборка, 97 простое, суперкласс, К недостатки вечная жизнь, квалификатор типа, 70, ссылочная семантика, const, 349, обращение к членам класса, immutable, к статическим членам класса, вывод типов, параметризированный, составление типов, гетерогенная трансляция, транзитивность, пример, shared, разделяемый, транзитивность, расположение полей в памяти, взаимодействие между квалификато­ создание экземпляра класса рами, метод Object.factory, транзитивность, статические данные и функции, класс, 51, текстовое представление, абстрактный, 54, 274, финальный, пример, экземпляр вложенный, равенство, 261, 262, в класс, 278, создание, 226, 231, 232, в структуры, упорядочивание, в функцию, 280, 281, хеш, статический, класс памяти, 35, выравнивание, ковариантные возвращаемые типы, деструктор кодировка, 156, порядок вызовов, кодовая точка, статический, кодовые единицы, 158, запрет переопределения, комментарий документирующий, инициализация, компиляция пустое значение, автоматическая, соглашение об именовании база данных с типами, параметров и членов классов, вычисления, оптимизация, инлайнинг, интерфейс типы, множественное наследование, константа, пример, 530 Алфавитный указатель конструктор, 232 целочисленный, конструктор копирования this(this), десятичный, 303,307 пример, конструкции распознающий автомат, mixin template, 345 шестнадцатеричный, поиск идентификаторов, 347 локальный идентификатор, версия, 427 локальный псевдоним, запрет изменения, 428 лямбда-функция, 73, объявление версии, 428 определение, проверка версии, м отладочное объявление, параметризированный контекст массив, сужение, одноименный шаблон, 343 массивы неизменяемых знаков, псевдоним множественный, 339 межпроцедурный анализ, цикл мертвые присваивания, foreach, 459, 460 метка порядка байтов, со счетчиком,459 метод разработки через тестирование, с просмотром, 131, 459 контекст, 314 многострочные комментарии, копирование модуль, по значению, пример, 56 безопасный, по ссылке, пример, 56 деструктор модуля, при записи, 161 доверенный, корневой класс, 118 конструктор модуля, кортеж типов параметров, 205 системный, критические участки, 497 мьютексы, 239, Л н линейный поиск, 171 неассоциативность операторов сравне­ лист, 253 ния, литерал небезопасные для памяти средства двоичный, 63 языка, знаковый, экранирование, 66 нелокальные утечки, кортеж параметров, 208 ненулевое значение, литерал делегата, 192 нетипизированный адрес, логический, 62 неявные преобразования чисел, массив, 131, 144, 145 нижняя суррогатная зона, ассоциативный, 152 новое размещение, конструкция, с плавающей запятой, десятичный, 64 О мантисса, обмен сообщениями, 469, показатель степени, обратные вызовы С, пример, обращение к свойству, распознающий автомат, объявление, шестнадцатеричный, объявление верхнего уровня, строковый, 67, ограничения сигнатуры, 182, длина строкового литерала, одинаково специализированные функ­ т и п, ции, пример, шестнадцатеричный, однострочные комментарии, экранирование, ООП, функциональный, 191, оператор вызова функции, пример, операции указатель на кадр стека, арифметические, Алфавитный указатель вызов функций, 33 критический участок, 470, сравнения, 33 мьютекс, останов программы, 391 неизменяемые данные, отладка, 34 последовательная целостность, отношение частичного порядка на множестве функций, 185 синхронизация на основе блоки­ отступы, 328 ровок, очищенные типы, 292 состояние гонки, туп ик, п флаг события, разделение памяти, пакет, мьютекс, парадигмы программирования синхронизация, контрактное программирование, разделяемый класс, инвариант, 379, 385, параметр-псевдоним, контракты,378, 396, паттерн, постусловия, 379, первичное исключение, предусловия, 379, первичные выражения, утверждения, 378, первое совпадение, обобщенное программирование перегрузка операторов параметризация типов, $,4 5 объектно-ориентированное програм­ foreach, мирование, внутренний перебор, инкапсуляция, 251, 254, 255, 256, перегрузка бинарных операторов, наследование, перегрузка ветвления, сокрытие информации, перегрузка операторов индексации, функциональное программирование, перегрузка операторов присваива­ параллельные вычисления, ния, аппаратная защита памяти, перегрузка операторов среза, блокировка перегрузка перегрузки операторов, временность, локальность, перегрузка тернарной условной взаимодействие с помощью передачи операции, сообщений перегрузка унарных операторов, очередь потока, перегрузка постфиксных операто­ сообщение, 482, ров увеличения и уменьшения виртуализация памяти, на единицу, многопоточность, снижение, обмен сообщениями, перекрытие локальной переменной, поток, 469, переменные, автоматическая дочерний, инициализация, запуск, переопределение операторов, идентификатор потока, подкласс, основной, поиск имен, останов, порождение исключений, поток-владелец, порождение подтипов, процесс, 469, множественное, разделение данных, переопределение методов, барьеры памяти, постусловие, блокировка, потоки, взаимоблокировка, совместный доступ к строкам, гонка за данными, почтовый ящик, 532 Алфавитный указатель пошаговые функции, 54 снижение, снижение операторов, предикат, собственный подтип, предусловие, совместное использование данных, препроцессор, реализация, соглашения о вызовах, префиксный оператор-точка, привязки, 227 x86, cdecl, принцип подстановки Барбары Лисков, 394 fastcall, принципы программирования pascal, масштабируемость, 50 stdcall, модульность, 53 thiscall, принцип открытости/закрытости, соглашение D, 50,267 x86-64, принцип структурного программиро­ AMD64 ABI, вания, 35 Microsoft x64, создание вложенного класса, пространство имен, 53, процесс, 473 сокеты, псевдоним, 70, 327 сокрытие информации, 254, псевдочлен, 199 составная инструкция, сравнение D с другими языками, пустая инструкция, С, 32, 33, 56, 70, 104, 140,178, 194, P C#, 32, 270, 283, равенство ссылок, С++, 33, 44, 56, 253, 270, 283, 293, разделение данных, 311, 341, между модулями и потоками, С и С++, размеченное объединение, Eiffel, разработка через тестирование, метод, Java, 32, 40, 53, 253, 261, 270, 283, разреженный массив, Perl 6, раннее копирование, Python, 93, раскрутка стека, Алгол-подобные языки, регулярные выражения, Лисп, резюме модуля, Модула-3, рекурсия объектно-ориентированные языки, оптимизация хвостовой рекурсии, родительский класс, Паскаль, скриптовые языки, С функциональные языки, сборка языки с динамической типизацией, итоговая, 133 промежуточная, 133 сравнение с обменом, сборка мусора, 87, 237 ссылочная семантика, определение, 228 стандартная библиотека, 39, 81, 89,162, сборщик мусора, описание, 239 422, свойство, 199 основные пакеты, семантика значений, 56 стандартный поток ввода, семантика ссылок, 56 статические данные, сериализация объекта, 267 статический конструктор класса, сигнатура, 182 статический тип, символ, 61 стиль верблюда, синтаксический сахар, 465 стиль представления кода, ситуации состязания, 470 пропуск фигурных скобок для слияние блоков памяти, 142 одиночных инструкций, Алфавитный указатель с помощью отступов, 34 просмотр по порядку, стиль в данной книге, 34 срез, 39, 41, стиль программирования тип элементов массива, объектно-ориентированный, 50 фиксированного размера, процедурный, 50 фиксированной длины, 144, 146, строгий слабый порядок, 265 147,148, 149, строка токенов, 69 начальное значение, строковый литерал с разделителями, 68 объединение, структура, метод неизменяемый, 354 анонимное, сужение массива, 139 инициализация, суперкласс, 245 статическое, супертип, 95 основные типы, суррогатная зона, 159 перечисляемые значения, суррогатные пары, 159 перечисляемые типы, сущности, 227 подтип, пользовательские, 156, T размер, система основных типов D, тернарная условная операция, с плавающей запятой, 32, 47, тест модуля, начальное значение, внутренний, ссылка, область видимости, ссылочные типы, типы данных строки, null, структура, 44, 57, без значения, вложенная, 323, встроенные, внутренний указатель, диапазон, внутренний элемент, 321, диапазон ввода, время жизни, сравнение с итераторами библио­ выравнивание, 328, теки STL, деструкция, сравнение с шаблоном Итератор, инициализация по умолчанию, знаковые, конструктор, 306, значение по умолчанию, копирование, 303, класс метод, освобождение памяти, определение, уничтожение, освобождение памяти, клуктура, параметризированная, кортеж параметров, передача функциям, расширение, построение, 306, логические, пример, 44, массив, присваивание, length, свойство, сброс состояния, ассоциативный, 37, 73, 151- 155, смещение поля, 169, 265, сравнение на равенство, динамический, 3 7,130- 132, 134, уничтожение, 313, 135, 137- 141, 144, супертип, зубчатый, тип-значение, 44, изменение размера, целые, 32, индексация, начальное значение, копирование, целые без знака, многомерный, 145, типы числовых операций, начальное значение, толстый указатель, 171, проверка границ, точка, префиксный оператор, 534 Алфавитный указатель тупик, 501, 509 с переменным числом аргументов, 33, У гетерогенная, гетерогенная нешаблонная, угон функций, гомогенная, 203, указатель частичный порядок, индексирование массива, неупорядоченность, указатель на кадр стека, свойства, универсальность, чистая, условная инструкция, допущение, 216, утверждение, с нулевой константой, X хеш-сумма, хеш-таблица, 36, файл программы, хороший тон программирования, фокус с одноименным шаблоном, функция, ц анонимная, 36, аргументы центральное процессорное устройство, lazy, 177 ЦПУ, передача, 35 циклическая зависимость, ошибка, порядок вычисления, 84 цикл просмотра, атрибут, ч вложенная, пример, 193 частичный порядок, 185, указатель на кадр стека, встроенная, 36 ш высокого порядка, 73, 190, шаблон mixin, свертка, делегат э замыкание, 194, 195, кадр стека, 192 экземпляры класса, лямбда-функция, 36, 43, ю пример, ограничение сигнатуры, 181, 182 Юникод, стандарт, параметр, 35 базовая многоязыковая плоскость, in, 175 out, 176 версия 5.1, неизменяемый, 354 кодировка, параметр-псевдоним, 190, 191 кодировка знака, параметр типа, 179 кодовая единица, передача, 171, 173, 174 кодовая точка, 156, перегрузка, 183 диапазон значений, кроссмодульная, 188,189, локальный псевдоним, 189 Я управление, ячейки массива, передача другим функциям, псевдочлен, результат неизменяемый, с обобщенными типами параметр типа, пример, сравнение с Java, C# и С++, сохранение локальной среды, МаркСАМ М ЕРФИЛД Ql. Профессиональное программирование Разработка кроссплатформенных приложений на С++ 560 a p., книга в продаже Книга Марка Саммерфилда открывает путь к овладению раз­ нообразными паттернами и приемами создания приложений с использованием библиотеки разработки кроссплатформенных приложений Qt.

Основной акцент сделан на создании моделей, графических представлений и гибридных приложений «рабочий стол + Ин­ тернет*, на многопоточной обработке данных и приложениях, содержащих мультимедийные объекты и форматированный текст. Представлено подробное введение в подсистемы анимации и конечных автоматов, включенные в версию Qt 4-6.

В книге приведены примеры кода, протестированные на платформах Windows, Мас OS X и Linux с использованием Qt 4. (а многие работают также с версией Qt 4.5) и написанные с ори­ ентацией на будущие версии Qt.

Х ар алам б о с МАРМАНИС и Д м и т р и й БАБЕНКО Алгоритмы интеллектуального Интернета АЛГПРИТНЫ Передовые методики сбора, анализа ИНШШЕКТУАЛЬНОП) и обработки данных И Т Р ЕА НЕ Н Т 480 стр., книга в продаже Если вас интересуют вопросы искусственного интеллекта, если у вас есть собственный блог, новостной портал, wiki-справочник или сайт с онлайн-игрой, если вы планируете создать веб-прило­ жение, которое должно учитывать введенные каждым пользовате­ лем данные, его поведение в системе на протяжении некоторого периода времени, а такжедругую потенциально полезную инфор­ мацию - эта книга будет вам безусловно необходима.

В издании рассматриваются проблемы, с которыми сталкива­ ются все веб-приложения: поиск, кластеризация, релевантность и т. д. Примеры в этой книге даны на языке Java и разработаны таким образом, чтобы с их помощью можно было проиллюстри­ ровать универсальную методику - алгоритм, - которая находит применение в широком диапазоне сценариев.

Издание в первую очередь адресовано программистам и веб­ разработчикам, однако множество примеров и новых идей будут полезны и руководителям разного уровня,желающим лучше разо­ браться в технологиях и их возможностях с точки зрения бизнеса.

И здат ельст во "СИМВОЛ-ПЛЮС" Основано в 1995 году • • • • • • • • • e « • • • « 9 • • • О нас Наша специализация - книги компьютерной и деловой тематики.

Наши издания - плод сотрудничества известных зарубежных и отечественных авторов, высококлассных переводчиков и компетентных научных редакторов. Среди наших деловых партнеров издательства: O’Reilly, Pearson Education, NewRlders, Addison Wesley, Wiley, McGraw-Hill, N0 Starch Press, Packt, Dorset House, Apress и другие.

Где купить Наши книги вы можете купить во всех крупных книжных магази­ нах России, Украины, Белоруссии и других стран СНГ. Однако по минимальным ценам и оптом они продаются:

С анкт-П етербург:

главный офис издательства В. 0. 16 линия, д. 7 (м. Василеостровская), тел. (812) 380- Москва:

московский филиал издательства ул. 2-я Магистральная, д. 14В (м. Полежаевская/Беговая), тел. (495) 638- З а к а з КНИГ ч е р е з И н тер н ет http://www.symbol.ru Бесплатный каталог книг высыпается позапросу.

Приглашаем к сотрудничеству Мы приглашаем ксотрудничествуумных и талантливых авторов, переводчиков и редаеторов. За более подробной информацией обращайтесь, пожалуйста, на сайт издательства www.symbol.ru.

Также на нашем сайте вы можете высказать свое мнение w uv w. s у m b о I. r u и замечания о наших книгах. Ждем ваших писем!

Язы к программирования D Цель языка программирования D- помочь программистам спра­ виться с непростыми современными проблемами разработки программного обеспечения. Он создает все условия для органи­ зации взаимодействия модулей через точные интерфейсы, под­ держивает целую федерацию тесно взаимосвязанных парадигм программирования (императивное, объектно-ориентированное, функциональное и метапрограммирование), обеспечивает изо­ ляцию потоков, модульную безопасность типов, предоставляет рациональную модель памяти и многоедругое.

Андрей Александреску Издание представляет собой введение в D автору которого, аетор н еоф и ц и альн ого терм и н а « с о в ­ можно доверять. Книга в фирменном стиле Александреску - она р ем ен н ы й С ++», п о д к отор ы м п о н и м а ­ написананеформальнымязыком,нобезлишнихсловиневущерб ют м н ож еств о п ол езн ы х сти л ей и и дей точности. Андрей рассказывает о выражениях и инструкциях, п р о гр а м м и р о в а н и я н а С ++. К нига А л ек ­ о функциях, контрактах, модулях и многом другом, что есть в язы­ сан др еск у «С ов рем ен н ое п р оек ти р ов а­ ке D В книге вы найдете:

.

н и е н а С ++: о б о б щ е н н о е п р о г р а м м и р о ­ вание и прикладны е ш аблоны п роек ти ­ • Полный перечень средств языка с объяснениями и нагляд­ рован ия» п олностью и зм ен и л а м ето­ ными примерами д и к у п р о г р а м м и р о в а н и я н а С++ и о к а ­ • Описание поддержки разных парадигм программирования зал а о г р о м н о е в л и я н и е и на д р у г и е конкретными средствами языка я зы к и и с и с т е м ы. Б л а г о д а р я м н о г о ч и с ­ • Информацию о том, почему в язык включено то или иное ленн ы м б и б л и о т ек а м и п р и л о ж ен и я м, р а зр абота н н ы м А н д р е ем, а т а к ж е его средство, и советы по их использованию и ссл едовател ь ск ой р а б о те, он сни ск ал • Обсуждение злободневных вопросов, таких как обработка ув аж ен и е и практиков, и т ео р ет и к ов.

ошибок, контрактное программирование и параллельные С 2 0 0 6 года А л ек са н д р еск у стал вычисления п р а в о й р у к о й У ол тер а Б р а й т а - а в т о р а • Таблицы, рисунки и «шпаргалки» - удобный справочный я зы к а D и п е р в о г о, к то в з я л с я з а е г о р е ­ материал, незаменимый для практического решения задач ал и зац и ю. И м ен н о А н др ей п р ед л о ж и л с помощью D м ногие важ ны е ср ед ст в а D и со зд а л Книга написана для практикующего программиста, причем больш ую часть ста н д а р тн о й б и б л и о т е ­ она не просто знакомит с языком - это настоящий справочник ки D. В с е э т о п о з в о л и л о е м у н а п и с а т ь полезных методик и идиом, которые облегчат жизнь не только ав т о р и т ет н у ю к н и гу о н о в о м я зы к е D.

программиста на D но и программиста вообще.

, С амм ерф ил| Дьпхерст Спраш ивайте КяТЕГОРиЯ: ПРОГРЙППЫРОВЙНиЕ_ С++ наши кноги: tf УРОВЕНЬ п о д г о т о в к и 4UiRTErfEU: СРЕйНШ С в я щ е н н ы е знанин Профессиональное U издание ip iz p aM M u p o iaiu e М а р м а н и с, Бабенко Алгориш мы интеллектуального И нтернета ISBN 978-5-93286-205- www.symbol.ru Издательство «Символ-Плюс»

9 785932 (812) 380-5007, (495) 638-

Pages:     | 1 |   ...   | 13 | 14 ||
 





 
© 2013 www.libed.ru - «Бесплатная библиотека научно-практических конференций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.