Skip to content

PositiveTechnologies/libfptu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

libfptu

Fast Positive Tuples, aka "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ" by Positive Technologies.

Машинно-эффСктивный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ прСдставлСния Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ… для (Π΄Π΅)сСриализации, ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями ΠΈ размСщСния Π² раздСляСмой памяти. "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ" спроСктированы Π² соотвСтствии с минималистичСским тСзисом "Π›ΡƒΡ‡ΡˆΠ΅ мСньшС, Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅".

Machine-handy format for linear representation of small data structures for (de)serialization, messaging and placement in shared memory. "Fast Positive tuples" is designed according to the "Less is more" idiom. English translation by Google and by Yandex.

License Build Status Build status CircleCI Coverity Scan Status

The Future will (be) Positive. Всё Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ΠšΡ€Π°Ρ‚ΠΊΠΎ

"ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ" - это простой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ… Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π²ΠΈΠ΄Π΅. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libfptu Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ", прСдоставляя интСрфСйс C++14 ΠΈ Π²Ρ‹ΡˆΠ΅.

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ libfptu ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ JSON, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… структур языка C с возмоТностями boost::optional ΠΈ boost::variant. Π’ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии libfptu появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° схСмы Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ (aka preplaced) для привязки ΠΊ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ структурам языка C, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ размСщСния ΠΈ совмСстного использования (чтСния) ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π² раздСляСмой памяти.

Однако, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libfptu ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈ нСсколько суровой, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ стараСтся ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ эффСктивности ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ машиной ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… слуТСбных Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΎΡ‚ MessagePack, Protocol Buffers, BJSON

1. Π›Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ удобство для ΠΌΠ°ΡˆΠΈΠ½Ρ‹. НичСго лишнСго. ΠžΠ±ΡŠΡ‘ΠΌ ΠΊΠΎΠ΄Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½, Π° внутрСнняя структура Π»ΠΈΠ½Π΅ΠΉΠ½Π° ΠΈ проста.

"ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ" Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ лишнСго, Π² Ρ‚ΠΎΠΌ числС IDL ΠΈ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивными ΠΊΠ°ΠΊ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ структуры, поддСрТивая строки, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поля Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ участкС памяти.

2. НСпосрСдствСнная (Π΄Π΅)сСриализация. ΠšΠΎΡ€Ρ‚Π΅ΠΆ формируСтся Π² Π²ΠΈΠ΄Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ просто Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ (Π΄Π΅)сСриализация Π² "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ" магичСски быстрая.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° происходит Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, прСимущСствСнно простым ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. ΠŸΡ€ΠΈ этом сСриализованноС прСдставлСниС всСгда Π³ΠΎΡ‚ΠΎΠ²ΠΎ, достаточно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΡ… Π½Π°Ρ‡Π°Π»ΠΎ.

3. ΠžΡ‡Π΅Π½ΡŒ быстрый доступ. libfptu позволяСт ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ прямого доступа ΠΊ полям фиксированных структур ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… мноТСств с эффСктивным поиском Π² индСксС.

Для эффСктивного доступа ΠΊ полям ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° достаточно Π΅Π³ΠΎ "сырого" прСдставлСния "ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ" Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ участкС памяти, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ манипуляций. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ поля ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС сводится, ΠΊ SIMD-поиску Π΅Π³ΠΎ дСскриптора Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅. Π§Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ чтСния лишь ΠΎΠ΄Π½ΠΎΠΉ кэш-Π»ΠΈΠ½ΠΈΠΈ для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 15 ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 16 ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ….

4. ИзмСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅ΡˆΠ΅Π²Ρ‹. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, поля ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ.

ΠŸΡ€ΠΈ этом Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ прСдставлСнии ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π·Π°Π·ΠΎΡ€Ρ‹, Π° Ρƒ вас появляСтся Π²Ρ‹Π±ΠΎΡ€: ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ мСстом ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, которая, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, Π½Π΅ Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ копирования содСрТимого ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

