(ReactOS Wiki) Руководство по программированию | Participants
|
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required.
If you do not want to register an account, you can sign in with OpenID.
(ReactOS Wiki) Programming Guidelines | ||
__NOTOC__ | ||
See http://www.microsoft.com/resources/practices/ for Microsoft's take on best coding practices. | Перейдя на http://www.microsoft.com/resources/practices/ вы можете просмотреть лучшие практики программирования от Microsoft. | |
Here are some hints to write good code, | ||
originally collected in the context of the ReactOS project. | изначально собранные в рамках проекта ReactOS и позволяющие написать хороший код. | |
For advice on writing secure code please see [[Secure_Programming]]. | Для получения консультации по написанию безопасного кода см. [[Безопасное_Программирование]]. | |
'''Always remember these guidelines:''' | ||
== It's more important to be correct than to be fast == | ||
Premature optimization is the root of all evil. | ||
With respect to writing time and memory efficient programs, I would put forward that one should not concern themselves with execution speed while building code. Such concerns will be mostly a waste of time. Build the program to be robust and easily maintainable, then if it exhibits performance that is not acceptable, profile it and improve only those sections that most need to be optimized. -RexJolliff | Со всем уважением к эффективно использующим память и быстро написанным программам, в первую очередь хотелось бы сказать, что не нужно стараться достичь максимальной скорости исполнения кода при его написании. Эти вопросы, в основном, станут пустой тратой времени. Создавайте программу, которая будет надежной и легко обслуживаемой, а уже потом, если её производительность будет неприемлема, просмотрите её и улучшите только те разделы, которые наиболее всего требуют оптимизации. -RexJolliff | |
== Small and smart solutions to solve a problem aren't a shame == | == Пусть вас не стыдит небольшое и умное решение проблемы == | |
Make your code small and smart while preserving its readability and understandability. Follow the guide line "less code - less bugs - more readable - easier to review". Think twice about your solution. Don't misunderstand this rule as optimization rule; maybe it affects the speed and size of the resulting application/driver/library, but that is not the (primary) intended reason. If the smart solution needs more changes, try to adapt as much as possible to make it smarter and more readable. Your credit is not derived from the count of lines you wrote. | Сделайте свой код меньше и умнее при сохранении его читаемости и понятности. Следуйте указаниям инструкции "меньше кода - меньше ошибок - более удобно для чтения - проще обозрение". Подумайте дважды над своим решением. Не принимайте это утверждение как правило оптимизации; возможно, это и влияет на скорость и размер результирующего приложения/драйвера/библиотеки, но это не должно быть (основной) целью. Если для умного решения необходимо больше изменений, постарайтесь адаптировать их как можно больше, чтобы сделать решение умнее и читабельнее. Ваш кредит не зависит от количества написанных вами строк кода. | |
== Write thread safe code == | ||
Especially be aware of this if you write a library; your library may be used by an MT-application. This applies anyway to the kernel, since the kernel is a library which has to be thread-safe per se. | Будьте особенно внимательны и при написании библиотеки; ваша библиотека может быть использована мультипоточным (MT) приложением. В любом случае это относится к ядру, поскольку ядро является библиотекой, которая должна быть поточно-безопасной. | |
What differentiates thread safe code from thread unsafe code is the use of global variables. Thread safe code avoids nearly all global variables. This includes also local static variables and class variables. One has to decide carefully whether a variable or data structure is local, thread-global or process-global. Try to eliminate global variables. If this isn't possible and you need a thread-global variable then thread local storage (TLS) is the right thing. If you need a process global variable, then the right thing is a classic global variable. However don't forget to declare it with the volatile modifier. If you don't declare it as volatile, it may happen that two threads hold a copy of the variable in their contexts. So data consistency may not be guaranteed. | Отличием потокобезопасного кода от небезопасного является использование глобальных переменных. Потокобезопасный код избегает использования практически всех глобальных переменных, включающих в себя также локальные статические переменные и переменные класса. Необходимо решить, какая переменная или структура данных будут локальными, глобальными в рамках потока или глобальными в рамках процесса. Постарайтесь удалить глобальные переменные. Если это невозможно, и вам необходима переменная, глобальная для всего потока, то правильным решением станет использование локальной памяти потока (TLS). Если вам нужна переменная, глобальная для процесса, правильным решением станет использование классической глобальной переменной. Тем не менее, не забудьте объявить её, как изменяемую. Если вы не объявите её как изменяемую, может случиться так, что два потока будут держать копию переменной в своём контексте. Поэтому согласованность данных не может быть гарантирована. |
License: FDL
