Jakie funkcje przyczyniły się do ewolucji Pascala?

17

Kompiluję szczegółową historię języka Pascal i brakuje kilku szczegółów.

Dziś jest tak wiele funkcji, że uważamy za pewnik. Jakie cechy znacząco przyczyniły się do ewolucji Pascala i dlaczego były znaczące?

Szukam funkcji języka, a nie funkcji platformy lub frameworka. Tak jak przeciążenie operatora lub parametry domyślne, ale nie obsługa Linuksa lub nowy widżet Rich Text.

Wiem, że istnieje kilka różnych smaków Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal itp.) I wprowadzili te same funkcje w różnych momentach i równolegle. To dobrze. Patrzę na język Pascal jako całość i kiedy nastąpiły znaczące kamienie milowe (daty, wersje itp.)

Jim McKeeth
źródło
@ Jim Twoje pytanie dotyczyło listy dat, ale nie zawierało opinii na temat tego, dlaczego ktoś uważa je za znaczące. Przeredagowałem twoje pytanie, aby uchwycić ten aspekt, i ponownie je otworzyłem.
2
Czy wiesz, że produkt Turbo Pascal zrewolucjonizował świat Pascal? A tak naprawdę świat IBM PC? Zwłaszcza, że ​​naprawił ciągi.
4
Nie zapomnij o UCSD Pascal! Wprowadził kody bajtowe (kody p), na długo przed tym, jak Java była błyskiem w oku Słońca.
Macneil
1
+1 @ kod Macneil UCSD p-Code i Smalltalk VM to rzeczy, które zawsze wyjaśniam, mówiąc o nowoczesnym kodzie zarządzanym (Java, .NET). Fajnie jest mieć déjà vu, widząc mnóstwo „nowoczesnych” rzeczy (takich jak Appsnowy smak klienta-serwera).
Jeroen Wiert Pluimers
1
@Jeroen Pluimers: Cieszę się również z tego, że DVCS jest „nowy”. Użyłem SCCS / Teamware w Sun, Torvalds użył BitKeeper. Kiedy zobaczyłem CVS, wiedziałem, że jest zepsuty (podobnie jak Torvalds). Kiedy po raz pierwszy usłyszałem o SVN, pomyślałem „och, w końcu to naprawili”. Ale nie. Świat OSS (i Joel!) Zostali tak bardzo zniszczeni przez CVS, który robi wszystko źle, że muszą wierzyć, że to nowa rzecz!
Macneil,

Odpowiedzi:

10

Z historycznego punktu widzenia języka prawdopodobnie największym wkładem Pascala było bezpieczeństwo typu silnego. Ta bitwa jest już prawie zakończona - strona Pascala wygrała - a przemysłowym punktem zwrotnym była Java. Ale przez bardzo długi czas C było faworyzowane przed Pascalem przez ludzi, którzy uważali się za dorastających programistów w dużej mierze z tego powodu: ludzie chcieli wolności manipulowania swoimi wskaźnikami, jakby byli liczbami całkowitymi. Praktyczne implementacje Pascala miały jednak luki, takie jak związki, które nie sprawdzały dynamicznie pola dyskryminacyjnego, a nawet miały pełne rzutowanie typów wskaźników do tego stopnia, że ​​były prawie równoważne C (Turbo Pascal był jednym z nich).

To i uproszczenie skomplikowanej specyfikacji ALGOL 68 [1] może być punktem wyjścia.

[1] Spróbuj kiedyś przeczytać raport ALGOL 68 - to zdecydowanie produkt z lat 60.! Jedna strona internetowa wspomina niektóre z dziwnych żargonów: „token autobusowy”, „niewidzialne drzewa produkcyjne”, „pierwotne otoczenie”, „kazirodztwo”, „pojęcia”, „protonotacje”, „metanotacje”, „hipernotacje”, „ paranotacje ”itp.

Barry Kelly
źródło
15

