คำถามติดแท็ก type-safety

20
การพิมพ์แบบคงที่คุ้มค่ากับการแลกเปลี่ยนหรือไม่?
ฉันเริ่มเขียนโปรแกรมด้วยภาษา Python เป็นหลักโดยที่ไม่มีความปลอดภัยประเภทจากนั้นย้ายไปที่ C # และ Java ที่มี ฉันพบว่าฉันสามารถทำงานได้เร็วขึ้นและปวดหัวน้อยลงใน Python แต่จากนั้นอีกครั้งแอป C # และ Java ของฉันมีระดับความซับซ้อนที่สูงขึ้นมากดังนั้นฉันจึงไม่เคยให้ Python เป็นการทดสอบความเครียดที่แท้จริง ค่าย Java และ C # ทำให้ดูเหมือนไม่มีความปลอดภัยในสถานที่ที่คนส่วนใหญ่จะทำงานในทุกประเภทของข้อผิดพลาดที่น่ากลัวทิ้งขวาและมันจะมีปัญหามากกว่ามูลค่าของมัน นี่ไม่ใช่การเปรียบเทียบภาษาดังนั้นโปรดอย่าแก้ไขปัญหาเช่นรวบรวมและตีความ ความปลอดภัยของประเภทคุ้มค่าต่อการพัฒนาและความยืดหยุ่นหรือไม่? ทำไม? สำหรับผู้ที่ต้องการตัวอย่างของความคิดเห็นที่การพิมพ์แบบไดนามิกเร็วกว่า: "ใช้ภาษาที่พิมพ์แบบไดนามิกในระหว่างการพัฒนาซึ่งจะช่วยให้คุณได้รับข้อเสนอแนะเวลาตอบสนองและความเร็วในการพัฒนาที่เร็วขึ้น" - http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

3
C ++ พิมพ์ typedef อย่างยิ่ง
ฉันพยายามคิดวิธีประกาศ typedefs พิมพ์อย่างยิ่งเพื่อจับระดับหนึ่งของข้อบกพร่องในขั้นตอนการรวบรวม มันมักจะเป็นกรณีที่ฉันจะพิมพ์ int ลงในรหัสหลายประเภทหรือเวกเตอร์ไปยังตำแหน่งหรือความเร็ว: typedef int EntityID; typedef int ModelID; typedef Vector3 Position; typedef Vector3 Velocity; สิ่งนี้สามารถทำให้เจตนาของรหัสชัดเจนยิ่งขึ้น แต่หลังจากการเขียนโค้ดคืนหนึ่งอาจทำให้เกิดข้อผิดพลาดที่โง่เขลาเช่นการเปรียบเทียบรหัสต่าง ๆ หรือเพิ่มตำแหน่งให้กับความเร็ว EntityID eID; ModelID mID; if ( eID == mID ) // <- Compiler sees nothing wrong { /*bug*/ } Position p; Velocity v; Position newP = p + …
49 c++  c++11  type-safety 

8
ประโยชน์ด้านความปลอดภัยของระบบประเภทใด
ในJavaScript: ส่วนที่ดีโดย Douglas Crockford เขากล่าวถึงในบทที่สืบทอดของเขา ประโยชน์อื่น ๆ ของการสืบทอดแบบคลาสสิกคือมันมีคุณสมบัติของประเภทของระบบ สิ่งนี้ส่วนใหญ่ทำให้โปรแกรมเมอร์ไม่ต้องเขียนการดำเนินการร่ายที่ชัดเจนซึ่งเป็นสิ่งที่ดีมากเพราะเมื่อทำการร่ายประโยชน์ด้านความปลอดภัยของระบบประเภทจะหายไป ก่อนอื่นเลยความปลอดภัยคืออะไร? การป้องกันข้อมูลเสียหายหรือแฮกเกอร์หรือระบบทำงานผิดปกติ ฯลฯ ? ประโยชน์ด้านความปลอดภัยของระบบประเภทใด อะไรทำให้ระบบการพิมพ์แตกต่างกันซึ่งอนุญาตให้มีประโยชน์ด้านความปลอดภัยเหล่านี้

4
มีข้อโต้แย้งอะไรในความโปรดปรานของการพิมพ์ที่อ่อนแอ?
สิ่งนี้เกิดขึ้นในการพูดคุยกับเพื่อนและฉันพบว่าตัวเองถูกกดขี่เพื่อคิดข้อโต้แย้งที่ดี การพิมพ์ที่ได้รับประโยชน์มีประโยชน์อะไรบ้าง

3
ทำไม XML ประเภทจึงปลอดภัย
เหตุใดพวกเขาจึงกล่าวว่า XML มีความปลอดภัยของประเภทและมันแสดงใน XML ได้อย่างไร? มันแตกต่างจาก JSON อย่างไร (เช่นที่ฉันเข้าใจ) ซึ่งไม่ปลอดภัยประเภท?
30 xml  type-safety 

