Dlaczego nie może istnieć „uniwersalny” język programowania, który służy wszystkim celom? [Zamknięte]


57

dlaczego nie połączyć najlepszych cech wszystkich istniejących języków programowania i dopasować do uniwersalnego języka programowania?


23
Termin „najlepszy” jest subiektywny, więc nigdy nie miałbyś uniwersalnie akceptowanego najlepszego. Istnieje oczywiście sporo języków, które są odpowiednie do szerokiego zakresu rozwoju na wszystkich platformach. C ++ i Java są głównymi dwoma.
GrandmasterB

5
@GrandmasterB Zapomniałeś C #
Daniel Little

15
Jest tak, nazywa się „C”
Martin Beckett

9
my, gatunek, mamy wrodzoną zdolność do nieporozumień (z racji naszej indywidualności), dlatego nigdy nie uzgodnimy, co jest powszechnie wymagane, a zatem nigdy nie będzie jednego (przynajmniej takiego stworzonego przez ludzi!)
Nim

9
Uniwersalny język programowania? Masz na myśli, analogiczny do uniwersalnego języka ludzkiego, który wszyscy przeszli tak wiele lat temu?
Kyralessa,

Odpowiedzi:


116

Z tego samego powodu nie używasz szwajcarskiego noża wojskowego do rzeźbienia kurczaka ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Szwajcarski scyzoryk ma na ogół ostrze, a także różne narzędzia, takie jak śrubokręty, otwieracze do puszek i wiele innych. Te przystawki są schowane w rękojeści noża poprzez mechanizm punktu obrotu ...

Konstrukcja noża i jego elastyczność doprowadziły do ​​światowego uznania ...


26
Z tego samego powodu nie zabierasz minivana na wyścig drag. Z tego samego powodu nie bierzesz pistoletu na pojedynek.
Chris

19
@Chris Co jeśli jest to pojedynek na pistolety wodne?
Rusty

44
Z tego samego powodu nigdy nie wchodzisz z Sycylijczykiem, gdy śmierć jest na linii.
Rusty

6
Gdybyś miał szwajcarski scyzoryk, który zrobił wszystko, co potrzebne do budowy domu, czy przydałby się w którymkolwiek z nich?
Brad Mace

4
Ta odpowiedź jest okropną analogią. Być może, gdybyś napisał: ponieważ język francuski pozwala na inną wierność wyrażenia niż język angielski, mógłbym bardziej polubić tę analogię. Ale języki komputerowe nie są „rzeczami” ani ludzkimi. Prawidłowa odpowiedź to: nie wiemy. Będzie to wymagało większego wglądu w to, jak ludzie wyrażają logikę i jak dochodzą do tego punktu. Ponadto niektóre języki są „metajęzykami”, zdolnymi do wyrażania innych DSL. Czy powinniśmy uwzględnić je w twoim pytaniu?
Dibbeke,

80

Dlatego

  1. nikt nie chce przepisać całego starszego kodu.
  2. Trudno jest uzgodnić wszystkie cele
  3. Po utworzeniu kompleksowej listy celów zmieniłyby się one, zanim można je było zbudować.
  4. Ktoś mógłby zacząć zupełnie inny język z powodu nowego celu.
  5. Microsoft
  6. jabłko
  7. Otwarte źródło
  8. Co zrobilibyśmy z wszystkimi Babel Fish?
  9. Nie można nawet uczynić SQL uniwersalnym.

Zatrzymałeś się krótko. Spodziewałem się jednej z tych poważnych list „Top 10” tylko dla ha-ha.
Jeffrey Hantin

4
+1 za zapobieganie, przynajmniej na razie, kampanii „Save the Babel Fish”. Cholerni hipisi.
Rusty

2
co do Babel Fish, zrób sushi!
Muad'Dib

1
Jeśli chodzi o punkt 1, cały starszy kod będzie musiał zostać przepisany i tak przy użyciu najnowszej mody w kodzie / bibliotekach, albo nie będzie mógł działać skutecznie bez śmiesznej kwoty kosztów wsparcia.
Michael,

38

To, co masz w programowaniu, to bardzo duża dziedzina problemowa. Ta domena rozciąga się niezwykle i w wielu kierunkach.

Właśnie dlatego wbudowane kontrolery lotu są napisane w języku C, a strony internetowe w języku PHP, Java, Rails, .NET i wielu innych.