5. НСмного ΠΎΠ±ΡŠΡ‘ΠΌΠ½Π΅Π΅ Ρ‡Π΅ΠΌ MessagePack. Π”Π°Π½Π½Ρ‹Π΅ хранятся Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ машинном прСдставлСнии, Π±Π΅Π· сТатия. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° 3-4 Π±Π°ΠΉΡ‚Π° большС.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, слСдуСт Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ†ΠΈΡ„Ρ€Ρ‹. Π’ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… цСлочислСнных ΠΏΠΎΠ»Π΅ΠΉ с Π±Π»ΠΈΠ·ΠΊΠΈΠΌΠΈ ΠΊ Π½ΡƒΠ»ΡŽ значСниями, прСдставлСниС Π² libfptu ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ 12 Ρ€Π°Π· большС памяти Π² сравнСнии с MessagePack (1 Π±Π°ΠΉΡ‚ Π² MessagePack, ΠΏΡ€ΠΎΡ‚ΠΈΠ² 12 Π±Π°ΠΉΡ‚ Π² libfptu).

Однако, "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ" Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ сСрСбряной ΠΏΡƒΠ»Π΅ΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ для случаСв:

  • ВрСбуСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ….
  • ВрСбуСтся IDL ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.
  • ВрСбуСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠ°ΠΌΠΎΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π’ структурах Π±ΠΎΠ»Π΅Π΅ 2000 ΠΏΠΎΠ»Π΅ΠΉ.
  • Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ структуры Π±ΠΎΠ»Π΅Π΅ 250 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚.
  • ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ объСма Π²Π°ΠΆΠ½Π΅Π΅ скорости доступа ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° (Π΄Π΅)ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

ΠžΠ±Π·ΠΎΡ€

"ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ" ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС структурно простых Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ:

  • НС содСрТат ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, которая Π½Π΅ трСбуСтся машинС. БоотвСтствСнно "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ" нСльзя отнСсти ΠΊ само-ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ….

  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ схСму Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ минималистичСский справочник. ΠŸΡ€ΠΈ этом, ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ программиста, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π±Π΅Π·-схСмныС сцСнарии использования с ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ/ΠΈΠ»ΠΈ частично зафиксированной схСмой.

  • НС прСдусматриваСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… встроСнных ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ TypeId для различСния структурных Ρ‚ΠΈΠΏΠΎΠ².

Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 250 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΈ 8 тысячами экзСмпляров ΠΏΠΎΠ»Π΅ΠΉ. Поля Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ лСгковСсными Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для доступа ΠΊ полям Ρ‡Π΅Ρ€Π΅Π· API. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Ρ„ΠΎΡ€ΠΌΠ΅. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, справочник схСмы обСспСчиваСт Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.

Поля ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²: ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ (preplaсed) ΠΈ свободныС (loose). ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… компромиссах ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ доступа ΠΈ расходуСмым мСстом. Доступ ΠΊ полям производится Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ, Π²Π½Π΅ зависимости ΠΎΡ‚ Π²ΠΈΠ΄Π° поля.

Preplaced Fields

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ preplaced-поля Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ полям Π² структурах языка C, физичСски всСгда ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ схСмой.

Π’ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ схСмС, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ preplaced-поля всСгда извСстны ΠΈ зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ схСмы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ preplaced-полю ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ схСмы Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ поиска ΠΈ Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ фиксированному ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‚ΠΎΠΊΠ΅Π½ доступа любого preplaced-поля содСрТит Ρ‚Π°ΠΊΠΎΠ΅ смСшСниС.

Preplaced-поля физичСски всСгда Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ. ΠŸΡ€ΠΈ этом для Ρ‚ΠΈΠΏΠΎΠ² c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ строк) нСпосрСдствСнно Π²Π½ΡƒΡ‚Ρ€ΠΈ поля хранится лишь смСщСниС ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ вмСстС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ элСмСнтами Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

