Nimrod jest open source, wolne, statycznie wpisane, konieczne język programowania zaprojektowany do obsługi proceduralnego, obiektowego, rodzajowe i funkcjonalne stylów programowania, pozostając jednocześnie skuteczne i proste.
Nimrod jest w stanie abstrakcyjne drzewo składni (AST), jako część specyfikacji, umożliwiając potężny system makro, które można wykorzystać do tworzenia języków specyficznych domen. A cechy odziedziczone Lisp.
Oprogramowanie posiada natywną generowanie kodu, zbieranie śmieci, zero napowietrznych iteratory, operatorów definiowane przez użytkownika typy danych, wysokim poziomie, skompilować ocenę czasu, naprzód kompatybilność, GTK2, Windows API, API, POSIX powiązania systemu nadający się do wetknięcia parser generator dokumentacji oraz Pascal do Nimroda narzędzie do konwersji.
Nimrod jest przenośne, co oznacza, że może działać na platformie Linux, BSD, Mac OS & nbsp; X & nbsp; i Windows Systemy operacyjne
Co nowego w tym wydaniu:.
- Poprawki błędów:
- nie stara GC prawidłowo zbierane cykli. Naprawiono ale może spowodować regresję wydajności. Jednak można wyłączyć kolektor cyklu z GC_disableMarkAndSweep i uruchomić go wyraźnie w odpowiednim czasie lub wcale. Jest też nowy GC można aktywować z --gc:. MarkAndSweep które nie mają tego problemu, ale jest wolniejszy w ogóle i nie ma gwarancji, w czasie rzeczywistym,
- Obsada pływających typy punktów teraz robi bitcast jak podano w instrukcji. To łamie kod, który błędnie używa obsady konwertować różne wartości zmiennoprzecinkowe.
- wydajność modułu SCGI została znacznie się poprawiły, nie będzie już blokować na wielu jednoczesnych żądań.
- W sumie ponad 70 problemów stałe i GitHub ponad 60 wniosków połączyła ściągać.
- Biblioteka Dodatki:
- Jest nowy eksperymentalny znak & Sweep GC, które mogą być szybsze (lub znacznie wolniej) niż domyślny GC. Włącz się --gc:. MarkAndSweep
- Dodane system.onRaise wspierać system warunku.
- Dodane system.locals, które zapewnia dostęp do miejscowych Proc w.
- Dodane macros.quote dla AST quasi-cytowania.
- Dodane system.unsafeNew wspierać hacky zmiennych obiektów długości.
- system.fields i celem wsparcia system.fieldPairs zbyt; kiedyś tylko krotki wsparcia.
- Dodane system.CurrentSourcePath powrocie pełną ścieżkę systemu plików bieżącego pliku źródłowego.
- Teraz moduł makra zawiera wiele przydatnych pomocników na budowanie abstrakcyjnych drzew składni.
- Zmiany wpływające na wsteczną kompatybilność:
- dzielona jest kluczowe teraz.
- Nieaktualne sockets.recvLine i asyncio.recvLine dodał readLine zamiast.
- sposób wcięcie jest obsługiwane przez parser zmienił się znacząco. Ma to jednak bardzo małe (jeśli w ogóle) kodu świata rzeczywistego.
- Wyrażenie / Ochrona Zjednoczenie został wdrożony. Ponownie dotyczy to jedynie przypadki krawędzi i nie znany kod rzeczywistym świecie.
- Zmieniono interfejs asynchronicznej modułu scgi.
- WideStrings teraz śmieci zebrane podobnie jak inne rodzaje strun.
- Compiler Dodatki:
- polecenie zmienna doc2 nie generuje wyjście dla całego projektu już. Użyj nowego przełącznika --project włączyć ten problem.
- kompilator ostrzegał o cienistych zmiennych lokalnych. Jednak to musi być włączona wyraźnie poprzez --warning [ShadowIdent]:. Na
- kompilator obsługuje niemal każdy pragmy w Pragma push.
- Generic konwertery zostały wdrożone.
- Dodane bardzo eksperymentalny noforward pragmy umożliwia specjalny tryb kompilacji, które w dużym stopniu eliminuje konieczność terminowych zgłoszeń.
- Dodatki Język:
- wyrażenia przypadków są teraz obsługiwane.
- Tabela naśladować teraz bardziej ścisłe składnię instrukcji case.
- Nimrod mogą wnioskować typ zwracanej przez proc ze swojego ciała.
- Dodano deklarację wpływać wstawionej symbol wiążących zasad w generyków.
- śledzenia Wyjątek został dodany i polecenia zmienna doc2 annotates ewentualnych wyjątków dla Ciebie.
- zdefiniowane przez użytkownika (efekty & quot; znaczniki & quot;). Śledzenia został dodany i polecenia zmienna doc2 annotates możliwych tagów dla Ciebie
- Typy mogą być opatrzone nowym nie zerowe, aby jednoznacznie stwierdzić, że zero składni nie jest dozwolone. Jednak obecnie nie kompilator wykonuje sprawdzanie statyczne zaawansowanej tym; Na razie jest to jedynie do celów dokumentacyjnych.
- Ochrona eksport został dodany do języka: Może być stosowany do symboli spedycji tak moduły klienckie nie trzeba importować zależności modułu jest wyraźnie .
- przeciążenia podstawie ASTs został wdrożony.
- Leki generyczne są teraz obsługiwane przez wielu metod.
- Przedmioty mogą być inicjowane przez konstruktora obiektu wyrazu.
- Nie jest to nowa konstrukcja składniowa (;) jednoczące wyrażenia i oświadczenia, .
- Możesz teraz korzystać z modułu importu zero, jeśli chcesz zaimportować moduł, ale chce wymusić pełną dostęp do każdego symbolu w module.
Konstruktorzy
Co nowego w wersji 0.8.14:.
- Naprawiono poważne uszkodzenie pamięci dotycząca wiadomość przejściu
- Naprawiono poważny błąd dotyczący różnych dawałaby generycznego proc.
- Naprawiono błąd, gdzie nowo wprowadzony wyjątek EIO zły został podniesiony do końca pliku dla plików tekstowych, które nie kończą się znakiem nowej linii.
- Bugfix c2nim, c2pas: opcja --out nigdy nie pracował prawidłowo, .
- Błąd:. Spedycja proca generycznych nigdy nie pracował,
- Jeszcze kilka poprawek do makr i oceny w czasie kompilacji.
- GC bierze teraz pod uwagę wewnętrzne wskazówki na stosie, które mogą być wprowadzone przez agresywnych optymalizujące C.
- rodzimych podzielnik Nimroda / GC działa teraz na PowerPC.
- Wiele innych poprawek. Zbyt wiele, aby je wszystkie
Co nowego w wersji 0.8.6:
- Poprawki błędów:
- pragmy podpowiedź [X]: jednorazowe i ostrzeżenie [X]: wyłączanie teraz pracować .
- Sposób połączenia składnia iteratorów znowu działa (dla x w lines.split ()).
- Naprawiono błąd w removeDir POSIX, które prowadzi do nieskończonej rekursji.
- kompilator sprawdza teraz, że nazwy plików są prawidłowe moduł identyfikatory.
- Puste wzorce dla pragmie dynlib są teraz możliwe.
- os.parseCmdLine wrócił błędne wyniki za końcowe białe znaki.
- niekonsekwentny wykorzystanie krotka (przy użyciu tej samej krotki z wymienionych dziedzin i bez) nie awarii generatora kodu więcej.
- lepiej jest komunikat o błędzie, gdy obciążenie jest w dynamicznym proc lib nie.
- Dodatki:
- Dodane system.contains dla otwartych tablic.
- Moduł PEG obsługuje teraz wyszukiwania operatora pętli @.
- Gramatyka / parser: SAD | IND jest dozwolone przed wszelkiego rodzaju zamknięcia uchwyt. Pozwala to na bardziej elastyczne kodu źródłowego formatowania.
- kompilator używa teraz tabelę powiązań dla sprawdzania symboli w kontekście powiązań. (Zobacz manual.html # szablony szczegółów).
- odrzutów & quot; & quot; & quot; moim długim komentarzu & quot; & quot; & quot; jest teraz zoptymalizowane dalej.
- Nowe --floatChecks: on | off przełączników i pragmy dla lepszego debugowania operacji zmiennoprzecinkowych. (Zobacz manual.html # predefiniowanych-przecinek rodzajów pływających do szczegółów.)
- instrukcja została poprawiona. (Serdeczne podziękowania dla Philippe Lhoste!)
- Zmiany wpływające na wsteczną kompatybilność:
- kompilator nie pominąć krok łączący już nawet jeśli plik nie został zmieniony.
- os.splitFile (& quot; .xyz & quot;) zwraca teraz (& quot; & quot ;, & quot; .xyz & quot ;, & quot; & quot;) zamiast (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Nazwy plików rozpoczynające się od kropki są obsługiwane w inny sposób.
- strutils.split (s: string, SEPS: set [char]) nie daje pusty łańcuch już. Takie zachowanie jest bardziej wskazane dla spacją podziału.
- kompilator teraz zatrzymuje się po przełącznik linii poleceń --version.
- Usunięto wsparcie dla enum dziedziczenia w parsera; enum dziedziczenie nie zostało udokumentowane tak.
- W polu msg z system.E_base ma teraz ciąg typu, zamiast CString. Poprawia to bezpieczeństwo pamięci.
Co nowego w wersji 0.8.2:
- Poprawki błędów:
- Przechodząc --hint [X]: wyłączanie lub --warning [X]:. Od jako argumenty wiersza poleceń kompilatora teraz działa,
- parametry domyślne szablony teraz pracować.
- Naprawiono problem bezpieczeństwa w system.copy.
- W przypadku String bez części innego generowane złego kodu.
- Różne poprawki dla modułu osproc; teraz działa w systemie Windows.
- Dodatki:
- Wprowadzone multi-metody.
- Kompilator wykrywa liczbę dostępnych procesorów i wykonuje kompilator C jednocześnie. To może być regulowana przez --parallel_build:. Przełącznika liczba_procesorów wiersza poleceń
- wzór na bazie dopasowania PEG poprzez moduł kołki.
- Dodane system.definedInScope.
- Dodane system.accumulateResult.
- Dodane os.walkDirRec.
- Dodane osproc.countProcessors.
- Dodane osproc.execProcesses.
- System konfiguracji obsługuje $ cc.options.linker.
- Połączony wyrażenie i typeDesc w gramatyki / parser. Pozwoli to na anonimowych proca bez lambda
- Wiele skrypty nie potrzebują GC: Nowy --gc: brak przełącznika wiersza polecenia może być używany do wykluczenia GC z pliku wykonywalnego .
- Zmiany wpływające na wsteczną kompatybilność:
- Biorąc adres się z wyróżnika obiektu jest już nieważne.
- Podjęcie proc do proc var jest dozwolona tylko dla proca oznaczonych procvar lub konwencji wywołującego! = Nimcall. Na razie to tylko powoduje ostrzeżenie, ale to okaże się błędem niebawem.
- System. & I system.add teraz odbierać openArray zamiast parametrów nast.
- Usunięto strutils.findSubStr i strutils.findChars. Zostały one przestarzałe w 3 wersjach.
- Moduł Unicode wykorzystuje odrębny typ dla TRune.
- Nieaktualne strutils.toString: użyć $ zamiast .
- Nieaktualne os.splitPath:. Zastosowanie os.splitPath, że zwraca krotkę zamiast
- Nieaktualne os.extractDir:. Korzystać splitFile (ścieżka) .dir zamiast
- Nieaktualne os.splitFilename: używać splitFile zamiast .
- Nieaktualne os.extractFileExt: używać splitFile zamiast .
- Nieaktualne os.extractFileTrunk: używać splitFile zamiast .
- Nieaktualne os.appendFileExt: używać os.addFileExt zamiast .
- Nieaktualne os.executeShellCommand: używać os.execShellCmd zamiast .
- Nieaktualne os.iterOverEnvironment. Ruchu os.envPairs zamiast
- Nieaktualne parseopt.init: używać parseopt.initOptParser zamiast .
- Nieaktualne parseopt.getRestOfCommandLine: używać parseopt.cmdLineRest zamiast .
- Nieaktualne os.pcDirectory: używać os.pcDir zamiast .
- Nieaktualne os.pcLinkToDirectory: używać os.pcLinkToDir zamiast .
- Nieaktualne osproc.executeProcess: używać osproc.execProcess zamiast .
- Nieaktualne osproc.executeCommand: używać osproc.execCmd zamiast .
Co nowego w wersji 0.8.0:
- Poprawki błędów:
- Naprawiono mały błąd, który powodował, kompilator nie zgłosić nieużywane przeciążone symbole
- stałe mały błąd dotyczący symbolem przeciążenia
- stałe literówka: jest to & quot; & quot ;, niejednoznaczna nie & quot; niejednoznaczną & quot; ; -)
- Kompilator wykrywa rekurencyjna to pliki
- system.card powinno działać ponownie,
- artykuły dla zestawu [char [] i tablicy char, T] powinny działać teraz,
- Dodatki:
- typy generyczne i wdrażane dwufazowy symbol wyszukiwania w procedur generycznych,
- parametry szablonu mogą być prawdziwe typy
- realizowane uogólnione literały surowe ciąg ident & quot; ABC & quot; jest skrótem dla ident (R '' abc & quot;)
- przeciążenia iteratory rozdzielczości są oddzielone od proca; iteratory teraz może mieć taką samą nazwę + podpis jako proca
- wyszukiwanie symbolem szablonów może być zakłócony przez nowego hasła wiążą
- kompilator teraz akceptuje --no_main przełącznik lepszego łącza interoperacyjności z innymi zebranych językach
- realizowane krotka rozpakowywania w sekcji var
- generator kodu emituje domyślnie: __assume (0); Visual C ++ (optymalizacji),
- kompilator sprawdza teraz, czy proc ma skutki uboczne; procuje zadeklarowane mieć żadnych skutków ubocznych są odrzucane, jeśli kompilator nie może zweryfikować to
- strutils operatora Format.% $ # Obsługuje teraz do automatycznego zliczania argumentu
- realizowane strutils.join
- Zmiany wpływające na wsteczną kompatybilność:
- dwufazowy symbolem wyszukiwanie odbywa się w procedurach generycznych,
- wiążą teraz słowo zarezerwowane; Wyjątkiem nie jest słowo zarezerwowane już
- abstrakcyjne typy zostały zmienione na różnych rodzajów; zatem wyraźna jest teraz słowo zarezerwowane; abstrakcyjne ma słowo zarezerwowane już
- system.openFile nieaktualne: wykorzystanie system.open zamiast
- system.closeFile nieaktualne: wykorzystanie system.close zamiast
- strutils.replaceStr nieaktualne: wykorzystanie strutils.replace zamiast
- strutils.deleteStr nieaktualne: wykorzystanie strutils.delete zamiast
- strutils.splitSeq nieaktualne: wykorzystanie strutils.split zamiast
- strutils.splitLinesSeq nieaktualne: zastosowania strutils.splitLines zamiast
- strutils.parseFloat nie akceptuje dodatkowy parametr startowy już
- Dokumentacja:
- instrukcja została poprawiona,
Co nowego w wersji 0.7.6:
- Poprawki błędów:
- Instalacja w systemie Windows Vista może teraz pracować z pudełka; spróbuj!
- Naprawiono błąd, który utrzymywał & quot; & quot modułów cykliczne; Przykład z pracy,
- nazwanych i nienazwanych mieszania parametry w wywołaniu procedury teraz działa,
- liczby ósemkowe z przedrostkiem 0C obsługiwane są teraz prawidłowo
- wyliczenia teraz może rozpocząć się z wartości ujemnych,
- parseInt, ParseBiggestInt teraz wyjątek, jeśli ciąg nie kończy się po analizowany numer
- kompilator obsługuje teraz oświadczenia najwyższego poziomu prawidłowo
- generowane katalog nimcache nigdy się nie kończy w slash
- CreateDir teraz pracuje dla światowych katalogach pod UNIX (& quot; / somepath / o & quot;)
- kompilator teraz wykonuje wykonywalny z wiodących & quot; ./& quot; w systemie UNIX,
- kompilator obsługuje stałe tablice wskaźników procedury
- Elif w sprawozdaniu przypadków działa teraz
- iteratory za pomocą parametru otwartej tablicy teraz pracować
- Naprawiono błąd, gdzie w niektórych kontekstach $ myEnum nie działa,
Co jest nowa w wersji 0.7.4:
- Instalacja w systemie Windows powinny działać teraz, jeśli katalog zawiera obowiązuje
- generator dokumentacji już tylko tynki dokumentacji komentarze
- `` `` jest dozwolone dla operatorów, jak instrukcja mówi,
- w rzadkich przypadkach kontrolę Strona została zoptymalizowana się, chociaż byłoby to konieczne,
- kilka poprawek dla typów krotki
- dodany `` unicode`` moduł do obsługi UTF-8
- dodany hostOS i hostCPU magii do `` modułu system``
- system.echo teraz akceptuje wiele argumentów,
- w optymalizacje: w niektórych przypadkach inline iteratorów teraz produkuje znacznie lepszy kod
- dodany cały program martwy eliminacja kod
- magia `` `Operator pracuje teraz dla wyliczeń
- w `` sekcjach const`` zaawansowane kompilacji ocena odbywa
- przemianowany na `` `` in_Operator`` contains``: `` in`` jest teraz szablon, który przekłada się na `` contains``
- zmienił się `` `` strutils.quoteIfSpaceExists`` strutils.quoteIfContainsWhite``
- parser jest teraz o wiele bardziej wrażliwe na missings przecinkami itp Jeśli dotyczy to kod za dużo, spróbuj uruchomić swój kod przez ładną drukarki.
- `` macros`` API nie jest już częścią `` modułu system``, aby skorzystać z tej API masz teraz zaimportować moduł `` macros``
- dodany tutorial
Co nowego w wersji 0.7.2:
- To jest wydanie poprawkowe. To najważniejsza poprawka jest to, że teraz znowu działa Nimrod na AMD64 (x86_64) procesorów.
- Brak nowych funkcji, które zostały wprowadzone w życie.
Co nowego w wersji 0.7.0:
- różne poprawki błędów, zbyt wiele, aby wymienić je tutaj
- instalacja dla systemów UNIX, nie zależy od Pythona dłużej
- `` koch.py`` skrypt działa teraz w starszych wersjach Pythona (w tym 1.5.2)
- operacje zmianie całkowite i zasady konwersje
- dodany i `` `` GC_ref`` procs GC_unref``
- sekwencje muszą teraz być zbudowany z `@` `` operatora. Prowadzi to do mniej dwuznaczności.
- kompilator teraz używa mniej pamięci i jest znacznie szybsze,
- GC jest teraz o wiele szybciej,
- nowe wiązania: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- wygenerowany kod C jest znacznie szybszy w celu optymalizacji GCC
- nowe biblioteki: strumienie, zipfiles
- kompilator Nimrod został przeniesiony do FreeBSD: to powinno działać na innych BSD zbyt
Wymagania :
- Python
Komentarze nie znaleziono