Những tính năng đóng góp cho sự phát triển của Pascal?


17

Tôi đang biên soạn một lịch sử chi tiết của ngôn ngữ Pascal và có một vài chi tiết tôi còn thiếu.

Có rất nhiều tính năng ngày nay mà chúng ta coi là đương nhiên. Những tính năng nào đóng góp đáng kể cho sự phát triển của Pascal và tại sao chúng lại có ý nghĩa?

Tôi đang tìm kiếm các tính năng ngôn ngữ, không phải các tính năng nền tảng hoặc khung. Vì vậy, giống như quá tải toán tử hoặc tham số mặc định, nhưng không hỗ trợ Linux hoặc tiện ích Rich Text mới.

Tôi biết có một vài hương vị khác nhau của Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, v.v.) và họ đã giới thiệu các tính năng tương tự ở các thời điểm khác nhau và song song. Được thôi. Tôi đang xem xét toàn bộ ngôn ngữ Pascal và khi các mốc quan trọng xảy ra (ngày, phiên bản, v.v.)


@Jim Câu hỏi của bạn yêu cầu danh sách ngày, nhưng không hỏi đầu vào về lý do tại sao một người nào đó coi chúng là quan trọng. Tôi đã điều chỉnh lại câu hỏi của bạn để nắm bắt khía cạnh đó và đã mở lại nó.

2
Bạn có biết rằng sản phẩm Turbo Pascal đã cách mạng hóa thế giới Pascal? Và thế giới PC của IBM cũng vậy? Đặc biệt là vì nó cố định chuỗi.

4
Đừng quên UCSD Pascal! Nó đã giới thiệu mã byte (mã p), rất lâu trước khi Java là một tia sáng trong mắt của Sun.
Macneil

1
+1 @Macneil UCSD p-Code và Smalltalk VM là những điều mà tôi luôn giải thích khi nói về mã được quản lý hiện đại (Java, .NET). Thật thú vị khi có một déjà vu khi nhìn thấy vô số thứ 'hiện đại' (như Apps, đó chỉ là một hương vị mới của máy khách-máy chủ).
Jeroen Wiert Pluimers

1
@Jeroen Pluimers: Tôi cũng thích thú khi nói về DVCS là "mới". Tôi đã sử dụng SCCS / Teamware tại Sun, Torvalds đã sử dụng BitKeeper. Khi tôi nhìn thấy CVS, tôi biết nó đã bị hỏng (cũng như Torvalds). Khi tôi mới nghe về SVN, tôi đã nghĩ "ồ, cuối cùng họ đã sửa nó." Nhưng không. Thế giới OSS (và Joel!) Đã bị hủy hoại bởi CVS làm mọi thứ sai, họ cần tin rằng đó là một điều mới!
Macneil

Câu trả lời:


10

Từ góc độ lịch sử ngôn ngữ, có lẽ đóng góp lớn nhất của Pascal là loại an toàn mạnh mẽ. Trận chiến đó hầu hết đã kết thúc - phe của Pascal đã thắng - và điểm bùng phát công nghiệp là Java. Nhưng trong một thời gian rất dài, C được ưa chuộng trước Pascal bởi những người coi họ là những lập trình viên trưởng thành phần lớn vì điều này: mọi người muốn tự do thao túng con trỏ của họ như thể họ là số nguyên. Tuy nhiên, các triển khai thực tế của Pascal có sơ hở, giống như các công đoàn không tự động kiểm tra trường phân biệt đối xử hoặc thậm chí đã đánh máy đầy đủ các con trỏ đến điểm tương đương với C (Turbo Pascal là một trong số đó).

Điều này, và đơn giản hóa thông số ALGOL 68 phức tạp [1], có thể là điểm khởi đầu.

[1] Thỉnh thoảng hãy thử đọc báo cáo ALGOL 68 - đây chắc chắn là sản phẩm của thập niên 60! Một trang web trên web có đề cập đến một số thuật ngữ kỳ quặc của nó: 'mã thông báo xe buýt', 'cây sản xuất vô hình', 'môi trường nguyên thủy', 'hiệp hội loạn luân', 'khái niệm', 'phản đối', 'siêu thị', 'siêu thị', ' paranemony ', v.v.


15

Tôi muốn nói rằng hai động lực quan trọng nhất trong suốt lịch sử của Pascal là:

  1. Loại an toàn: Pascal là tinh hoa trong việc tạo ra niềm tin rằng loại an toàn là quan trọng và quan trọng trong ngôn ngữ.
  2. Hiệu quả của trình biên dịch: Pascal luôn được thiết kế như một ngôn ngữ thông qua duy nhất và cho thế giới thấy trình biên dịch có thể nhanh đến mức nào mà không từ bỏ sức mạnh. Những thứ tạo nên một trình biên dịch nhanh cũng là những thứ tạo nên một ngôn ngữ được thiết kế tốt, dễ đọc. Genuis của Borland cũng đã cung cấp tất cả điều đó và hiệu suất.

