Początki wcięć kodu

31

Chciałbym dowiedzieć się, kto wprowadził wcięcia kodu, a także kiedy i gdzie został wprowadzony.

Wydaje się to bardzo ważne dla zrozumienia kodu, ale nie było uniwersalne. Większość kodów Fortran i Basic była (jest?) Niewzruszona, to samo dotyczy Cobola.

Jestem prawie pewien, że widziałem nawet stary kod Lisp napisany jako ciągły tekst z wierszami. Trzeba było policzyć nawiasy w głowie tylko po to, aby je przeanalizować, nie wspominając o zrozumieniu.

Skąd więc tak duża poprawa? Nigdy nie widziałem żadnej wzmianki o jego pochodzeniu.

Oprócz oryginalnych przykładów jego użycia szukam również oryginalnych dyskusji na temat wcięć.

Daniel Mahler
źródło
Nie jestem pewien, czy ma jeden punkt początkowy. Ponadto, w przypadku niektórych wczesnych kodów, przestrzeń zajmowana przez same spacje byłaby problemem.
Jack Aidley
1
W rzeczywistości FORTRAN był wcięty. W pewien sposób. Został on ułożony w kolumny, z których pierwsza jest zarezerwowana dla Cpostaci, jeśli komentujesz.
Jonathan Landrum
Z wyjątkiem przypadków, w których wcięcie służy do zmiany semantycznego znaczenia kodu (to znaczy, gdy zmiana wcięcia spowoduje umieszczenie go w pętlach lub w ramach if, a la F #), wcięcie nie jest tak naprawdę funkcją językową, jest to funkcja IDE ( i trochę w kompilatorze, aby zignorować wiodące spacje). @ Jack ma rację - pierwotnie programy były dziurkowane na kartach, a wcięcia dosłownie nie istniały w pamięci (i być może nie powinny teraz). Columnar RPG nie używa wcięć (i tak masz tylko ~ 20 znaków wolnych w linii), ale IDE może „zmiękczyć” wcięcie kodu za ciebie.
Clockwork-Muse
6
Myśląc o tym z dnia na dzień, przychodzi mi do głowy, że znaczące wcięcie prawdopodobnie poprzedza programowanie. Wcięcia były prawdopodobnie używane na listach instrukcji, zanim ktokolwiek pisał programy komputerowe. Próbuję znaleźć przykład.
Jack Aidley
@ Wcięcie w zegarku-Muse było funkcją językową w języku COBOL do około 20 lat temu („obszar A”, „obszar B” itp .).
Ross Patterson

Odpowiedzi:

21

Początki wciętego kodu prawdopodobnie można znaleźć w ALGOL :

ALGOL wprowadził bloki kodu beginoraz endpary i do ich rozgraniczenia, a także był pierwszym językiem implementującym definicje funkcji zagnieżdżonych o zakresie leksykalnym.

Greg Hewgill
źródło
Brzmi rozsądnie, choć zastanawiam się, czy prognozy Lispa mogły nie być pierwsze. Tak czy inaczej, naprawdę szukam szczegółów na temat wprowadzenia wcięcia.
Daniel Mahler
4
@DanielMahler - Przejrzyj instrukcję programowania LISP 1 i przekonaj się sam. Część przykładowego kodu jest wcięta, ale w najlepszym razie przypadkowa. Większość przykładowego kodu pozostawia kolor.
David Hammen
@DavidHammen To musiał być jeden z najgorszych maszyn do pisania ... Myślałeś, że napisali wszystko odręcznie.
Panzercrisis
6
Nie sądzę, aby cytowany tekst faktycznie wspiera użycie / istnienie wcięcia . To jest wsparcie dla kodu podziału na sekcje. Java używa nawiasów kwadratowych ( {}) do rozdzielania bloków i możesz zdefiniować zagnieżdżone funkcje, ale to nie mówi mi nic o tym, czy kod jest wcięty.
Clockwork-Muse
12

Kod wcięty musiał pojawić się przed 1958 r., Ponieważ był obecny - ale nie wszechobecny - w LISP i ALGOL. Najwcześniej mogę zlokalizować COMTRAN, który został wprowadzony w 1957 roku, chociaż mogę znaleźć tylko instrukcję z 1960 roku (patrz strona 90ish). To wcięcie różni się od współczesnej koncepcji, ponieważ COMTRAN nie ma struktury blokowej większości języków od czasu ALGOL, ale myślę, że nadal powinien się liczyć.

Podejrzewam, że tak naprawdę nie jest to pierwszy przykład, ale nie mogę go wcześniej zlokalizować.

Zaktualizowano

Przyszło mi do głowy, że w znacznym stopniu wcięcie prawdopodobnie poprzedza programowanie. Wcięcia były prawdopodobnie używane na listach instrukcji, zanim ktokolwiek pisał programy komputerowe. Niestety nie mogę znaleźć dobrych przykładów tego.

Jack Aidley
źródło
-1

Rozszerzenie komentarza Rossa Pattersona - kompilatory COBOL (lub przynajmniej kompilatory IBM, których użyłem w mojej karierze przed otwarciem systemów) wymusiły wcięcia (obszary, o których wspomina „A” i „B”). Jeśli którykolwiek z elementów, które musiały znajdować się w tych obszarach, nie został umieszczony dokładnie, kod nie powiedzie się Jednak poza tym nie było wymagane żadne specyficzne wcięcie - co często prowadziło do chwytania podczas modyfikowania kodu innego programisty, którego styl wcięcia był inny niż twój - etykieta sugerowałaby, abyś postępował zgodnie z istniejącym wzorem, ponieważ zachował pokój wśród rówieśników; dodatkowo różne style w tym samym źródle mogą być irytujące, co przypomina wygląd Tetris.

Minęły lata, odkąd myślałem o języku COBOL i jego wcięciach - dziękuję, że zadałeś pytanie i zapewniłeś małą podróż do przeszłości!

Marty

Moc Marty
źródło