Języki programowania logicznego już od ponad dwudziestu lat. Mimo spodziewanych korzyści języku bardzo wysokim poziomie w oparciu programowania rozwiniętych teorii logiki ponad konwencjonalnych języków programowania (takich jak C, C ++, Pascal i Ada) nie miały istotnego wpływu na branży komputerowej.
Rtęć jest nowy język logiki / programowanie funkcyjne, które łączy w sobie klarowność i wyrazistość deklaratywnego programowania z zaawansowanych funkcji analizy statycznej i wykrywania błędów.
Rtęć jest wysoce zoptymalizowany algorytm wykonanie zapewnia wydajność znacznie przekraczającą istniejących systemów programowania logicznego, i blisko do konwencjonalnych systemów programowania.
Rtęć zajmuje się problemami rozwoju programu na dużą skalę, umożliwiając modułowość, oddzielne kompilacji, oraz liczne optymalizacja / czas kompromisów
Co nowego w tym wydaniu:.
- Ten naprawiające błędy poprawki uwolnienia zbudować problemy na Solaris i NetBSD i dodaje wsparcie dla wyboru kompilatora C # w czasie konfiguracji.
- Różne inne drobne błędy zostały naprawione.
- Są też pewne drobne dodatki do biblioteki standardowej.
Co nowego w wersji 13.05:
- generacja 64-bitowych plików wykonywalnych w systemie Windows jest teraz.
- czas kompilacji dla bardzo dużych programów zostały ulepszone.
- Kilka nowych optymalizacje reprezentacji typu zostały dodane.
- debugger ma teraz lepsze wsparcie dla obsługi połączeń klik wzajemnie rekurencyjnych na stosie.
- wiązania w bibliotece GLFW został dodany do dystrybucji dodatków.
- Zespoły generowane z C # backend może zostać podpisany z silnym nazwie.
Co nowego w wersji 11.01:
- Dodaliśmy dwa nowe rodzaje zakresów do języka.
- Zakres wprowadzone przez jednego z nowych słów kluczowych require_det, require_semidet, require_multi, require_nondet, require_cc_multi, require_cc_nondet, require_erroneous i require_failure, jak sama nazwa wskazuje, wymaga cel wewnątrz zakresu mieć daną determinizm.
- Zakres wprowadzony przez require_complete_switch słów kluczowych wymaga cel wewnątrz zakresu, jeśli jest to przełącznik na zmiennej o nazwie zakresem, być kompletne switch, czyli mieć broń dla wszystkich symboli funkcyjnych w rodzaju włączonego zmiennej.
- Dodaliśmy semidet tryby hash_table.fold / 4 i version_hash_table.fold / 4.
- Dodaliśmy nowe predykaty i funkcje modułu assoc_list. Predykaty map_keys_only / 3 map_values_only / 3 i map_values / 3 uzupełnieniem funkcje o tej samej nazwie. Predykaty filtrować / 3, negated_filter / 3, filtr / 4, łączenie / 3, które również posiadają wersje funkcji, do pracy bardzo podobnych do orzeczników o tej samej nazwie w module listy, ale czy odpowiednie działania na klawiszach, a nie całą elementy listy.
- Przeszliśmy moduł oceny leniwy z dystrybucją dodatków i do nowego standardowego modułu biblioteki o nazwie `leniwi". To zostało również backend-agnostykiem.
- Dokonaliśmy zmian w module listy standardowej biblioteki:
- Dodaliśmy nową źródłowe list.member_index0 / 3. To jest jak list.member / 2, z wyjątkiem, że to również przyjmuje parametr reprezentujący indeksu od zera do elementu w liście.
- Dodaliśmy nową źródłowe list.map3_foldl / 7, który mapuje na liście produkuje trzy listy i jeden złożony wartość.
- Dodaliśmy semidet tryby z unikalnych akumulatorów dla list.foldl3 / 8, list.foldl4 / 10, 12 / list.foldl5 i list.foldl6 / 14.
- Dodaliśmy predykaty podzielić / 4/4 i divide_by_set do modułu tree_bitset standardowej bibliotece.
- Dodaliśmy predykaty set_ctree234.member / 2 i set_ctree234.non_empty / 1. Musimy dodać funkcję set_ctree234.from_list / 1.
- Dodaliśmy set_bbbtree.count orzecznik / 2 i set_bbbtree.count funkcji / 1. Zastępują orzecznik set_bbbtree.size / 2, który jest teraz przestarzała.
- Dodaliśmy orzecznik set_ordlist.non_empty / 1.
- Dodaliśmy set_tree234.non_empty źródłowe / 1 oraz set_tree234.from_list funkcji / 1.
- Dodaliśmy predykaty set_unordlist.non_empty / 1 i set_unordlist.count / 2, a funkcja set_unordlist.count / 1.
- Wszystkie moduły w bibliotece standardowej, które wdrażają zestawu ADT, (zestaw, set_ordlist, set_unordlist, set_bbbtree, set_tree234 i set_ctree234), obsługują obecnie składanych przez zestawy z maksymalnie sześciu akumulatorów. Tryby, które zapewniają wyjątkowe i najczęściej powtarzających się akumulatory do kompletu krotnie dodano również.
- Zrobiliśmy następujące zmiany do modułu tablicy standardowej biblioteki:
- Dodaliśmy funkcje unsafe_elem / 2 i dołączyć / 2.
- Dodaliśmy predykaty svset / 4, unsafe_svset / 4, foldl2 / 4, foldl2 / 6, foldr / 4, foldr2 / 6, map_foldl / 5, map_corresponding_foldl / 6, a członek / 2.
- Dodaliśmy predykaty version_array.foldl2 / 6, version_array.foldr / 4, i version_array.foldr2 / 6 do biblioteki standardowej.
- Dodaliśmy semidet tryby z unikalnych i najczęściej powtarzających akumulatorów dla następujących predykatów:
- bimap.foldl2 / 6
- bimap.foldl3 / 8
- cord.foldl_pred / 4
- cord.map_foldl / 5
- list.map_corresponding_foldl2 / 8
- list.map_corresponding_foldl3 / 10
- list.map_corresponding3_foldl / 7
- map.foldl3 / 8
- Dodaliśmy orzecznik unsorted_aggregate2 / 6 do modułu rozwiązań z biblioteki standardowej.
- Dodaliśmy kilka predykatów i funkcje modułu wymaga standardowej bibliotece. Predykaty przepraszam / 2 i przepraszam / 3 Raport brak funkcji, podczas gdy predykaty nieoczekiwane / 2 i nieoczekiwane / 3 Raport wewnętrzny błąd w programie; wszystkie posiadają wersje funkcji też. Orzecznik spodziewać / 3 Połączenia nieoczekiwane, jeśli warunek nie jest spełniony. Mamy teraz spodziewać / 4, jak również spodziewać / 3. Dla spodziewać / 4, jak również spodziewać / 3, pierwsze i ostatnie argumenty są spodziewane stan i komunikat o błędzie, odpowiednio, ale oczekują / 4, są dwa argumenty w środku, aby określić lokalizację błędu (zazwyczaj nazwy modułu i orzeczenia, odpowiednio). Dodaliśmy również expect_not / 3/4 i expect_not, które są jak oczekiwać i spodziewać / 3/4 z tym wyjątkiem, że oczekują stan się * false *, nie jest prawdą.
Co nowego w wersji 10.04.2:
- Ta wersja jest wersją bug-fix. Wiele problemów, które spowodowały, że kompilator przerwać zostały ustalone, niektóre połamane operacje RTTI w klasie java zostały ustalone i dodaliśmy obejście problemu z GCC 4.4.
Ograniczenia :
- Obecna implementacja nie w pełni jeszcze wdrożyć język Mercury'ego. Główne ograniczenia bieżącej realizacji są następujące:
- Nie zezwalamy na określony aliasing w systemie trybu. Bez tego, częściowo instancja tryby są bezużyteczne, a więc są zagnieżdżone unikalne tryby.
- kompilator nie używa jeszcze struktury ponowne wykorzystanie lub kompilacji zbieranie śmieci wykorzystać unikalne tryby.
- Typ i tryb wnioskowania są nieco niedoskonały.
- W bbli Ponadto decyzje projektowe w tym implementacja zostały nałożone następujące ograniczenia:
- predykaty i funkcje może mieć co najwyżej około 1000 argumentów.
- wyższego rzędu może mieć co najwyżej około 500 argumentów.
Terminy
Komentarze nie znaleziono