Co to jest „mocny” język?

22

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?

rzemieślnik
źródło
5
Język jest równie potężny jak jego użytkownik.
ysolik
6
@ysolik niekoniecznie jest prawdą. mógłbym dać komuś gównianego języka i zobaczyć, jak daleko się posuwają. ma jedną operację, NOOP! =)
Mark Canlas
2
@ Zaznacz, jeśli mówimy o ekstremach, masz rację. Jeśli jednak weźmiesz pod uwagę dzisiejsze mniej lub bardziej powszechnie używane języki, użytkownik jest ich dużą częścią.
ysolik
1
PowerBASIC: Nie można uzyskać większej mocy niż to. ^^
gablin
1
@ysolik: dokładniej byłoby powiedzieć „język nie może być bardziej wydajny niż jego użytkownik”.
Duncan Bayne

Odpowiedzi:

32

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:

  • Bogata platforma lub biblioteka ogólnego przeznaczenia do wykonywania szerokiej gamy typowych zadań
  • Wyrafinowana składnia specyficzna dla domeny, która „robi jedną rzecz i robi to dobrze”
  • Bezpośredni dostęp do funkcji maszyny, tj. Możliwość pisania kodu niskiego poziomu
  • Wyodrębnianie pojęć na poziomie maszyny, tj. Umiejętność pisania kodu wysokiego poziomu
  • Bardzo bogaty system typów umożliwiający zaawansowane strategie, takie jak odbicie, DI i analiza statyczna
  • Bardzo luźny system typów, który pozwala programistom po prostu to zrobić (wymuszanie typu itp.)
  • Zdolność do traktowania wszystkiego jako obiektu , który oferuje weryfikację pojęciową
  • Możliwość traktowania wszystkiego jako funkcji , która oferuje weryfikację matematyczną
  • Automatyczne zarządzanie pamięcią i zasobami (GC, RAII) prowadzi do mniejszej liczby błędów
  • Ręczne zarządzanie pamięcią i zasobami, potencjalnie prowadzące do zoptymalizowanej wydajności
  • Minimalna ilość szumu syntaktycznego , prowadząca do lepszej czytelności
  • Bardziej angielska składnia , która oferuje płytszą krzywą uczenia się
  • Umiejętność pisania bardzo zwięzłego kodu (np. Operator trójkowy, zerowanie-koalescencja, zerowanie-rozszerzenie)
  • Niezdolność do zapisu potencjalnie mylące kodu (czyli żaden operatorzy potrójne, itd.)

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ą.

Aaronaught
źródło
1
+1 To jedyna definicja, która próbuje uwzględnić wszystkie różne pojęcia siły języka. Szczególnie podoba mi się to, jak pokazujesz, że sprzeczne funkcje można uznać za potężne. Informatyka to nauka o kompromisach, nawet w wyborze języka.
CodexArcanum
11

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.

grokus
źródło
Używałbyś Java do programowania na poziomie jądra, czy też cię nie rozumiem?
Davy8
@ Davy8, masz rację, z mojej własnej definicji, nie powinienem był uwzględniać Java.
grokus,
5

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.

Mason Wheeler
źródło
1
Problem, który mam z tym, polega na tym, że wydaje się wskazywać na język COBOL jako bardzo potężny język.
David Thornley,
2
Rozumiem, że nie znasz Lisp? :)
dash-tom-bang
1
@Matt: Właśnie o to chodzi. To, w jakim języku jest używany, jest ograniczone przez to, w jakim języku można go używać, i jest o wiele mniej do zrobienia w Pythonie niż w języku, który nie wyodrębnia szczegółów związanych z pamięcią.
Mason Wheeler,
3
-1 Ze względu na niejawne przekonanie, że krótszy, bardziej ekspresyjny kod jest w jakiś sposób trudniejszy do utrzymania. Wziąłeś oba powszechne znaczenia siły języka (ekspresyjność vs otwartość) i połączyłeś je w jedną koncepcję, która tylko w połowie wyraża oba oryginalne pomysły.
CodexArcanum
1
@ Jörg W Mittag: Masz rację, ale myślę, że cytowane zdanie odnosi się do bezpośredniej kontroli zasobów sprzętowych (np. Pamięci): C ++ daje ci większą kontrolę. Oczywiście, jeśli wdrażasz maszynę wirtualną, masz pełną kontrolę, ale myślę, że Mason Wheeler miał na myśli kontrolę nad prawdziwą maszyną.
Giorgio
4

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 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.