Không phải PASCAL cũng là ngôn ngữ đầu tiên mà trình biên dịch được viết bằng chính PASCAL sao? Một điều đáng chú ý khác vào thời điểm đó là mã P - mã cho một máy pascal ảo. Tất cả mọi người phải làm để triển khai PASCAL trên một máy khác là viết trình thông dịch hoặc trình biên dịch cho mã P.
Ingo

Tôi sẽ thêm rằng an toàn kiểu cũng bao gồm các cơ chế được gọi là kiểm tra thời gian chạy trong hầu hết các trình biên dịch pascal. (Gần?) Mỗi ​​trình biên dịch đều có chúng, về cơ bản khác với cách tiếp cận LINT được các trình biên dịch C ưa thích.
Marco van de Voort

11

Bạn thực sự cần phải quay lại nguồn gốc - tìm một số lịch sử của Niklaus Wirth. Pascal bắt đầu cuộc sống như một ngôn ngữ giảng dạy. "Thuật toán + Cấu trúc dữ liệu = Chương trình" là điểm khởi đầu tốt.

Vào thời điểm đó, Pascal đơn giản hơn nhiều so với Algol 68 và PL / 1. Nó buộc cấu trúc và tuyên bố, và loại an toàn mạnh mẽ, không giống như Fortran4 (Fortran 77 đã cải thiện mọi thứ một chút ở đó nhưng bạn vẫn có thể chơi cực kỳ nhanh-n-lỏng). Và so với COBOL, nó ngắn, đơn giản và dễ viết chương trình hơn. (Xin chào thế giới trong khoảng 6 dòng thay vì 600).

Khi nó bắt nguồn, có những thứ như mảng ký tự trong Pascal - đó là để xử lý chuỗi. Mọi thứ được cải thiện qua nhiều năm.

