2016-02-27 26 views
6

Co jest nie tak z Prolog?Prolog vs Erlang (i inne języki funkcyjne)

Prolog jest całkiem niezły z listami i dopasowaniem do wzorca, a oferuje bonusy. A jednak przez dziesięciolecia pozostaje językiem osobnym, podczas gdy języki funkcjonalne rozkwitają i rozmnażają się.

Weźmy Erlang jako przykład. Jego składnia jest zapożyczona z Prologu, początkowo została zaimplementowana z Prologiem, co jest naprawdę interesujące. To znaczy, z punktu widzenia ludzi Erlanga, jest coś zasadniczo nie tak z Prologiem, albo dostosowaliby Prolog do swoich potrzeb.

+1

Czy istnieje system, w którym działa Erlang większy niż [czym zajmuje się Prolog] (https://www.sics.se/projects/sicstus-prolog-leading-prolog-technology)? – false

Odpowiedz

13

Moim zdaniem, Prolog jest teraz zaczynając od, aby stać się interesującym, a jury nadal nie jest na to pytanie.

Tak, Prolog ma znacznie dłuższą tradycję niż Erlang. Jest to również bardziej złożony język z punktu widzenia implementacji! O wiele trudniej jest nauczać, zaostrzany na przykład faktem, że zadania, które byłyby nierozstrzygalne dla początkujących we wszystkich innych językach, są tradycyjnie podane jako pierwsze przykłady dla początkujących Prolog.

Pierwsze backtracking, zbieranie śmieci, aliasing, przypisane zmienne, ograniczenia wyjątek przeładunkowe i wiele innych rzeczy, które Prolog dajeprawo i efektywne natomiast uhonorowanie ich często bardzo subtelne współzależność jest coś, co zrozumiałe, nie mogą być osiągnięte w ciągu zaledwie kilka dekad, nawet jeśli uczestniczą w nim najbardziej utalentowani i wykształceni programiści. Wiele obecnie dostępnych systemów Prolog dociera właśnie do punktu, w którym można je poważnie wykorzystać w środowiskach produkcyjnych.

Jest stosunkowo łatwo zrobić efektywną i poprawną wersję Prologu. Nie tyle za prawdziwą rzecz.

Dla porównania, weź każdy poważny program i zobacz, ile czasu zajęło jego wdrożenie. Najciekawsze programy są nadal poważnie rozwijane nawet dekady po ich pierwszym wydaniu. To samo dotyczy Prolog, a pełnoprawny system Prolog z pewnością daje znacznie więcej niż wiele innych implementacji językowych.

I robimy chce prawdziwą rzeczą! Tak, tak, coś jest nie tak z Prologiem: Trudno jest właściwie wdrożyć. Ale w Prologu jest o wiele więcej, co wynika z mnóstwa cech wymienionych powyżej: Po pełnym wdrożeniu, Prolog jest niesamowitym niesamowitym i niezrównanym środowiskiem programistycznym dla wszelkiego rodzaju zadań, od dowodzenia twierdzeń po hosting , rozwiązywanie problemu optymalizacji kombinatorycznej, generowanie przypadków testowych i wiele innych aplikacji, które teraz powstają.

Na przykład obecnie opracowywane są procesy typu Erlang dla Prolog. Zobacz na przykład Torbjörn Lager's Pengines.

Dlaczego obecnie tylko w firmie Prolog dostępne są obecnie (tj. Ostatnie 2 lata)? Całkiem proste: wiele systemów Prolog (w tym przypadku: SWI-Prolog) nie było do tej pory wystarczająco wydajnych, aby działać nieprzerwanie na serwerach 24x7. A dlaczego tak jest? Ponownie, ponieważ trudno jest uzyskać to prawo w Prologu ze względu na subtelną współzależność jego wielu zaawansowanych funkcji. Powoli w końcu dotarliśmy.

Prolog za wygraną!

+0

FWIW właśnie wymienił e-maile z Torbjornem, mówi, że procesy są martwe. Ale pengines na pewno nie są – Anniepoo

+0

Myślę, że masz rację w tym sensie, że (otwarte) systemy osiągają teraz poziom dojrzałości, co czyni je interesującymi dla prawdziwej pracy. Myślę, że głównym powodem, dla którego trwało to tak długo, nie jest to, że jest to trudne, ale bardziej, że zasoby programistyczne są fragmentaryczne w zbyt wielu implementacjach. Teraz mamy wiele dobrych wdrożeń. Mimo to każdy z nich ma zupełnie inny akcent. Idealnie powinniśmy usiąść razem i złożyć nowy system, który łączy szybkość YAP z tablicą XSB, ograniczenia ECLiPSe i środowiska oraz interfejsów SWI-Prolog. –

+2

Zgodność też pomogłaby. – false

3

Język musi być w stanie sortować rzeczywiste problemy lepiej niż inne języki, aby stać się głównym nurtem. Mówiąc o Erlangu, byłoby to niczym innym jak innymi funkcjonalnymi językami, jeśli nie jego zdolnością do miękkiego programowania w czasie rzeczywistym z zapobiegawczą wielozadaniowość, zdolną poradzić sobie z milionami równoczesnych zadań. To plus zdolność do działania w VM tworzy naprawdę potężną kombinację. W tym sensie te dodatki sprawiły, że Erlang był wyjątkowy. W rzeczywistości jest to jedyny język programowania actor-oriented, szeroko stosowany w branży.

Zobacz, jak wiele różnych dialektów C/C++ zostało utworzonych, a C/C++ wciąż znajduje się w głównym nurcie. Te nowe dialekty po prostu nie dawały żadnej przewagi nad tym, co już było (lub w ogóle za mało).

Jestem pewien, że Prolog ma swoją niszę, ale nie dostarcza zbyt wielu informacji o tym, jakie inne języki są w stanie dostarczyć, a shortlist of problems on Wikipedia sugeruje również pewne warte rozważenia racje.

+2

To wygląda na odpowiedź na inne pytanie. –

+0

Dlaczego? Pytanie brzmiało, dlaczego Prolog nie stał się głównym nurtem, a Erlang (przynajmniej w pewnym stopniu). Wyjaśnia, co Erlang dodaje, że Prolog nie ma i jak pomaga Erlang wygrać użytkowników. – Amiramix