Jerry Coffin
źródło
3

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.

Mark Canlas
źródło
1
-1. Przepraszam, ale to nie tylko nieporozumienie, ale także niebezpieczne, ponieważ może poważnie zaszkodzić wydajności na dalszych etapach.
Mason Wheeler,
@Mason Wheeler: Czy mógłbyś opracować?
Joey Adams,
@Joey: Zobacz moją odpowiedź na to pytanie.
Mason Wheeler,
1

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.

Frank Shearar
źródło
Nawiasem mówiąc, tak naprawdę nie jest to prawdą. Widziałem języki, które Turing są kompletne, ale słabsze niż inne języki. Prosty przykład: rozważmy język, który jako typy danych ma tylko liczby całkowite i ciągi, nie ma sposobu na konwersję między nimi, arbitralne obliczenia na liczbach całkowitych, a jedynie łączenie ciągów i porównywanie ciągów. (Pracowałem z takim językiem.) Jest on kompletny, ale nie może wyrażać dowolnych funkcji na ciągach, więc dodanie większej funkcjonalności zwiększy jego moc obliczeniową.
reinierpost
@reinerpost - powiedział, że język kompletny Turinga może nadal obliczać dowolne funkcje na ciągach, musi po prostu reprezentować je w inny sposób. Kompletność Turinga jest prawie ortogonalna wobec pytania o dostępne typy danych. Na przykład niektóre kompletne języki Turinga nie mają żadnych typów danych i po prostu reprezentują wszystko za pomocą funkcji - i muszą uciekać się do rzeczy takich jak Kodowanie Kościoła do arytmetyki.
mikera
1

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:

Dzięki indukcji jedynymi programistami, którzy mogą zobaczyć wszystkie różnice w mocy między różnymi językami, są ci, którzy rozumieją ten najsilniejszy. (Prawdopodobnie to właśnie miał na myśli Eric Raymond o tym, że Lisp uczynił cię lepszym programistą.) Nie możesz ufać opiniom innych, z powodu paradoksu Blub: są zadowoleni z dowolnego języka, którego używają, ponieważ to dyktuje sposób, w jaki myślą o programach.
Jon Purdy
źródło
Nie zgadzam się z twoim modelem, że wszystkie języki z konieczności mają taką samą liczbę punktów w rozkładzie. Weźmy ekstremalny przykład brainf * ck i możemy z łatwością powiedzieć, że nie jest on porównywalny z żadnym współczesnym językiem, nawet jeśli tylko pod względem całkowitej liczby punktów. tzn. nie jest to gra o sumie zerowej w języku programowania - język nie zaczyna się od x punktów i nie rozdziela ich, zaczynają od 0 i otrzymują punkty w zależności od funkcji. To, że należy podjąć kompromis, jest oczywiście naturalne, ale wszystkie wybory nie są równe (przynajmniej moim zdaniem).
n1ckp
Nie powiedziałem, że wszystkie języki muszą mieć taką samą liczbę punktów. Powiedziałem, że wszystkie rozważane języki (czyli języki zaprojektowane do rzeczywistego użytku) mają mniej więcej tę samą liczbę. Języki ezoteryczne są przypadkiem patologicznym, ponieważ nie zostały zaprojektowane tak, aby były przydatne przede wszystkim. Dla uproszczenia upraszczałem, ponieważ nie warto rozróżniać języków na podstawie „liczby funkcji”, jeśli w rzeczywistości funkcje są policzalne.
Jon Purdy,
przepraszam, przeczytałem ponownie twój post i muszę się zgodzić, że czytam trochę za szybko .. ale nadal nie zgadzam się, że każdy (główny nurt) język ma mniej więcej te same punkty. Weźmy Java i c ++, ponieważ są to język, który znam dość dobrze. Jestem pewien, że mogę potwierdzić, że c ++ jest potężniejszy niż Java tylko dlatego, że c ++ wyłącza w zasadzie wszystko, co robi Java (z wyjątkiem gc - ale wtedy java również nie oferuje ręcznego zarządzania pamięcią) PLUS więcej (prawdziwe szablony FTW). To, co w pewnym
sensie
porównując tylko języki głównego nurtu.
n1ckp
0

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.

Benjamin Chambers
źródło
-1

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ć.

Sascha
źródło
+1, by przeciwdziałać niewyjaśnionemu głosowaniu i ponieważ ogólnie się z tym zgadzam. Użyj langometru do zadania, do którego zostało zaprojektowane. Nie pisz złożonych GUI w C, nie pisz skomplikowanych algorytmów ani systemów operacyjnych w VB6
Gerry
-1

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ć.

