Dlaczego jest tyle języków programowania? Dlaczego wciąż powstają nowe języki? [Zamknięte]

51

Dlaczego jest tyle języków programowania?

A co skłania kogoś do stworzenia języków programowania, mimo że istnieją już inne języki?

Mosze
źródło
zabawnym wideo na ten temat jest „Ostatni język programowania” wujka Boba Martina ( umiejętnościmatter.com / podcast / agile
testing
Ponieważ programiści lubią narzędzia.
haylem
1
To samo pytanie na temat informatyki .
Kaveh
2
Niepowiązane: xkcd.com/927
Lekkość
Trudno to uzasadnić. Chyba każdy język ma swoją historię. Według mojej wiedzy większość języków nie była korzystna dla twórcy. Większość języków opiera się na tych samych pojęciach i rzadko rozwiązuje prawdziwe problemy lub zapewnia dobre środowisko. Wydaje mi się, że zanim je stworzą, czują się zmęczeni całą pracą i mogą zobaczyć, jak zmarnowali swoje życie… Pomyśl o ksh lub JavaScript… Po prostu okropne i szkodliwe narzędzia.
NoChance

Odpowiedzi:

36

Języki programowania ewoluują

Nowe języki programowania często uczą się na podstawie istniejących języków oraz dodają, usuwają i łączą funkcje w nowy sposób. Istnieje kilka różnych paradygmatów, takich jak obiektowe i funkcjonalne, a wiele współczesnych języków próbuje łączyć cechy obu z nich.

Pojawiają się także nowe problemy, które należy rozwiązać, np. Wzrost liczby procesorów wielordzeniowych. Najczęstszym rozwiązaniem tego są wątki, ale niektóre języki programowania próbują rozwiązać problem współbieżności w inny sposób, np. Model aktora. Zobacz Erlang - Oprogramowanie dla współczesnego świata

Jonas
źródło
10
Interesujące w Erlang jest to, że jest to „nowa wersja czystego pokoju” modelu Actor. Kiedy Armstrong i przyjaciele opracowali Erlanga, nie wiedzieli o pracy Hewitta i innych nad modelem aktorskim!
Frank Shearar
@Frank: To interesujące. Nie wiedziałem tego, dzięki.
Jonas
2
+1 za ewolucję. Analogiczne pytanie może brzmieć: „Dlaczego jest tak wiele gatunków zwierząt i roślin? Dlaczego wciąż pojawiają się nowe?”
Gyan alias Gary Buyn
1
@GaryBuyn to tylko „+1 do ewolucji”, jeśli zasubskrybujesz ten punkt widzenia. Dla wielu analogia zwierząt jest trochę za daleko.
Darknight
@GaryBuyn, Uhm ... to jest tak analogiczne jak „hamlet” to „chomik”.
Pacerier
22

To jest cykl. Zaczynasz nowy język i możesz uciec od złej składni i złych wyborów ze strony swoich poprzedników. W wersji 1 język wygląda świetnie, ponieważ nie ma żadnego tego bagażu i wykonuje zadanie. Następnie, w nowszych wersjach, zaczynasz eksperymentować z funkcjami, które mogą nie działać lub wprowadzasz funkcje z innych, nowszych języków, które powodują, że twoja składnia jest trochę kludgey. I oto, po kilku kolejnych wersjach, zdajesz sobie sprawę, że twój język jest teraz tak skomplikowany, jak ten, który zastąpiłeś, z głupimi problemami ze składnią i starszym bagażem. I nagle zdajesz sobie sprawę, że jeśli stworzyłeś nowy język, możesz to wszystko naprawić ...

RationalGeek
źródło
2
Z pewnością dotyczy to bibliotek, frameworków i oprogramowania, ale ja osobiście nie znam języka, którego dotyczy. Czy masz przykłady?
back2dos
16
Cóż, myślę, że zarówno C #, jak i Java zostały wprowadzone przynajmniej częściowo, aby rozwiązać złożoność w C ++. A teraz, jeśli spojrzysz na oba te języki kilka wersji później, ich składnia i zestawy funkcji stają się wystarczająco złożone, gdy ludzie zaczynają mówić o tym, że są „z górki”. Tylko moje zdanie, choć nic nie mogę udowodnić. :-)
RationalGeek
2
Dobra uwaga, ale myślę, że gra się w C # inny fakt - jest to produkt komercyjny, który nie istnieje z powodów charytatywnych i dla akceptacji rynku / utrzymania produktów twoich klientów musi być „ulepszony” dla nowych wydań itp.
gf
1
To prawda. Dążenia do dodawania nowych funkcji w celu uzyskania większej ilości pieniędzy z rynku z pewnością nie można zignorować. Jest to jednak obosieczny miecz. Z tego właśnie powodu możesz spodziewać się nowych funkcji produktu objętego wsparciem komercyjnym. Ale z produktu o otwartym kodzie źródłowym dostajesz nowe funkcje, dopóki armia ochotnicza pozostaje zainteresowana, a za stadem stoi ktoś zręczny.
RationalGeek
C # ma wiele funkcji, ale wciąż jest czystszym językiem niż C ++. Nowsze dodatki, takie jak LINQ, pozwalają robić rzeczy w sposób czysty, czego nie można łatwo zrobić w C ++. Myślę, że bardziej prawdopodobne jest, że istnieją dwa rodzaje zachowania złożoności - jeden, w którym pewna złożoność jest nierozerwalnie związana z problemem, i drugi, gdy eliminując jeden rodzaj zbędnej złożoności ze swoich programów, wymagania stają się bardziej złożone - złożoność, taka jak dane, rozwija się, wypełniając dostępną „przestrzeń”.
Steve314,
11

Z tego samego powodu istnieją młotki, śrubokręty, piły ręczne, piły taśmowe, młoty pneumatyczne, łom i wiele innych narzędzi: nie każdy język jest idealny do każdego zadania. Niektóre języki są ukierunkowane na określone dziedziny problemowe: R jest szczególnie dobry do analizy statystycznej, C jest szczególnie dobry do pisania jądra systemu operacyjnego, Haskell jest szczególnie dobry do obliczeń matematycznych lub finansowych, Erlang jest szczególnie dobry do równoczesnego programowania itp.

Również z tego samego powodu, dla którego koszule są w różnych kolorach: niektórzy ludzie lubią „styl” jednego języka nad drugim.

I oczywiście wielu programistów uważa, że ​​fajnie jest wymyślić nowy język, aby zobaczyć, co się stanie, a może dlatego, że mają wiedzę na temat języków i chcą podrapać się lub wypróbować kilka pomysłów.

mipadi
źródło
Są nie tylko wszystkie te narzędzia budowlane, ale istnieje nawet wiele różnych rodzajów młotów i młotów, które wyglądają podobnie, ale mają określone czynniki konstrukcyjne, które czynią je lepszymi do różnych prac lub użytkowników.
Barry Brown,
+1 Za przydatność w domenach problemowych. Naukowcy, którzy ogólnie badają narzędzia, twierdzą, że bardzo ogólne narzędzie jest mniej skuteczne niż określone narzędzie do określonego zadania. Pomyśl o
kluczu
8

Ponieważ wszyscy są do dupy (tak czy inaczej).

W tej chwili stworzyliśmy około 5000 języków do opisania naturalnych problemów i żaden z nich nie jest dostępny do pisania programów (przykładem może być „angielski”).

Dopóki ktoś nie znajdzie sposobu na stworzenie języka programowania, który będzie w stanie wyrazić to, co możesz wyrazić w zdaniu w języku naturalnym, będzie się pojawiał.

Aaron Digulla
źródło
15
Nawet wtedy będą przychodzić. Tylko martwe języki są napisane w kamieniu, wybaczcie kalambur. Istnieje powód, dla którego żywe języki ciągle się zmieniają.
R. Martinho Fernandes
1
Niektórzy twierdzą, że naturalnym językiem wyrażania problemów jest matematyka. Rodzi to pytanie, dlaczego ludzie wciąż dodają cukier syntaktyczny do języków funkcjonalnych, zamiast używać rachunku czystego lambda. Myślę, że problemy, które musimy rutynowo rozwiązywać, często nie są łatwe do wyrażenia ani w języku angielskim, ani w matematyce.
Steve314,
5
Zgoda. Tak trudno jest wyrazić „jestem głodny” za pomocą czystej matematyki.
Aaron Digulla,
1
@AaronDigulla: głodny = suma (brzuch / jedzenie) na pewno :)
gbjbaanb
@AaronDigulla to dobry przykład, często chcesz wyrazić obliczenia. Przyjmujemy więc następujący scenariusz: Jestem głodny, teraz jem -> dobrze, teraz nie jem -> głoduję. Myślę, że to jest cel sztucznej inteligencji do budowania systemów zdolnych do negocjowania lub rozszerzania kontekstu. Normalne języki programowania wyrażają tylko to, co ludzie mówią im, co powinni robić, i zwykle jest to raczej specyficzne niż ogólne. Ale ponieważ większość problemów jest specyficzna, możesz zobaczyć problem tutaj.
AndreasScheinert
6