НакладныС расходы доступа ΠΊ preplaced-полям ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ свСдСны ΠΊ Π½ΡƒΠ»ΡŽ посрСдством Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° привязанного ΠΊ схСмС Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ частично фиксируСтся. ВСхничСски это сводится ΠΊ использованию статичСских Ρ‚ΠΎΠΊΠ΅Π½-классов, ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… компилятор способСн ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ inline-ΠΊΠΎΠ΄ нСпосрСдствСнного доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΈ нСобходимости libfptu ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС preplaced-ΠΏΠΎΠ»Π΅ΠΉ. Для этого, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ поля рСзСрвируСтся для обозначСния логичСской "пустоты". НапримСр, для цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² со Π·Π½Π°ΠΊΠΎΠΌ Π² качСствС Ρ‚Π°ΠΊΠΈΡ… DENIL-Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (designated NIL) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΡ€Π°ΠΉΠ½Π΅Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (INT_MIN).

Loose Fields

Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Π΅ ΠΈΠ»ΠΈ loose-поля всСгда ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ мСсто Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ присутствии Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅. Для ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… loose-ΠΏΠΎΠ»Π΅ΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° поддСрТиваСтся ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ индСкс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ идСнтифицируСтся Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ поля ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, loose-поля всСгда нСсут ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ своих Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠ²Π»ΡΡŽΡ‚ΡΡ частично само-ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π±Π΅Π·-схСмныС сцСнарии использования.

ΠŸΡ€ΠΈ нСобходимости loose-поля ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ нСупорядочСнныС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ repeated fields Π² Protocol Buffers. Для этого ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² схСмС ΠΊΠ°ΠΊ "коллСкция".

Для поиска loose-ΠΏΠΎΠ»Π΅ΠΉ Π² индСксС libfptu ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сканированиС с аксСлСрациСй SSE2/AVX/AVX2/AVX512, Ρ‚Π°ΠΊ ΠΈ сортировку с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ поиском.

Π’Π½ΡƒΡ‚Ρ€ΠΈ libfptu Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ loose-поля Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ дозаписи дСскриптора Π² Π½Π°Ρ‡Π°Π»ΠΎ индСкса ΠΈ дозаписи Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ loose-полю сводится ΠΊ поиску ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ дСскриптора Π² индСксС, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠΎ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΌΡƒ Π² дСскрипторС смСщСния.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ loose-ΠΏΠΎΠ»Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (строки, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ строки, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ), ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… участков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠΊΠ²ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. Вакая дСфрагмСнтация Π½Π΅ Π΄ΠΎΡ€ΠΎΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ копирования ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Набор Ρ‚ΠΈΠΏΠΎΠ² зафиксирован ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС распространСнныС Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅) Ρ‚ΠΈΠΏΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ строки, Π΄Π°Ρ‚Π°/врСмя, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚, IP-адрСса, IP-сСти, MAC-адрСса ΠΈ дайдТСсты.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² зафиксирован Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ enum fptu::genus, здСсь ΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности:

  • text = Π‘Ρ‚Ρ€ΠΎΠΊΠΈ UTF8 Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 262129 Π±Π°ΠΉΡ‚. Π’ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ прСдставлСнии Π΄Π»ΠΈΠ½Π° строк хранится Π² явном Π²ΠΈΠ΄Π΅, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ноль Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½ΠΎ допустим Π²Π½ΡƒΡ‚Ρ€ΠΈ строк.

  • varbin = ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ строки) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π΄ΠΎ 262128 Π±Π°ΠΉΡ‚.

  • nested = Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

  • property = ΠŸΠ°Ρ€Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ нСбольшого Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π΄ΠΎ 253 Π±Π°ΠΉΡ‚.

  • datetime_utc = Π”Π°Ρ‚Π°/врСмя Π² Ρ„ΠΎΡ€ΠΌΠ΅ 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа сСкунд с Π½Π°Ρ‡Π°Π»Π° Unix-эпохи 1970-01-01 00:00:00 +0000 (UTC).

  • datetime_h100 = Π”Π°Ρ‚Π°/врСмя Π² Ρ„ΠΎΡ€ΠΌΠ΅ фиксированной Ρ‚ΠΎΡ‡ΠΊΠΈ 32-dot-32 ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ с "Positive Hiper100re".

  • decimal = 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ с дСсятичной экспонСнтой.

  • bin96..bin512 = Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 96/128/160/192/224/256/320/384/512 Π±ΠΈΡ‚.

  • app_reserved_64 ΠΈ app_reserved_128 = Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 64 ΠΈ 128 Π±ΠΈΡ‚.

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅Ρ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π½ΠΎ Π² ΡƒΠ³ΠΎΠ΄Ρƒ лСгковСсности ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ для этого элСгантного Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΌΠ°. Π’ Ρ†Π΅Π»ΠΎΠΌ, для прСдставлСния Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  1. ΠŸΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡ, ΠΏΡ€ΠΎΡ‰Π΅ говоря, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½: Π΄Π΅Π»Π°Π΅ΠΌ { "ЀИО.Имя": "Иван", "ЀИО.Ѐамилия": "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²" } вмСсто { "ЀИО": { "Имя": "Иван", "Ѐамилия": "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²" } }

  2. ВлоТСнная сСриализация, ΠΊΠΎΠ³Π΄Π° сначала ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ формируСтся ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с "ЀИО", Π° Π·Π°Ρ‚Π΅ΠΌ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ вкладываСтся Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

Π’ΠΎΠΊΠ΅Π½Ρ‹ доступа

Π’ΠΎΠΊΠ΅Π½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ Π½ΠΈΠΌ. Π’ΠΎΠΊΠ΅Π½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ· "Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠ° схСмы", Π² Ρ‚ΠΎΠΌ числС ΠΏΠΎ символичСским ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠΎΠ»Π΅ΠΉ, Π»ΠΈΠ±ΠΎ созданы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ содСрТит Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ "замСтности пустоты", ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ подставляя Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… loose-ΠΏΠΎΠ»Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС preplaced-ΠΏΠΎΠ»Π΅ΠΉ (см Π΄Π°Π»Π΅Π΅ Ρ€Π°Π·Π΄Π΅Π» "ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поля").

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ содСрТат Ρ€Π°Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² зависимости ΠΎΡ‚ Π²ΠΈΠ΄Π° поля. Π’Π°ΠΊ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ preplaced-ΠΏΠΎΠ»Π΅ΠΉ содСрТат смСщСниС для нСпосрСдствСнно доступа ΠΊ полю Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. А Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ loose-ΠΏΠΎΠ»Π΅ΠΉ содСрТат тэг для поиска поля Π² индСксС ΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Ρ„Π»Π°ΠΆΠΎΠΊ повторяСмости поля).

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния C++ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами классов с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈ этом слСдуСт Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ динамичСскиС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ статичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы:

  • ДинамичСскиС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ хранят собствСнныС Π½Π΅-статичСскиС значСния всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ экзСмплярС класса fptu::token. Π Π°Π·Π½Ρ‹Π΅ экзСмпляры этого класса ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ полям. БоотвСтствСнно, динамичСскиС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚ справочника схСмы ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    Доступ ΠΊ полям Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½, Π½ΠΎ рСализуСтся функциями с нСсколькими условными вСтвлСниями Π²Π½ΡƒΡ‚Ρ€ΠΈ.

  • БтатичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы Π½Π΅ хранят ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ значСния, Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ "пустотСлыми" классами, состоящими Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· inline-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ константныС значСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ для всСх экзСмпляров. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ статичСский Ρ‚ΠΎΠΊΠ΅Π½-класс ΠΈ всС Π΅Π³ΠΎ экзСмпляры всСгда соотвСтствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ полю. БоотвСтствСнно, статичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы нСльзя ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ, Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΈ/ΠΈΠ»ΠΈ Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ посрСдством макроса FPTU_TOKEN ΠΈΠ»ΠΈ шаблона fptu::token_static<>.

    Доступ ΠΊ полям Ρ‡Π΅Ρ€Π΅Π· статичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы внСшнС выглядит Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ для динамичСских Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Однако, Π² случаС статичСских Ρ‚ΠΎΠΊΠ΅Π½-классов, libfptu прСдоставляСт ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ inline-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ позволяСт компилятору ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ условных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Π² Ρ‚ΠΎΠΌ числС с нСпосрСдствСнным доступом ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ для preplaced-ΠΏΠΎΠ»Π΅ΠΉ.

