Libelektra: гСнСрация ΠΊΠΎΠ΄Π° для ошибок

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 11 Π°Π²Π³. 2019  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: ElektraInitiative/libelektra

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ошибок Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ макросы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ часто добавляли Π½ΠΎΠ²Ρ‹Π΅ ошибки. Π‘Π°ΠΌΠ° гСнСрация ΠΊΠΎΠ΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ, довольно слоТна (ΠΊΠΎΠ΄ C ++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄; ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ для кросс-компиляции, см. Π’Π°ΠΊΠΆΠ΅ # 2814).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ исправлСнный Π½Π°Π±ΠΎΡ€ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ошибок. Π˜Ρ‚Π°ΠΊ, вопрос Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ:

  1. Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ нСсколько макросов Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (сдСлайтС kdberrors.h static, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² # 2697), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для языковых привязок (Π° Ρ‚Π°ΠΊΠΆΠ΅ сопоставлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ошибок Elektra с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ ошибками, спСцифичными для языков)
  2. ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ соврСмСнный ΠΈ простой способ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нашСй систСмы усов ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π΅ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ) ΠΊΠΎΠ΄ для всСх скомпилированных языков (C, C ++, Java, Rust, Go).
  3. ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΠΊΠΎΠ΄ CMake, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ макросы / классы (см. Ρ‚Π°ΠΊΠΆΠ΅ β„– 2814)

@PhilippGackstatter @ raphi011 @kodebach @Piankero Π§Ρ‚ΠΎ Ρ‚Ρ‹ Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ?

ВсС 4 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π›ΠΈΡ‡Π½ΠΎ я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 1. ΠšΠΎΠ΄Ρ‹ ошибок Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ, поэтому Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ усилия ΠΏΠΎ написанию ΠΊΠΎΠ΄Π° C Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ синхронизации Π΄Ρ€ΡƒΠ³ΠΈΡ… языков Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ усилия Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с настройкой любой Ρ„ΠΎΡ€ΠΌΡ‹ автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 2?

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ усов Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠ½Π°Π±ΠΆΠ°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π›ΠΈΠ±ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ настраиваСмый исполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся Π²ΠΎ врСмя сборки. Π’ этом случаС ΠΌΡ‹ Π±Ρ‹ просто избавились ΠΎΡ‚ std::cout << ... Π² ΠΊΠΎΠ΄Π΅ C ++, Π½ΠΎ большС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось Π±Ρ‹. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» усов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся сцСнариСм Ruby ΠΈ поэтому Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки Ruby.

Π’Π°ΠΊΠΆΠ΅ kdb gen нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для этого сначала потрСбуСтся ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ kdb , Π° для этого потрСбуСтся kdberrors.h .

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 3?

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° C ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² CMake, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТныС языки ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм CMake.


Если ΠΌΡ‹ всС ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΌΡƒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. НапримСр, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ kdberrors.h содСрТит ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ статичСн ΠΈ Π½Π΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ошибки Ρƒ нас Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ #include Π΅Π³ΠΎ ΠΈΠ· статичСского Ρ„Π°ΠΉΠ»Π°.

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 ΠΈΠ·-Π·Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² ошибок. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ добавляСт Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ слоТности ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ снова ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ ошибкам.

@kodebach Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ вас Π·Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 1, @Piankero, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?

Для привязок это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ измСнилось.

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π±Ρ‹ Ρƒ нас Π±Ρ‹Π» ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ написанию привязки, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ:

  1. ΠΊΠ°ΠΊΠΈΠ΅ части привязок Elektra ΠΈΠΌΠ΅ΡŽΡ‚ смысл (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠ»Π°Π³ΠΈΠ½, инструмСнты, ...)
  2. ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ привязки Π² CMake (Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ)
  3. ΠΊΠ°ΠΊΠΈΠ΅ части привязок ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ языка. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

    • ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

    • ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² собствСнныС Ρ‚ΠΈΠΏΡ‹ (строки, int, ...)

    • ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Ссли Π΅ΡΡ‚ΡŒ)

    • Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ языков программирования (ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Ρ…ΡΡˆ-ΠΊΠΎΠ΄Ρ‹, идСнтификация, ...)

    • Π²Π΅Ρ€Π½ΡƒΠ» ошибки ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ kdb (ΠΎ Ρ‡Π΅ΠΌ здСсь эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°)

Π― надСюсь, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ смоТСм Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ это руководство для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках. @Piankero, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ, Π² частности Ρ€Π°Π·Π΄Π΅Π» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок (ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдованиС, ...)

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ: # 2875
РСшСниС дизайна: # 2872

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