Powiedziałbym, że dwie najważniejsze siły napędowe w historii Pascal to:

  1. Bezpieczeństwo typu: Pascal miał zasadnicze znaczenie w tworzeniu przekonania, że ​​bezpieczeństwo typu jest ważne i kluczowe w języku.
  2. Wydajność kompilatora: Pascal zawsze był zaprojektowany jako język jednoprzebiegowy i pokazywał światu, jak szybki może być kompilator bez rezygnacji z mocy. To, co sprawia, że ​​szybki kompilator, to także rzeczy, które tworzą dobrze zaprojektowany, łatwy do odczytania język. Genialność Borlanda polegała także na zapewnieniu tego wszystkiego i wydajności.
Nick Hodges
źródło
Czy PASCAL nie był także pierwszym językiem, w którym kompilator został napisany w samym PASCAL? Inną niezwykłą rzeczą w tym czasie był kod P - kod wirtualnej maszyny pascal. Aby zaimplementować PASCAL na innym komputerze, wystarczyło napisać interpreter lub asembler dla kodu P.
Ingo
Dodałbym, że bezpieczeństwo typu obejmowało również mechanizmy zwane sprawdzaniem czasu działania w większości kompilatorów pascal. (Prawie?) Każdy kompilator ma je, co zasadniczo różni się od podejścia LINT preferowanego przez kompilatory C.
Marco van de Voort
11

Naprawdę musisz wrócić do początków - znaleźć historię Niklausa Wirtha. Pascal rozpoczął swoje życie jako język nauczania. „Algorytmy + struktury danych = programy” to dobry punkt wyjścia.

W tym czasie Pascal był znacznie prostszy niż Algol 68 i PL / 1. Wymusiło to strukturę i deklarację, a także silne bezpieczeństwo typu, w przeciwieństwie do Fortran4 (Fortran 77 trochę poprawił, ale nadal można grać w bardzo szybki i luźny tryb). W porównaniu do COBOL był krótki, prosty i łatwiejszy do pisania programów. (Witaj świecie w około 6 liniach zamiast 600).

Kiedy powstał, w Pascalu istniały takie tablice znaków, jak w przypadku obsługi ciągów znaków. Przez lata sytuacja uległa poprawie.

