Spójrz tutaj: typowa święta wojna na kartach kontra spacje .
Teraz spójrz tutaj: elastyczne tabstopsy . Wszystkie problemy rozwiązane i dodano kilka bardzo przydatnych nowych zachowań.
Czy elastyczne tabstopy są nawet wspomniane w dyskusji o kartach i spacjach? Dlaczego nie? Czy wady elastycznego pomysłu tabstop są tak poważne, że nikt nigdy nie wdrożył ich w popularnym edytorze?
EDYCJA : Przepraszam za zbyt duży nacisk na „dlaczego nie są wymienione”. Nie tak naprawdę zamierzałem; to pytanie jest prawdopodobnie nawet nie na temat. Chodzi mi o to, jakie są największe wady tego rozwiązania, które uniemożliwiają szersze przyjęcie ewidentnie korzystnego pomysłu? (w idealnym świecie, w którym wszystko już to obsługuje)
(Okazuje się, że na Microsoft Connect jest już prośba o implementację elastycznych tabstopsów w Visual Studio , a także w Eclipse . Ponadto pojawia się pytanie o inne edytory, które implementują elastyczne tabstopsy )
źródło
Odpowiedzi:
Święte wojny są subiektywne
Elastyczne tabulatory Nicka to niesamowita koncepcja, która mogłaby pomóc wielu ludziom zgodzić się na realne rozwiązanie, choć bardzo wątpię, aby całkowicie zakończył tę Świętą Wojnę: w końcu jest to również kwestia gustu i wielu programistów nie poruszy cale od ich stanowiska w tej sprawie, nawet kosztem kompromisu. To byłby pierwszy powód.
Na przykład wiele osób po stronie „spacji” nadal go nie polubi, ponieważ wymaga to dodatkowej logiki w oprogramowaniu do przyzwoitego renderowania (np. Po prostu przeglądanie zestawu zmian w widoku sieci SCM).
Problemy z implementacją
Ale najbardziej oczywistym powodem jest tylko techniczna bariera wejścia : jest to całkowicie inna koncepcja niż ta, która była wdrażana przez wiele lat (jeśli nie dekady) w IDE i edytorach tekstowych. Wymagałoby to przepisania niektórych z nich, aby przetwarzać linie w zupełnie innym stylu, co utrudnia starszym i większym systemom, które mają większe szanse na głębokie i ścisłe sprzężenie w kodzie przetwarzania linii. Jest jednak o wiele łatwiej zrobić, gdy zaczynasz od zera (myśleć demo Nicka lub Go „s tabwriter pakietu).
Dla osobistej anegdoty pamiętam, jak kiedyś zwracałem się do autora z pytaniem, czy w zasięgu wzroku było wsparcie emacsa, aw tym konkretnym przypadku wspomniał o tym jako o przyczynie braku trywialności. Poprosił także o pomoc ze strony społeczności, aby pomóc we wdrożeniu tej funkcji i udostępnieniu jej masom.
Czy nam zależy?
Trzeci powód jest taki, że niektórzy programiści nie są zbytnio rozwieszeni w tej sprawie i tak naprawdę nie dbają o to, aby dołożyli wszelkich starań, aby wesprzeć ten wysiłek. W większości przypadków konflikt między spacjami a tabulatorami nie jest blokerem biznesowym, więc za tym problemem nie kryje się tak duży dysk.
Jeśli chcesz, będziesz musiał o to walczyć. Co jest możliwe w oprogramowaniu typu open source. A jeśli zmienisz wystarczająco dużo z nich, te o zamkniętym źródle będą musiały ponieść ryzyko utraty części swoich baz użytkowników, jeśli nawet tak niewielka ich część.
Więc jeśli chcesz, pomóż Nickowi.
źródło
Wiele razy musiałem walczyć z edytorem tekstu, aby dokument wyglądał tak, jak chcę, bez jakiejś ukrytej automatycznej reguły kontrolującej rozmieszczenie moich słów. Nie chcę spędzać ani sekundy próbując dowiedzieć się, dlaczego redaktor nalega na umieszczenie tam tych słów.
źródło
Po raz pierwszy o nich słyszałem. Nie jestem pewien, czy są dobrym pomysłem, ale wydają się mało przydatne, ponieważ mamy narzędzia (takie jak wcięcie), które już automatycznie formatują kod.
Co się stanie, gdy otworzę twoje sprytne elastyczne tabulatory w vimie i dokonam edycji? Czy zakładka czyści się automatycznie, czy masz bałagan?
Główne wady, jakie widzę, to prawdopodobnie łamanie różnic, kontrola wersji i brak zgodności z edytorami, które ich nie obsługują. Może to wymagać wielu modyfikacji kodu i są ważniejsze rzeczy niż funkcja „jeszcze jedna karta do formatowania kodu”. W końcu wszyscy możemy korzystać,
indent
co robi wszystkie powyższe, jeśli pamięć służy.źródło
Szczerze mówiąc, nie uważam ich za użyteczne po przejściu początkowego podniecenia. Na przykład i tak nie lubię komentarzy na końcu wiersza - zawsze umieszczam komentarze w osobnym wierszu. Dzięki temu elastyczne zakładki tracą swoje główne zastosowanie.
Następnie możesz oczywiście nadal używać ich do wyrównywania argumentów funkcji (i parametrów) i długich list przypisań.
Ale w przypadku tego pierwszego zwykle wciskam wszystkie argumenty o jeden dodatkowy poziom i to działa ze mną całkiem dobrze:
I nie widzę żadnej potrzeby, by to zmienić.
A jeśli chodzi o wyrównanie zadań, nie robię tego. Umieszczam pojedyncze spacje wokół zadań, to wszystko. Staram się również nie grupować wielu zadań razem, więc rzadko występuje problem z czytelnością.
Podsumowując, elastyczne zakładki są dla mnie absolutnie zerowe . Jest to oczywiście bardzo osobiste preferencje, które mogą się różnić, ale uważam, że działa dobrze i wydaje mi się, że brak wsparcia dla elastycznych zakładek jest spowodowany tym, że inni ludzie myślą podobnie.
Jeśli edytor je zaimplementuje, nadal ich nie użyję.
źródło
Jedną wadą jest to, że nie działa, jeśli chcesz wyrównać na jednej grupie linii, a następnie wcięcia na następnej, ponieważ grupuje tabulatory sąsiednich linii.
Czego chciałem:
W przypadku języków nawiasów klamrowych może to być mniejszy problem, ponieważ zwykle można to rozwiązać, umieszczając nawias otwierający w osobnej linii (jak w animacji), ale w przypadku języków wrażliwych na spacje szybko staje się to problemem, i ostatecznie musisz wrócić do korzystania ze spacji.
źródło
wibble()
miałby tylko jedno wcięcie i dlatego nie byłby dopasowany do argumentów funkcji?Dlaczego po prostu nie wykorzystujemy znaku tabulacji pionowej (VT, ASCII 11) do wskazania zastosowania elastycznych tabstopsów? Nie służy żadnemu celowi w żadnym głównym języku programowania, ale jest analizowany jako ważna biała spacja we wszystkich AFAIK.
Oznaczałoby to, że stosowanie elastycznych tabstopsów nie jest już konwencją zewnętrzną (np. „Ten plik został sformatowany za pomocą elastycznych tabstopsów, włącz je”), ale coś, na co zdecydujesz się indywidualnie.
Istniejące edytory tekstu zwykle wyświetlają glif lub pojedynczą spację zamiast pionowej tabulacji. To nie jest idealne, ale niewielka cena do zapłaty, IMO.
źródło
Nie są wspomniane, ponieważ nie są zaimplementowane w większości IDE edytorów tekstowych; są nowością mało użyteczną w projekcie.
Od czasów kart dziurkowania używane są spacje do układania programów. Pojawiły się tabs i ktoś najwyraźniej pomyślał, że to dobry pomysł (byli w błędzie: p).
W czasach, w których większość współczesnych edytorów może automatycznie konwertować tabulatory na spacje ... są dość bezcelowe.
Konieczność zainstalowania kolejnego narzędzia do radzenia sobie z czymś tak trywialnym, jak tabulacje i spacje, z pewnością nie podoba mi się i nie sądzę, by podobało się to większości moich kolegów.
źródło
Myślę, że przydałyby się, gdyby IDE je wspierały (Microsoft!). Gdy ludzie odkryją, że mogą uderzyć skrzynkami kwiatowymi z boku i mieć je dobrze czytelne, zrobią to. Możesz nagle dodać więcej komentarzy do kodu źródłowego (co może być tylko dobrą rzeczą).
Przypuszczam, że moglibyśmy również dodać „podpowiedzi” do listy „czy dobrze by było, gdyby ...”, aby duże bloki komentarzy można było ukryć i łatwo przeglądać w razie potrzeby. Być może moglibyśmy mieć również bloki komentarzy, które stanowią część dokumentacji (nie rzeczy typu sandcastle, odpowiednie fragmenty dokumentacji czytelne dla użytkownika, które zostały osadzone w kodzie, a nie tylko nagłówki metod)
Wady: może sprawić, że różnice w źródłach będą wyglądać źle, jeśli wiązka linii wyglądałaby tak, jakby zostały zmienione, gdy tak naprawdę zmodyfikowano tylko 1 (jeśli edytor zapisał plik z tabulatorami przekonwertowanymi na spacje). Lub, jeśli elastyczna karta została zaimplementowana z pojedynczym znakiem (lub bardziej prawdopodobne, z 2 tabulatorami), wówczas wyświetlanie źródła poza edytorem może wyglądać źle.
Myślę jednak, że podoba mi się ten pomysł, „tabulator” na końcu linii uelastycznia blok komentarza i odpowiednio ustawia wszystkie komentarze w kolejnych wierszach (które mają odstępy podwójnych tabulatorów).
źródło
Oto, jak to widzę: jeśli większość popularnych narzędzi obsługuje już elastyczne tabstopy, wiele osób będzie ich używać. To samo stało się z trybem nawigacji / edycji vi, z podświetlaniem składni, a później z Intellisense. W każdym przypadku ustalona mądrość była taka, że nie jest użyteczna lub niepotrzebna, ale została wdrożona i wystartowała.
Elastyczne tabstopy mają oczywiście stosunkowo niewielki wpływ. Większość ludzi jest wystarczająco zadowolona ze status quo i dlatego ich to nie obchodzi. Podobne rozumowanie stosuje się w wielu sytuacjach, w których niektórzy ludzie są po prostu zadowoleni z tego, co mają i nie widzą powodu, aby przejść na coś bardziej zaawansowanego. Innymi słowy, największy problem z elastycznymi zaczepami jest taki sam, jak w przypadku każdego innego dobrego pomysłu: musi uzyskać przyczepność.
Ale to nie znaczy, że tej funkcji nie można stopniowo wprowadzać. Każdy język programowania był przyjmowany stopniowo, mimo że cały zespół wymaga nowego kompilatora i nowego środowiska IDE, aby móc z niego korzystać. To samo dotyczy każdej architektury sprzętowej i wielu innych przykładów. Nie jest też tak, że brak integracji z istniejącymi narzędziami jest przeszkodą: to samo dotyczy na przykład „formatu zunifikowanego-różnicowego”, który stopniowo zastępował wcześniej mniej czytelny format, który mimo to był rozumiany przez zautomatyzowane narzędzia (np. łatka). Narzędzia te zostały z czasem zaktualizowane.
Doceniam problemy, o których wspominali inni, ale mimo to na pewno będą zespoły (takie jak moje), które przyjmą to bez wahania, w całości. Narzędzia zewnętrzne, takie jak różnicowanie, scalanie itp. Początkowo nie będą go obsługiwać, ale zrobilibyśmy wszystko, aby zachęcić dostawców do włączenia tej funkcji. Tak zawsze robiono postępy. Wymaga to bólu przez przejściowy okres przejściowy, ale ostatecznie warto.
źródło
Największym problemem, jaki bym z tym spotkał, jest niespójne odstępy w dokumentacji. Wiem, że jako programista denerwowałbym się, widząc pętlę lub stwierdzenie „przy standardowym” wcięciu, a następnie zauważając przy różnych wcięciach. Wiem, że osobiście lubię widzieć wszystkie moje nawiasy klamrowe ułożone w dokumentacji, nie tylko w bloku kodu, na który patrzę.
Ogólnie uważam, że to dobry pomysł, ale osobiście nie podobałoby mi się.
źródło
Właśnie wypróbowałem implementację elastycznych tabstopsów w jEdit, która działa niesamowicie dobrze z językami programowania, w których jestem zaznajomiony (głównie HTML / XML i języki podobne do C). Jednak w przypadku kodu Python oto sposób, w jaki jest renderowany (spacje używane zamiast tabulatorów do zilustrowania, jak rzeczy się wyrównują):
W przypadku języka takiego jak Python, który opiera się na odstępach, jest to przełom, chyba że wyłączysz funkcjonalność zapewnianą przez elastyczne tabstopsy. Edytory takie jak Vim i Emacs sprawiają, że wyłączanie większości funkcji jest proste, jeśli znasz nazwę opcji i sposób jej wyłączenia, ale w przypadku kodu podobnego do powyższego funkcja ta byłaby wymagana.
To powiedziawszy, jest świetny dla x86 ASM, C, C ++, Go, XML, HTML i innych, które nie polegają na białych znakach:
Powiem, że dialekty Lisp, takie jak Scheme, mają własne konwencje, które sprawiłyby, że elastyczne tabstopsy renderowałyby „brzydki” kod. Jeśli zmienię ustawienia tabstop, aby pasowały do konwencji 2 kolumn i wstawię tabstops w nietypowych miejscach (między funkcją a jej argumentami):
vs. bardziej czytelny:
To prawda, że ten nie jest tak zły, jak przykład w Pythonie, ale zdecydowanie zmniejsza czytelność kodu. Chociaż bardzo podoba mi się funkcjonalność podczas kodowania w języku C # lub C ++, nie znoszę tej funkcji podczas pisania w języku takim jak Python lub Scheme, w którym białe znaki są funkcjonalne i / lub pomocne wizualnie. Elastyczne tabstopsy zostały stworzone specjalnie po to, aby były pomocne bez potrzeby oddzielnego narzędzia wcięcia, ale najwyraźniej nie jest to przeznaczone dla wszystkich języków programowania.
źródło
Emacs już obsługuje wcięcia w obecności zamkniętych nawiasów i automatycznie dopasuje wilma do fred . Nie mam pojęcia, dlaczego Eclipse nie robi tego samego. Ok, mam pomysł, ale to nie jest komplementarne.
Możesz sprawić, by Emacs również dopasował komentarz, bez większych problemów, ale AFAIK nikt oprócz ciebie tego nie chciał.
źródło
wilma
podczas wprowadzania zmian, takich jak zmiana długości nazwy funkcji? Jeśli tak, to dość blisko tego, co robią elastyczne tabstopsy.