2
เป็นไปได้หรือไม่ที่จะ“ อบมิติเป็นประเภท” ใน Haskell?
สมมติว่าฉันต้องการเขียนไลบรารีที่เกี่ยวข้องกับเวกเตอร์และเมทริกซ์ เป็นไปได้หรือไม่ที่จะอบมิติข้อมูลให้เป็นประเภทเพื่อให้การดำเนินการของมิติที่เข้ากันไม่ได้สร้างข้อผิดพลาดในเวลารวบรวม ตัวอย่างเช่นฉันต้องการให้ลายเซ็นของผลิตภัณฑ์ดอทเป็นแบบนี้ dotprod :: Num a, VecDim d => Vector a d -> Vector a d -> a โดยที่dtype นั้นมีค่าจำนวนเต็มเดียว (แสดงถึงมิติของเวกเตอร์เหล่านี้) ฉันคิดว่านี้สามารถทำได้โดยการกำหนด (ด้วยมือ) VecDimเป็นชนิดที่แยกต่างหากสำหรับแต่ละจำนวนเต็มและกลุ่มพวกเขาในระดับชนิดที่เรียกว่า มีกลไกในการ "สร้าง" ประเภทดังกล่าวหรือไม่? หรือบางทีวิธีที่ดีกว่า / ง่ายกว่าในการบรรลุสิ่งเดียวกัน?

5
มันสมเหตุสมผลไหมที่จะใช้อ็อบเจกต์ (แทนที่จะเป็นชนิดดั้งเดิม) สำหรับทุกสิ่งใน C ++?
ในช่วงโปรเจ็กต์ล่าสุดที่ฉันทำงานอยู่ฉันต้องใช้ฟังก์ชั่นมากมายเช่นนี้: static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); ดังนั้นฉันต้องการ refactor เพื่อให้มีลักษณะเช่นนี้: static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D …

3
ภาษาของ Google เป็นภาษาที่ปลอดภัยหรือไม่
หน้านี้http://golang.org/doc/go_faq.htmlเขียน: แม้ว่า Go จะมีประเภทสแตติก แต่ภาษาก็พยายามทำให้ประเภทรู้สึกเบากว่าในภาษา OO ทั่วไป ดังนั้นคำถามของฉันคือว่ามันพิมพ์อย่างปลอดภัยกับ generics (เช่น C #) หรือพิมพ์อย่างอิสระ (เช่น javascript) หรือตัวเลือก (เช่นตัวเลือกเข้มงวดใน Vb.Net)

3
ใช้การตรวจสอบชนิดคงที่เพื่อป้องกันข้อผิดพลาดทางธุรกิจ
ฉันเป็นแฟนตัวยงของการตรวจสอบประเภทคงที่ มันป้องกันคุณจากการทำผิดพลาดแบบนี้: // java code Adult a = new Adult(); a.setAge("Roger"); //static type checker would complain a.setName(42); //and here too แต่มันไม่ได้ป้องกันคุณจากการทำผิดพลาดแบบนี้: Adult a = new Adult(); // obviously you've mixed up these fields, but type checker won't complain a.setAge(150); // nobody's ever lived this old a.setWeight(42); // a 42lb adult …

2
ทำไมคอมไพเลอร์ Scala ไม่สามารถให้คำเตือนการจับคู่รูปแบบสำหรับคลาส / คุณลักษณะที่ไม่ได้ปิดผนึกได้
ถ้าฉันใช้un unผนึกtraitหรือabstract classใน Scala จากนั้นใช้การจับคู่รูปแบบฉันสงสัยว่าคอมไพเลอร์ไม่ทราบเวลาที่คอมไพล์สำหรับ patternmatch นี้โดยเฉพาะการใช้งานที่เป็นไปได้ของคุณลักษณะ / คลาสนี้มีอยู่หรือไม่ ดังนั้นถ้าเป็นเช่นนั้นมันจะไม่เตือนรูปแบบการจับคู่แม้ว่าtrait/ abstract classไม่ได้ถูกปิดผนึกเพราะเขารู้ว่าสามารถใช้ประเภทใดได้โดยตรวจสอบการอ้างอิง / การนำเข้าที่เป็นไปได้ทั้งหมดหรือไม่ เช่นถ้าฉันมีOption[A]และฉันจับคู่รูปแบบเฉพาะสำหรับSome[A]แต่ไม่ได้สำหรับNoneคอมไพเลอร์จะบ่นเพราะOptionถูกปิดผนึก หากคอมไพเลอร์ไม่สามารถรู้ / แก้ปัญหานั้นทำไมเขาถึงทำไม่ได้? และถ้าคอมไพเลอร์ (ตามหลักวิชา) สามารถทำเช่นนั้นได้เหตุผลอะไรที่มันไม่ได้ใช้ใน Scala? มีภาษาอื่นที่สนับสนุนพฤติกรรมแบบนั้นหรือไม่?

1
การเปลี่ยนลายเซ็นวิธีการสำหรับการใช้งานคลาสใน PHP
มีการทำงานที่ดีในการขาด Generics ของ PHP ที่ช่วยให้การตรวจสอบรหัสคงที่เพื่อตรวจสอบความสอดคล้องของประเภท? ฉันมีคลาสนามธรรมที่ฉันต้องการ sub-class และบังคับใช้วิธีการอย่างใดอย่างหนึ่งเปลี่ยนจากการรับพารามิเตอร์ชนิดหนึ่งการรับพารามิเตอร์ซึ่งเป็น sub-class ของพารามิเตอร์นั้น abstract class AbstractProcessor { abstract function processItem(Item $item); } class WoodProcessor extends AbstractProcessor { function processItem(WoodItem $item){} } สิ่งนี้ไม่ได้รับอนุญาตใน PHP เพราะมันเปลี่ยนลายเซ็นวิธีที่ไม่ได้รับอนุญาต ด้วย generics สไตล์ Java คุณสามารถทำสิ่งที่ชอบ: abstract class AbstractProcessor<T> { abstract function processItem(T $item); } class WoodProcessor extends AbstractProcessor<WoodItem> { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.