Nếu bạn thực sự muốn đi sâu vào lịch sử Pascal, một số điểm bạn phải tính đến:

  • Bản gốc của Wirth (Pascal tiêu chuẩn)
  • tiện ích mở rộng của Digital Equipment Corp (DEC) trên Vax
  • Hệ thống p UCSD (trên nhiều máy nhưng đáng chú ý là Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (được sử dụng để viết hệ điều hành Domain / OS, còn được gọi là Aegis)
  • Turbo Pascal với các đối tượng và đơn vị (phiên bản 5.5 trở lên. Chỉnh sửa: vừa tìm thấy TP 5.5 OOP PDF )
  • Delphi

Trở lại những năm 1980, có một lễ hội sên lớn giữa Pascal và C. Có rất nhiều sự phát triển và hoạt động diễn ra ở cả hai phe.

Kết quả là, những thứ kỳ lạ và tuyệt vời như Bliss-32, Algol và PL / 1 đã biến mất khá nhiều - nhưng những ý tưởng từ những thứ này đã xâm nhập vào Pascal.

EDIT: mảng ký tự có thể được đóng gói tạo ra một số thuộc tính đặc biệt, nhưng nếu bạn muốn những gì chúng ta biết bây giờ là xử lý chuỗi, bạn cần phải tự phát triển nó.


IIRC có một lượng nhỏ xử lý đặc biệt packed array[1..n] of char;, ví dụ như trong Đọc (ln) và Viết (ln)
Gerry

Vâng, readln, writeln có một chút đặc biệt ở chỗ chúng có thể xử lý đầu vào / đầu ra của một số lượng ký tự khác nhau. Cũng có một chút bụi bặm vào cuối những năm 1980 về việc họ trở nên xấu xa và tội lỗi và phá vỡ cấu trúc ngôn ngữ vì họ chấp nhận một số lượng tham số khác nhau. Những người theo chủ nghĩa thuần túy ghét điều này. Phần còn lại của chúng tôi chỉ sử dụng nó mà không phải lo lắng quá nhiều về nó.
quick_now

Có thể các hệ thống mô đun / đơn vị từ ngôn ngữ Wirth "khác" Modula2. (Mặc dù có thể gián tiếp thông qua các nỗ lực để có được nó trong các bản dựng Pascal, cuối cùng nó đã tạo ra tiêu chuẩn Pascal mở rộng, mặc dù với cú pháp khác nhau)
Marco van de Voort

5

Mở rộng hướng đối tượng! Object Pascal là bước nhảy vọt lớn nhất (không chính thức) với việc phát hành Delphi (1) vào giữa những năm 90. Thật khó để chọn ra chỉ một, nhưng toàn bộ cốt lõi của mô hình đối tượng nói chung đã giúp đưa ngôn ngữ lên trạng thái hiện đại. Thật không may cho đến ngày nay nó vẫn chưa được đưa vào một tiêu chuẩn thống nhất chính thức mà tất cả các trình biên dịch sẽ tuân thủ đối xứng mã hóa.

Rất may, các nhà phát triển dự án Free Pascal đã cung cấp khá nhiều tính năng được thêm vào Delphi bởi cả Borland và Embarcadero. RemObjects không quá nhiều nhưng ít nhất hey có mối quan hệ với Embarcadero trong Delphi Prism để mọi sai lệch so với một tiêu chuẩn (để làm cho ngôn ngữ tuân thủ .NET hơn) sẽ được ghi lại cao.


8
Các đối tượng đã được đưa vào Pascal với Turbo Pascal 5.5
maptle

1
thủ tục và chức năng theo mặc định là tĩnh. Bạn phải sử dụng virtualtừ khóa để làm cho chúng bị ghi đè bởi các lớp con.

1
Ảo không phải là một từ dành riêng trong Delphi. Danh sách các từ dành riêng Delphi và từ khóa Prism có thể được tìm thấy ở đâyđây .
David I

2
Các đối tượng đã được Apple đưa vào Pascal. vi.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster

2
@Carl - Tôi đã quên rằng các máy Mac cổ điển đã được lập trình trong Pascal và tôi không biết rằng đó là phiên bản OO của Pascal do Wirth đồng sáng tạo.
đánh dấu

4

Chỉ một hoặc hai điều tôi nhớ từ khi sử dụng Pascal từ lâu với MS-DOS:

Turbo Pascal ít nhiều đã giới thiệu một loại IDE trong thập niên 80 (và hiệu suất biên dịch đã tăng mạnh so với UCSD Pascal

Bằng cách nào đó vào khoảng giữa thập niên 90, Borland đã đổi tên từ Turbo thành Borland Pascal . Bước đầu tiên, các Đơn vị được giới thiệu, cho phép chia các dự án lớn thành các đơn vị biên dịch riêng biệt.

Sau đó, họ đã thêm lập trình hướng đối tượng là tốt.


Turbo Pascal là sản phẩm đơn giản. Borland Pascal có RẤT NHIỀU công cụ bổ sung như trình biên dịch, v.v.

2
Các đơn vị được giới thiệu trong Turbo Pascal (v4 IIRC). Chúng được biên dịch thành các tệp .tpu (đơn vị turbo pascal), là tiền thân của các tệp dcu hiện tại. Tôi tin rằng họ dựa trên các khái niệm từ ngôn ngữ Modula-2 của Wirth.
Gerry

1
ISTR Hệ thống p UCSD cũng có các đơn vị, nhưng tôi không biết liệu chúng có trước Turbo Pascal hay không.
TMN

Thật thú vị, hộp mực "LẬP TRÌNH CƠ BẢN" cho Atari 2600 được cung cấp vào năm 1980 một màn hình lập trình tương tự như màn hình CodeView; người ta có thể xem chương trình (với điểm thực hiện hiện tại được tô sáng) trong một khu vực của màn hình, các giá trị của các biến trong một giây và bất kỳ đầu ra nào từ các câu lệnh "in" trong một phần ba. Thật không may, dung lượng RAM dành cho lập trình viên bị hạn chế đến mức nó không chỉ giới hạn ở các ứng dụng "đồ chơi" - nó thậm chí không phải là nhiều đồ chơi. Vẫn là một thành tựu kỹ thuật thú vị cho một nền tảng với ...
supercat

... Một con số khổng lồ 128 byte RAM (bao gồm 24 byte được yêu cầu cho con trỏ màn hình) và với toàn bộ hệ thống phát triển phù hợp với 4K ROM (bao gồm cả hình dạng ký tự). Với những hạn chế đó, cho phép người dùng 64 byte RAM giữ chương trình, các biến và đầu ra của họ là một mẹo khá gọn gàng. Quá tệ, Atari đã phát hành Lập trình cơ bản trước khi họ phát triển chip "SARA" (tăng gấp đôi RAM từ 128 byte lên 256). Có thể sử dụng 128 byte RAM cho chương trình cộng với 64 cho các biến và đầu ra sẽ tốt hơn nhiều so với việc có 64 byte cho mọi thứ.
supercat

4

Một trong những bước tiến hóa cốt lõi trong Pascal là khái niệm đúng về chuỗi. ISO 7185 ("Pascal tiêu chuẩn") không có chúng, đó là loại ngượng ngùng. Tuy nhiên, tất cả các lập trình viên thực sự đều cần chúng và các triển khai Pascal khả thi (như Borland / Turbo Pascal) đã cung cấp cho họ.


4

Nhìn lại các đổi mới ngôn ngữ Pascal của Delphi's - Tôi sẽ thêm mô hình Thuộc tính, Phương thức, Sự kiện (PME) và phần "Đã xuất bản" cho các lớp. Điều đó làm cho mã gốc, dễ sử dụng và mở rộng xây dựng thành phần có thể. Các thành phần thực hiện lời hứa về IC phần mềm của Brad Cox.



3

Cuộc chiến giữa nhiều hương vị của Pascal trong thập niên 80 và đầu thập niên 90.

Bạn đã có Apple Pascal , Microsoft Pascal và QuickPascalTurbo Pascal .

Tất cả đã giới thiệu Object Pascal theo cách này hay cách khác (QuickPascal 1.0 và Turbo Pascal 5.5 trong cùng khung thời gian). Apple vì họ yêu cầu nó cho nền tảng của họ, Microsoft và Borland vì OO đang trở nên 'tuyệt vời' (sau đó QuickPascal đã chết ngay sau đó, và Turbo Pascal 6.0 đã bổ sung một khung OO hợp lý có tên là Turbo Vision ).

Rudy Velthuis khá đầy đủ về điều này trong bài đăng trên diễn đàn của mình .

Bạn có thể tải xuống một hình ảnh ISO với DOS 6.22 và một vài trình biên dịch DOS Pascal từ thời đó .


2

Tôi nghĩ rằng việc giới thiệu các giao diện (trong Delphi 3 IIRC) là rất quan trọng để biến nó thành một ngôn ngữ hướng đối tượng hiện đại.


Lưu ý rằng kế thừa giao diện không phải là OO trong chính nó, nhưng nó được coi là một trong những dạng đa hình trung thực nhất. Vì nó chia sẻ định dạng VMT giống như COM , nên việc tương tác với COM dễ dàng hơn nhiều (mọi người có ý kiến ​​rộng rãi về việc đó là điều tốt hay xấu <g>).
Jeroen Wiert Pluimers

2

Tôi sẽ thêm các phương thức ẩn danh và thuốc generic vào hỗn hợp.


1
Đối với các phiên bản gần đây nhất của Delphi, có thể. Tôi đã sử dụng tới Delphi 7, vì vậy tất nhiên không bao giờ sử dụng phương pháp ẩn danh hoặc tổng quát!
Frank Shearar


2

Đối với tôi, hai điều lớn nhất (sau một số ngôn ngữ khác như C ...) là sự không nhạy cảm và tốc độ của trình biên dịch.

Và sau đó, thực tế là viết bằng bàn phím Phần Lan dễ dàng hơn, vì tôi không cần liên tục {} hoặc các phím khác khó tiếp cận ...

Tôi đã ở trên tàu kể từ Delphi2 nhưng đã sử dụng D1 trong vài năm làm việc ...


1

Bắt đầu với "Lập trình có cấu trúc" , bởi Dahl, Dijkstra và Hoare. Phần của Dijkstra là cơ bản, ngay cả ngày nay. Phần của Tony Hoare về cấu trúc dữ liệu đã đặt rất nhiều nền tảng cho PASCAL. (Phần của Dahl đã nói về những gì cuối cùng đã trở thành lập trình hướng đối tượng. Ông đã mô tả những gì đã trở thành các lớp trong Simula 67.)

Nhìn vào ALGOL-W, Wirth thực hiện một biến thể của ALGOL-60.

Bạn cũng cần biết về PL / I và trình soạn thảo liên kết IBM 360 (trình liên kết) tại thời điểm đó. Đó là một điều kỳ diệu của sự chung chung, với vấn đề nhỏ là nó chạy chậm hơn so với mật đường vào tháng 1 ở Juneau, Alaska. PASCAL được thiết kế đặc biệt để được biên dịch và liên kết trong một lần, cho tốc độ. (Nó đã giúp ngôn ngữ bắt đầu cuộc sống trên một siêu máy tính cơ sở CDC 6400, với rất nhiều bộ nhớ, làm cho trình biên dịch một lần trở nên thiết thực.)

Thực tế, có hai phiên bản chính của PASCAL từ ETH Zurich. Ngôn ngữ mà mọi người hiện đang biết là PASCAL thực sự là PASCAL2, phiên bản thứ hai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.