Oczywiście ważną motywacją do stworzenia nowego języka jest osiągnięcie czegoś lepszego niż języki już istniejące. A ponieważ zawsze jest miejsce na ulepszenia, zawsze będą nowe języki.

Interesy handlowe to kolejny ważny powód. Uważam, że ważne jest na przykład, że Microsoft może zaoferować język dla każdej potrzeby, aby firmy i programiści preferowali swoje platformy.

Carlos
źródło
6

Starszy kod. Jeśli zaczynasz nowy język, nie musisz słuchać / rozpatrywać wszystkich skarg podczas zmiany starego języka. Nawet jeśli wszyscy zgadzają się, że nowa implementacja jest lepsza, nie może złamać starego kodu. Istnieje wiele starych kodów.

JeffO
źródło
3
Czy istnieje udokumentowany przypadek zaprojektowania języka w celu uniknięcia starszego kodu? Twierdzenie to wydaje się mało prawdopodobne. Widzę przypadek, w którym chcesz zacząć od nowa (przychodzi mi na myśl .net), ale nie tyle chodzi o unikanie starszego kodu, ale o lepsze włączenie przyszłego kodu.
Bryan Oakley,
Nie wierzę, że to poprawne. Jest (zwykle) możliwe rozwidlenie istniejącej wersji open source istniejącego języka.
alternatywny
@BryanOakley - pierwotnie .NET miał zachować wsteczną kompatybilność z VB6, ale zdecydowali, że to zbyt trudny problem. .NET wciąż miał wiele starszych wersji WRT Java / J ++, na których był oparty. Myślę, że D jest przykładem języka zaprojektowanego przeciwko starszemu kodowi.
gbjbaanb,
4