ΠšΡ€ΠΎΠΌΠ΅ статичСских ΠΈ динамичСских Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² доступны ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ cast_typecheck<TOKEN>, cast_preplaced<TOKEN> ΠΈ cast_loose<TOKEN> ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· динамичСских Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² частично статичСскиС, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½ΡƒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° с мСньшим количСством условных Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ динамичСскиС ΠΈ статичСскиС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ, Π° динамичСскиС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ· статичСских. Π’ Ρ†Π΅Π»ΠΎΠΌ это позволят Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, сочСтая фиксированиС части схСмы Π½Π° стадии компиляции с динамичСским Π΄ΠΎ-ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎ врСмя выполнСния. ΠŸΡ€ΠΈ этом рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ поэтапный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

  • ЀормируСтся внСшнСС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС схСмы.

  • АналитичСски формируСтся список "горячих" ΠΏΠΎΠ»Π΅ΠΉ, для доступа ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

  • На основании списка "горячих" ΠΏΠΎΠ»Π΅ΠΉ, нСпосрСдствСнно Π² исходном ΠΊΠΎΠ΄Π΅, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ дСкларация ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… структур. Для всСх ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ макроса FPTU_TOKEN Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ статичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы. Доступ ΠΊ этим полям производится Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· статичСскиС Ρ‚ΠΎΠΊΠ΅Π½-классы, Π»ΠΈΠ±ΠΎ посрСдством получСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° поля Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… структур языка C.

  • Π’ΠΎ врСмя выполнСния, Π½Π° основании Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания схСмы, строится Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ справочник схСмы, Π° Ρ€Π°Π½Π΅Π΅ сгСнСрированныС статичСскиС-Ρ‚ΠΎΠΊΠ΅Π½ классы ΡΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ (ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ) с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² справочникС схСмы.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всС прСимущСства фиксированной схСмы ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ соотвСтствия скомпилированного ΠΊΠΎΠ΄Π° ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ описания схСмы Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ схСмы

Π’ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ" справочник схСмы фактичСски являСтся просто словарём Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² доступа ΠΈ выполняСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: loose ΠΈΠ»ΠΈ preplaced, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°Ρ… повторяСмости ΠΈ замСтности пустоты, суммарному Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ preplaced ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

  • Π’Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… символичСских ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ доступа (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹) ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

  • (TODO) Π’Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ enumeration-Ρ‚ΠΈΠΏΠΎΠ² Π² строковыС значСния ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΈ экспортС/ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² JSON ΠΈ YAML.

"ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ" Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ языка для описания схСмы ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° хранСния (сСриализации) справочника. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ схСмы сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, создаСтся ΠΈ наполняСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (программистом) Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поля

Достаточно Π²Π°ΠΆΠ½Ρ‹ΠΉ аспСкт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π’ "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ…" Π² явном Π²ΠΈΠ΄Π΅ поля Π½Π΅ дСлятся Π½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅. ВмСсто этого libfptu ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ отсутствиС loose-ΠΏΠΎΠ»Π΅ΠΉ, Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС preplaced-ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ физичСски всСгда ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ создаСт ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… абстракций ΠΈ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с полями Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ, ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠΈΡΡŒ Π½Π° компромиссС ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ доступа ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΌ мСстом.

ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ "замСтности пустоты" являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ дСйствуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Если discernible_null == FALSE Ρ‚ΠΎ libfptu Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ отсутствиС loose-ΠΏΠΎΠ»Π΅ΠΉ, подставляя СстСствСнныС Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, внСшнС устраняСтся Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ отсутствиСм поля ΠΈ Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅Ρ‚ NIL-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΌΡ‹ всСгда ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ…, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ fptu::field_absent.

  • Когда discernible_null == TRUE ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ "Π²ΠΈΠ΄Π΅Ρ‚ΡŒ" физичСскоС отсутствиС loose-ΠΏΠΎΠ»Π΅ΠΉ, Π° для preplaced-ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ физичСски всСгда ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, libfptu Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… отсутствиС. ΠŸΡ€ΠΈ этом для preplaced-ΠΏΠΎΠ»Π΅ΠΉ, для Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° рСзСрвируСтся для обозначСния "пустоты":

    Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ DENIL Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    i8, int8_t, boolean -128 (INT8_MIN)
    u8, uint8_t, bin8 0
    i16, int16_t, enumeration -32768 (INT16_MIN)
    u16, uint16_t, bin16 0
    i32, int32_t -2147483648 (INT32_MIN)
    u32, uint32_t, bin32 0
    f32, float -QNaN (всС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹)
    t32, datetime_uts 1970-01-01 (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ 0)
    i64, int64_t -9223372036854775808 (INT64_MIN)
    u64, bin64 0
    f64, double -QNaN (всС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹)
    d64, decimal64_t -QNaN (всС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹)
    t64, datetime_h100, timestamp 1970-01-01 (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ 0)
    bin96..bin512 0 (всС Π½ΡƒΠ»ΠΈ)
    mac, ip, ipnet 0 (всС Π½ΡƒΠ»ΠΈ)

    ВстрСчая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² preplaced-ΠΏΠΎΠ»Π΅ libfptu Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ отсутствиС: ΠΌΠ΅Ρ‚ΠΎΠ΄ is_present() Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ FALSE, Π° ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ fptu::field_absent.

