Dlaczego formatowanie bogatego kodu nie jest częstsze?

29

Czytałem Code Complete, aw rozdziale poświęconym układowi i stylowi przewidywał, że edytory kodu użyją pewnego rodzaju formatowania tekstu sformatowanego. Oznacza to, że zamiast kodu wyglądającego tak

Procedure ResolveCollisions
{ Performs a posteriori collision resolution through spatial partitioning algoritm }
(
  CurrentMap : SpriteContext,
  PotentialColliders: SpriteList
)
var Collider  : Sprite, 
    Collidee  : Sprite, 
    Collision : SpriteCollision
begin
  DoStuff();
end.

może wyglądać mniej więcej tak:

Procedura ResolveCollisions

Wykonuje rozdzielczość kolizji a posteriori za pomocą algorytmu podziału przestrzennego

Parametry

  • CurrentMap : SpriteContext
  • PotentialColliders : SpriteList

Zmienne lokalne

  • Collider : Sprite
  • Collidee : Sprite
  • Collision : SpriteCollision
    DoStuff();

Widziałem kolorowanie i podświetlanie składni, a nawet kolorowanie w nawiasach, ale nic, co wyglądałoby tak w rzeczywistym kodzie. Zastanawiałem się, czy coś takiego kiedykolwiek istniało, a może zdecydowano, że nie przyniesie on wystarczających korzyści lub że był to całkowicie zły pomysł.

Czy ktoś z was widział już wcześniej tak sformatowany kod lub wiedział, czy pomysł był kiedykolwiek rozważany i ostatecznie odrzucany?

Peter Olson
źródło
8
Widziałeś cweb Knutha? www-cs-staff.stanford.edu/~uno/cweb.html
greyfade
12
Więc teraz chcesz Word jako edytor IDE?
5
nigdy nie walczyłeś ze Wordem, gdy robi on dziwne formatowanie, którego po prostu nie można się pozbyć. Przykład zakłada, że ​​edytor ukrywa niektóre części faktycznego kodu źródłowego. Jako widz, na pewno byłoby miło, myślę, że jako redaktor proszę ... zmiłuj się nad moją biedną duszą!
Newtopian,

Odpowiedzi:

38

Nie ma technicznego powodu, abyś nie mógł. Jeśli edytory tekstu potrafią wyróżniać składnię, równie łatwo mogą zmienić inne aspekty wyświetlania, aby podświetlić kod.

Jednak jedną rzeczą jest, aby to, co jest pisane, zmieniało kolory, gdy redaktor domyśla się, co piszesz. Nagłe zmienianie rozmiaru tekstu i przeskakiwanie podczas pisania byłoby naprawdę nieznośne.

Jednak w przypadku wyświetlania „statycznego” kodu można łatwo upiększyć kod źródłowy. Na przykład weź dowolny przyzwoity konwerter source-> html i dodaj dowolne rozmiary czcionek i style do arkuszy stylów, a otrzymasz bogaty sformatowany kod.

Jaka jest nazwa?
źródło
14

Prosty powód: niezależność edytora / narzędzia.

Gdy uczynisz kodowanie „bogatym” - będzie ono powiązane z edytorem, którego użyłeś - lub z tymi, które potrafią zrozumieć bogaty kod. Wszystkie inne edytory, które nie są w stanie obsłużyć bogactwa, pokażą bełkot.

W tym samym stylu bogaty kod nie działałby dobrze z narzędziami różnicowymi. Na przykład, jeśli właśnie zmieniłeś formatowanie, diff pokaże różnicę, ale nie jest to nawet różnica, o którą najmniej się martwisz.

A co z kontrolą wersji? Jak by to powiedzieć, aby ignorował wszystkie zmiany w formatowaniu i wyświetlał pliki jako zmodyfikowane tylko wtedy, gdy nastąpiła jakaś „prawdziwa” zmiana.

Wreszcie wydaje mi się, że całym celem bogatego kodu jest czytelność - i do tego uważam, że lepsze (i więcej) komentarze, logiczne nazwy identyfikatorów i spójne wcięcia będą wystarczające.

Zasadniczo tekst programowania najlepiej traktować jako zwykły tekst - to, co widzisz, jest rzeczywistością. ( co jest również zgodne z Pythońską ideą jawnego lepszego niż niejawnego )