W przypadku wbudowanego kontrolera lotu mam około 128 tys. Pamięci do pracy, a ponadto, jeśli mój kod otrzyma nieobsługiwany wyjątek, samolot ulegnie awarii, 200 osób zginie, a ja dostanę skargę o dostrojenie 1 mld USD i muszę wysłać inżynierów do każdego lotnisko na świecie, aby naprawić samoloty, które są uziemione, tracąc moich klientów 10 mln USD dziennie. Muszę pracować z językiem, który jest bardzo napięty i ma niewielką liczbę ruchomych części, które mogą się nie udać.

W mojej aplikacji internetowej mam kilka GB pamięci do pracy, ale prędkość sieci jest ograniczona (w mniejszym stopniu codziennie, ale to prawdopodobnie największy limit w sieci). Będę patrzył na język, który daje mi mnóstwo funkcji i produkuje dane, które można przesyłać tak szybko, jak to możliwe. Naprawdę nie dbam o to, czy moja strona ulegnie awarii, może stracę kilka sprzedaży (100 USD) i będę musiał załatać przypadek użycia, który zbombardował, nic wielkiego.

Strony internetowe nie były pisane w języku C przez ponad 15 lat (ktoś robi jakieś skrypty cgi?) I o ile wiem, kontrolery lotów dopiero teraz zaczynają patrzeć na C ++, ale nawet wtedy w bardzo ograniczony sposób.


3
Większość witryn, które faktycznie zarabiają pieniądze, straci ponad 100 USD, jeśli wystąpią znaczne przestoje. Nie sugerując, że jest to porównywalne z sytuacją życia lub śmierci, ale to jeszcze bardziej nie docenia ryzyka.
Aaronaught

3
Czy masz pojęcie, jak puszysty jest Facebook? Niedawno opublikowali, że wypychają kod co 37 minut. Ich strona jest ciągle w jakiś sposób rozwalona i mają milion biletów w swoim portfelu zamówień. Chodzi o to, że w sieci nikt nie umrze, możesz „stracić” kilka sprzedaży, ale w sumie nie ma zbyt dużego ryzyka. Większość problemów, na które napotykasz, dotyczy tylko kilku klientów, a nie całej bazy
Bill Leeper

24
  1. Idź do garażu (lub garażu twoich rodziców).
  2. Otwórz skrzynkę narzędziową.
  3. Jeśli widzisz więcej niż jedno narzędzie, zastanów się, jak to dotyczy twojego pytania.

Jeśli nie masz skrzynki na narzędzia lub masz tylko jeden z tych małych młotków z końcówkami śrubokręta w wydrążonym uchwycie, to mam dla ciebie wielką sympatię.

Poważnie. Jeśli pójdziesz do warsztatu samochodowego, czy twój mechanik ma tylko jedno narzędzie typu „zrób to wszystko” w swoim zestawie narzędzi? On (lub ona) jest profesjonalistą, z profesjonalnymi narzędziami specjalnie zaprojektowanymi do wykonywania różnych zadań naprawy samochodów.

Podobnie profesjonalni programiści powinni posiadać wystarczający zestaw narzędzi do wykonywania swoich transakcji. Jeśli otworzysz swój zestaw narzędzi i zobaczysz tylko [oprogramowanie równoważne] śrubokręt Philips, nie możesz uważać się za profesjonalistę.

Możesz obrócić śrubę za pomocą klucza płaskiego, klucza płaskiego, klucza zapadkowego lub klucza nastawnego. Możesz nawet przekręcić śrubę szczypcami za pomocą szczypiec do połączeń przesuwnych, niezgrabnie, z niewielkimi lub poważnymi uszkodzeniami. Ale dość trudno jest przekręcić śrubę młotem.


Dotyczy to również „garażu rodzica”. To naprawdę sprawia, że ​​jest jaśniejsze, ponieważ nie mam garażu.
Dan Rosenstark

5
Lepszą analogią byłby język raczej jak przybornik niż jakieś indywidualne narzędzie.
Tom Hawtin - tackline

4
W pudełku może znajdować się 20 różnych narzędzi. Ale założę się, że potrzebujesz tylko jednego języka, aby je opisać.
ThomasX,

2
Obecnie zestaw narzędzi przypomina bardziej biblioteki dostępne dla danego języka.
Michael,

