คุณลักษณะใดที่สนับสนุนการวิวัฒนาการของ Pascal


17

ฉันกำลังรวบรวมประวัติโดยละเอียดของภาษาปาสคาลและมีรายละเอียดบางอย่างที่ฉันขาดหายไป

มีคุณสมบัติมากมายในปัจจุบันที่เราให้สิทธิ์ คุณลักษณะใดที่สนับสนุนการวิวัฒนาการของปาสกาลอย่างมีนัยสำคัญและทำไมจึงมีความหมาย

ฉันกำลังมองหาคุณสมบัติภาษาไม่ใช่คุณสมบัติแพลตฟอร์มหรือกรอบงาน เช่นผู้ให้บริการมากไปหรือพารามิเตอร์เริ่มต้น แต่ไม่สนับสนุน Linux หรือเครื่องมือ Rich Text ใหม่

ฉันรู้ว่ามีรสชาติที่แตกต่างกันเล็กน้อยของ Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal และอื่น ๆ ) และพวกเขาแนะนำคุณสมบัติเดียวกันในเวลาที่ต่างกันและขนานกัน ไม่เป็นไร ฉันกำลังดูภาษาปาสคาลโดยรวมและเมื่อเหตุการณ์สำคัญเกิดขึ้น (วันที่รุ่น ฯลฯ )


@Jim คำถามของคุณถามถึงรายการวันที่ แต่ไม่ได้ขอข้อมูลว่าทำไมมีคนคิดว่าพวกเขาสำคัญ ฉันได้ตั้งคำถามใหม่ของคุณเพื่อจับภาพมุมมองนั้นและได้เปิดใหม่อีกครั้ง

2
คุณรู้หรือไม่ว่าผลิตภัณฑ์ Turbo Pascal ปฏิวัติโลกปาสกาล? และโลก PC ของ IBM ก็เช่นกันใช่ไหม? โดยเฉพาะอย่างยิ่งเมื่อมันแก้ไขสตริง

4
อย่าลืม UCSD Pascal! มันเปิดตัว bytecodes (p-codes) นานก่อนที่ Java จะกระพริบตาในสายตาของดวงอาทิตย์
Macneil

1
+1 @Macneil UCSD p-Code และ Smalltalk VM เป็นสิ่งที่ฉันมักจะอธิบายเมื่อพูดถึงโค้ดที่ได้รับการจัดการที่ทันสมัย ​​(Java, .NET) มันสนุกที่จะได้รับเดจาวูเมื่อเห็นสิ่งต่างๆ 'ทันสมัย' (เช่นAppsซึ่งเป็นเพียงรสชาติใหม่ของไคลเอนต์ - เซิร์ฟเวอร์)
Jeroen Wiert Pluimers

1
@Jeroen Pluimers: ฉันก็สนุกกับการพูดคุยของ DVCS ว่าเป็น "ใหม่" ฉันใช้ SCCS / Teamware ที่ Sun Torvalds ใช้ BitKeeper เมื่อฉันเห็น CVS ฉันรู้ว่ามันหัก (เช่นเดียวกับ Torvalds) เมื่อฉันได้ยินเกี่ยวกับ SVN ครั้งแรกฉันคิดว่า "โอ้ในที่สุดพวกเขาก็ซ่อมมัน" แต่ไม่มี. โลกของ OSS (และ Joel!) ได้รับความเสียหายจาก CVS ที่ทำทุกอย่างผิดปกติพวกเขาจำเป็นต้องเชื่อว่ามันเป็นสิ่งใหม่!
Macneil

คำตอบ:


10