treecoder
źródło
28
To niekoniecznie prawda. Jeśli redaktorzy potrafią wyróżniać składnię, to na pewno potrafią „pogrubić” lub „
zmienić
4
W tym celu można skonfigurować Emacsa, ale zmiana rozmiaru czcionki IMO byłaby stratą miejsca na ekranie.
kevin cline,
4
Gdyby autor musiał wykonać formatowanie ręcznie, byłoby to stratą czasu. Najwyraźniej edytor tekstu zrobiłby to automatycznie, a może możesz użyć pewnego rodzaju arkusza stylów.
Peter Olson,
7
@greegit: redaktorzy nie pozostawiają informacji o kolorach w plikach źródłowych, gdy są z nimi zrobione, nie muszą pozostawiać innych znaków formatowania, mogą je ponownie generować na żądanie. Nie ma zasadniczej różnicy między podświetlaniem składni a formatowaniem składni. Jeśli narzędzia mogą automatycznie tworzyć diagramy klasowe i diagramy UML z kodu źródłowego, narzędzie może od czasu do czasu pogrubić różne elementy.
whatsisname
9
Ta odpowiedź z pewnością ma wiele pozytywnych opinii za niepoprawność.
Jordan
11

Być może bogato sformatowany kod się nie przyłapał, ponieważ nie jest to taki fajny pomysł. Osobiście nie podoba mi się to, co widzę w podanym przez ciebie przykładzie. Używam kolorowania i podświetlania składni, ale to formatowanie jest zbyt skomplikowane i zbyt odbiega od sposobu, w jaki przywykłem do pisania i pisania kodu.

Mike Nakis
źródło
11

Dlaczego nie istnieje? Nie ma na to zapotrzebowania / potrzeby.

Obecni redaktorzy są w stanie zaspokoić potrzeby programistów dzięki podświetlaniu składni i innym drobnym opcjom stylistycznym. Czy to już nie jest „tekst sformatowany”?

użytkownik478148
źródło
7
+1 za brak popytu. Nie chciałbym tak kodować. Wygląda na to, że piszę ten raport TPS w programie Word, a nie piszę kodu.
1
@Glenn Nelson: Zgadzam się. Unikam Worda nawet do pisania normalnych dokumentów, jeśli mogę (zamiast tego używam LaTeXa). Lubię podświetlanie składni, ale bogate formatowanie kodu byłoby dla mnie naprawdę nachalne.
Giorgio
5

To już istnieje dla LaTeX w trybie AucTeX dla Emacsa. Tytuły sekcji mają większy rozmiar, indeksy górne i dolne są odpowiednio zmieniane, a nawet możesz mieć małe podglądy matematyki (i ewentualnie innych środowisk, takich jak Algorytmic).

Jest to w porządku dla LaTeX-a, ponieważ mapowanie kodu na wyjście jest zwykle znacznie prostsze niż w innych programach; Myślę, że w ogóle nie podobałoby mi się to w przypadku języków ogólnego przeznaczenia.

Inną rzeczą Emacs może zrobić, to zastąpić symbole jak ->i forallz i odpowiednio w Haskell. Nie ma powodu, aby tego rodzaju rzeczy nie można było rozszerzyć na formatowanie, jak sugerujesz, z wyjątkiem tego, że w Haskell nie jest to wcale konieczne.

Tikhon Jelvis
źródło
2

Jakiś czas temu zadałem to pytanie dotyczące formatowania kodu, pytając, czy programiści chcieliby sformatować swój kod podczas pisania.

Moje pytanie dotyczyło tylko aspektu wcięcia w formatowaniu, ale niektóre odpowiedzi mogą ogólnie dotyczyć formatowania kodu. Ogólny sentyment w odpowiedziach sugeruje, że programiści są przeciwni utracie absolutnej kontroli nad sposobem reprezentowania ich kodu.

Moje osobiste doświadczenia były zupełnie inne. Chociaż zwykle używam publicznie dostępnych narzędzi, czasami muszę pisać XSLT we własnym edytorze na zamówienie. Ten edytor formatuje kod podczas pisania, wcinając lewy margines, dzięki czemu nie mam problemów z niechcianymi spacjami (znaczącymi w XSLT) i pozwala mojemu kodowi zawijać słowa, a jednocześnie nadal formatować. Uważam to za całkiem naturalne, styl formatowania jest kontrolowany przez kontekst i pozycję samych linii (doświadczenie jest szczególnie satysfakcjonujące, gdy używa się urządzeń wejściowych wrażliwych na dotyk).