18

Inny rodzaj odpowiedzi na inne - myślę, że istnieje potencjał, aby język stał się „uniwersalny”, pozwalając na cechy i paradygmaty wielu innych języków, choć może nie jest to ściśle zaprojektowany język, o którym myślisz.

Aby użyć powyższej analogii brettmjohnsona , idea, że ​​każdy język programowania jest narzędziem wewnątrz pudełka (lub szwajcarskiego noża wojskowego), jest założeniem, które wszyscy przyjmują, ale tak naprawdę jest błędnym założeniem.

Co jeśli językiem programowania był zestaw narzędzi?

Mam na myśli, co jeśli możesz dodawać i usuwać funkcje z języka, jak chcesz, i mieć własny zestaw narzędzi z potrzebnymi w nim narzędziami - nawet jeśli narzędzia są do różnych celów.

Koncepcja istnieje już częściowo. Na przykład języki takie jak Nemerle pozwalają na dodawanie składni do języka i jako takie możesz wziąć „najlepszą funkcję z języka X” i dodać ją do Nemerle (lub własnego). Nie musi to oznaczać ciągłego pisania własnych makr - każdy język (lub paradygmat) można zdefiniować w makrze w standardowej bibliotece - tak, jak można import Haskell; import Prolog;, i zacząć pisać dwa języki tak, jakby były częścią Twój język?

Pytanie zatem brzmi - w jaki sposób można współpracować ze sobą w różnych językach / paradygmatach? Chociaż nie mogę odpowiedzieć na to pytanie, frameworki takie jak .Net i JVM oferują niektóre rozwiązania - języki są przynajmniej częściowo kompatybilne ze względu na sposób ich kompilacji. Możesz wziąć dowolny kod napisany na przykład w C # i używać go z F # bez reklamacji.

„Problem” w obecnym rozwiązaniu polega na tym, że używanie tych języków razem wymaga utworzenia ich jako osobnych projektów, które nie mogą się nawzajem odnosić - możesz mieć tylko odniesienie 1-stronne. Bariera językowa polega na tym, że każdy projekt kompiluje wszystkie swoje pliki osobno w języku Common Intermediate Language, zanim jakikolwiek inny projekt będzie miał do niego dostęp.