จากมุมมองทางประวัติศาสตร์ของภาษาการสนับสนุนที่ดีที่สุดของปาสกาลคือความปลอดภัยในระดับสูง การต่อสู้นั้นส่วนใหญ่จบลงแล้ว - ฝ่ายของปาสกาลชนะและจุดเปลี่ยนอุตสาหกรรมคือ Java แต่เป็นเวลานานมาก C ได้รับการสนับสนุนล่วงหน้าจาก Pascal โดยผู้ที่คิดว่าตัวเองเป็นผู้ใหญ่ส่วนใหญ่เพราะสิ่งนี้: ผู้คนต้องการอิสระในการควบคุมพอยน์เตอร์ราวกับว่าพวกเขาเป็นจำนวนเต็ม การใช้งานจริงของ Pascal มีช่องโหว่เช่นเดียวกับสหภาพที่ไม่ได้ตรวจสอบเขตข้อมูลที่มีการแบ่งแยกหรือแม้แต่การพิมพ์ตัวชี้ไปที่จุดทั้งหมด แต่ C เทียบเท่ากัน (Turbo Pascal เป็นหนึ่งในนั้น)

สิ่งนี้และการทำให้เข้าใจง่ายของ spec ALGOL 68 ที่ซับซ้อน [1] อาจเป็นจุดเริ่มต้น

[1] ลองอ่านรายงาน ALGOL 68บางครั้งมันเป็นผลงานจากยุค 60 แน่นอน! เว็บไซต์หนึ่งบนเว็บกล่าวถึงศัพท์แสงแปลก ๆ : 'bus token', 'ต้นไม้การผลิตที่มองไม่เห็น', 'environs primal', 'incestuous unions', 'notions', 'protonotions', 'metanotions', 'hypernotions', ' ความหวาดระแวง ฯลฯ


15

ฉันจะบอกว่าแรงผลักดันที่สำคัญที่สุดสองประการตลอดประวัติศาสตร์ Pascal คือ:

  1. ความปลอดภัยของประเภท: ปาสคาลมีความสำคัญในการสร้างความเชื่อที่ว่าความปลอดภัยของประเภทนั้นมีความสำคัญและมีความสำคัญในภาษา
  2. ประสิทธิภาพของคอมไพเลอร์: Pascal ได้รับการออกแบบเป็นภาษาพาสแบบเดียวและแสดงให้โลกเห็นว่าคอมไพเลอร์สามารถทำได้เร็วเพียงใดโดยไม่ต้องยอมแพ้ สิ่งที่สร้างขึ้นสำหรับคอมไพเลอร์ที่รวดเร็วนั้นก็เป็นสิ่งที่ทำให้การออกแบบที่ดีและง่ายต่อการอ่านภาษาด้วย ทรราชของ Borland ก็ให้ทุกสิ่งและประสิทธิภาพเช่นกัน

PASCAL ไม่ใช่ภาษาแรกที่คอมไพเลอร์เขียนด้วย PASCAL หรือไม่ อีกสิ่งที่น่าทึ่งในเวลานั้นคือรหัส P - รหัสสำหรับเครื่องปาสกาลเสมือน สิ่งที่ทุกคนต้องทำเพื่อนำ PASCAL ไปใช้กับเครื่องอื่นคือการเขียนล่ามหรือแอสเซมเบลอร์สำหรับรหัส P
Ingo

ฉันจะเพิ่มว่าความปลอดภัยประเภทยังรวมถึงกลไกที่รู้จักกันในชื่อการตรวจสอบรันไทม์ในคอมไพเลอร์ปาสคาลส่วนใหญ่ (เกือบ?) คอมไพเลอร์ทุกคนมีพวกเขาซึ่งเป็นพื้นฐานที่แตกต่างจากวิธีการ LINT ซึ่งเป็นที่ชื่นชอบโดยคอมไพเลอร์ C
Marco van de Voort

11

คุณต้องกลับไปที่ต้นกำเนิดจริงๆ - ค้นหาประวัติของ Niklaus Wirth ปาสกาลเริ่มต้นชีวิตด้วยการสอนภาษา "อัลกอริทึม + โครงสร้างข้อมูล = โปรแกรม" เป็นจุดเริ่มต้นที่ดี