Jeśli naprawdę chcesz zagłębić się w historię Pascala, musisz wziąć pod uwagę kilka punktów:

  • Oryginał Wirtha (Standard Pascal)
  • rozszerzenia przez Digital Equipment Corp (DEC) na Vax
  • system p UCSD (na wielu komputerach, ale przede wszystkim Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (używany do pisania systemu operacyjnego Domain / OS, zwanego także Aegis)
  • Turbo Pascal z obiektami i jednostkami (wersja 5.5 i nowsze. Edycja: właśnie znalazłem plik PDF OOP TP 5.5 )
  • Delfy

W latach osiemdziesiątych między Pascalem a C. odbył się wielki festiwal ślimaków. W obu obozach odbywał się ogromny rozwój i działalność.

W rezultacie dziwne i cudowne rzeczy, takie jak Bliss-32, Algol i PL / 1 praktycznie zniknęły - ale pomysły z nich trafiły do ​​Pascala.

EDYCJA: tablice znaków mogą być spakowane, co nadaje pewne specjalne właściwości, ale jeśli chcesz czegoś, co obecnie znamy jako obsługę ciągów, musisz sam go wyhodować.

szybko. teraz
źródło
IIRC była niewielka ilość specjalnej obsługi packed array[1..n] of char;, np. W Odczyt (ln) i Zapis (ln)
Gerry
Tak, readln, writeln były nieco wyjątkowe, ponieważ mogły obsługiwać wejście / wyjście zmiennej liczby znaków. Pod koniec lat osiemdziesiątych nastąpił również drobny błąd, że są źli, grzeszni i łamią konstrukcję językową, ponieważ akceptują zmienną liczbę parametrów. Puryści nienawidzili tego. Reszta z nas po prostu z niego korzystała, nie martwiąc się zbytnio o to.
szybko_now
Może systemy moduł / jednostka z „innego” języka Wirth Modula2. (Chociaż być może pośredni poprzez podejmowane wysiłki, aby uzyskać go w standardzie Pascala, w końcu stał się standardem Extended Pascal, choć z inną składnią)
Marco van de Voort
5

Rozszerzenia zorientowane obiektowo! Object Pascal był największym (nieoficjalnym) skokiem standardów po wydaniu Delphi (1) w połowie lat 90. Trudno wybrać tylko jeden, ale cały rdzeń modelu obiektowego jako całości pomógł wprowadzić język do nowoczesnego statusu. Niestety do dnia dzisiejszego nie został przekształcony w oficjalny jednolity standard, którego wszystkie kompilatory byłyby zgodne w symetrii kodowania.

Na szczęście programiści Free Pascal dość dostosowali funkcje dodane do Delphi zarówno przez Borlanda, jak i Embarcadero. RemObjects nie tyle, ale przynajmniej hey mają powiązania z Embarcadero pod Delphi Prism, więc wszelkie odchylenia od standardu (aby uczynić język bardziej zgodnym z .NET) byłyby wysoce udokumentowane.

Jason McMillen
źródło
8
Przedmioty wprowadzono do Pascala za pomocą Turbo Pascal 5.5
mcottle,
1
procedury i funkcje były domyślnie statyczne. Trzeba było użyć virtualsłowa kluczowego, aby zastąpić je podklasami.
1
Wirtualny nie jest słowem zastrzeżonym w Delphi. Lista słów zastrzeżonych Delphi i słów kluczowych Prism znajduje się tutaj i tutaj .
David I
2
Przedmioty zostały wprowadzone do Pascala przez Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster
2
@Carl - zapomniałem, że klasyczne komputery Mac zostały zaprogramowane w Pascalu i nie wiedziałem, że jest to wersja OO Pascala współtworzona przez Wirtha.
mcottle,
4

Tylko jedną lub dwie rzeczy, które pamiętam z używania Pascala dawno temu w MS-DOS:

Turbo Pascal mniej więcej wprowadził rodzaj IDE w latach 80. (a wydajność kompilacji znacznie wzrosła w porównaniu z UCSD Pascal

Jakoś w połowie lat 90. Borland zmienił nazwę z Turbo na Borland Pascal . Jako pierwszy krok wprowadzono Jednostki, które pozwoliły na podzielenie dużych projektów na osobne jednostki kompilacji.

Później dodali również programowanie obiektowe.

Thorsten Müller
źródło
Turbo Pascal był prostym produktem. Borland Pascal miał wiele dodatkowych rzeczy, takich jak asemblery itp.
2
Jednostki zostały wprowadzone w Turbo Pascal (v4 IIRC). Skompilowano je do plików .tpu (turbo pascal unit), które były poprzednikiem obecnych plików dcu. Wierzę, że były oparte na koncepcjach z języka Modula-2 Wirtha.
Gerry
1
ISTR system p UCSD również miał jednostki, ale nie wiem, czy były wcześniejsze niż Turbo Pascal, czy nie.
TMN
Co ciekawe, kaseta „PODSTAWOWE PROGRAMOWANIE” dla Atari 2600 dostarczyła w 1980 r. Ekran programowania, który był zaskakująco podobny do ekranu CodeView; program można wyświetlić (z podświetlonym bieżącym punktem wykonania) w jednym obszarze ekranu, wartości zmiennych w drugim, a każde wyjście z instrukcji „print” w trzecim. Niestety ilość pamięci RAM dostępnej dla programisty była tak ograniczona, że ​​nie ograniczała się tylko do aplikacji „zabawkowych” - nie była nawet zabawką. Wciąż interesujące osiągnięcie techniczne dla platformy z ...
supercat,
... aż 128 bajtów pamięci RAM (w tym 24 bajty, które były wymagane do wskaźników ekranowych), a cały system programowania zmieścił się w 4K ROM (w tym kształty postaci). Biorąc pod uwagę te ograniczenia, umożliwienie użytkownikom 64 bajtów pamięci RAM na przechowywanie ich programów, zmiennych i danych wyjściowych było dość fajną sztuczką. Szkoda, że ​​Atari wydało Basic Programming, zanim opracowali układ „SARA” (który podwoił ilość pamięci RAM z 128 bajtów do 256). Możliwość użycia 128 bajtów pamięci RAM dla programu plus 64 dla zmiennych i danych wyjściowych byłaby znacznie lepsza niż posiadanie 64 bajtów na wszystko.
supercat
4

Jednym z kluczowych kroków ewolucyjnych w Pascalu było właściwe pojęcie strun. ISO 7185 („Standardowy Pascal”) nie miał ich, co jest trochę krępujące. Jednak wszyscy prawdziwi programiści ich potrzebowali, a zapewniły to realne implementacje Pascala (takie jak Borland / Turbo Pascal).

MSalters
źródło
4

Patrząc wstecz na innowacje językowe Pascal firmy Delphi - dodałbym model Właściwość, Metoda, Zdarzenie (PME) i sekcję „Opublikowane” dla klas. Dzięki temu natywny kod jest łatwy w użyciu i możliwe jest budowanie komponentów. Komponenty spełniły obietnicę Brada Coxa dotyczącą oprogramowania układów scalonych.

David I
źródło
3

Walka między wieloma smakami Pascala w latach 80. i na początku 90.

Miałeś Apple Pascal , Microsoft Pascal i QuickPascal oraz Turbo Pascal .

Wszystkie wprowadzono Object Pascal w taki czy inny sposób (QuickPascal 1.0 i Turbo Pascal 5.5 w tym samym przedziale czasowym). Apple, ponieważ wymagali tego od swojej platformy, Microsoft i Borland, ponieważ OO stawało się „fajne” (wtedy QuickPascal zmarł wkrótce potem, a Turbo Pascal 6.0 dodał rozsądną platformę OO o nazwie Turbo Vision ).

Rudy Velthuis jest dość kompletny w swoim wpisie na forum .

Możesz pobrać obraz ISO z DOS 6.22 i kilkoma kompilatorami DOS Pascal z tamtej epoki .

Jeroen Wiert Pluimers
źródło
2

Myślę, że wprowadzenie interfejsów (w Delphi 3 IIRC) było bardzo ważne, aby uczynić z niego nowoczesny język obiektowy.

François
źródło
Zauważ, że dziedziczenie interfejsu nie jest samo w sobie OO , ale jest uważane za jedną z najprawdziwszych form polimorfizmu. Ponieważ współdzieli ten sam format VMT co COM , znacznie ułatwia współpracę z COM (ludzie mają szerokie opinie na temat tego, że jest to dobra lub zła rzecz <g>).
Jeroen Wiert Pluimers
2

Dodam anonimowe metody i generyczne do miksu.

gabr
źródło
1
Może do najnowszych wersji Delphi. Użyłem Delphi 7, więc oczywiście nigdy nie użyłem ani anonimowych metod, ani generyków!
Frank Shearar,
2

Dla mnie dwie największe rzeczy (po niektórych innych językach, takich jak C ...) to brak wrażliwości na wielkość liter i szybkość kompilatora.

A potem faktem jest, że łatwiej jest pisać za pomocą fińskiej klawiatury, ponieważ nie potrzebuję ciągle {} lub innych trudnych do uzyskania klawiszy ...

Jestem na pokładzie od Delphi2, ale użyłem D1 w pracy przez kilka lat ...

Tommi Prami
źródło
1

Zacznij od „Programowania strukturalnego” Dahla, Dijkstry i Hoare. Sekcja Dijkstry ma fundamentalne znaczenie, nawet dzisiaj. Sekcja Tony'ego Hoare'a na temat strukturyzowania danych położyła duży fundament pod PASCAL. (Część Dahla mówiła o tym, co ostatecznie stało się programowaniem obiektowym. Opisał, co stało się klasami w Simuli 67.)

Spójrz na ALGOL-W, implementację Wirtha wariantu ALGOL-60.

Musisz również wiedzieć o PL / I i edytorze linków (łączniku) IBM 360 w tym czasie. Był to cud ogólności, z drobnym problemem, że płynął wolniej niż melasa w styczniu w Juneau na Alasce. PASCAL został specjalnie zaprojektowany do kompilacji i łączenia w jednym przebiegu, aby zwiększyć szybkość. (Pomogło to, że język zaczął działać na młodszym superkomputerze CDC 6400 z dużą ilością pamięci, dzięki czemu kompilator jednoprzebiegowy jest praktyczny.)

Istniały dwie główne wersje PASCAL z ETH Zurich. Językiem, który wszyscy znają jako PASCAL, był tak naprawdę PASCAL2, druga wersja.

John R. Strohm
źródło