Krokiem w kierunku usunięcia tej bariery byłoby umożliwienie kompilacji kodu różnych języków (np. C # i F #) w tym samym projekcie. Teoretycznie możesz skompilować każdy plik osobno (lub w grupach - jeśli mają typy częściowe lub odwołania cykliczne), a następnie skompilować pliki w innym języku, które mogą uzyskać dostęp do już skompilowanych obiektów (CIL). Aby to zadziałało, musisz ściśle zdefiniować kolejność kompilacji - ale kolejność kompilacji jest już wymagana w przypadku F #.

W każdym razie nie mówię „zdecydowanie może istnieć uniwersalny język”. Sugeruję, że istnieje potencjał znacznie lepszej interoperacyjności między językami niż obecnie. W rzeczywistości raczej nie poprawi się to bardzo szybko, tylko z powodu ogromnej ilości pracy, jaką jest wdrożenie języka i bibliotek, narzędzi itp. Potrzebnych do jego użycia.


4
Cały świat nie jest komputerem. Większość procesorów na tej planecie ma mniej niż 64 000 bajtów całkowitej pamięci. Język, który może być używany na tych procesorach, musi być do tej pory zredukowany w stosunku do tych, które większość na tym forum wydaje się używać, że Twój uniwersalny język stanie się rozszerzonym językiem asemblera. Myślę, że nazywa się to „C”.
uɐɪ

10

Najlepsze funkcje niektórych języków są sprzeczne z najlepszymi funkcjami innych.

Na przykład: Odbicia uwzględniające pisanie na klawiaturze to naprawdę fajna funkcja, ale nie byłaby bardzo warta w luźno pisanym języku, ale luźne pisanie może czasami być prawdziwą korzyścią.

Nawet w jednym języku nie zawsze możesz korzystać ze wszystkich najlepszych funkcji jednocześnie, ponieważ są one ze sobą sprzeczne.


ale jeśli ta funkcja została włączona / wyłączona zgodnie z potrzebami, na przykład: można włączyć odbicia uwzględniające typ i wyłączyć luźno wpisany język itd.
killown

2
a jeśli spróbujesz połączyć kilka funkcji językowych w jeden język, który mógłby zrobić wszystko, dostaniesz dużo redundancji, zamieszania, błędów z różnych sposobów korzystania z różnych kombinacji funkcji i wiele zmarnowany wysiłek na określenie paradygmatu, którego używasz na tej linii.

killown masz rację, ale rozwiązanie problemu przez uczynienie języka ultra-konfigurowalnym sprawia, że ​​język jest trudny w użyciu, jak opisuje fennic. Lubię elastyczny język, który pozwala na rzeczy, nawet jeśli w niektórych przypadkach są niebezpieczne, ale poziom konfiguracji, który musiałbyś połączyć w niektóre koncepcje, sprawiłby, że byłby bardziej skomplikowany niż po prostu cofanie się i pisanie rozwiązania w niskim poziomie C lub coś takiego .
Bill

1
+1 za sprzeczne funkcje
Frank Shearar,

Myślę, że problemem nie jest tylko konflikt cech językowych, ale raczej to, że wiele języków zakłada podstawową strukturę, która obejmuje funkcje, które nakładają pewien poziom kosztów ogólnych, ale umożliwiają uproszczenie niektórych operacji. Języki zwykle mają również pewne „typowe wzorce użytkowania”. Wybór, jakie cechy powinny być zawarte w ramach i jakie wzorce kodowania należy zastosować, wymaga kompromisów; i różne kombinacje funkcji i wzorów są lepsze dla różnych aplikacji.
supercat,

7

„Jack of all trade - master of none”. przychodzi mi na myśl.

Niektóre programy wymagają szybkości, inne dużych ilości pamięci lub szybkiego dostępu do dysku. Niektóre języki są dobre w jednym, ale złe w innym - nie sądzę, żebyś otrzymał język, który byłby w ogóle dobry.

Tak więc, chociaż możesz napisać praktycznie dowolny program w dowolnym języku, nie masz gwarancji, że to „najlepszy” program, jaki możesz napisać, aby rozwiązać ten problem.


4

Jest. Żadne narzędzie jest najlepszy do wszystkiego, ale niektóre narzędzia, takie jak wielu języków programowania służą do wszystkich celów, nie najlepiej dla wszystkich.

Możesz wybrać najlepsze narzędzie do pracy, ale istnieją języki programowania, które można wykorzystać do wszystkich celów i możesz je wybrać. Nie polecam, ale jest to możliwe.


4

Z powodu czegoś nazywam „paradoksem uogólnienia / specjalizacji”, który prawdopodobnie ma inną nazwę i tak naprawdę nie jest paradoksem

Im bardziej ogólny język programowania, tym więcej kodu potrzeba, aby coś osiągnąć. Im bardziej specjalistyczny język, tym mniej możesz go osiągnąć.


2
Zgadzam się z tobą, z wyjątkiem tego, że można mieć wyspecjalizowane biblioteki w języku uogólnionym.
dan_waterworth

@dan: Zgoda, ale tylko wtedy, gdy język koncentruje się na udostępnianiu funkcji pisarzom bibliotek. Moje dwa ulubione języki to D i Python. Oba są dość ogólnymi językami (szczególnie D), ale oba mają wiele funkcji dla autorów bibliotek, dzięki czemu możesz budować własne biblioteki do obsługi specjalistycznych rzeczy. I gardzić Super język dziedzinowy jak Matlab i R.
dsimcha

4

Języki kształtują sposób myślenia. Dotyczy to języków naturalnych. Jeśli dziecko zna tylko jeden język z cyframi „jeden, dwa, wiele”, nauczanie tego dziecka matematyki jest… trudne. (Przepraszam, nie mam linku) W języku angielskim rozmawiamy o różnych czasach, jakby były miejscami - stąd można sobie wyobrazić koncepcję podróży w czasie. W niektórych innych językach pomysł podróży w czasie nigdy nie pojawiłby się wśród jego użytkowników.

Dotyczy to również języków programowania.

Dlatego jeśli mamy jeden język programowania, wszyscy pomyślą o wszystkich zadaniach obliczeniowych dokładnie tak samo. Dlatego nie będziemy badać alternatyw, a najlepszy sposób na zrobienie czegoś pozostanie nieodkryty.

Najbardziej zbliżoną rzeczą do uniwersalnego języka jest C. C bardzo dokładnie odwzorowuje podstawowe pojęcia sprzętowe (jak to się dzieje w sprzęcie), a programy w każdym * języku można konwertować na C. (Zobacz, jak CFront używał kompilatorów C do asemblera zadania) Problem z C polega na tym, że wyżej wymienione konwersje nie miałyby sensu z perspektywy programistów C.

„Lambdas” były zawsze możliwe w C. Składnia jest wyłączona, w tym kod rozłożony na cały projekt / plik, dlatego nie było to preferowane rozwiązanie. W wersji bez przechwytywania / aktualizacji / etc zdefiniuj funkcję gdzieś indziej i przekaż wskaźnik do funkcji. (patrz qsort () ) Aby użyć lambd z przechwyconymi wartościami, ilość i złożoność kodu, który musisz napisać, znacznie wzrasta - o ile mi wiadomo, że nikt nigdy nie napisał kodu używającego tej metody programowania w C. W przeciwieństwie do języków, w których lambdy są częścią języka i są używane wszędzie.

Główna różnica między C i C ++ jest to, jak można prosić C ++, aby dbać o rzeczy dla ciebie; ale z jednego wiersza kodu nie można już zobaczyć, jak bardzo o to prosisz. Odpowiedź brzmi: to zależy (od całego tego innego kodu).

Niektóre języki programowania doskonale nadają się do określonych zadań, ale tam, gdzie większość obecnych programów na całym świecie po prostu nie miałaby sensu, gdyby zostały zaprogramowane w tym języku. To znaczy, jeśli język mógłby zostać użyty do wdrożenia tego programu na początku, co nie jest dane.


2
„W niektórych innych językach pomysł podróży w czasie nigdy nie pojawiłby się wśród jego użytkowników”. Wymagany cytat. Hipoteza Sapira-Whorfa nie jest w żaden sposób powszechnie akceptowana, szczególnie w jej silnej formie.
Muhammad Alkarouri

4

Niemożność posiadania uniwersalnego języka z technicznego punktu widzenia? To totalny nonsens. Państwo moglimieć uniwersalny język, który obejmuje wszystkie podstawy. Problem jest głównie historyczny: różne języki zostały wymyślone, aby robić różne rzeczy i być używane w różnych społecznościach. Wielu z nich utknęło. Dodaj do tych preferencji (vi! Emacs! Czekaj, miałem na myśli Java! C #, czekaj miałem na myśli Microsoft, Open Source, itp. Itd. Itp.) I ogólne osadzanie historycznych wypadków ... Spójrz na naturalne języki w małym kraju jak niektóre kraje europejskie, aby zobaczyć, jak szalony może stać się ten temat. Niektóre miasta mają swoją dumę i radość, mały dialekt, że tylko oni mówią. Narody i społeczności programistów nie różnią się tak bardzo, ani społeczności programistyczne nie są bardziej racjonalne. Gdyby tak było, wszyscy mówilibyśmy esperanto i programowali w Universal coś, coś ...


1
Problem jest głębszy. Im więcej opcji udostępnisz, tym więcej musisz określić jawnie, zamiast być jedynym domniemanym sposobem działania w tym języku. Problemy stają się bardziej oczywiste, jeśli zamiast porównywać Javę z C #, porównujesz Javę z Prologiem. Posiadanie cech obu w jednym języku skomplikowałoby składnię języka złożonego. Bardziej rozsądnym wyborem może być ograniczenie składni do minimum i umożliwienie implementacji dowolnej funkcji jako biblioteki metaprogramowania. To w zasadzie robi Lisp, chociaż jego rdzeń nie jest wystarczająco niski do niektórych zadań.
Steve314,

4

Błędem jest myśleć, że „łączenie wszystkich funkcji” poprawi język.

Bardziej prawdopodobne jest, że skończysz z rozdętym, złożonym, nieczytelnym bałaganem.

Dobry projekt językowy wymaga wyboru i kompromisów. Prawdopodobnie najlepszymi / najbardziej rewolucyjnymi / odnoszącymi największe sukcesy językami są te, które wyjmują coś i zapewniają lepszą alternatywę niż dodawanie nowych rzeczy. Np.

  • Strukturalne języki programowania (C, Pascal) - usuwa „goto”, zastępuje procedurami i pętlami strukturalnymi itp.
  • Java - wyjmuje „ręczne zarządzanie pamięcią”, zastępuje GC / pamięcią zarządzaną
  • Haskell / Clojure - usuwa „niekontrolowany stan zmienny”
  • Lisp - usuwa większość „składni językowych”, zastępuje je elastycznym homoikonicznym drzewem wyrażeń s

Na górze jest świetna rozmowa wuja Boba Martina - The Last Programming Language


„Strukturalne języki programowania (C, Pascal) - usuwa„ goto ”, zastępuje procedurami i pętlami strukturalnymi itp.” - Przepraszamy, mylisz się: C ma goto. Ale podoba mi się reszta odpowiedzi. Najważniejsze, że C pozwala ci nie dbać o to, gdzie dokładnie w pamięci jest wszystko i co znajduje się w jakim rejestrze, o której godzinie, i ukrywa licznik programu (pod względem dokładnego adresu, na którym on siedzi, ponownie. Możesz go przenieść prawie na poziomie precyzji montażu z goto).
Wyatt8740,

0

Nie ma żadnego narzędzia, które ma wszystkie najlepsze funkcje. Na przykład fajną funkcją Javascript i Scheme jest to, że są małe, więc jeśli zaczniesz pakować funkcje, już na tym straciłeś.

Wciąż Cobra wygląda obiecująco w kierunku posiadania wszystkich fajnych funkcji z innych języków. :-)


0

Ponieważ jeśli stworzysz taki język, będzie to kolejny nowy język. Możesz mieć dużą rzeszę fanów, ale wszystkie pozostałe języki nadal będą istnieć.

C wciąż istnieje, mimo że od tego czasu wymyślono wiele nowych języków.

Można powiedzieć, że python jest tak uniwersalnym językiem, ale jest też rubin.

Powodem istnienia wielu języków jest po prostu to, że jest wielu programistów, a niektórzy z nich lubią tworzyć nowe języki.

Powodem, dla którego nie ma jednego uniwersalnego języka, na który wszyscy się zgadzają, jest to, że programowanie jako rzemiosło nie jest podyktowane żadną instytucją, która podejmuje całą decyzję. Każdy może robić, co chce.

To dobra rzecz.


Twierdziłbym również, że nie jest to ani dobry, ani zły, ale raczej artefakt z faktu, że inżynieria oprogramowania nie ma nawet stu lat i jest bardzo niedojrzała w porównaniu z każdym innym rodzajem istniejącej inżynierii.
Michael,

0

Przy tym wszystkim, co napisano do tej pory, trudno jest dodać wiele nowych uzasadnień, ale dodam kilka.

  • Ewolucja: nie tylko systemy biologiczne są wprowadzane, mutowane i poddawane najsilniejszej konkurencji o zasoby i niszę, którą można nazwać własną. Konkurs jest dobry i przyspiesza.

  • Dojrzałość: Tworzymy języki komputerowe prawdopodobnie przez mniej niż sto lat. Nie możemy jeszcze uzyskać odpowiedzi, ponieważ nie znamy jeszcze wszystkich pytań.

  • Osobna geneza: Nie jestem pewien, czy to właściwe słowo, ale na świecie istnieje wiele systemów pisania, które zaczęły się w wielu regionach geograficznych. Pomyśl o klinie, który był częściowo podyktowany wymogami rzeźbienia w glinianych tabliczkach. Pomyśl o sanskrycie, alfabecie greckim, hebrajskim, rzymskim, arabskim. Hieroglify, chińska metoda pięknego pisania z ponad 6000 symbolami, która jest wspólna w wielu krajach Azji Wschodniej. Pomyśl o bardziej współczesnych mieszanych alfabetach o podłożu fonetycznym, takich jak cyrylica, katakana i Hirigana. Nie jestem lingwistą, więc nie rozpalajcie zbyt surowo nieścisłości, ale kiedy kultury na całym świecie czegoś potrzebują, stworzą to i zrobią to z konieczności. Języki komputerowe pojawiły się, gdy było dużo komunikacji na całym świecie i podobnie jak systemy Imperial i Metric, pochodzi z miejsc o silnym przywództwie pomysłowym. Ale języki programowania służą wielu różnym kulturom (niektóre są kulturami korporacyjnymi), więc odzwierciedlają ludzi, którzy je stworzyli. Języki komputerowe mają dziedzictwo kulturowe, które ukształtowało ich design i zastosowanie. W kulturze jądra systemu operacyjnego C i C ++ raczej nie będą wkrótce przestarzałe dla Javy (lub na odwrót), ponieważ umożliwiają generowanie natywnego kodu, bliskie / wydajne sprzężenie ze sprzętem do tworzenia warstw abstrakcji sprzętowej, a także mają znaczną liczbę zainstalowanych.

  • Projektowanie projektu: Języki programowania powstają przy użyciu różnych paradygmatów organizacyjnych. COBOL i Ada pochodziły z komitetów wchodzących w skład DOD, które miały dużą hierarchię. Jeśli dobrze pamiętam, C, C ++, Java i prawdopodobnie wiele innych pochodzi od jednego lub małej liczby projektantów. Fred Brooks porównuje wyniki komitetu z podejściem opartym na wizji w swoim artykule Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Gdybyśmy dzisiaj usiedli, aby wybrać Da Vinci lub komitet do zdefiniowania uniwersalnego języka programowania, czy wiedzielibyśmy, kto lub jaką metodą powinien być zaprojektowany?


0

Może to trochę inaczej:

Co to jest język Mówiąc wprost, jest to słownictwo, składnia i semantyka.

Jaka jest Twoja pierwsza rzecz w języku programowania?
Ty definiujesz rzeczy - klasy, zmienne, metody - poszerzasz słownictwo i semantykę.

Dlaczego? Więc teraz możesz powiedzieć w nim rzeczy, których wcześniej nie mogłeś powiedzieć.
Czy ci się to podoba, czy nie, stworzyłeś nowy język specjalnego przeznaczenia.

IMHO, rzeczą, której należy szukać w języku ogólnego przeznaczenia, jest to, czy ułatwia tworzenie języków specjalnego przeznaczenia.


0

Oprócz argumentu szwajcarskiego noża wojskowego (który ma rację - trudniej jest zaprojektować dobry język o szerokim spektrum niż specyficzny dla domeny - ale to nie znaczy, że taki język nie byłby jednocześnie jednym i drugim. możliwy i dobry pomysł), występują problemy z „łączeniem najlepszych funkcji”:

  • W przypadku cech językowych „najlepszy” jest subiektywny lub przynajmniej (nieskończenie często) dyskusyjny.
  • Niektóre funkcje nie są kompatybilne; dobra funkcja z jednego języka może wybuchnąć w połączeniu z dobrą funkcją z innego języka.
  • Nie skończyliśmy jeszcze wymyślać nowych funkcji.

Krótko mówiąc, projektowanie języka jest trudniejsze i bardziej skomplikowane. Chociaż możesz rzucić okiem na Scalę .



-2

Istnieje uniwersalny język programowania. Nazywa się to „językiem maszynowym” i wszystko w innym języku komputerowym jest ostatecznie wykonywane jako język maszynowy.

Jak to wygląda? Ciąg 0–9 i AF.

Ale to dziwka w użyciu. Dlatego Alan wymyśla język, który można przetłumaczyć na język maszynowy i jest bardziej odpowiedni do tego, co Alan chce robić. Bill wymyśla inny język dla tego, co Bill chce zrobić. Wkrótce masz Cobol i Fortran, Lisp i Java. Wszystkie są po prostu uproszczoną wersją języka maszynowego, łatwiejszą do pisania niektórych rodzajów programów, ale trudniejszą lub niemożliwą do napisania innych rodzajów programów. Jeden jest dobry do rozliczania, drugi jest dobry do kontrolowania promu kosmicznego.


6
Język maszynowy nie jest uniwersalny; nawet nie blisko. Każda maszyna ma swój własny język.
hasen

3
Ponadto nie jest to ciąg 0-9 i AF. Są to 1 i 0.
David Conrad

@hasen @David czy nie ma sensu sugerować, że @Andy ma, że ​​każdy język jest z jednego punktu widzenia językiem specyficznym dla domeny, zbudowany na innych językach?
Armand

Powiedziałem 0-9 i AF, ponieważ właśnie to musiałeś wiedzieć, aby używać kodów wielopunktowych na klawiaturze. Wygląda jak 0-1 lub 0-15 lub 0-255, jeśli weźmiesz go jako liczby, w zależności od tego, jak duży kawałek na raz. Hansen ma rację; każdy TYP maszyny ma swój własny język. Prawie wszystkie komputery obecnie akceptują kody 80386; nawet mój telefon to zrobi! Ale iPad nie.
Andy Canfield,

@hasenj i o bardzo różnych cechach. Sposób myślenia wymagany do programowania 6502 różni się od programowania x86, a z kolei różni się od układu RISC. Bardzo daleko od uniwersalności.

-2

Właśnie dlatego,

nie ma UNIWERSALNEGO komputera.

nie jest to forma UNIWERSALNA.

nie programista UNIWERSALNY.

a nawet klienta UNIWERSALNEGO.

: P

Po prostu potrzebujemy innego dla innego. ;)


