Rust-ffi-omnibus: الوظائف غير الآمنة مقابل الكتل غير الآمنة

تم إنشاؤها على ٢٦ أغسطس ٢٠١٦  ·  3تعليقات  ·  مصدر: shepmaster/rust-ffi-omnibus

هل هناك أي سبب محدد لاستخدامك للوظائف unsafe block بدلاً من unsafe block في أماكن مثل هذه ؟

ألن يكون من الأفضل / الدقيق كتابته على النحو التالي:

#[no_mangle]
pub unsafe extern fn zip_code_database_population_of(ptr: *const ZipCodeDatabase, zip: *const c_char) -> uint32_t {

وإزالة كتل unsafe بالداخل؟

يشير هذا إلى أن ptr ربما يكون شيئًا غير قابل للتحقق - على سبيل المثال يمكنك حتى إعطاء شيء يشير إلى شيء آخر غير ZipCodeDatabase (كائن / تخطيط ذاكرة مختلف تمامًا) وفي هذه الحالة يكون UB و هكذا وهكذا دواليك.

أقوم بترميز FFI بنفسي لذا أتجول فقط إذا كان هناك أي سبب معين لاختيار واحد على الآخر في هذا السيناريو.

enhancement help wanted

التعليق الأكثر فائدة

بعد المراجعة ، أعتقد أنه من الأصح وضع علامة على الوظيفة كـ unsafe للإشارة إلى المتصلين أنهم مسؤولون عن ضمان السلامة. هناك RFC 2585 مقترح من شأنه أن يجعله بحيث لا يشير fn غير الآمن إلى كتلة غير آمنة ، مما يجعلني أكثر سعادة بشأن مثل هذا التغيير. في الوقت الحالي ، يمكن "تحديد نطاق" عدم الأمان إلى عدد قليل من السطور ، ولكن عند إنشاء الوظيفة unsafe ، فإن كتلة unsafe الإضافية ستطلق تحذيرًا.

يمكننا أن نفترض أنه سيتم قبول RFC ومحاولة ترميز تلك المعايير اليوم من خلال تجاهل التحذير ، لكنه مسار هش.

ال 3 كومينتر

سؤال جيد ! كان تفكيري حول حقيقة أن الكتل unsafe توفر وثائق حول ما يجعلها "آمنة". وجهة نظرك حول تمرير النوع الخطأ عبر نوع المؤشر يؤدي إلى ثقب في ذلك (على الرغم من أنني لا أرى أي طريقة حوله).

يعد وضع علامة على الوظيفة بأكملها على أنها unsafe أمرًا رائعًا من وجهة نظر التماثل - الوظائف _المستوردة_ من C هي بطبيعة الحال unsafe . أتساءل أين يمكننا الحصول على المزيد من وجهات النظر للمساعدة في اتخاذ القرار ...

أنا من أجل تعليم الوظيفة بأكملها كـ unsafe . إذا كان شيئًا يعتمد فيه الأمان على إدخال المستخدم ، فهو unsafe . إن عدم تمييزه على أنه unsafe يبدو وكأنه إعلان كاذب للمطور الذي يفكر في استخدامه. (هذا جزء من السبب ، في المشاريع الأخيرة التي تتطلب روابط FFI ، أكتب الروابط بلغة غير Rust وأدعم فقط استخدام مكتبة Rust من خلال هذه الارتباطات. تمتد "الوحدة الآمنة" ، في هذه الحالة ، عبر FFI الحدود.)

بعد المراجعة ، أعتقد أنه من الأصح وضع علامة على الوظيفة كـ unsafe للإشارة إلى المتصلين أنهم مسؤولون عن ضمان السلامة. هناك RFC 2585 مقترح من شأنه أن يجعله بحيث لا يشير fn غير الآمن إلى كتلة غير آمنة ، مما يجعلني أكثر سعادة بشأن مثل هذا التغيير. في الوقت الحالي ، يمكن "تحديد نطاق" عدم الأمان إلى عدد قليل من السطور ، ولكن عند إنشاء الوظيفة unsafe ، فإن كتلة unsafe الإضافية ستطلق تحذيرًا.

يمكننا أن نفترض أنه سيتم قبول RFC ومحاولة ترميز تلك المعايير اليوم من خلال تجاهل التحذير ، لكنه مسار هش.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات