بیایید یک درایور UART بنویسیم

این ماشین QEMU ‘virt’ یک PL011 به‌عنوان UART دارد، پس بیایید یک درایور برای آن بنویسیم.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

  • توجه داشته باشید که Uart::new ناامن یا unsafe است در حالی که متد‌های دیگر ایمن هستند. این به‌خاطر این است که تا زمانی که تماس گیرنده Uart::new تضمین کند که الزامات ایمنی آن برآورده شده است (یعنی فقط یک نمونه از درایور برای یک UART مشخص وجود دارد و هیچ چیز دیگری نام مستعار فضای آدرس آن را ندارد)، پس همیشه می‌توان write_byte را بعداً فراخوانی کرد زیرا می‌توانیم پیش‌شرط‌های لازم را فرض کنیم.
  • ما می‌توانستیم این کار را به صورت دیگری انجام دهیم ( ساخت new را ایمن کنیم، اما write_byte را ناامن کنیم)، اما استفاده از آن بسیار راحت‌تر خواهد بود، زیرا هر مکانی که write_byte را صدا می‌زند باید در مورد ایمنی یا safety استدلال کند.
  • This is a common pattern for writing safe wrappers of unsafe code: moving the burden of proof for soundness from a large number of places to a smaller number of places.