Spec-Zone.ru › Crystal

Небезопасный код

Следующие части языка считаются небезопасными:

  • Код, работающий с указателями: тип Pointer и pointerof.
  • Метод класса allocate.
  • Код, использующий привязки к C
  • Объявление неинициализированной переменной

«Небезопасный» означает, что возможны повреждение памяти, ошибки сегментации и сбои. Например:

a = 1
ptr = pointerof(a)
ptr[100_000] = 2 # undefined behaviour, probably a segmentation fault

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

Ни один язык не является на 100 % безопасным: некоторые его части неизбежно будут низкоуровневыми, будут взаимодействовать с операционной системой и использовать манипуляции с указателями. Но если абстрагироваться от этого и работать на более высоком уровне, предполагая (на основании математического доказательства или тщательного тестирования), что низлежащие уровни безопасны, можно быть уверенным в безопасности всей кодовой базы.

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/unsafe.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API