ponieważ fajnie jest tworzyć nowe języki, nawet jeśli nie mają rzeczywistego zastosowania

Ezoteryczny język programowania (czasem skrócony do esolang) to język programowania zaprojektowany do testowania granic projektowania języka programowania komputerowego, jako dowód koncepcji lub żart.

jk.
źródło
1
Dla tych, którzy nie dotarli do przypisów w artykule na Wikipedii, wiki języków ezoterycznych to świetna zabawa: esoteric.voxelperfect.net/wiki/Main_Page
David Winslow
czy mógłbyś wyjaśnić więcej na temat tego, co robi i dlaczego polecasz to jako odpowiedź na zadane pytanie? „Tylko odpowiedzi” nie są mile widziane na Stack Exchange
gnat
1
@gnat Szczerze sądzę, że oryginalny tekst nie jest odpowiedzią tylko na link, mógłby stać się krótką, ale całkowicie poprawną odpowiedzią bez linku. Ale biorąc pod uwagę, że link dodaje smaku, zamieściłem z niego krótki cytat.
jk.
3

Tworzenie języka programowania jest raczej zabawne. Jest blisko czystej twórczej pracy, ponieważ nie jesteś ograniczony poprzednimi wymaganiami. Wdrożenie nie jest już takie trudne, ponieważ zawsze możesz skompilować do C i skompilować kod C w celu zapewnienia odpowiedniej wydajności, jeśli piszesz kompilator.

Oczywiście, większość z nas ma mniej dobrych pomysłów, niż nam się wydaje, więc często rozczarowują lub nie są kochani przez nikogo innego niż oryginalny projektant.

Pomyśl o dowolnym znanym języku programowania. Możesz łatwo wymyślić kilka rzeczy, które ci się nie podobają, prawda? Prawdopodobnie masz pomysły, jak je naprawić. Z nieco większym rozmachem, zakładając, że wiesz dużo o budowaniu kompilatora (i wiele osób to robi), możesz zacząć projektować, a nawet wdrażać własne.

David Thornley
źródło
2

Szybka krótka odpowiedź

Reinventing The Wheel ... Jaki jest obecny trend ...

Nudna długa odpowiedź

Wiele osób zapomina, że ​​„inny podobny nowy język dla starych programistów” to „zwykły nowy język dla nowych programistów”.

Co mam na myśli?

Cóż, dla „kilkuletnich” programistów Java lub C # mogą być dodatkowymi językami programowania dla istniejącego Cobola, (OO / Procedural) Basic, C / C ++, podczas gdy dla „nowych” programistów Java lub C # to nowe języki, podczas gdy Cobol, (OO / Procedural) Basic, C / C ++ nie istnieje dla nich, więc wynalezienie koła staje się powszechną rzeczą ...

A jeśli pojawi się nowy trend w technologii, ludzie mogą stworzyć nowy język programowania na podstawie tego trendu, taki jak ecmascript / javascript dla sieci i programowanie funkcjonalne ...

Twoje zdrowie.

umlcat
źródło
+1 za wskazanie aspektu wymyślania na nowo koła. Często dzieje się tak z powodów marketingowych: każda duża firma lub organizacja musi mieć swój własny język programowania.
Giorgio
1