-2

Większość odpowiedzi tutaj koncentruje się na użyciu najlepszego narzędzia dla każdego problemu. Nie wierzę, że to wystarczający powód.

Jeśli spojrzysz na duże firmy, zwykle firma będzie miała tendencję do używania jednego (lub niewielkiej liczby) języków i technologii, nawet jeśli dla konkretnego projektu istnieje jakiś lepszy język.

Dzieje się tak, ponieważ korzyści wynikające z ulepszonej standaryzacji, łatwiejszego wsparcia, udostępniania kodu itp. Są (w większości przypadków) większe niż wartość dodana określonego języka.


1
Nigdy nie widziałem żadnego przyzwoitego projektu korporacyjnego wykorzystującego mniej niż 4 różne języki. I nie wierzę w żadną z tych „korzyści” z wyboru nieodpowiednich narzędzi. To nigdy nie działa.
SK-logic

-3

Myślę, że wszystkie odpowiedzi „ponieważ nie rzeźbicie rzeźb ołówkiem” nie mają sensu.

Kto tutaj, PRAWDZIWY wybiera język przed każdym nowym projektem?

Prawda jest taka, musimy tylko kilka języków programowania, a świat programowania byłoby lepiej ten sposób: ludzie koncentrują się na tworzeniu się języka skryptowego lepiej zamiast być rozproszone w python / ruby / perl / younameit na przykład.