Jeśli XSLT nie jest dobrze wyważony, formatowanie faktycznie pomaga pokazać, gdzie leży problem. Dostosowanie przesunięcia kodu w poziomie zajęło trochę czasu podczas pisania, ale nie jest to dla mnie rozproszeniem. Odkryłem jednak, że funkcje formatowania, które miały wpływ na pionowe odstępy mojego XSLT, sprawiły, że edytor był prawie bezużyteczny, więc je wyłączyłem.

Wracając do twojego pytania, myślę, że powodem, dla którego bogate formatowanie kodu nie jest bardziej powszechne, jest to, że zmiana percepcji w świecie programowania zajmuje dużo czasu. Nadejdzie jego czas, być może zbiegający się z czasem, w którym edycja kodu odbywa się głównie bez klawiatury.

pgfearo
źródło
2

Również w więcej niż kilku językach (Haskell, Ruby, Python, Erlang, CoffeeScript i kilka innych) wcięcie jest ważne. Więc jeśli zmieniasz rozmiary czcionek, może być bardzo trudno to rozgryźć.

Głównie jego tradycja. Programuję zawodowo od prawie 20 lat i podejrzewam, że doprowadziłoby mnie to do szału. Piszę książki w Emacsie lub VI z docbook, więc nie jestem fanem WYSIWIG

Zachary K.
źródło
2

Robi to CWEB Knutha, ale działa tylko dla C / C ++ i Pascala. - Powinieneś na to spojrzeć… jest całkiem fajnie. Istnieją dwa programy: ctanglei cweavektóre łączą / oddzielają pliki CWEB odpowiednio w TeX i C.

bardzo głupie
źródło
1
nowebdziała z prawie każdym możliwym językiem. Istnieje również wiele wyspecjalizowanych systemów programowania, które są dostępne dla wielu innych języków (lhs i podobnych). Niektóre języki miały możliwość składu już od początku lat 60. - patrz en.wikipedia.org/wiki/Stropping_(programming)
SK-logic
3
@ SK-logic - Arrgh, proszę nie przypominaj mi o horrorze, jakim jest umiejętne programowanie . Przekształcanie każdej szybkiej recenzji kodu w żmudną i długotrwałą recenzję dokumentu , krytykowanie każdego ostatniego zwrotu wyrażenia i zagubionego przecinka. Dlaczego niektóre części przemysłu obronnego uważały to za dobry pomysł, którego nigdy się nie dowiem. Nie sądzę, że edytory WYSIWYG poprawiłyby to.
Mark Booth,
@Mark Booth, wszystko może przerodzić się w horror, jeśli zrobione źle. Programowanie piśmienne jest doskonałym narzędziem w połączeniu z odpowiednią dyscypliną. Nie mam pojęcia, jak mógłbym opatrywać adnotacje kodem złożonymi formułami, wykresami i wykresami w formacie TeX bez umiejętnego programowania. A kod nie będzie bardziej czytelny i łatwy do utrzymania bez takich adnotacji.
SK-logic,
2

Czy ktoś z was widział już wcześniej tak sformatowany kod lub wiedział, czy pomysł był kiedykolwiek rozważany i ostatecznie odrzucany?

Pewnie. Xcode obsługuje style poza prostym kolorem dla różnych składni:

kod źródłowy ze stylem tekstu

Minęło sporo czasu, odkąd go użyłem, ale myślę, że Metrowerks CodeWarrior również wspierał stylizowany tekst, i to było ponad 10 lat temu.

Jednak nie chcesz przesadzać ze stylami - każdy tekst, kod źródłowy lub inny sposób może być trudniejszy do odczytania, gdy style różnią się zbyt mocno. W szczególności myślę, że mieszanie rozmiarów jest rozpraszające, a wszystko, co powoduje, że kolumny nie ustawiają się w linii, jest denerwujące. Jest powód, dla którego większość programistów nadal używa czcionek o stałej szerokości.