ПолноС описаниС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° discernible_null ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² описании ΠΌΠ΅Ρ‚ΠΎΠ΄Π° token_operations<>::is_discernible_null().

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Π² "ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ…" - это нСупорядочСнный Π½Π°Π±ΠΎΡ€ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экзСмпляров поля. ΠŸΡ€ΠΎΡ‰Π΅ говоря, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ достаточно нСсколько Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»Π΅. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π² справочникС схСмС ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π΅, Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ ΠΊΠ°ΠΊ "повторяСмоС", Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ полям с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ repeated Π² Protocol Buffers).

Волько loose-поля ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ preplaced-ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ всСгда ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ экзСмпляру, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСзСрвируСтся мСсто ΠΈ фиксируСтся смСщСниС. Однако, preplaced-ΠΏΠΎΠ»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массив фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ плоская структура.

libfptu Π½Π΅ пСрСставляСт элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ послС ΠΈΡ… добавлСния, поэтому ΠΈΡ… физичСский порядок Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, порядок опрСдСляСтся всСй историСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ порядком добавлСния элСмСнтов Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ упорядочСнны. Π˜Π½Π°Ρ‡Π΅ говоря, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ порядок итСрирования ΠΈ располоТСния Π² памяти элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΈ Π½Π΅ зависят ΠΎΡ‚ порядка ΠΈΡ… создания.

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ libpftu Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²: ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ ΠΏΠΎΠ»Π΅ΠΉ. Оба Π²ΠΈΠ΄Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ сходныС свойства: Π½Π΅ гарантируСтся ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ порядок для ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… сущностСй, Π° сами ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ (Forward iterator category) ΠΈ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠ΅ (ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°). Π­Ρ‚ΠΈ свойства ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² пояснСнии:

  • ΠΠ΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈ элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π½Π΅ гарантируСтся ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ порядок. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ позволяСт Π½Π΅ ΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ итСрирования. ΠŸΡ€ΠΈ этом порядок элСмСнтов Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв сначала Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ элСмСнты Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ послСдними. Однако, порядок опрСдСляСтся всСй историСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ порядком добавлСния.

  • Π₯Ρ€ΡƒΠΏΠΊΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π›ΡŽΠ±ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ поля, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ мСста Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠ»ΠΈ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°. Π’ этом случаС ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ всС связанныС с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ€Π°Π΄ΠΈ простоты ΠΈ надСТности, рСкомСндуСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ всСгда ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ любом ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π’ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ:

    • ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ НЕ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ:

      • ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ loose-ΠΏΠΎΠ»Π΅ΠΉ.
      • ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ фиксированной Π΄Π»ΠΈΠ½Ρ‹, Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° поля loose/prelaced.
    • Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌΠΈ:

      • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ значСния preplaced-поля ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ строки) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Π·Π°Π·ΠΎΡ€Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± этом Π·Π°Π·ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² индСксС дСскрипторов Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации libfptu придСтся Π»ΠΈΠ±ΠΎ Π²Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄Ρ‘Ρ‚ ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
      • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ loose-поля, Π»ΠΈΠ±ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… любого поля ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ мСста ΠΈΠ»ΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅-сортировкС дСскрипторов Π² индСксС. Π§Ρ‚ΠΎ Π²Π»Π΅Ρ‡Π΅Ρ‚ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
      • Если Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ приводят ΠΊ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚ΠΎ это измСнСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‚.