bigtang
źródło
-1

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

  • To musi być Turing Complete.
  • Musi być wieloparadygmatyczny : funkcjonalny, obiektowy, programowanie logiczne, programowanie z ograniczeniami, współbieżność, przetwarzanie rozproszone itp.
  • Musi być wszechstronny , umożliwiając tworzenie interfejsów wiersza polecenia, bibliotek komponentów, serwerów, GUI i aplikacji internetowych.
  • Musi być przenośny , tzn. Łatwy do przenoszenia i utrzymywania w konfiguracji wieloplatformowej.
  • Musi być przystosowalny , tzn. Otwarty na zmiany i ewoluować w miarę pojawiania się nowego sprzętu (układów kwantowych), nowych paradygmatów i innych innowacji technologicznych.
  • Musi zachęcać do tworzenia bibliotek (takich jak CPAN, CTAN i CRAN).
  • Musi być darmowy i open source .

(I tak, wiem, już opublikowałem całkowicie sprzeczną odpowiedź. To dlatego, że jestem dialektą).

Inne
źródło
-2

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:

Przekonanie, że niektóre języki są z natury lepsze od innych, jest powszechne, ale nie ma podstaw w faktach językowych. Niektóre języki są oczywiście bardziej przydatne lub prestiżowe niż inne, w określonym okresie historii, ale wynika to z pierwszeństwa mówców w tym czasie, a nie z jakichkolwiek nieodłącznych cech językowych.
- David Crystal (red.). The Cambridge Encyclopedia of Language 2 / e (1997). s.7

„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ą:

  • Znalezienie pracy w USA może być łatwiejsze, jeśli mówisz po angielsku amerykańskim niż mówisz na Maorysach. Podobnie bez wątpienia łatwiej jest zdobyć pracę programistyczną w Javie lub C, niż w LISP lub J. Ale ta korzyść ekonomiczna z pewnością nie odzwierciedla jakiejś wrodzonej siły języka. Chodzi o moc użytkowników języka.
  • „Cześć” nie jest lepsze niż „ni hao” lub „shalom”, ponieważ jest krótsze. Podobnie, chociaż funkcja może być wyrażona bardziej zwięźle w APL niż w języku COBOL, to również nie odzwierciedla jakiejś wrodzonej siły języka.

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.

Inne
źródło
Nie zgadzam się. Dla łatwego przykładu, myślę, że nikt nie powiedziałby inaczej niż powiedzieć, że istnieje potężniejszy język niż brainf * ck (powiedz), nawet jeśli teoretycznie jest on kompletny (myślę). Chodzi o to, że „potężny” to pewna cecha, która nie ma nic wspólnego z faktem, że wszystkie są „kompletne”. Zgadzam się, że może to być nieco subiektywne, ale stwierdzenie, że wszystkie języki są równe w odniesieniu do „siły”, wydaje się dość daleko idące.
n1ckp
1
@ n1ck: Czy mówisz, że Power = czytelność? I :. Brak czytelności BF oznacza brak mocy? APL i J mają również bardzo niską czytelność, ale są niezwykle przydatne i zwięzłe (chociaż z pewnością nie utożsamiam użyteczności ani zwięzłości z mocą). Idąc w przeciwnym kierunku, COBOL jest bardzo czytelny; jego szczera gadatliwość; ale znowu to nie czyni go silniejszym niż APL lub BF. BF jest bardzo zabawne; ma moc rozbawiania; ale to nie jest Moc qua Moc. Problem polega na tym, że nikt nie wydaje się mieć dobrej teorii Mocy, za którą mogliby osiągnąć konsensus.
AN Inny
1
Nie, nie miałem na myśli, że moc = czytelność. Po prostu nie zgadzam się z twoim poglądem, że wszystkie języki są równe i że nie możemy porównywać języka z „mocą”, jakkolwiek to definiujesz. Moim zdaniem podstawa czytelności jest wymagana, aby dać jakąkolwiek moc językowi, ale tak naprawdę nie jest to pytanie. Jeśli naprawdę chcemy odpowiedzieć na pytanie, najpierw musielibyśmy zdefiniować siłę, ale moim zdaniem nie jest to to samo, co „najlepsze w każdej sytuacji”, co wydaje się wskazywać na twoją odpowiedź w ten sposób (tzn. Nie najlepiej język na wszystko, co się zgadzam).
n1ckp