Jeden z moich profesorów mówi „składnia jest interfejsem użytkownika języka programowania”, języki takie jak Ruby mają doskonałą czytelność i stale się rozwijają, ale widzimy wielu programistów produktywnych w C \ C ++, więc dla programistów naprawdę ważne jest, aby składnia powinno być dopuszczalne?
Chciałbym poznać Twoją opinię na ten temat.
Oświadczenie: Nie próbuję zaczynać kłótni. Myślałem, że to dobry temat dyskusji.
Aktualizacja: To okazuje się być dobrym tematem. Cieszę się, że wszyscy w tym uczestniczycie.
programming-languages
syntax
Saif al Harthi
źródło
źródło
Odpowiedzi:
Tak. Jeśli masz wątpliwości, weź APL , J , Brainfuck , a nawet prosty i prosty Lisp lub Forth, i spróbuj zrozumieć dowolny nie całkiem trywialny program. Następnie porównaj np. Do Pythona.
Następnie porównaj ten sam Python (lub Ruby, a nawet C #) z rzeczami takimi jak Cobol lub VB6.
Nie próbuję powiedzieć, że składnia owłosiona jest zła, a składnia podobna do języka naturalnego jest dobra we wszystkich okolicznościach. Ale oczywiście składnia robi ogromną różnicę. Podsumowując, wszystko, co możesz napisać w najpiękniejszym języku programowania, które możesz również napisać jako program maszyny Turinga - ale zwykle nie chcesz, prawda?
źródło
W praktyce myślę, że to ma znaczenie. Czytelność została już omówiona powyżej. Innym problemem może być liczba naciśnięć klawiszy potrzebnych do wyrażenia pomysłu / algotithm? Kolejną kwestią jest to, jak łatwo literom ciężko jest uchwycić ludzkie oko i jak wiele psot mogą wywołać.
Uznałem również za przydatne w niektórych kontekstach analizowanie i / lub generowanie fragmentów kodu za pomocą innego programu komputerowego. Trudność w parsowaniu języka i / lub generowaniu poprawnego kodu wpływa bezpośrednio na to, ile wysiłku wymaga przygotowanie / utrzymanie takich narzędzi.
źródło
Wierzę, że twój profesor odnosi się do cukru syntaktycznego .
Profesor sugeruje więc, że każdy kod / składnia napisana w jednym języku programowania może być wyrażony w innych językach w tym samym lub nawet w tym samym języku.
Robert Martin, odwołując się do twierdzenia o programowaniu strukturalnym , wyodrębnił, co programiści zasadniczo robią z językami programowania podczas swojego przemówienia na RailsConf 2010: Robert Martin (wideo z YouTube'a , zobacz po 14 minutach, chociaż polecam całą rzecz):
To wszystko robią programiści, od jednego języka programowania do drugiego, tylko w innej składni lub interfejsie użytkownika (UI). Chyba właśnie do tego zmierza twój profesor, jeśli mówi abstrakcyjnie o językach programowania.
Tak w istocie , składnia nie ma znaczenia . Ale jeśli chcesz być konkretny, to oczywiście niektóre języki i składnia lepiej nadają się do niektórych zadań niż inne, dzięki czemu możesz argumentować, że składnia ma znaczenie.
źródło
Tak i nie.
Składnia obejmuje kilka różnych aspektów.
Czytelność została już wspomniana.
Ekspresyjność to ciekawy przypadek. Jako przykład wykorzystam przekazywanie funkcji, ponieważ jest to punkt przegięcia bólu semantycznego / składniowego.
Weźmy na przykład C ++. Po tej modzie mogę utworzyć funkcję pierwszego rzędu:
Ten szczególny idiom jest powszechnie używany w elementach programowania Stepanova .
Z drugiej strony, mogę naśladować go w Common Lisp coś jak to :
Lub w Perlu -
Lub w Pythonie -
Wszystkie mają - zasadniczo - tę samą treść semantyczną, chociaż przykład w C ++ niesie metadane typu. Który język najlepiej wyraża przekazanie funkcji wyższego rzędu? Common Lisp ledwo tworzy odmianę składniową. C ++ wymaga utworzenia klasy tylko do „przenoszenia” funkcji. Perl jest dość prosty w kwestii różnicowania. Podobnie jak Python.
Które podejście najlepiej pasuje do dziedziny problemowej? Które podejście najlepiej wyraża myśli w twojej głowie z najmniejszym „niedopasowaniem impedancji”?
Parsowalność jest - moim zdaniem - dużą sprawą. W szczególności odnoszę się do zdolności IDE do parsowania i rąbania języka bez popełniania błędów. Ponowne formatowanie jest przydatne. Języki rozdzielane znakami zwykle parsują się dobrze - ruby / c / pascal itp.
Zastanów się jednak - w każdym poważnym języku stworzono główne systemy wszelkiego rodzaju, aby rozwiązać rzeczywiste problemy. Chociaż składnia jest barierą do wyrażania niektórych rzeczy, jest barierą umożliwiającą obejście problemu. Równoważność Turinga i tak dalej.
źródło
Składnia na pewno ma znaczenie, chociaż zauważasz ją częściej, gdy jest nieintuicyjna i zachęca do błędów. Na przykład niesławny żart „ostatniego błędu świata”:
źródło
if(RED = AlertCode)
Nigdy nie należy kompilować, ponieważ RED jest stały (lub powinien być!)LaunchNukes
procedury i nigdy jej nie wywołuje. Kryzys zażegnany!RED
jest. JeśliLaunchNukes()
wynosi 0, to nigdy nie zostanie wywołany.Składnia ma znaczenie i mogę podać dwa dodatkowe przykłady: Dylan, czyli Lisp o bardziej konwencjonalnej składni, i Liskell, który jest Haskell o składni podobnej do Lisp. W każdym przypadku zaproponowano wariant języka, który miał dokładnie taką samą semantykę, ale radykalnie różną składnię.
W przypadku Dylana sądzono, że porzucenie wyrażeń s na rzecz czegoś bardziej konwencjonalnego pomogłoby przyciągnąć większą liczbę programistów. Okazało się, że składnia nie była jedyną przeszkodą dla programistów w korzystaniu z Lisp.
W przypadku Liskell sądzono, że użycie wyrażeń s pozwoli na łatwiejsze użycie makr. Okazało się, że makra naprawdę nie są potrzebne w Haskell, więc eksperyment też nie zadziałał.
Oto rzecz: jeśli składnia nie ma znaczenia dla nikogo, żaden eksperyment nie zostałby wypróbowany.
źródło
Odpowiedzią może być rozdzielenie tego, co „ważne” na czynniki komputerowe i ludzkie . Składnia składa się z wielu ludzkich czynników:
Jeśli chodzi o komputer, jedynym problemem związanym ze składnią jest to, czy istnieją niejasności, które należy rozwiązać, oraz ile czasu zajmuje tokenizacja / parsowanie kodu po kompilacji / interpretacji - i to tylko w przypadku tych ostatnich, w których narzut jest parsowaniem.
Być może dlatego zawsze otrzymasz odpowiedź „tak i nie” na to pytanie - ponieważ są dwa aspekty.
źródło
Bez składni nie mielibyśmy wspólnego „szablonu”, z którego można by komunikować na poziomie ludzkim intencję bloku kodu. Składnia zapewnia wspólną platformę, z której można kompilować kompilatory; metody mogą być współużytkowane; konserwacja może być uproszczona.
źródło
Myślę, że tak naprawdę liczy się dostęp do interfejsu API i dostępność funkcji niskiego poziomu (takich jak kontrola pamięci i blokowanie) w razie potrzeby. Większość innych języków zawiera te funkcje. Problem polega na tym, że gdy potrzebujesz dodatkowej funkcjonalności , często musisz użyć języka takiego jak C, aby ją wdrożyć. Jest to kłopotliwe, gdy łączysz język C z używanym językiem.
Mimo wszystko, oprócz programowania stron internetowych (i matematyki), zauważyłem, że C / C ++ jest nadal językiem systemu operacyjnego i aplikacji. To jest obsługiwane przez większość czasu dla prawdziwego wielowątkowego, preformującego, wieloplatformowego rozwoju aplikacji. A składnia C jest w porządku. Po prostu bardzo prosty i względnie pełny. Niesamowita składnia tak naprawdę nie ma znaczenia. Dostępność mocy i interfejsu API Wszyscy potrzebujemy interfejsu z kodem innych osób (który jest w większości napisany w C lub jego pochodnych).
źródło
Składnia zdecydowanie ma znaczenie. Jest niezwykle cenny, jeśli składnia języka jest wystarczająco elastyczna, aby umożliwić utworzenie wygodnego i czytelnego języka specyficznego dla domeny dla aplikacji. Jeśli masz co do tego wątpliwości, wyobraź sobie, że możesz robić problemy z algebrą w prozaicznej łacinie, tak jak miało to miejsce przed XVIII wiekiem, lub wyobraź sobie, że wykonujesz rachunek różniczkowy bez znanego obecnie zapisu Leibniza. Oczywiście, tekst rachunku różniczkowego jest nieczytelny dla początkującego, ale dzięki praktyce możemy użyć rachunku różniczkowego i notacji Leibniza, aby szybko rozwiązać klasę problemów, które wymagały stron matematyki metodami klasycznymi. Programowanie to tylko kolejny kawałek matematyki. Wygodny zapis, blisko dziedziny problemowej, może mieć ogromną różnicę w wydajności.
źródło
Oto program, który oblicza wydział 6:
Składnia jest minimalna:
Wydaje się, że istnieje powszechne przekonanie, że składnia utrudnia język. Jak to często bywa przy powszechnych przekonaniach, jest dokładnie odwrotnie.
Zauważ, że składnia LISP jest czytelna (jeśli w ogóle), ponieważ ma dużo więcej składni niż powyższe. Jeśli więc fani LISP powiedzą ci, że „składnia nie ma znaczenia”, poproś o konsekwencję i wypróbuj rachunek SKI. Będą musieli przyznać, że trochę składnia wcale nie jest taka zła.
źródło
Nie sądzę, żeby to miało znaczenie poza osobistymi preferencjami. Wszystkie rzeczy (wydajność, możliwości itp.) Są równe, wtedy rozumiem, dlaczego ktoś przykłada większą wagę do składni języka, ale decyduje się na pominięcie wydajności języków takich jak c / c ++ lub innego języka lepiej dostosowanego do tego zadania z powodu składnia wydaje się złym pomysłem dookoła.
źródło
Tak, składnia ma znaczenie, chociaż tak naprawdę tylko dla czytelności. Porównać:
(Tak, to jest Python) z
(Tak, to właśnie język, który właśnie wymyśliłem) Oba zrobiłyby dokładnie to samo, w ten sam sposób, ale składnia jest inna, a Python jest łatwiejszy do odczytania. Tak, tak, składnia zdecydowanie ma znaczenie. Nawet „cukier syntaktyczny” ma znaczenie.
Jest łatwiejszy do odczytania niż
źródło
Tak, jasne.
Jeśli chcesz zainicjować wielki płomień, zapytaj ludzi, gdzie umieszczają bransoletę otwierającą w językach podobnych do C. mam na myśli
VS
a nawet VS
A to tylko ten sam język! Zapytaj ich również o spacje, gdzie je umieszczają (nazwa funkcji i bransoleta, operatory itp.).
1000 odpowiedzi jest gwarantowanych!
źródło
Składnia ma znaczenie. Jednak w dzisiejszych czasach powiedziałbym, że ma to znaczenie prawie całkowicie ze względu na czytelność, a nie tak naprawdę pod względem ilości wymaganych naciśnięć klawiszy. Dlaczego?
To powiedziawszy, jeśli jest zbyt szczegółowe, może dojść do punktu, w którym wpływa na czytelność. Wolałbym zobaczyć coś takiego:
Do:
...każdego dnia!
źródło
Składnia ma znaczenie dla tych, którzy się jej uczą, im niższa bariera wejścia, tym bardziej popularny może być początkowo język. Ale jeśli język jest trudny lub niemożliwy do wyrażenia siebie w sposób bogaty i zwięzły, zacznie tracić na popularności.
Bardzo zwięzłe i nieprzezroczyste (Perl) jest tak samo złe, jak nadmiernie gadatliwe i wordy (AppleScript).
Konieczna jest równowaga, niższa bariera wejścia, wysoka wydajność i łatwa konserwacja.
źródło
Inną rzeczą do rozważenia jest to, że języki programowania z ładniejszą składnią są łatwiejsze do analizy, dzięki czemu kompilator jest łatwiejszy do pisania, szybszy i mniej podatny na błędy.
źródło
parse.y
Ruby się nie zgadza. Istnieje powód, dla którego każda z 7 gotowych obecnie lub wkrótce gotowych do produkcji implementacji Ruby używa tego samego analizatora składni, a każda implementacja Ruby, która kiedykolwiek próbowała opracować własny analizator składni, zawiodła.Krótko mówiąc: składnia jako taka nie ma znaczenia. Semantyka, którą możesz wyrazić za jej pośrednictwem, ma znaczenie.
źródło