C # jest programowany na / dla Windows (w porządku, jest Mono, ktoś tutaj codziennie uruchamia C # pod aplikacją Mono?), Co powoduje, że użytkownicy kupują Windows7 / 8 i to zarabia dla Microsoftu.
Inne firmy robią to samo, a następnie Open Source wie lepiej, a także pan geniusz ... i mamy wiele podobnych języków, to po prostu egocentryczna natura ludzkości.


Uzgodnione - w większości naprawdę potrzebujemy tylko wysokiego poziomu „bezpiecznego” języka, niskiego poziomu „niebezpiecznego” systemowego języka programowania, wszystkich języków asemblera (jednego na procesor, są nieuniknione, ale ukryte), a także specjalnego przeznaczenia (specyficznego dla domeny) języki (np. SQL). Prawdziwy problem polega na tym, że nikt nie może zadeklarować języka jako „przestarzały” (nawet jeśli projektant języka próbuje to zrobić - np. Python 2 vs. Python 3). Corocznie więcej nowych języków i brak starych języków oznacza, że ​​w końcu będzie używanych więcej języków niż programiści. ;-)
Brendan

-5

Musimy spojrzeć na ekonomię, aby odpowiedzieć na to pytanie. Gdyby zaoszczędzić pieniądze na biznes tylko w jednym języku, to byśmy go mieli. Ujednoliciliby go i wymagaliby od niego wszystkich. Inne języki marnieją w zakurzonych budynkach akademickich i piwnicach entuzjastów o dzikich oczach. Tak się nie stało, więc nie mogą one stanowić zachęty do generowania zysków w uniwersalnym języku programowania, ponieważ w przeciwnym razie ewoluowałby naturalnie.


1
„Oszczędzone pieniądze” są (pomimo najlepszych starań księgowych) niejasną i mglistą koncepcją w całym cyklu życia. Podobnie jak mechanicy nie zdołali ustandaryzować nawet jednego rozmiaru klucza, nie mówiąc już o całym zestawie narzędzi, inżynieria oprogramowania nie zdołała ustandaryzować, ponieważ istnieje tak wiele kryteriów wyboru narzędzia (języka), a nawet procesora / systemu operacyjnego / środowiska
Andrew
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.