Innym pytaniem jest, czy stylizowany tekst powinien być używany jako część samej składni języka. Na przykład, czy kompilator powinien wykorzystać fakt, że jakiś tekst jest stylizowany na określony sposób, aby określić, że tekst jest deklaracją funkcji? Na początku może się to wydawać szalone, ale języki takie jak Python i Fortran już używają wcięć jako składni. Niemniej jednak myślę, że bardziej prawdopodobne jest, że nadal będziemy postrzegać styl oparty na składni, a nie na odwrót. Istnieje wiele korzyści płynących z możliwości używania zwykłego tekstu (prostsze kompilatory, niezależność platformy, preferencje programisty), a inne tradycje ewoluowały, aby kod był czytelny przy braku stylów (wcięcia, puste linie, znaki znaczników i funkcje edytora, takie jak składanie kodu i menu nawigacyjne).

Caleb
źródło
1

Myślę, że bogate formatowanie kodu źródłowego nie jest zbyt popularne, ponieważ jest przeznaczone do wprowadzania informacji, gdzie struktura i znaczenie są znacznie ważniejsze (i łatwiejsze do wpisania). Czcionka, dodatkowe specjalne symbole i białe spacje po prostu dodają niepotrzebnego hałasu wizualnego. Może to być odpowiednie dla wygenerowanej dokumentacji.

Nigdy nie kończy się wojna płomieni na ten sam temat w składaniu świata między tymi, którzy preferują edytory WYSIWYG (jak MS Word), a systemami takimi jak TeX (LaTeX).

Zasadniczo nie ma ostatecznej odpowiedzi. Wszystko zależy od narzędzi, przypadków użycia i osobistych preferencji.

Oleg Kolosov
źródło
1

Narzędzia takie jak Doxygen lub JavaDoc już formatują bogate formatowanie tekstu. Dodają również hipertekst do celów przeglądania. Nie trzeba wstawiać specjalnych tagów do podstawowego formatowania.

To jednak nie jest WYSIWYG.

mouviciel
źródło
0

Boję się powiedzieć, że to istnieje.

W przeszłości pracowałem nad jakimś kodem Centura (znanym również jako Gupta lub SQL / Windows - stary kod „ 4GL ”). Naprawdę nie było możliwe edytowanie kodu Century w standardowym edytorze, takim jak Notatnik, do wymaganego poziomu formatowania.

Chociaż może się wydawać, że dobrym pomysłem byłoby sformatowanie takiego pliku źródłowego, uważam, że rozwijanie go jest dość restrykcyjne i bolesne.

Ponadto formatowanie często powodowało problemy podczas scalania kontroli źródła.

Michael Arnell
źródło
0

Oprócz innych odpowiedzi chciałbym podkreślić, że oprócz trudności technicznych związanych z używaniem bogatego formatowania, jest to również przedmiot osobistych preferencji.

Jeśli edytujesz zwykły tekst, możesz wybrać czcionki i kolory, które ci się podobają, i są one ustawiane automatycznie. Jeśli chcesz edytować tekst sformatowany, co jeśli nie lubisz określonych kolorów i czcionek ustawianych ręcznie?

Korwin
źródło
1
Nie sądzę, że to prawda. Jestem prawie pewien, że jeśli programiści użyliby tekstu sformatowanego, byłby generator, który dokonałby semantycznego znacznika opisującego strukturę programu, a następnie dostosowywany przez użytkownika arkusz stylów zawierający informacje o czcionce i kolorze.
Peter Olson,
@PeterOlson nie będziesz w stanie czytać programów bez arkusza stylów, ponieważ po prostu nie rozpoznasz oznaczenia ciągów tekstowych. Oznacza to, że nikt nie może pokazywać ani pisać niczego podczas osobistego spotkania. Przeciwnie, obecnie czcionki i kolory są w pełni opcjonalne i wymienne bez szkody dla znaczenia.
corvinus,
0

Myślę, że dzieje się tak, ponieważ nikt jeszcze nie rozdzielał odczytu kodu i pisania kodu. Przynajmniej nie staje się głównym nurtem. Czasami musisz przeczytać kod, którego dotknąłeś dawno temu lub kod stworzony przez innych programistów. Prawdopodobnie będziesz musiał dużo czasu poświęcić na zmianę jednego bajtu w tym źródle. Może to być tryb „odczytu”, w którym można zrobić wszystko, co jest potrzebne do łatwiejszego zrozumienia (rozmiar czcionki, formatowanie, podskrypt, superskrypt itp.). Gdy będziesz gotowy, redaktor może przełączyć się w tryb „zapisu” i być mniej restrykcyjny i bardziej przestrzegać „zasady najmniejszego zaskoczenia”

Maksee
źródło