ИспользованиС

TBD

Π‘Ρ…Π΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…

TBD

Preplaced ΠΈΠ»ΠΈ Loose

TBD

NIL ΠΈΠ»ΠΈ Π½Π΅-NIL

TBD

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с насыщСниСм

TBD

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ справочника

TBD

ИзмСняСмая ΠΈ сСриализованная Ρ„ΠΎΡ€ΠΌΡ‹

TBD

(Π”Π΅)БСриализация

TBD

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

TBD

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ

TBD

РаздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами

TBD

Π‘ Ρ†Π΅Π»ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ этих возмоТностСй Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ libfptu Π±Ρ‹Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Ρ‡Π°ΡΡ‚ΡŒ инфраструктуры управлСния раздСляСмыми Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 1Hippeus.

Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности Π΄Π°Π½Π½Ρ‹Ρ… слишком Π΄ΠΎΡ€ΠΎΠ³Π° ΠΈ ΠΊΠ°ΠΊ-ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Π°. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π»ΡŽΠ±Ρ‹Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡΡ… Π² дСсСриализуСмых Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ авариям.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² libfptu эксплуатируСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ:

  1. Доступны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСриализованной ΠΈ измСняСмой Ρ„ΠΎΡ€ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

  2. Π’ ΡƒΠ³ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ коррСктности Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ прСдоставляСмых Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ мусорных (Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Ρ‹Ρ…) Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

  3. ГарантируСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌΠΈ.


Π’Π½ΡƒΡ‚Ρ€ΠΈ

Π€ΠΎΡ€ΠΌΠ°Ρ‚

ЀизичСски ΠΊΠΎΡ€Ρ‚Π΅ΠΆ прСдставляСт собой Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок памяти, Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ располоТСн ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ индСкс для быстрого доступа ΠΊ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ полям. Π‘Ρ€Π°Π·Ρƒ Π·Π° индСксом Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚.Π΅. собствСнно значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ сСриализация, Ρ‚Π°ΠΊ дСсСриализация ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Ρ€Π°Π²Π½ΠΎΡ†Π΅Π½Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ/записи/ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ участка памяти.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ. ВсС Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ машинном Π²ΠΈΠ΄Π΅, порядок Π±Π°ΠΉΡ‚ строго Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ (опрСдСляСтся Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΈΠ»ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ CPU):

  • Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ΄Π΅Ρ‚ "Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ" ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ количСство loose-ΠΏΠΎΠ»Π΅ΠΉ (Ρ€Π°Π·ΠΌΠ΅Ρ€ индСкса) ΠΈ слуТСбныС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ.

  • Π—Π°Ρ‚Π΅ΠΌ слСдуСт индСкс loose-ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой массив ΠΈΠ· 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… дСскрипторов ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ loose-ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт-дСскриптор Π² индСксС содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ поля, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ смСщСниС ΠΊ Π½ΠΈΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ дСскриптора.

  • ПослС индСкса ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ preplaced-поля, строго согласно схСмС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ соотвСтствуСт ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

  • Π—Π° индСксом послС preplaced-ΠΏΠΎΠ»Π΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ loose-ΠΏΠΎΠ»Π΅ΠΉ ΠΈ prepaced-ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ΠŸΡ€ΠΈ этом Π² Π΄Π°Π½Π½Ρ‹Ρ… допустимы Π·Π°Π·ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ формирования ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ счСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ loose-дСскриптор ΠΈ связанныС с Π½ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Ρ‹ Π½Π° 4Ρ…-Π±Π°ΠΉΡ‚ΠΎΠ²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ. Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ preplaced-ΠΏΠΎΠ»Π΅ΠΉ опрСдСляСтся схСмой.

