рд╕реА++ рдФрд░ рд╕реАрдПрдордХреЗ - рдмреНрд░рджрд░реНрд╕ рдлреЙрд░рдПрд╡рд░, рднрд╛рдЧ II

рд╕реА++ рдФрд░ рд╕реАрдПрдордХреЗ - рдмреНрд░рджрд░реНрд╕ рдлреЙрд░рдПрд╡рд░, рднрд╛рдЧ II

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдордиреЛрд░рдВрдЬрдХ рдХрд╣рд╛рдиреА рдореЗрдВ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЬрдирд░реЗрдЯрд░ рдХреЗ рднреАрддрд░ рдПрдХ рд╣реЗрдбрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рд╣реИред

рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдЬреЛ рдЕрдзреАрд░ рд╣реИрдВ рд╡реЗ рддреБрд░рдВрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрджреНрдпрддрди рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЫреВрдУред


рд╕рд╛рдордЧреНрд░реА

  1. рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛
  2. рдЬреАрддрдирд╛

рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛

рдЕрдкрдиреЗ рдКрдБрдЪреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рд╣реИ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рдкреГрдердХ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕рдорд╛рди рд╣реЛрдВред

рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдРрд╕реЗ рдорд╛рдирдХ рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╣реЗрдбрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯред рдЖрдЗрдП рдЕрдм рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВ myfunc рдПрдХ рдЕрд▓рдЧ рдореЗрдВ .cpp-рдлрд╝рд╛рдЗрд▓:

diff --git a/include/mylib/myfeature.hpp b/include/mylib/myfeature.hpp
index 43db388..ba62b4f 100644
--- a/include/mylib/myfeature.hpp
+++ b/include/mylib/myfeature.hpp
@@ -46,8 +46,5 @@ namespace mylib

         ~  see mystruct
      */
-    inline bool myfunc (mystruct)
-    {
-        return true;
-    }
+    bool myfunc (mystruct);
 }
diff --git a/src/mylib/myfeature.cpp b/src/mylib/myfeature.cpp
new file mode 100644
index 0000000..abb5004
--- /dev/null
+++ b/src/mylib/myfeature.cpp
@@ -0,0 +1,9 @@
+#include <mylib/myfeature.hpp>
+
+namespace mylib
+{
+    bool myfunc (mystruct)
+    {
+        return true;
+    }
+}

рдлрд┐рд░ рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (myfeature), рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдЬреЛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ рд╡рд╣ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ .cpp-рдлрд╝рд╛рдЗрд▓ред рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣реЛрдирд╛ рднреА рдЪрд╛рд╣рд┐рдП mylib. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬрд┐рд╕рд╕реЗ рд▓рдХреНрд╖реНрдп рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ myfeature, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдФрд░ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ mylib (рдмреБрдирд╛рдИ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА).

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 108045c..0de77b8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,6 +64,17 @@ target_compile_features(mylib INTERFACE cxx_std_17)

 add_library(Mylib::mylib ALIAS mylib)

+###################################################################################################
+##
+##      ╨Ъ╨╛╨╝╨┐╨╕╨╗╨╕╤А╤Г╨╡╨╝╨░╤П ╨▒╨╕╨▒╨╗╨╕╨╛╤В╨╡╨║╨░
+##
+###################################################################################################
+
+add_library(myfeature src/mylib/myfeature.cpp)
+target_link_libraries(myfeature PUBLIC mylib)
+
+add_library(Mylib::myfeature ALIAS myfeature)
+

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ:

@@ -72,7 +83,7 @@ add_library(Mylib::mylib ALIAS mylib)

 install(DIRECTORY include/mylib DESTINATION include)

-install(TARGETS mylib EXPORT MylibConfig)
+install(TARGETS mylib myfeature EXPORT MylibConfig)
 install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)

 include(CMakePackageConfigHelpers)

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП myfeature, рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд mylib рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдирд╛рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ Mylib::. рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рджреЛрдиреЛрдВ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдпреЛрдЬрдирд╛.

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬреЛ рдХреБрдЫ рдмрдЪрддрд╛ рд╣реИ рд╡рд╣ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдлрд╝рдВрдХреНрд╢рди) рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИ myfunc рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛):

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 5620be4..bc1266c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -4,7 +4,7 @@ add_executable(mylib-unit-tests test_main.cpp)
 target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
 target_link_libraries(mylib-unit-tests
     PRIVATE
-        Mylib::mylib
+        Mylib::myfeature
         doctest::doctest
 )

рд╢реАрд░реНрд╖рдХ (Mylib::mylib) рдЕрдм рдЖрдкрдХреЛ рдЕрд▓рдЧ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (Mylib::myfeature).

рдФрд░ рдЖрдЗрдП рдирдП рдЖрдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд╡рд░реЗрдЬ рдорд╛рдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдЬреЛрдбрд╝реЗрдВ:

@@ -15,11 +15,16 @@ if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)
     target_compile_options(mylib-unit-tests PRIVATE --coverage)
     target_link_libraries(mylib-unit-tests PRIVATE gcov)

+    target_compile_options(myfeature PRIVATE --coverage)
+    target_link_libraries(myfeature PRIVATE gcov)
+
     add_custom_target(coverage
         COMMAND
             ${GCOVR_EXECUTABLE}
-                --root=${PROJECT_SOURCE_DIR}/include/
-                --object-directory=${CMAKE_CURRENT_BINARY_DIR}
+                --root=${PROJECT_SOURCE_DIR}/
+                --filter=${PROJECT_SOURCE_DIR}/include
+                --filter=${PROJECT_SOURCE_DIR}/src
+                --object-directory=${PROJECT_BINARY_DIR}
         DEPENDS
             check
     )

рдЖрдк рдЕрдзрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдп рдЗрддреНрдпрд╛рджрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд▓рдХреНрд╖реНрдп рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИрдВ, рдпрд╛рдиреА рд╡реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред

рдЬреАрддрдирд╛

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд╛рдирдХ рдмреНрд▓реЙрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрди рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред

cmake --build ╨┐╤Г╤В╤М/╨║/╤Б╨▒╨╛╤А╨╛╤З╨╜╨╛╨╣/╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╕ --target install

рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ find_package.

find_package(Mylib 1.0 REQUIRED)

рдПрдХ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрд╢рди

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИ add_subdirectory.

рдЙрдкрдпреЛрдЧ

рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╣реА рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ Mylib::myfeature ╨╕ Mylib::mylib, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп Mylib::myfeature рдЬрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдЬрд░реВрд░реА рд╣реЛ рддреЛ рдЬреБрдбрд╝рдирд╛ рдЬрд░реВрд░реА рд╣реИ libmyfeature. рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЗрдбрд░ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ Mylib::mylib.

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдПрдордХреЗ рд▓рдХреНрд╖реНрдп рдкреЗрдЪреАрджрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ, рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдЖрджрд┐ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рд╣реИред рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рднреА рдПрдХ рд╣реА рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ.

рд╣рдореЗрдВ рдпрд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