ในเวลานั้น Pascal นั้นง่ายกว่า Algol 68 และ PL / 1 มันบังคับโครงสร้างและการประกาศและความปลอดภัยประเภทที่แข็งแกร่งซึ่งแตกต่างจาก Fortran4 (Fortran 77 ปรับปรุงสิ่งต่าง ๆ เล็กน้อยที่นั่น แต่คุณยังสามารถเล่นได้อย่างรวดเร็วและหลวมมาก) และเมื่อเทียบกับ COBOL มันสั้นง่ายและง่ายกว่าในการเขียนโปรแกรม (สวัสดีชาวโลกประมาณ 6 บรรทัดแทน 600)

เมื่อมันเกิดขึ้นมีสิ่งต่าง ๆ เช่นอาเรย์อักขระใน Pascal - นั่นคือมันสำหรับการจัดการสตริง สิ่งที่ดีขึ้นกว่าปี

หากคุณต้องการขุดคุ้ยประวัติศาสตร์ Pascal จริง ๆ คุณต้องคำนึงถึงบางจุดด้วย:

  • ต้นฉบับของ Wirth (Standard Pascal)
  • ส่วนขยายโดย Digital Equipment Corp (DEC) บน Vax
  • the UCSD p-System (ในเครื่องหลายเครื่อง แต่สะดุดตา Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (ใช้เพื่อเขียนระบบปฏิบัติการ Domain / OS หรือที่เรียกว่า Aegis)
  • Turbo Pascal พร้อมวัตถุและหน่วย (เวอร์ชั่น 5.5 และใหม่กว่าแก้ไข: เพิ่งพบTP 5.5 OOP PDF )
  • Delphi

ย้อนกลับไปในช่วงปี 1980 มีงานฉลองทากขนาดใหญ่ระหว่าง Pascal และ C มีการพัฒนาและกิจกรรมมากมายในทั้งสองค่าย

เป็นผลให้สิ่งที่แปลกและมหัศจรรย์เช่น Bliss-32, Algol และ PL / 1 ได้หายไปค่อนข้างมาก - แต่ความคิดจากสิ่งเหล่านี้ทำให้พวกเขาเป็นปาสกาล

แก้ไข: อาร์เรย์อักขระสามารถบรรจุซึ่งให้คุณสมบัติพิเศษบางอย่าง แต่ถ้าคุณต้องการสิ่งที่เราตอนนี้รู้ว่าการจัดการสตริงที่คุณต้องการที่จะเติบโตด้วยตัวคุณเอง


IIRC มีจำนวนเล็ก ๆ ของการจัดการพิเศษสำหรับpacked array[1..n] of char;เช่นในอ่าน (LN) และเขียน (LN)
เจอร์รี่

ใช่ readln writeln เป็นพิเศษเล็กน้อยที่พวกเขาสามารถจัดการอินพุต / เอาต์พุตของจำนวนตัวแปรของตัวละคร นอกจากนี้ยังมีฝุ่นเล็กน้อยในปลายปี 1980 เกี่ยวกับพวกเขาเป็นคนชั่วร้ายและเป็นคนบาปและทำลายโครงสร้างภาษาเพราะพวกเขายอมรับพารามิเตอร์จำนวนตัวแปร ครูสอนไม่ชอบสิ่งนี้ พวกเราที่เหลือใช้มันโดยไม่ต้องกังวลมากเกินไป
quick_now

อาจเป็นโมดูล / หน่วยระบบจาก "คนอื่น" Wirth language Modula2 (แม้ว่าจะเป็นทางอ้อมผ่านความพยายามในการทำให้ได้มาใน standback Pascal ในที่สุดก็สร้างมาตรฐาน Extended Pascal แม้ว่าจะมีรูปแบบที่แตกต่างกัน)
Marco van de Voort

5

ส่วนขยายที่เน้นวัตถุ! Object Pascal เป็นก้าวกระโดดมาตรฐานที่ใหญ่ที่สุด (ไม่เป็นทางการ) ด้วยการเปิดตัว Delphi (1) ในช่วงกลางทศวรรษที่ 90 มันยากที่จะเลือกออกมาหนึ่งอัน แต่แกนกลางทั้งหมดของโมเดลวัตถุโดยรวมช่วยทำให้ภาษามีสถานะที่ทันสมัย น่าเสียดายที่ทุกวันนี้ยังไม่ได้มีการรวมเข้าเป็นมาตรฐานเดียวอย่างเป็นทางการซึ่งคอมไพเลอร์ทั้งหมดจะสอดคล้องกับการเข้ารหัสสมมาตร

โชคดีที่ผู้พัฒนาโครงการฟรี Pascal ได้รับการรองรับคุณสมบัติที่เพิ่มเข้ามาใน Delphi โดยทั้ง Borland และ Embarcadero RemObjects ไม่มาก แต่อย่างน้อยเฮ้มีความผูกพันกับ Embarcadero ภายใต้ Delphi Prism ดังนั้นการเบี่ยงเบนใด ๆ จากมาตรฐาน


8
วัตถุถูกนำเข้าสู่ Pascal ด้วย Turbo Pascal 5.5
mcottle

1
ขั้นตอนและฟังก์ชั่นโดยเริ่มต้นคงที่ คุณต้องใช้virtualคำหลักเพื่อทำให้สามารถลบล้างได้โดยคลาสย่อย

1
เสมือนไม่ใช่คำสงวนใน Delphi รายชื่อของเดลฟายคำสงวนและคำหลักปริซึมสามารถพบได้ที่นี่และที่นี่
เดวิดฉัน

2
Apple นำวัตถุไปสู่ ​​Pascal en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster

2
@Carl - ฉันลืมว่า Mac คลาสสิกถูกตั้งโปรแกรมใน Pascal และฉันไม่รู้ว่ามันเป็นรุ่น OO ของ Pascal ที่สร้างโดย Wirth
mcottle

4

สิ่งหนึ่งหรือสองอย่างที่ฉันจำได้จากการใช้ Pascal นาน ๆ ด้วย MS-DOS:

Turbo Pascal แนะนำ IDE มากขึ้นหรือน้อยลงในยุค 80 (และประสิทธิภาพการรวบรวมได้เพิ่มขึ้นอย่างมากเมื่อเทียบกับ UCSD Pascal

อย่างใดรอบ 90s กลาง Borland เปลี่ยนชื่อจากเทอร์โบเพื่อBorland Pascal เป็นขั้นตอนแรกหน่วยแนะนำซึ่งได้รับอนุญาตให้แยกโครงการขนาดใหญ่เป็นหน่วยรวบรวมที่แยกต่างหาก

หลังจากนั้นพวกเขาก็เพิ่มการเขียนโปรแกรมเชิงวัตถุเช่นกัน


Turbo Pascal เป็นผลิตภัณฑ์ที่เรียบง่าย Borland Pascal มีสิ่งพิเศษมากมายเช่นแอสเซมเบลอร์และอื่น ๆ

2
หน่วยที่นำมาใช้ใน Turbo Pascal (v4 IIRC) ไฟล์เหล่านี้รวบรวมเป็น. tpu (หน่วยเทอร์โบปาสคาล) ซึ่งเป็นรุ่นก่อนของไฟล์ dcu ปัจจุบัน ฉันเชื่อว่าพวกเขาใช้แนวคิดจากภาษา Modula-2 ของ Wirth
เจอร์รี่

1
ISTR the UCSD p-System ก็มีหน่วยเหมือนกัน แต่ฉันไม่รู้ว่าพวกมันป้อนค่าเทอร์โบปาสกาลหรือไม่
TMN

ที่น่าสนใจคือตลับหมึก "BASIC PROGRAMMING" สำหรับ Atari 2600 ที่ระบุในปี 1980 หน้าจอการตั้งโปรแกรมที่แปลกใจคล้ายกับหน้าจอ CodeView หนึ่งสามารถดูโปรแกรม (ที่มีจุดการดำเนินการปัจจุบันเน้น) ในพื้นที่หนึ่งของหน้าจอค่าของตัวแปรในที่สองและผลลัพธ์ใด ๆ จากคำสั่ง "พิมพ์" ในหนึ่งในสาม โชคไม่ดีที่จำนวน RAM ที่โปรแกรมเมอร์มีอยู่นั้นถูก จำกัด ดังนั้นมันจึงไม่ได้ จำกัด เพียงแค่แอปพลิเคชั่น "ของเล่น" - มันไม่ได้เป็นของเล่นมากนัก ยังคงเป็นความสำเร็จที่น่าสนใจทางเทคนิคสำหรับแพลตฟอร์มกับ ...
SuperCat

... หน่วยความจำ RAM ขนาด128 ไบต์ (รวมถึง 24 ไบต์ซึ่งจำเป็นสำหรับตัวชี้หน้าจอ) และด้วยการพัฒนาระบบทั้งหมดที่เหมาะสมใน 4K ของ ROM (รวมถึงรูปร่างอักขระ) ด้วยข้อ จำกัด เหล่านั้นการอนุญาตให้ผู้ใช้ RAM 64 ไบต์สามารถเก็บโปรแกรมตัวแปรและผลลัพธ์ได้อย่างดี Atari แย่มากที่ปล่อยโปรแกรมพื้นฐานก่อนที่พวกเขาจะพัฒนาชิป "SARA" ของพวกเขา (ซึ่งเพิ่ม RAM เป็นสองเท่าจาก 128 ไบต์เป็น 256) ความสามารถในการใช้ RAM ขนาด 128 ไบต์สำหรับโปรแกรมและ 64 สำหรับตัวแปรและผลลัพธ์จะดีกว่าการใช้ 64 ไบต์สำหรับทุกอย่าง
supercat

4

หนึ่งในขั้นตอนการวิวัฒนาการที่สำคัญใน Pascal คือความคิดที่ถูกต้องของสตริง ISO 7185 ("Standard Pascal") ไม่มีพวกเขาซึ่งเป็นเรื่องที่น่าอาย อย่างไรก็ตามโปรแกรมเมอร์จริงทุกคนต้องการพวกมันและการใช้งาน Pascal ที่มีศักยภาพ (เช่น Borland / Turbo Pascal) จัดเตรียมไว้ให้


4

มองย้อนกลับไปที่นวัตกรรมภาษา Pascal ของ Delphi - ฉันจะเพิ่มโมเดล Property, Method, Event (PME) และส่วน "Published" สำหรับชั้นเรียน ทำให้รหัสเนทิฟใช้งานง่ายและขยายการสร้างส่วนประกอบได้ ส่วนประกอบต่างๆเป็นไปตามสัญญาของ Brad Cox เกี่ยวกับ Software ICs



3

การต่อสู้ระหว่าง Pascal หลายรสชาติในยุค 80 และต้นยุค 90

คุณมีแอปเปิ้ลปาสคาล , ไมโครซอฟท์และปาสกาล QuickPascalและเทอร์โบปาสคาล

Object Pascalทั้งหมดที่แนะนำในวิธีเดียวหรืออย่างอื่น (QuickPascal 1.0 และTurbo Pascal 5.5รอบกรอบเวลาเดียวกัน) Apple เพราะพวกเขาต้องการแพลตฟอร์มของพวกเขา Microsoft และ Borland เพราะ OO กลายเป็น 'เท่' (จากนั้น QuickPascal เสียชีวิตไม่นานหลังจากนั้นและ Turbo Pascal 6.0 ได้เพิ่มกรอบ OO ที่สมเหตุสมผลที่เรียกว่าTurbo Vision )

รูดี้ Velthuis ค่อนข้างสมบูรณ์เกี่ยวกับเรื่องนี้ของเขาในการโพสต์ฟอรั่ม

คุณสามารถดาวน์โหลดอิมเมจ ISO ด้วย DOS 6.22 และคอมไพเลอร์ DOS Pascal สองสามตัวจากยุคนั้น


2

ฉันคิดว่าการแนะนำอินเทอร์เฟซ (ใน Delphi 3 IIRC) เป็นสิ่งสำคัญมากที่จะทำให้มันเป็นภาษาเชิงวัตถุที่ทันสมัย


โปรดสังเกตว่าการสืบทอดอินเตอร์เฟสไม่ใช่OOในตัวมันเอง แต่ถูกพิจารณาว่าเป็นหนึ่งในรูปแบบ polymorphism ที่แท้จริง เนื่องจากมีการใช้รูปแบบVMTเดียวกันกับCOMจึงทำให้การทำงานร่วมกับ COM ง่ายขึ้นมาก (ผู้คนมีความคิดเห็นที่กว้างว่าเป็นสิ่งที่ดีหรือไม่ดี <g>)
Jeroen Wiert Pluimers

2

ฉันจะเพิ่มวิธีการที่ไม่ระบุชื่อและข้อมูลทั่วไปในการผสม


1
สำหรับ Delphi รุ่นล่าสุดอาจจะเป็น ฉันใช้จนถึง Delphi 7 ดังนั้นแน่นอนไม่เคยใช้วิธีการที่ไม่ระบุชื่อหรือ generics!
Frank Shearar


2

สำหรับฉันสองสิ่งที่ใหญ่ที่สุด (หลังจากภาษาอื่น ๆ เช่น C ... ) คือความรู้สึกตัวพิมพ์เล็กและความเร็วของคอมไพเลอร์

และหลังจากนั้นความจริงก็คือมันง่ายกว่าที่จะเขียนด้วยแป้นพิมพ์ภาษาฟินแลนด์เพราะฉันไม่ต้องการปุ่ม {} หรือปุ่มอื่น ๆ ที่เข้าถึงยาก ...

ฉันไปต่างประเทศตั้งแต่ Delphi2 แต่ใช้ D1 ในการทำงานสองสามปี ...


1

เริ่มต้นด้วย"การเขียนโปรแกรมเชิงโครงสร้าง"โดย Dahl, Dijkstra และ Hoare ส่วนของ Dijkstra นั้นเป็นพื้นฐานแม้กระทั่งทุกวันนี้ ส่วนของโครงสร้างข้อมูลของ Tony Hoare ทำให้ PASCAL เป็นรากฐานที่สำคัญยิ่ง (ส่วนของดาห์ลพูดถึงสิ่งที่ในที่สุดก็กลายเป็นโปรแกรมเชิงวัตถุ - เขาอธิบายสิ่งที่กลายเป็นชั้นเรียนใน Simula 67 เลย)

มองหา ALGOL-W การใช้งานตัวแปรของ ALGOL-60 ของ Wirth

คุณต้องรู้เกี่ยวกับ PL / I และตัวแก้ไขลิงก์ของ IBM 360 (ตัวเชื่อมโยง) ในเวลานั้นด้วย มันเป็นเรื่องมหัศจรรย์โดยทั่วไปโดยมีประเด็นย่อยที่ว่ามันวิ่งช้ากว่ากากน้ำตาลในเดือนมกราคมในจูโนรัฐอลาสกา PASCAL ได้รับการออกแบบมาเป็นพิเศษเพื่อรวบรวมและเชื่อมโยงในรอบเดียวเพื่อความเร็ว (มันช่วยให้ภาษาเริ่มใช้ชีวิตในซุปเปอร์จูเนียร์ CDC 6400 ที่มีหน่วยความจำมากมายทำให้คอมไพเลอร์ One-Pass เป็นประโยชน์)

จริง ๆ แล้วมี PASCAL สองรุ่นใหญ่จาก ETH ซูริค ภาษาที่ทุกคนรู้ในขณะนี้เนื่องจาก PASCAL เป็นจริง PASCAL2 รุ่นที่สอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.