คำถามติดแท็ก static-typing

6
การพิมพ์แบบค่อยเป็นค่อยไป:“ เกือบทุกภาษาที่มีระบบพิมพ์แบบสแตติกยังมีระบบพิมพ์แบบไดนามิก”
การอ้างสิทธิ์โดยAleks Bromfieldระบุว่า: เกือบทุกภาษาที่มีระบบพิมพ์แบบสแตติกก็มีระบบพิมพ์แบบไดนามิกเช่นกัน นอกเหนือจาก C ฉันไม่สามารถคิดถึงข้อยกเว้นได้ นี่คือการอ้างสิทธิ์ที่ถูกต้องหรือไม่ ฉันเข้าใจว่าด้วยคลาส Reflection หรือ Loading ที่รันไทม์ Java จะมีลักษณะเช่นนี้ - แต่สามารถขยายความคิดของ 'การพิมพ์ทีละส่วน' เป็นภาษาจำนวนมากได้หรือไม่?

3
มีการศึกษาเชิงประจักษ์เกี่ยวกับผลกระทบของภาษาต่างๆต่อคุณภาพของซอฟต์แวร์หรือไม่?
ผู้เสนอของภาษาโปรแกรมที่ใช้งานได้ยืนยันว่าการโปรแกรมเชิงฟังก์ชันช่วยให้ง่ายขึ้นในการให้เหตุผลเกี่ยวกับโค้ด ผู้ที่ชื่นชอบภาษาที่พิมพ์แบบคงที่กล่าวว่าคอมไพเลอร์มีข้อผิดพลาดมากพอที่จะชดเชยความซับซ้อนเพิ่มเติมของระบบพิมพ์ แต่ทุกสิ่งที่ฉันอ่านในหัวข้อเหล่านี้ขึ้นอยู่กับการโต้แย้งเหตุผลไม่ใช่ข้อมูลเชิงประจักษ์ มีการศึกษาเชิงประจักษ์เกี่ยวกับผลกระทบของภาษาโปรแกรมประเภทต่าง ๆ ที่มีต่ออัตราข้อบกพร่องหรือการวัดคุณภาพอื่น ๆ หรือไม่? (คำตอบสำหรับคำถามนี้ดูเหมือนจะบ่งบอกว่าไม่มีการศึกษาดังกล่าวอย่างน้อยก็ไม่ใช่สำหรับการอภิปรายแบบไดนามิกและแบบคงที่)

3
มีทางเลือกอื่นสำหรับการวิเคราะห์เชิงสถิตหรือไม่?
การพิมพ์แบบคงที่ในภาษาการเขียนโปรแกรมจะมีประโยชน์ในการบังคับใช้การค้ำประกันบางอย่างในเวลารวบรวม - แต่เป็นเครื่องมือชนิดเดียวสำหรับงานนี้หรือไม่? มีวิธีอื่นในการระบุค่าคงที่หรือไม่? ตัวอย่างเช่นภาษาหรือสภาพแวดล้อมสามารถช่วยบังคับใช้การรับประกันเกี่ยวกับความยาวของอาเรย์หรือเกี่ยวกับความสัมพันธ์ระหว่างอินพุตกับฟังก์ชัน ฉันไม่เคยได้ยินอะไรแบบนี้นอกระบบประเภท สิ่งที่เกี่ยวข้องที่ฉันสงสัยเกี่ยวกับคือหากมีวิธีการที่ไม่ประกาศใด ๆ ที่จะทำการวิเคราะห์แบบคงที่ (ประเภทที่มีการประกาศส่วนใหญ่ )

