Więc koduję swoje pierwsze projekty w C ++ i wydaje się, że potrzeba więcej wysiłku, aby uczynić kod „czystym”, niż po prostu działać. Wydaje się, że C ++ „pozwala” na pisanie brzydkiego, ale działającego kodu.
Co skłoniło mnie do myślenia
Czy język programowania może wymuszać czysty kod z założenia? Czy są już takie języki?
Jak to jest uwzględnione jako zasady projektowania w rozwoju / teorii języka programowania? Jakie środki są stosowane?
Odpowiedzi:
Główny wpływ, jaki projekt języka wywiera na „czysty kod”, jest na poziomie syntaktycznym. Języki z dużą ilością skrótów i niejasnych operatorów (Perl / APL) nadają się do „brudnego” kodu, podczas gdy języki z mniejszym zestawem elementów (powiedzmy Python) nadają się do czystszego kodu.
Semantyka jest jednak zupełnie innym zwierzęciem. Nie ma sposobu, aby wymusić, aby semantyka języka była używana w czysty sposób, szczególnie dlatego, że jako kompilator nie możesz wiedzieć, co użytkownik tego języka próbuje osiągnąć. Potężne narzędzie to po prostu - potężne narzędzie na dobre i na złe.
Ostatecznie semantyka jest ważniejsza niż składnia. Jest to także część, którą najtrudniej jest odgadnąć jako programistę serwisowego (np. „Co tak naprawdę oznacza ten kod? Widzę, co robi…”).
W związku z tym powiedziałbym, że nie ma projektu wymuszającego czysty kod, ale można napisać prostą składnię z czystą semantyką, która to ułatwia. Na lepsze lub gorsze, czysty kod jest przede wszystkim kwestią wiedzy programistów, motywacji, dyscypliny i umiejętności.
źródło
Języki mogą zmusić lub zachęcić programistów do zajęcia się pewnymi klasami błędów, co jest częścią definicji czystego kodu. Na przykład różne języki wykonują stosunkowo przyzwoitą pracę polegającą na adresowaniu:
To jednak tylko część drogi, ponieważ czysty kod dotyczy przede wszystkim komunikacji międzyludzkiej . Języki programowania naprawdę mają tylko jedną dźwignię, która im w tym pomaga, i to jest ich moc ekspresji . To naprawdę trudny termin do zdefiniowania, ale w zasadzie dobrym programistom łatwiej jest pisać czystszy kod w bardziej wyrazistych językach. Dostępnych jest więcej narzędzi do łatwego wyrażania algorytmu w terminach, które dobrze komunikują się z innymi ludźmi. Nie zrozum mnie źle, możesz napisać czysty kod w ( prawie ) dowolnym języku programowania. To tylko niektóre języki ułatwiają i dają lepszy wynik względny.
Jednak nie możesz po prostu ustawić ekspresji, a magicznie ludzie zaczną pisać lepszy kod. W przypadku większości programistów dajesz im więcej pokręteł do zmiany w ich języku, a oni nie będą wiedzieli, jak ich używać poprawnie, więc ich kod kończy się naprawdę gorzej. Aby poprawić jakość kodu, potrzebujesz dyscypliny i dobrego mentoringu. Nie ma srebrnych kul.
źródło
Do pewnego stopnia. Wiele języków jest specjalnie zaprojektowanych, aby zachęcać do niektórych form czystego kodu zgodnie z ideałami projektantów języków. Z pewnością możliwe jest pisanie brzydkiego i niezrozumiałego kodu w dowolnym języku, ale niektóre języki starają się go zniechęcić.
Na przykład Python zmusza cię do wcięcia bloków zgodnie ze strukturą semantyczną języka, podczas gdy wiele innych języków pozwala na wcięcie całkowicie losowo lub wcale. To przykład języka aktywnie promującego pewien ideał czystości.
źródło
Jeśli potrafisz to skwantyfikować, możesz stworzyć język, który może go zoptymalizować.
Chociaż nie znam żadnego konkretnego języka, który egzekwowałby zasady „czystego kodu”, gliniarze działający na kompilacji są dość powszechni.
Głównym powodem, dla którego jest to odrębny krok od upieczenia w języku, jest w dużej mierze funkcja priorytetów. W najlepszym interesie języka programowania jest zapewnienie programistom największej elastyczności w celu uzyskania jak najszerszego poziomu adopcji. Istnieje tak wiele różnych języków programowania i DSL, które sztucznie ograniczają bazę użytkowników poprzez wybredne podejście i opinie na temat dopuszczalnych danych wejściowych, które prawdopodobnie mogłyby utrudnić szersze zastosowanie.
Na przykład zmuszanie ludzi do pisania nie leży w najlepszym interesie C #
zamiast
Ale warcaby stylu można uznać za wybredne, ponieważ do tego właśnie zostały zaprojektowane.
Tak więc, aby odpowiedzieć na pytanie
mój nacisk
Oczywiście, o ile podasz mocną definicję tego, co oznacza „czysty kod”.
Na przykład mogę zdefiniować „czysty kod”, co oznacza:
i możesz nie zgadzać się z niektórymi lub wszystkimi tymi konwencjami, ale pod koniec dnia są one policzalne i można je egzekwować programowo.
źródło
Nie, nie w sensie, który opisujesz. Wykrywanie „brzydoty” nie może być wykonane automatycznie!
Jednak projektanci języków mogą robić rzeczy, aby zachęcić do dobrego kodu (nie chcę mówić „czysty”, ponieważ czasami dobry, bezpieczny kod jest również długi i „brzydki”). Na przykład projektanci języka Rust przyjrzeli się rzeczom, które zdyscyplinowali programiści C ++ (np. Nadając wartościom przypisanym do sterty pojedynczego „właściciela”), i ułatwili wykonanie niektórych z tych rzeczy. Obejmuje to udostępnienie narzędzia do sprawdzania typów, za pomocą którego można sprawdzić, czy nie popełniono pewnych typowych błędów.
Powiedziałbym, że dobry projekt językowy jest często reaktywny: projektanci patrzą na to, co robią dobrzy programiści, i starają się, aby było to łatwiejsze i „ładniejsze”.
źródło