nowe języki programowania są budowane z wielu różnych powodów, głównie dlatego, że istnieją nowe paradygmaty programowania lub z powodu postępu w sprzęcie ludzie tworzą nowy język, aby korzystać z nowych funkcji sprzętowych, takich jak wielozadaniowość itp.

w moim przypadku zwykle buduję małe kompilatory (z nowym językiem programowania), ze szczególnego powodu. jeśli zrobię dużo gier i uważam, że język programowania specjalnie zaprojektowany do tworzenia gier spowoduje mniejszy, szybszy kod i szybszy rozwój, to go zbuduję. a na końcu okazuje się, że można go również wykorzystać do innego programowania ogólnego przeznaczenia.

Myślę, że większość ludzi, którzy tworzą języki programowania, mają na myśli konkretny cel, są tacy, którzy tworzą je od początku dla celów ogólnych. ale większość nie.

Nawiasem mówiąc, myślę, że jest zbyt wiele języków programowania, ale zawsze pojawi się setka nowych. niektóre z zabawy, niektóre z niszowego celu, jako projekt szkolny lub z setek innych powodów. a wcześniej czy później nowy zyska popularność. To się nigdy nie skończy.

Sergio Fernandez
źródło
0

Z tego samego powodu jest tak wiele <wszystko> i ciągle tworzymy nowe <wszystko>

Na przykład istnieje kilkanaście platform PHP MVC, ale ludzie zawsze będą tworzyć nowe, aby zaspokoić określone potrzeby, aby uniknąć uzależnienia od innych zespołów lub po prostu spróbować stworzyć coś lepszego. To samo dotyczy w zasadzie każdego rodzaju narzędzia lub aplikacji.

To bardzo dobra rzecz, moim zdaniem dla wszystkich win-win.

Fosco
źródło
Zespół NIH = w ogóle nie jest przydatny dla branży IT.
gbjbaanb
0

Uniwersytety wnoszą wiele języków programowania, podobnie jak bardzo duże korporacje, takie jak Ericsson (Erlang = język Ericsson), Bell Labs (języki B i C), Google (język Go od kilku miesięcy wcześniej). Wiele z tych, które zostały napisane w ramach badań uniwersyteckich, nie jest często używanych. Jest jednak kilka istotnych wyjątków. Przypuszczam, że pisanie własnego języka / kompilatora jest dobrym tematem dla prac doktorskich osób studiujących teorię CS lub pokrewne dyscypliny. Uderza mnie, że Python jest jednym z pierwszych języków, który narodził się ze współpracy online różnych programistów wokół jednego pomysłu.

ixtmixilix
źródło
python-history.blogspot.com/2009/01/… szczegółowo opisuje narodziny Pythona
Andy Dent
0

Jest kilka powodów, ponieważ większość uważa, że ​​to, co istnieje, nie ułatwia rozwiązania niektórych problemów. Niektóre są po prostu dla zabawy lub dla celów akademickich.

Myślę, że istnieje solidny argument, że kwestia projektowania idealnego języka nie została jeszcze rozwiązana (i może nigdy nie będzie). Tak długo, jak ludzie będą mieli nowe pomysły na to, co byłoby doskonałym językiem, ludzie będą próbować. Niektóre z tych prób wytyczą nowe fajne miejsca, takie jak Erlang, a niektóre zaczną flopować, ale tak długo, jak nauczy się czegoś z flopa, również jest OK.

Zachary K.
źródło
-1

Jak wspomniano wcześniej, języki starają się kierować na określone zadania, a nowe języki mogą kierować na nowy obszar. Te języki mogą przyjmować funkcje z innych obecnie dostępnych języków.

Innym powodem nowych języków jest próba włączenia wielu różnych zadań i bycia językiem wyboru dla wielu różnych potrzeb. Niektóre z tych języków starają się obejmować wszystkie języki, których zawsze będziesz używać, bez względu na to, jakie masz potrzeby.

niesamowite
źródło
-1

W mojej klasie języków programowania dowiedziałem się, że większość języków została wymyślona, ​​aby podrapać się. Większość języków została wymyślona, ​​aby móc lepiej wyrażać pewien zestaw algorytmów. Na przykład wymyślono języki funkcjonalne, aby zapewnić algorytmom rekurencyjnym znacznie bardziej wyrazistą przestrzeń.

Pytanie, dlaczego jest tak wiele języków, przypomina pytanie, dlaczego C ++ 0x? :)

Co więcej, im więcej znasz języków, tym bardziej możesz stać się wyrazisty - dotyczy to zarówno języków programowania, jak i języków naturalnych!

2rs2ts
źródło