Для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ помСщаСтся Π² 16 Π±ΠΈΡ‚, значСния хранятся нСпосрСдствСнно Π² дСскрипторС вмСсто смСщСния.

Для всСх ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (строк, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ Ρ‚.Π΄.), Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ 32-Π±ΠΈΡ‚Π½ΠΎΠΌ словС кодируСтся ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ способ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ хранятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 с явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ‹. Π’Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ '\0' Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½ΠΎ допустим Π²Π½ΡƒΡ‚Ρ€ΠΈ строк.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ слова для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совпадаСт с нСбольшой ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠΎΠΉ:

  • Π’ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ пустой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΊΠ°ΠΊ ноль Π±Π°ΠΉΡ‚ (пустой строкой Π±Π°ΠΉΡ‚), Ρ‚Π°ΠΊ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ноль элСмСнтов.

  • Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ являСтся ΠΏΠΎΠ»Π΅ΠΌ, поэтому ΠΏΡ€ΠΈ присутствии поля всСгда обязан ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ своСм Π½ΡƒΠ»Π΅Π²ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅.

ИзмСняСмая ΠΈ сСриализованная Ρ„ΠΎΡ€ΠΌΡ‹

БСриализованная Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° libfptu - это Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являСтся массивом 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… ячССк. Π’ Π½Π°Ρ‡Π°Π»Π΅ располагаСтся информация ΠΎ количСствС ΠΏΠΎΠ»Π΅ΠΉ/ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈ ΠΎΠ±Ρ‰Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π”Π°Π»Π΅Π΅ слСдуСт список дСскрипторов. Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ preplaced-поля, Π° Π·Π° Π½ΠΈΠΌΠΈ значСния ΠΏΠΎΠ»Π΅ΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ значСния preplaced-ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° происходит Π² слСгка ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π΅ΠΉΡΡ "измСняСмой" Ρ„ΠΎΡ€ΠΌΠ΅ - это Ρ‚Π°ΠΊΠΆΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок памяти, Π½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ мСста для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слуТСбных счСтчиков. ΠŸΡ€ΠΎΡ‰Π΅ говоря, измСняСмая Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° являСтся "ΠΎΠ±Π»ΠΎΠΆΠΊΠΎΠΉ" создаваСмого сСриализованного ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π½ΠΎ с рСзСрвирования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ мСста:

  • измСняСмая Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΆΠΈΠ²Π΅Ρ‚ Π² Π±ΡƒΡ„Π΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдСляСтся Π² расчСтС Π½Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (ΠΊΠ°ΠΊ ΠΏΠΎ количСству элСмСнтов, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΌ);

  • Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ слуТСбныС счСтчики, Π° Ρ‚Π°ΠΊΠΆΠ΅ растСт сСриализованная Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°;

  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСриализованной Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ· измСняСмой сводится ΠΊ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ указатСля Π½Π° Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ;

  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ измСняСмой Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ· сСриализуСмой сводится ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π²Π½ΡƒΡ‚Ρ€ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ запас Π½Π° слуТСбныС счСтчики ΠΈ добавляСмыС Π΄Π°Π½Π½Ρ‹Π΅.

       buffer of sufficient size
      |<=======================================================>|
      |                                                         |
      |   head         pivot                             tail   |
      |   <-----~~~~~~~~~|~~~~~~~~~~~~~~~~~~---------------->   |
      |       descriptors|payload                               |
                         |
                #_D_C_B_A_aaa_bb_cccccc_dddd
                |                          |
                |<========================>|
                  linear uint32_t sequence
                     for serialization
    

ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ информация доступна Π² описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… API ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ исходном ΠΊΠΎΠ΄Π΅.


$ objdump -f -h -j .text libfptu.so

libfptu.so:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00016da0

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
 11 .text         0001f590  00016da0  00016da0  00016da0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
$ ldd libfptu.so
	linux-vdso.so.1 (0x00007fffb5b3d000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdbfcd29000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdbfc98b000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdbfc773000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdbfc382000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fdbfd34d000)

This is a mirror of the origin repository that was moved to abf.io because of discriminatory restrictions for Russian Crimea.