Często widziałem ludzi walczących o to, że ich ulubiony język jest „mocniejszy” niż inni. Jeśli chodzi o opis języka programowania, rozumiem, czym jest język obiektowy lub czym jest język dynamiczny, ale nadal nie mogę zrozumieć, czym jest język „mocny”. Jakie są Twoje myśli?
programming-languages
rzemieślnik
źródło
źródło
Odpowiedzi:
Nie możemy zdefiniować, czym jest „potężny” język bez uprzedniego zdefiniowania słowa „potężny”.
Dosłowne określenie mocy byłoby „siła” i myślę, że wszyscy możemy się zgodzić, że zdecydowana większość kompilatorów - a nawet wiele tłumaczy, że nie są Turing-complete - zrobić równie dobrą pracę coraz procesora wykonać instrukcje . Jeśli chodzi o dosłowną definicję, odpowiedź na pytanie brzmiałaby „prawie każdy język”.
Praktycznie powinniśmy się na tym zatrzymać; zdefiniowanie „mocnego języka” przypomina trochę określenie „dobrego człowieka” lub „produktu wysokiej jakości”. Nie ma absolutnie żadnej obiektywnej definicji tych słów, którą można by skłonić wszystkich, a nawet większość ekspertów, do uzgodnienia, a większość definicji po prostu prosi o pytanie . W zależności od tego, z kim rozmawiasz, moc może być dowolna z poniższych:
Czy wszyscy widzą, co się tutaj dzieje? Praktycznie każdą cechę pocisku można interpretować jako znak „mocy”, a więc może być wręcz przeciwnie!
Ktoś gdzieś najwyraźniej myślał, że zmienne zmienne były niesamowitym pomysłem, który uczyniłby język bardzo potężnym . Nie będę osądzał; Nie jestem facetem PHP.
Proponuję, aby zamiast wszystkich tych bzdur o świętej wojnie, wszyscy używamy tej naprawdę prostej definicji:
Najpotężniejszym językiem jest ten, który pozwala wysłać produkt najwyższej jakości po najniższych kosztach w najkrótszym czasie.
Niejasny? Betcha. Dlatego każdy, kto chce nazywać siebie profesjonalistą, musi zrozumieć zarówno koncepcje programistyczne, jak i dziedzinę projektu. To jedyny sposób, w jaki będziesz mógł zdecydować, co jest dla ciebie „mocne”.
W przeciwnym razie możesz po prostu przynieść naprawdę duży nóż do walki z bronią.
źródło
Być może jestem stronniczy, ponieważ jestem programistą systemowym. Sądzę, że język programowania używany do programowania jądra, systemu, serwera i aplikacji lub obsługuje wiele paradygmatów programowania, albo oba mogą być nazywane „potężnymi”.
C, C ++, D są potężne, ale oczywiście to tylko moja skromna opinia.
źródło
Istnieje kilka definicji mocy przekraczającej kompletność Turinga. Mark przytoczył to, co zwykle nazywam „definicją Paula Grahama”. To całkiem dobra definicja, z jedną poważną wadą: jest błędna. Teoretycznie jest to bardzo dobra definicja siły języka, ale wiesz, co mówią o różnicy między teorią a praktyką ...
Gdyby każdy był w stanie napisać idealny kod, nie tylko doskonale wolny od błędów, ale również doskonale przyszłościowy, konsekwentnie, to definicja Paula Grahama byłaby poprawna. Ale oczywiście tak nie jest. W prawdziwym świecie większość czasu i wysiłku poświęconego inżynierii oprogramowania nie jest podejmowana przez początkowe stworzenie produktu, ale później przez jego konserwację. W zależności od tego, jakich statystyk słuchasz (i prawdopodobnie różnią się one znacznie w zależności od projektu), utrzymanie może stanowić od 60% do 90% całkowitego wysiłku włożonego w program.
Konserwacja jest często wykonywana przez osoby inne niż osoba, która napisała kod początkowo, a często miesiące lub nawet lata po początkowym napisaniu kodu, co oznacza, że nawet dla oryginalnego kodera może to być również „kod innej osoby” punkt. Jeśli chcesz być produktywny podczas konserwacji, musisz być w stanie szybko ustalić pierwotną intencję kodu, czytając go.
Dlatego bardziej zaawansowanym językiem jest taki, który ułatwia szybkie czytanie kodu , a nie taki, który ułatwia szybkie pisanie kodu . Oba te elementy często nakładają się na siebie, ale koncepcje te są często również krzyżowe, ponieważ składnia zwięzła często pomija szczegóły, że kompilator / interpreter jest w stanie wnioskować o wiele łatwiej niż programista konserwacji.
EDYCJA: Jest jeszcze jeden ważny punkt w opisie siły języka: zakres pojęć, które jesteś w stanie wyrazić i jak łatwo możesz trafić na oba końce. Paul Graham lubi oceniać, jak wysoki poziom abstrakcji można osiągnąć, ale to tylko połowa tego. Każdy język, który nakłada dolną granicę abstrakcji, poniżej której nie można przejść w razie potrzeby, jest kaleką, ponieważ szczegóły, które są abstrahowane, istnieją z jakiegoś powodu. Jest to różnica między łatwym do odczytania językiem zabawek, takim jak COBOL, a łatwym do odczytania, potężnym językiem: COBOL nie ma wskaźników ani dostępu do wbudowanego zestawu, w którym można wyrazić dowolne obliczenia, nawet te, do których COBOL nie jest odpowiedni.
COBOL również nie jest szczególnie dobry w uderzaniu w górną granicę spektrum abstrakcji. Według Wikipedii nie ma „typów zdefiniowanych przez użytkownika ani funkcji zdefiniowanych przez użytkownika”, co bardzo utrudnia tworzenie algorytmów i struktur danych.
źródło
Było to wielokrotnie omawiane wielokrotnie (np. Na comp.lang.lisp, kilka razy). Nie sądzę, żeby ktokolwiek kiedykolwiek wymyślił „właściwą” odpowiedź, ale wiele osób wymyśliło odpowiedzi, które wydają mi się oczywiście błędne.
W odpowiedziach, które tu widzę, pozwólcie, że wybiorę odpowiedź Masona Wheelera. Z jednej strony poruszane przez niego kwestie są ważne, ale z drugiej strony nie mogę sobie wyobrazić, by nazywać je w ogóle związanymi z „mocą”. To trochę tak, jakby powiedział, że jego mini-van Hondy jest mocniejszy niż dragster na paliwo z górnej półki, ponieważ jest bezpieczniejszy, cichszy, ma lepsze prowadzenie, więcej miejsca dla pasażerów i znacznie wygodniejszą jazdę. Wszystko to jest absolutnie prawdziwe i wszystko jest ważne. Te czynniki (między innymi) sprawiają, że minivan jest o wiele bardziej praktyczny i rozsądny dla większości ludzi - ale nie zmienia to faktu, że silnik minivana wytwarza tylko około 250 KM, podczas gdy dragster wytwarza około 8000 HP.
Problem polega oczywiście na tym, że w pojazdach istnieje jasna definicja tego, co stanowi „moc”, a co nie. W przypadku języków programowania wydaje mi się, że dyskusja kończy się na traktowaniu obsługi, wygody, prędkości, pojemności ładunkowej i zasięgu przelotowego jako części „mocy”. Rezultatem są nitki, które działają bez końca, generując znacznie więcej ciepła niż światła. Większość pojawiających się pytań sprowadza się do znaczenia, jakie przywiązujesz do całkowicie niepowiązanych i ortogonalnych funkcji - np. Czy zdolność do programowania MMU w języku asemblera jest mniej lub bardziej „potężna” niż zdolność do tworzenia funkcji wyższego poziomu w Haskell? Przynajmniej IMO, nie ma sensownego sposobu na porównanie tych dwóch i nie ma sensownej odpowiedzi, na którą „
W związku z tym, o ile mi się nie podoba, muszę powiedzieć, że w tym przypadku jedyną sensowną odpowiedzią jest w zasadzie relatywistyczny - potężny język to taki, który pomaga ci osiągnąć to, co chcesz. Różnice w celach ludzi sprawiają, że większość „absolutnych” pomiarów mocy w najlepszym wypadku jest bez znaczenia.
źródło
Właściwa równowaga zwięzłości i elastyczności.
Świetne pytanie. Biorąc pod uwagę, że wiele języków jest „zakończonych Turinga”, możemy postawić je wszystkie na równych podstawach w odniesieniu do tego, do czego są teoretycznie zdolni. Ale nie robimy tego, ponieważ języki oczywiście różnią się od siebie. A jaka jest różnica
Różnica polega na tym, że można powiedzieć bardzo wiele różnych rzeczy przy bardzo niewielkim stopniu . Gdybyśmy mogli przejść do skrajności, mógłbym stworzyć język, który jest najlepszym językiem do automatycznego inicjowania systemu zarządzania treścią przy użyciu tylko jednego znaku, „c”. Ale jaki by to miał sens? Jasne, jest potężny w pewnym sensie, że jest bardzo krótki, ale nie jest elastyczny. To, czego chcesz, to język, który pozwala mówić wiele różnych skomplikowanych rzeczy bez zbytniego mówienia. Nie będąc jak zgromadzenie, zdolny do wszystkiego pod słońcem, nieskończenie elastyczny, ale niezwykle gadatliwy.
Potężny język to język, który pozwala mówić wiele różnych rzeczy przy możliwie najmniejszej długości.
źródło
Kiedy już włączysz Turinga (a język jest w stanie to zrobić łatwo), „moc” niewiele znaczy, w tym sensie, że wszystko, co możesz powiedzieć w jednym pełnym języku Turinga, możesz powiedzieć w innym. Odpowiedź Marka Canlasa : to zwięzłość i elastyczność.
Powiedziawszy to, artykuł Matthiasa Felleisena o ekspresyjnej mocy języków programowania stanowi ciekawą lekturę. W nim próbuje sformalizować pojęcie ekspresji w językach.
źródło
Wydaje się, że istnieje duża różnica zdań co do siły językowej. Czy jest to zwięzłość, czytelność, łatwość adaptacji, czy zwykła kompletność Turinga? Myślę, że wszystkie te czynniki wchodzą w grę, więc być może najlepszym sposobem, aby na to spojrzeć, są punkty statystyk. Tak, mówię tutaj o papierku RPG.
Chodzi o to, że każdy język ma (z grubsza) taką samą liczbę „punktów”, które można dowolnie rozdzielić na kilka kategorii. Dla celów dyskusji powiedz, że jedynymi czynnikami są zwięzłość, czytelność i elastyczność. Język może wtedy być bardzo zwięzły i elastyczny, ale w konsekwencji bardzo trudny do odczytania; lub bardzo czytelny i elastyczny, ale niezwykle gadatliwy.
(Prawdopodobnie liczba punktów, które musi rozdzielić język, zależy od umiejętności projektanta i implementatora, ale udawajmy, że wszyscy projektanci języków są równie dobrzy w tym, co robią.)
Kiedy projektant języka decyduje się na zwiększenie siły języka w jednej kategorii, logicznie odbiera ułamek tej potencjalnej siły z każdej innej kategorii. Dlatego tak często mówi się, że projektowanie języka programowania polega na kompromisach. Z tego punktu widzenia ogólnej mocy języka wciąż nie można zdefiniować i musimy wrócić do wypróbowanej i prawdziwej metody kategoryzacji języków na podstawie ich względnych sił. Niezadowalający? Szkoda
Możesz argumentować na dwa sposoby: że potężny język to taki, który ma względnie równomierny rozkład punktów (jack wszystkich transakcji, master of none) lub z jak największą liczbą punktów w jednym obszarze bez pozostawiania innych bez opieki (specjalista). Nie ma czegoś takiego jak język „człowieka renesansu”, który doskonale opanuje wiele dziedzin. A jeśli to twoja definicja najpotężniejszego możliwego języka, to po prostu nie masz szczęścia.
Do dalszej lektury ten artykuł (przypadkowo również Paula Grahama, który wydaje się mieć mieszane opinie) porusza ideę, jakkolwiek trudne może być określenie, w jaki sposób języki programowania rzeczywiście różnią się mocą. Przekonuje raczej przekonująco, że bardzo łatwo jest zobaczyć, jak język jest mniej wydajny niż twój preferowany - brakuje mu funkcji X - ale bardzo trudno jest zobaczyć, jak naprawdę naprawdę potężny język jest w rzeczywistości - jest zasadniczo równoważny z językiem X, ale z wieloma innymi rzeczami. Zostawiam cytat z tego artykułu:
źródło
Języki programowania są narzędziami - niczym więcej, niczym innym. Niektóre narzędzia są wyjątkowo wyspecjalizowane i dobrze nadają się do określonych celów; inne są uogólnione i uproszczone do tego stopnia, że są prawie bezużyteczne.
Twierdziłbym, że najpotężniejszym językiem jest ten, który pozwala osiągnąć swoje cele przy minimalnym nakładzie czasu, energii i innych badań; to znaczy język, który zapewnia największy zwrot z inwestycji. W niektórych sytuacjach może to być C; w innych Java; w jeszcze innych Haskell.
Najlepiej jest zapoznać się z szeroką gamą języków i ich przydatnością. Następnie, gdy przyjdzie czas na rozpoczęcie nowego projektu, możesz podjąć świadomą decyzję, który byłby najbardziej odpowiedni.
źródło
Dyskusje na temat języków programowania są - IMHO - podobne do dyskusji na temat klientów pocztowych w niektórych grupach dyskusyjnych Linuksa: są to zwykle wojna płomieni. Pamiętam czasy, kiedy VB6 był popularny. Niektórzy nawet twierdzili, że to wcale nie jest język programowania, podczas gdy inni stworzyli za jego pomocą wspaniałe aplikacje.
Myślę, że języki programowania różnią się już w tej koncepcji, ponieważ twórcy mieli na myśli różne rzeczy, kiedy tworzyli / projektowali język. Tak więc język, który pasuje do jednego celu - i pod tymi warunkami jest potężny - może nie pasować do innego. Nazywanie języka potężnym lub nie jest więc czysto subiektywne. To powiedziawszy, nie sądzę, że istnieje metryka, którą można zastosować.
źródło
Wszystkie są narzędziami w skrzynce narzędziowej. Młot może być potężny, ale nie, jeśli potrzebujesz klucza. C / C ++ jest świetny, jeśli jesteś programistą systemowym, ale Adobe Flash prawdopodobnie lepiej pasuje do strony z grami, którą chcesz zbudować.
źródło
Najbardziej Potężny język programowania jest taka, która rozwiązuje następujące zadania programowania liniowego :
Wyolbrzymiać
Szybkość rozwoju
+ Łatwość odczytu kodu
+ Łatwość debugowania
+ Zwięzłość / zwięzłość wypowiedzi
+ Łatwość uczenia się / nauczania
- Wykorzystanie procesora
- Wymagania dotyczące pamięci
Z zastrzeżeniem
(I tak, wiem, już opublikowałem całkowicie sprzeczną odpowiedź. To dlatego, że jestem dialektą).
źródło
Zostało to napisane w odniesieniu do języków naturalnych, ale myślę, że właściwe jest również dla języków programowania:
„Władzy” po prostu nie można przypisać jednemu językowi nad drugiemu. Głupio byłoby powiedzieć „chiński jest silniejszym językiem niż koreański”. Podobnie głupio jest powiedzieć „APL jest silniejszym językiem niż COBOL”.
Podjęto szereg prób zrównania siły językowej z pewną obiektywną miarą. Wierzę, że te próby się nie udają:
Moim zdaniem dyskusje o „potędze jednego języka nad innym” są zawoalowanym wyrażeniem poczucia wyższości mówcy nad jakąś inną grupą. Krótko mówiąc, jego uprzedzenia i stereotypy. Oczywiście ludzie, którzy są naprawdę uprzedzeni, naprawdę mocno wierzą w swoje stereotypy i jest mało prawdopodobne, aby przekonać ich do zmiany zdania.
źródło