2
(Dis-) ข้อดีของการพิมพ์โครงสร้าง
ผมเคยดูเพียงแค่การพูดคุยนี้โดยแดเนียล Spiewakที่เขาพูดเกี่ยวกับข้อดีของการพิมพ์โครงสร้างเมื่อเทียบกับสกาล่าของ ans ของ Java พิมพ์เล็กน้อย ตัวอย่างหนึ่งสำหรับความแตกต่างนี้จะเป็นรหัส Java ต่อไปนี้ public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; ซึ่งแน่นอนว่าจะไม่รวบรวมเพราะความเข้ากันได้ระหว่างประเภทFooและBarจะถูกกำหนดโดยชื่อ ระบบประเภทโครงสร้างในอีกด้านหนึ่งสามารถประกาศว่าทั้งสองประเภทมีความเท่าเทียมกันหรือเข้ากันได้และดังนั้นในกรณีอื่น ๆ อนุญาตให้มีการตรวจสอบการพิมพ์เป็ด ตอนนี้ฉันคิดว่าฉันเข้าใจถึงข้อดีของระบบโครงสร้างแบบส่วนใหญ่แล้ว แต่ฉันสงสัยว่ามันจะไม่ทำให้ความปลอดภัยของประเภทจากตัวอย่างเช่นต่อไปนี้เป็นโมฆะ class Foo { class Bar { /* ... */ } def …

2
ตัวเลือก / อาจจะพิมพ์มีประโยชน์ในภาษาแบบไดนามิกหรือไม่
Optionalมีประโยชน์ในวิธีที่ชัดเจนในภาษาที่พิมพ์แบบคงที่ แต่ฉันสงสัยว่ามันยังมีประโยชน์ในภาษาแบบไดนามิก โดยปกติจะไม่มีคอมไพเลอร์บอกคุณว่า "เฮ้คุณใช้สิ่งนี้Optional<String>เป็นString" ดังนั้นคุณยังต้องค้นพบข้อผิดพลาดของคุณที่รันไทม์ ฉันมีพื้นหลังการพิมพ์แบบสแตติกและจากมุมมองของฉันฉันไม่เห็นประโยชน์ของOptionalประเภทในภาษาแบบไดนามิก

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 …

9
ภาษาแบบไดนามิก vs แบบคงที่พิมพ์สำหรับเว็บไซต์ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา คำสั่งนี้แสดงให้เห็นว่าภาษาที่พิมพ์แบบคงที่ไม่เหมาะสำหรับเว็บไซต์: ฉันจะเปรียบเทียบมันกับการสร้างเว็บไซต์ เมื่อแสดงผลหน้าเว็บบ่อยครั้งที่คุณมีองค์ประกอบจำนวนมากที่โต้ตอบกับหน้าเว็บ คุณมีปุ่มตรงนี้และวิดเจ็ตเล็ก ๆ ตรงนั้นและมันมีหลายสิบปุ่มบนหน้าเว็บเช่นเดียวกับหน้าเว็บหลายสิบหรือหลายร้อยหน้าบนเว็บไซต์ของคุณที่เป็นแบบไดนามิกทั้งหมด ด้วยระบบที่มีพื้นที่ผิวขนาดใหญ่เช่นนั้นการใช้ภาษาที่พิมพ์แบบสแตติกจะไม่ยืดหยุ่น ฉันพบว่ามันน่าเจ็บปวดที่จะเขียนโปรแกรมใน Scala และแสดงหน้าเว็บด้วยเมื่อฉันต้องการกดปุ่มต่างๆ หากทั้งระบบจะต้องสอดคล้องกันเช่นเดียวกับทั้งระบบจะต้องพิมพ์การตรวจสอบเพื่อให้สามารถเลื่อนปุ่มไปรอบ ๆ ฉันคิดว่ามันไม่ยืดหยุ่นจริง ๆ ที่มา: http://www.infoq.com/interviews/kallen-scala-twitter ถูกต้องหรือไม่ ทำไมหรือทำไมไม่?

5
ภาษาไดนามิกมีผลเสียต่อการพัฒนาที่คล่องตัวหรือไม่?
จากสิ่งที่ฉันได้อ่านการพัฒนาที่คล่องตัวมักจะเกี่ยวข้องกับการเปลี่ยนโครงสร้างหรือเปลี่ยนรหัสวิศวกรรมเป็นไดอะแกรม แน่นอนมีมากกว่านั้น แต่ถ้าเราพิจารณาการปฏิบัติที่อาศัยสองวิธีนี้เป็นภาษาที่พิมพ์แบบไดนามิกที่เสียเปรียบ? ดูเหมือนว่าภาษาที่พิมพ์แบบคงที่จะทำให้การปรับโครงสร้างและวิศวกรรมย้อนกลับง่ายขึ้นมาก การรีแฟคเตอร์หรือวิศวกรรมย้อนกลับเป็นเรื่องยากหากไม่สามารถทำได้ในภาษาที่พิมพ์แบบไดนามิกหรือไม่? โครงการโลกแห่งความจริงบอกอะไรเกี่ยวกับการใช้ภาษาที่พิมพ์แบบไดนามิกสำหรับวิธีการแบบเปรียว

6
การพิมพ์สแตติกมีประโยชน์จริง ๆ ในโครงการขนาดใหญ่อย่างไร
ในขณะที่อยากรู้อยากเห็นในหน้าหลักของเว็บไซต์ภาษาการเขียนโปรแกรมสคริปต์ฉันพบข้อความนี้: เมื่อระบบมีขนาดใหญ่เกินไปที่จะเก็บไว้ในหัวของคุณคุณสามารถเพิ่มประเภทคงที่ สิ่งนี้ทำให้ฉันจำได้ว่าในสงครามศาสนาจำนวนมากระหว่างภาษาแบบคงที่ภาษาที่รวบรวม (เช่น Java) และภาษาแบบไดนามิกที่ถูกตีความ (ส่วนใหญ่เป็นภาษาไพ ธ อนเนื่องจากมีการใช้มากกว่า แต่เป็น "ปัญหา" ที่ใช้ร่วมกันระหว่างภาษาสคริปต์ส่วนใหญ่) แฟน ๆ ที่พิมพ์ภาษามากกว่าภาษาที่พิมพ์แบบไดนามิกคือพวกเขาไม่ได้ปรับขนาดให้ดีขึ้นสำหรับโครงการขนาดใหญ่เพราะ "วันหนึ่งคุณจะลืมฟังก์ชั่นกลับมาและคุณจะต้องค้นหามันในขณะที่พิมพ์ภาษาแบบคงที่ทุกอย่าง มีการประกาศอย่างชัดเจน " ฉันไม่เคยเข้าใจข้อความเช่นนี้ ความซื่อสัตย์แม้ว่าคุณจะประกาศฟังก์ชั่นการส่งคืนคุณสามารถและจะลืมมันหลังจากที่คุณเขียนโค้ดหลายบรรทัดและคุณจะต้องกลับไปที่บรรทัดที่ประกาศไว้โดยใช้ฟังก์ชันการค้นหาของ แก้ไขข้อความของคุณเพื่อตรวจสอบ นอกจากนี้เมื่อฟังก์ชั่นถูกประกาศด้วยการtype funcname()...รู้ทันtypeคุณจะต้องค้นหาแต่ละบรรทัดที่เรียกใช้ฟังก์ชั่นเพราะคุณรู้เพียงว่าfuncnameในขณะที่ในไพ ธ อนและสิ่งที่คุณชอบเพียงแค่ค้นหาdef funcnameหรือfunction funcnameเกิดขึ้นเพียงครั้งเดียวที่ การประกาศ ยิ่งกว่านั้นด้วย REPLs การทดสอบฟังก์ชั่นการกลับมาของอินพุตที่แตกต่างกันเล็กน้อยในขณะที่ภาษาที่พิมพ์แบบคงที่คุณจะต้องเพิ่มโค้ดบางบรรทัด ดังนั้นนอกเหนือจากการทราบประเภทการส่งคืนของฟังก์ชันที่เห็นได้ชัดว่าไม่ใช่จุดแข็งของภาษาที่พิมพ์แบบคงที่การพิมพ์แบบคงที่มีประโยชน์มากในโครงการขนาดใหญ่อย่างไร

5
ภาษาแบบคงที่และแบบไดนามิกสามารถถูกมองว่าเป็นเครื่องมือที่แตกต่างกันสำหรับงานประเภทต่างๆหรือไม่?
ใช่มีการถามคำถามที่คล้ายกัน แต่มักจะมีจุดประสงค์ในการค้นหาว่า 'แบบไหนดีกว่ากัน' ฉันถามเพราะฉันเข้ามาเป็นผู้พัฒนา JavaScript เป็นหลักและไม่มีประสบการณ์ในการเขียนภาษาแบบคงที่ ทั้งๆที่สิ่งนี้ฉันเห็นคุณค่าในการเรียนรู้ C สำหรับการจัดการความต้องการการดำเนินงานที่ระดับต่ำกว่าของรหัส (ซึ่งฉันคิดว่ามีหลายสิ่งที่จะทำอย่างไรกับ static vs dynamic ที่ระดับคอมไพเลอร์) แต่สิ่งที่ฉันพยายามคาดศีรษะ มีบริบทเฉพาะของโครงการหรือไม่ (อาจมีการดำเนินการเกี่ยวกับข้อมูลแบบไดนามิกบางประเภท) ที่เกี่ยวข้องกับสิ่งอื่นนอกเหนือจากประสิทธิภาพที่เหมาะสมกับ Java หรือ C # เทียบกับ Python

13
ทางเลือกที่พิมพ์แบบคงที่เพื่อ JavaScript บนหน้าเว็บจะเป็นประโยชน์?
การตั้งค่าสำหรับการพิมพ์แบบไดนามิกและแบบคงที่ส่วนใหญ่เป็นเรื่องของรสนิยมและผู้คนที่แตกต่างกันพบว่าพวกเขาเหมาะสมมากหรือน้อยในสถานการณ์ที่แตกต่างกัน คำถามของฉันคือจะเป็นไปได้หรือไม่ที่จะมีทางเลือกให้พิมพ์ JavaScript เพื่อการเพิ่มหน้าเว็บฝั่งไคลเอ็นต์ ฯลฯ ?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.