Euforia Aby C Tłumacz

Original: http://rapideuphoria.com/e2c.htm

1. Wprowadzenie

Euforia na C Tłumacz przełoży dowolny program Euphoria do równoważnego kodu źródłowego C.

Istnieją wersje dla systemów Windows, tłumacz DOS, Linux i FreeBSD. Po przetłumaczeniu programu Euphoria do C, można skompilować i połączyć za pomocą jednej z obsługiwanych kompilatory C. To daje plik wykonywalny, który zazwyczaj uruchomić znacznie szybciej niż w przypadku korzystania z tłumacza Euphoria.

Tłumacz może tłumaczyć / kompilacji * się * do pliku wykonywalnego dla każdej platformy.Tłumacz jest również w tłumaczeniu / kompilacji część frontonu interpretera.Kod źródłowy jest w euforii Tłumacz \ źródła. Jest napisany w 100% w Euphoria.

2. Obsługiwane kompilatory C

Tłumacz obecnie współpracuje z GNU C w systemie Linux lub FreeBSD, albo z Watcom C lub C na DOS djgpp i albo z Watcom C, LCC lub Borland 5.5 w systemie Windows. Są to darmowe kompilatory. GNU C będzie już istnieją w systemie Linux lub FreeBSD. Pozostałe można pobrać z ich stron internetowych. W przypadku systemu Windows, zalecamy Watcom lub Borland na LCC. LCC jest nadal aktywnie rozwijany i jest coraz lepiej, ale ma kilka błędów, które utrudniają Ci poprawnie skompilować duży program Windows. Watcom i Borland są zarówno solidne. Watcom zazwyczaj daje nieco mniejsze, nieco szybsze pliki wykonywalne, ale Borland kompiluje się znacznie szybciej.

Pakiet Watcom DOS32 zawiera przedłużającą i plików sprężarkę Causeway DOS. Causeway jest teraz open source i wolne. Możesz dowiedzieć się więcej na ten temat na stronie: http://www.devoresoftware.com

emake.bat i objfiles.lnk będzie link do przedłużacza Causeway automatycznie. Inne przedłużacze DOS, takie jak albo DOS4GW, nie działają dobrze z Translator.

Tłumacz szuka “Watcom”, “LCC”, “” lub “BORLAND” albo jako DJGPP zmiennych środowiskowych lub katalogów na swojej drodze. Zostanie wygenerowany plik emake.bat który wywołuje odpowiedni kompilatora i linkera.

Uwagi:

W przeciwieństwie Watcom, DJGPP nie map DOS mało pamięci w tym samym segmencie, jak inne pamięci. Procedury kodu maszynowego napisane dla Watcom interpretera opartej Euphoria czy tłumacz nie będzie działać z DJGPP, i prawdopodobnie będzie się zawiesić, jeśli starają się uzyskać dostęp do przepełnienia pamięci, takich jak pamięci wideo. Peek euforii w (), Kapsa (), mem_copy (), mem_set () itd. Będzie działać poprawnie, ponieważ Tłumacz używa specjalnego DJGPP makro dostęp do przepełnienia pamięci. Możesz portu Procedury te maszyny do DJGPP kodu, ale musisz skonsultować docs djgpp do możliwych sposobów dostępu do przepełnienia pamięci.

DJGPP pełni obsługuje długie nazwy plików do czytania, pisania i tworzenia. Watcom nie obsługuje tworzenia.

Tłumacz z DJGPP nie obsługuje korzystanie z myszy.

Biblioteka grafiki Allegro, że korzystamy z DJGPP wydaje się znacznie szybciej niż biblioteka grafiki Watcom w wielu przypadkach.

DJGPP obsługuje kilka trybów tekstowych, więcej na przykład Tryb 35-liniowy.

DJGPP pozwala użytkownikowi przerwać program w dowolnym momencie, wpisując Ctrl-C.

Realizacja Lcc ignoruje lock_file () i unlock_file (). Oni nic nie robią.

Tłumacz wykorzystuje -O flagi optymalizacji LCC w emake.bat. Flaga ta może czasem dodać do zawodności LCC. Jeśli program nie działa, spróbuj usunąć tę flagę ze wszystkich kompilacji komendy w emake.bat.

Ostrzeżenia są wyłączone podczas kompilacji z emake.bat. Jeśli je włączyć, można zobaczyć kilka nieszkodliwych wiadomości o zmiennych zadeklarowanych, ale nie używane, etykiet zdefiniowanych ale nie używane, funkcja Prototypy oświadczył itp nie

W systemie Windows, łącznik Watcom może wydać ostrzeżenie, że nie można otworzyć graph.lib. Możesz zignorować. graph.lib nie jest używany. Nie wydaje się być łatwy sposób stłumić tę wiadomość.Najnowsza wersja Open Watcom wydaje się poprawił tego.

Z Borland i LCC, Windows konsoli (tryb tekstowy) programów nie może odczytać F-kluczy lub klawiszy strzałek, a może trzeba nacisnąć klawisz Enter dwa razy. Nie ma problemu z programów graficznych.

Microsoft C ++ dla systemu Windows nie jest jeszcze obsługiwany. Jednak prawdopodobnie można importować pliki C generowane przez ecw.exe i plik biblioteki run-time dla Borland, LCC lub Watcom do projektu Microsoft i skompilować / związek z tylko drobne usterki.

3. Jak uruchomić Tłumacz

Uruchomienie Tłumacz jest podobny do uruchamiania interpretera. Na DOS wpisz:

ec allsorts.ex
lub
ALLSORTS ec

W systemie Windows wpisz:

ecw taskwire.exw
lub
ecw taskwire

Na Linux / FreeBSD wpisz:

eCU qsort.exu
lub
eCU qsort

ale zamiast uruchamiania programu allsorts.ex, Tłumacz stworzy kilka plików źródłowych C. Każdy może uruchomić Tłumacz. Jest to zawarte w euforii \ bin wraz z tłumaczem. Aby skompilować i połączyć pliki C, należy zainstalować jeden z obsługiwanych kompilatory C.Tłumacz tworzy plik wsadowy o nazwie emake.bat, że nie wszystkie etapy kompilacji i łączenia dla ciebie, więc w rzeczywistości nie mają nic wiedzieć o C lub C kompilatorów. Wystarczy wpisać:

EWprowadä

Po kompilacji C i łączenie jest gotowy, trzeba będzie plik o nazwie: allsorts.exe i pliki źródłowe C zostaną usunięte, aby uniknąć bałaganu.

Po uruchomieniu allsorts.exe, powinien działać tak samo jak po wpisaniu tekstu: ex allsorts
uruchomić go z tłumacza, z wyjątkiem, że powinien działać szybciej, pokazując skrócenia czasu dla różnych algorytmów sortowania w euforii \ demo \ allsorts.ex.

Po utworzeniu pliku wykonywalnego, EWprowadä usuwa wszystkie pliki C, które zostały utworzone. Jeśli chcesz, aby spojrzeć na tych plików, uruchom ponownie tłumacz i spojrzeć na pliki przed uruchomieniem EWprowadä.

Uwaga dla użytkowników systemów Linux i FreeBSD:
Pliki zostaną nazywa EWprowadä i powłoki, i wpiszesz ./emake wykonać kompilację i łącze, a ./shell uruchomić program powłoki sortowania.

Uwaga dla użytkowników Borland i LCC:
Dla firmy Borland i LCC nie ma standardowej zmienna, więc Tłumacz wyszuka wartość zmiennej PATH szuka prawdopodobnego katalogu kompilatora. Wygląda to w standardowych miejscach, takich jak: .. \ LCC, .. \ BCC .., .. \ Borland .. itp Jeśli są zainstalowane w niestandardowym miejscu, może trzeba zmienić nazwę katalogu instalacyjnego. Aby edytować zmienną PATH w systemie Windows XP, kliknij przycisk: Menu Start / Panel sterowania / Wydajność i konserwacja / system / zaawansowane zmiennych / Środowisko / Zmienne użytkownika dla … następnie wybierz ścieżkę i edytować jego wartość. Włóż gdzie: C: \ BORLAND \ BCC55 \ BIN; lub C: \ LCC \ BIN; Następnie kliknij przycisk OK kilka razy, aby zamknąć okna.Kolejne okno DOS otwarciu powinna mieć nową wartość.

Opcje wiersza polecenia

Jeśli zdarzy się, że więcej niż jeden kompilator C dla danej platformy, można wybrać ten, który chcesz korzystać z opcji wiersza polecenia:
-bor
-lcc
-wat
-djg
w wierszu poleceń do WE lub ECW. na przykład

ecw -bor pretend.exw

Normalnie, po wybudowaniu plik .exe, plik wsadowy będzie EWprowadä usunąć wszystkie pliki C i obiekt pliki wykonane przez tłumacza. Jeśli chcesz EWprowadä zachować te pliki, dodać -Trzymaj opcji na polecenia-line tłumacz. na przykład

ec -wat -Trzymaj sanity.ex

Aby plik .dll z systemem Windows, Linux lub FreeBSD lub plik .so, po prostu dodaj -dll do linii poleceń. na przykład

ecw -bor -dll mylib.ew

Aby program konsoli systemu Windows zamiast programu Windows GUI, dodać -CON do linii poleceń. na przykład

ecw -bor -CON myprog.exw

Aby zwiększyć lub zmniejszyć całkowitą ilość miejsca stosu zarezerwowanego dla programu, dodać -stack nnnn do linii poleceń. na przykład

ec -stack 100000 myprog.ex

Łączna powierzchnia stosu (w bajtach), które można określić zostanie podzielona między wszystkich zadań, które zostały uruchomione (zakładając, że masz więcej niż jeden). Każde zadanie ma własną prywatną przestrzeń stosu. Jeśli to przekracza jego przydział, otrzymasz wiadomość o błędzie czasu określający zadania i daje wielkość jego przestrzeń stosu. Większość zadań nierekursywnych połączeń można uruchomić z stosy tak małe jak 2000 bajtów, ale pewności, należy przewidzieć więcej.Głęboko rekurencyjne Zadanie może korzystać wiele miejsca. Wszystko zależy od maksymalnych poziomów połączeń, które mogą potrzebować zadanie. W czasie działania programu, a program tworzy więcej równocześnie-aktywne zadania, przydzielone do miejsca na stosie każdego zadania będzie miał tendencję do zmniejszania się.

Aby program DOS, skompilowanej przez Watcom, który używa szybka instrukcji sprzętu zmiennoprzecinkowych, dodać -fastfp do linii poleceń. na przykład

ec -wat -fastfp crunch.ex

Domyślnie Euphoria dla DOS wymaga procedur do testowania sprzętu, jeśli instrukcje zmiennoprzecinkowe są dostępne. Jeśli nie są, jest używany wtedy wolniej emulacja kodu oprogramowania. Gdy -fastfp jest określony, skompilowany kod zakłada istnienie sprzętu zmiennoprzecinkowych. Może to spowodować zmiennoprzecinkowe intensywne programy do uruchomienia około dwa razy szybciej, ale będą one nie działają w ogóle na starych 486 i 386 na użytkownika, że brakuje sprzętu wsparcia zmiennoprzecinkową. Z -fastfp, emake.bat wybiera szybsze opcje kompilatora Watcom C i emake.bat musi łączyć w ecfastfp.lib zamiast ec.lib.

Na wszystkich innych platformach, Euphoria wykorzystuje szybki instrukcji sprzętu zmiennoprzecinkowych, a system operacyjny obsługuje przypadku gdy fp sprzętu brakuje.

Aby skompilować program z informacji diagnostycznych, do użytku z debuggera zgodny z kompilatorem, należy wybrać opcję debug:

ECU debug myapp.exu

Czasem można się połączyć przetłumaczone kod do biblioteki wykonawczego Euphoria innej niż domyślna dostarczone bibliotece. Zdolność ta jest chyba najbardziej użyteczne do testowania i debugowania samej biblioteki wykonawcze, lub dać dodatkowe informacje debugowania podczas debugowania kodu tłumaczonych Euphoria. Należy pamiętać, że tylko domyślna biblioteka jest dostarczana.Własnej biblioteki należy umieścić w EUDIR katalogu / bin wraz z domyślnej biblioteki. Użyj -lib biblioteki} {opcji:

ECU -lib decu.a myapp.exu

4. Dołączanych dynamicznie Biblioteki (udostępnione biblioteki)

Po prostu przez dodanie -dll do linii poleceń, Tłumacz zbuduje dll systemu Windows (Linux / FreeBSD .so) złożyć zamiast programu wykonywalnego.

Można tłumaczyć i skompilować zestaw przydatnych procedur Euphoria, i dzielić się nimi z innymi ludźmi, nie dając im swoje źródło. Ponadto, procedury będą najprawdopodobniej działać znacznie szybciej, gdy tłumaczone i skompilowany. Oba przetłumaczone / zebrane i zinterpretowane programy będą mogli korzystać z biblioteki.

Tylko globalne procedury Euphoria i funkcje tj te zadeklarowane z “globalnej” słowo kluczowe, zostaną wywiezione z .dll (.so).

Każdy program, Euforia, czy przetłumaczone / skompilowany lub interpretować, można połączyć z Euphoria .dll (.so) za pomocą tego samego mechanizmu, który pozwala połączyć się z rozszerzeniem .dll (.so) napisany w C. Program najpierw wywołuje open_dll () do otwórz plik .dll lub .so, a następnie wywołuje define_c_func () lub define_c_proc () dla wszystkich procedur, której nie chce się połączyć. Wzywa te procedury za pomocą c_func () i c_proc (). Zobacz library.doc o szczegóły.

Rutynowe nazwy wywiezione z Euphoria .dll mogą różnić się w zależności od kompilatora C użyć.

GNU C w systemie Linux lub FreeBSD eksportuje nazwiska dokładnie tak, jak pojawiają się one w kodzie C wyprodukowanego przez tłumacza, nprutynowe Euphoria

Procedura globalne foo (liczba całkowita x, całkowita y)

będzie eksportowany jako “_0foo” czy może “_1foo” itp podkreślenia i cyfry są dodawane w celu zapobiegania konfliktów nazw.Cyfra odnosi się do pliku Euphoria, gdzie symbol jest zdefiniowany.Główny plik otrzymuje numer 0. to pliki są numerowane w kolejności są napotykane przez kompilator. Należy sprawdzić źródło C, aby się upewnić.

LCC będzie eksportować foo () jako “__0foo @ 8”, gdzie 8 jest liczba parametrów (2) razy 4. Możesz sprawdzić plik .def stworzoną przez Tłumacz zobaczyć wszystkie wyeksportowane nazwy.

Dla Borland Tłumacz tworzy pliku .def, ale to .def plików zmienia nazwy eksportowane symbole z powrotem do tych samych nazwach, które stosowane w źródle Euphoria, więc foo () będzie eksportowany jako “foo”.

Dla Watcom sama zmiana nazwy jak w Borland występuje, ale zamiast pliku .def, polecenia EXPORT jest dodawany do objfiles.lnk dla każdego eksportowanego symbolu.

Z Borland i Watcom możesz edytować .def lub objfiles.lnk plik i ponownie wykonać emake.bat, aby zmienić nazwę eksportowanych symboli lub usunąć te, które nie chcesz wyeksportować. LCC można usunąć symbole, ale nie można ich zmienić.

Mając ładne eksportowane nazwy nie jest krytyczna, ponieważ nazwa musi się pojawić tylko raz w każdym programie Euphoria, który korzysta z .dll, czyli w jednym define_c_func () lub define_c_proc () oświadczenie.Autor prawdopodobnie powinna zapewnić .dll jego użytkowników z Euphoria to plik zawierający niezbędne define_c_func () i () sprawozdania define_c_proc, a może nawet zapewni zestaw Euphoria “opakowanie” procedur, aby zadzwonić do procedury w pliku .dll.

Podczas rozmowy telefonicznej open_dll (), żadnych oświadczeń na najwyższym szczeblu w euforii .dll lub .so zostanie wykonany automatycznie, tak jak normalny program. To daje szansę biblioteki do zainicjowania jego struktury danych przed pierwszym wywołaniem rutynowych biblioteki. Dla wielu bibliotek nie jest wymagane inicjalizacji.

Aby przekazać danych Euphoria (atomów i sekwencje) jako argumentów, lub otrzymać obiekt Euphoria w wyniku, trzeba będzie korzystać z następujących stałych w euforii \ to \ dll.e:

– Rodzaje Euphoria dla .dll (.so) argumenty i zwraca wartości:

globalna stała

E_INTEGER = # 06000004,

E_ATOM = # 07000004,

E_SEQUENCE = # 08000004,

E_OBJECT = # 09000004

Użyj ich w define_c_proc () i define_c_func () tak jak obecnie korzystać C_INT, C_UINT itp zadzwonić dll C-tych i .so tych.

Obecnie, numery plików zwracanych przez otwarte (), a rutynowe id na zwracane przez routine_id (), mogą być przekazywane i wrócił, ale biblioteka i główny program mają swoje własne odrębne pomysły, co oznaczają te liczby. Zamiast przekazywać numer pliku otwartego pliku, możesz zamiast tego podać nazwę pliku i niech .dll (.so) otworzyć go. Niestety nie ma prostego rozwiązania do przejścia rutynowych identyfikatora. To może być ustalona w przyszłości.

Euforia .dll lub .so obecnie nie mogą wykonywać żadnych operacji wielozadaniowość.Tłumacz daje komunikat o błędzie na ten temat.

.dlls Euforia (.so’S) mogą być również stosowane w programach C tak długo, jak tylko 31-bitowe wartości całkowite są wymieniane. Jeśli wskaźnik 32-bit lub całkowitej muszą być przekazane, a masz źródło do programu C, można przekazać wartość w dwóch odrębnych argumentów 16-bitowa liczba całkowita (górnych i dolnych 16 bitów 16 bitów), a następnie połączyć wartości w procedurze Euphoria do żądanego 32-bitowym atomu.

5. Wielkość i kompresji wykonywalny

Na DOS32 z Watcom, jeśli Tłumacz znajdzie pliki Causeway, cwc.exe i le23p.exe w euforii \ bin, to dodać polecenia do emake.bat które skompresować plik wykonywalny. Jeśli nie chcesz, kompresji, można edytować emake.bat lub usunąć lub zmienić nazwę cwc.exe i / lub le23p.exe.

W systemie Linux, FreeBSD, Windows i DOS32 z DJGPP, EWprowadä nie zawiera polecenie do skompresowania pliku wykonywalnego. Jeśli chcesz to zrobić, proponujemy spróbować darmowej kompresor UPX. Możesz dostać UPX od: http://upx.sourceforge.net Duża .exe oparte na Win32Lib wyprodukowany przez Tłumacz może być skompresowany przez UPX do około 15% ich pierwotnego rozmiaru i nie zauważysz żadnej różnicy w pos³u¿y się czas.

Tłumacz usuwa programy, które nie są używane, w tym ze standardowego Euphoria zawierać pliki. Po usunięcie nieużywanych procedury, sprawdza ponownie większej liczby procedur, które obecnie stają się niewykorzystana i tak dalej. To może mieć duże znaczenie, zwłaszcza w programach opartych gdzie Win32Lib dużych plików zawartych, ale wiele z zawartych w nim procedur nie są używane w danym programie.

Niemniej jednak, Twój skompilowany plik wykonywalny będzie prawdopodobnie większy niż w tym samym programie Euforia związana z tłumacza back-end. Wynika to częściowo z back-end jest skompresowany. Ponadto, sprawozdanie Euphoria są niezwykle kompaktowe, gdy przechowywane w oprawionego pliku. Oni potrzebują więcej miejsca po przetłumaczeniu na C i skompilowany do kodu maszynowego. Przyszłe wersje Tłumacz będzie produkować szybsze i mniejsze pliki wykonywalne.

6. Tłumacz vs Tłumacz

Wszystkie programy Euphoria mogą być tłumaczone na C, i zaledwie kilka wyjątków wymienionych poniżej, będzie działać tak samo jak z tłumacza (ale miejmy nadzieję, że się szybciej).

Tłumacze podziela to parser, więc otrzymasz te same błędy składni, zmienne nie są zgłaszane błędy itp albo z jednym.

Tłumaczka automatycznie rozszerza stos wywołań (do wyczerpania pamięci), więc można mieć ogromną liczbę poziomów wywołań zagnieżdżonych. Większość kompilatory C, w większości systemów, ma wstępnie ustalony limit na rozmiar stosu. Skonsultuj się z kompilatora lub podręcznik łącznikowy jeśli chcesz zwiększyć limit, na przykład, jeśli masz rekurencyjną procedurę, która może mieć tysiące poziomów rekursji. Zmodyfikować polecenie Więcej w emake.bat. Dla Watcom C, użyj opcji STACK = nnnn, gdzie nnnn jest liczba bajtów przestrzeń stosu.

Uwaga:
Tłumacz zakłada, że program nie ma błędów w czasie wykonywania w nim, że będzie złowionych przez tłumacza.Tłumacz nie sprawdza: indeksu poza granice, zmienna nie zainicjowany, przypisywanie niewłaściwy typ danych zmiennej, itd.

Należy debugować program z tłumacza.Tłumacz sprawdza pewnych błędów czasu, ale w interesie prędkości, najczęściej nie są sprawdzane. Gdy przetłumaczone kod C wywala będziesz zazwyczaj uzyskać bardzo tajemniczy wyjątek maszyny. W większości przypadków, pierwsze co należy zrobić, to uruchomić program z tłumacza, przy użyciu tych samych źródeł, a najlepiej z type_check włączony. Jeśli błąd pokazuje tylko w tłumaczeniu kodu, można używać z cienia i śladu (3), aby uzyskać plik ctrace.out przedstawiający okrągły bufor ostatnich 500 sprawozdań Euphoria zrealizowanych. Jeśli zostanie wyświetlony komunikat o błędzie tłumacz wykrywane (i przechowywane w ex.err), będą również linię przestępstwa źródła Euphoria, gdy z cienia jest w rzeczywistości. z cienia spowolni swój program w dół, a spowolnienie może być ekstremalne, kiedy trace (3) jest również w mocy.

7. Ograniczenia prawne

Jeśli chodzi o RDS to dotyczy, wszelkie programy wykonywalne lub .dll jest utworzenie z tym Tłumacz bez modyfikacji pliku biblioteki tłumacz RDS, mogą być dystrybuowane nieodpłatnie. Jesteś wolny, aby włączyć wszystkie pliki euforii świadczonych przez RDS w swojej aplikacji.

W styczniu 2000 r przedłużacz Causeway DOS został przekazany na własność publiczna przez Michaela Devore. On poddał jego prawa autorskie, i zachęca nikogo do go za darmo, w tym do celów komercyjnych.

W ogóle, jeśli chcesz skorzystać z kodu Euphoria napisany przez 3 stron, lepiej ją zaszczyt żadnych ograniczeń, które mają zastosowanie. W razie wątpliwości, należy poprosić o zgodę.

W systemie Linux, FreeBSD i DJGPP dla DOS32, licencja GNU Library zwykle nie wpływa na programy stworzone z tym Tłumacz. Po prostu kompilacją GNU C nie daje Free Software Foundation jurysdykcji nad swoim programem. Jeśli statycznie swoich bibliotek będą podlegać ich licencji Library, ale standardowa procedura kompilacji / link w emake nie statycznie żadnych bibliotek FSF, więc nie powinno być problemu.

Allegro biblioteką graficzną, używany przez DJGPP, jest określany jako “Giftware” w ich dokumentacji, i pozwalają, aby rozprowadzić ją jako część swojego programu. Proszą, ale nie wymagają, jakieś potwierdzenie.

Zastrzeżenie:
To jest to, co uważamy za przypadek. Nie jesteśmy prawnikami. Jeśli jest to dla Ciebie ważne, należy zapoznać licencji GNU Library, komentarze prawne djgpp, LCC oraz Borland i pliku read.me Michaela Devore w sprawie jego miejscu, aby utworzyć swój własny osąd.

9. Najczęściej zadawane pytania

Q – Jak dużo przyspieszenia należy się spodziewać?
– Wszystko zależy od tego, co twój program spędza swój czas robi. Programy, które wykorzystują głównie całkowite obliczeń, nie dzwoń do czasu wykonywania procedur, bardzo często, i nie zrobić wiele, I / O będzie zobaczyć największą poprawę, obecnie do około 5x szybciej. Inne programy mogą zobaczyć tylko kilka procentową poprawę.

Różne kompilatory C nie są równe możliwości optymalizacji. Watcom GNU C i DJGPP produkują najszybszą kod. Borland jest dość dobre. Lcc pozostaje nieco w tyle za innymi, nawet gdy jest używany jego -O flag.

Borland kompiluje najszybciej. Watcom kompiluje najwolniej.

P – A co, jeśli chcę zmienić opcje kompilacji lub łącza w emake.bat?
– Zapraszam do tego jednak należy skopiować emake.bat do własnego pliku o nazwie (słownie) mymake.bat, a następnie uruchomić mymake.bat po uruchomieniu Tłumacz. Czasami liczba plików .c produkowanych przez Tłumacz może się zmienić.

Q – Jak mogę zrobić mój program prowadzony jeszcze szybciej?
– Ważne jest, aby deklarować zmienne jako liczba całkowita, gdzie to możliwe. W ogóle, to pomaga, jeśli wybierzesz najbardziej restrykcyjny typ możliwe, gdy deklaracja zmiennej.

Typowe typy zdefiniowane przez użytkownika nie wolno ci. Ponieważ program ma być wolny od błędów type_check, typy są ignorowane przez tłumacza, chyba że nazywają je bezpośrednio z normalnymi wywołań funkcji.Wyjątkiem jest sytuacja, gdy typ zdefiniowany przez użytkownika rutynowe ma skutki uboczne (tj ustawia zmienną globalną, wykonuje Pokes Grupy Wydarzenia Filmy w pamięci, I / O itp). W takim przypadku, jeśli z type_check jest w rzeczywistości, Tłumacz wyda kod zadzwonić rutynę typu i zgłosić awarię type_check że wyniki.

W systemie Windows i DOS zostawiliśmy na optymalizację pętli / ol dla wcc386 Watcom za. Znaleźliśmy się w kilku rzadkich przypadkach, że opcja ta doprowadziła do błędnego kodu urządzenie emitowane przez kompilator Watcom C. Jeśli dodasz go z powrotem do swojej własnej wersji emake.bat możesz dostać niewielką poprawę w szybkości, z niewielkim ryzykiem kodu buggy. Dla DJGPP możesz spróbować -O6 zamiast -O2.

Dla DOS używamy opcji Watcom / FPC, który generuje rozmowy do czasu wykonywania procedury wykonywania operacji zmiennoprzecinkowych. Jeśli urządzenie zmiennoprzecinkowych sprzętu zostanie wykorzystane przez procedurę, będą wykorzystywane w inny sposób emulacji oprogramowania. To spowalnia rzeczy w dół nieco, i nie jest potrzebne na Pentium, ale gwarantuje, że program będzie działał na wszystkich 386 i 486 maszyn, nawet jeśli brakuje im zmiennoprzecinkową sprzętu.DOS run-time biblioteki, ec.lib, został zbudowany w ten sposób, więc nie można po prostu usunąć tę opcję.

W systemie Linux lub FreeBSD możesz spróbować opcję O3 gcc zamiast O2. To będzie “in-line” małe procedur, poprawę szybkości lekko, ale tworzenie większej wykonywalny. Możesz też spróbować Intel C ++ dla systemu Linux. Jest to zgodne z GNU C, ale może być wymagane pewne korekty emake.

Najczęstsze problemy 10.

Wiele dużych programów powodzeniem przetłumaczone i skompilowany przy użyciu każdego z obsługiwanych kompilatory C i Translator jest teraz dość stabilne.

Uwaga:
W systemie Windows, jeśli zadzwonisz rutynowych C, który wykorzystuje konwencję cdecl dzwoni (zamiast STDCALL), należy określić znak “+” na początku nazwy rutyny w define_c_proc () i define_c_func (). Jeśli nie, połączenie może pracować po uruchomieniu interpretera EXW, ale prawdopodobnie nie (awaria), gdy tłumaczymy i skompilować z Borland lub LCC.

W niektórych przypadkach ogromna rutynowe Euforia jest tłumaczone na C, a okaże się zbyt duży dla kompilatora C do przetworzenia. Jeśli napotkasz ten problem, aby rutynowe Euphoria mniejsze i prostsze. Możesz również spróbować wyłączyć optymalizację C w emake.bat za jedyne pliku .c, która nie. Łamanie jedną stałą deklarację wielu zmiennych do oddzielnych stałych deklaracji pojedynczej zmiennej każdego, również może pomóc. Euforia nie ma limitów wielkości rutyny lub wielkości pliku, ale większość kompilatory C zrobić.Tłumacz automatycznie wytwarzają wiele plików małe .c z dużego pliku Euphoria, aby uniknąć podkreślając kompilator C. Nie będzie on jednak przełamać dużą rutynę na mniejsze rutyny.

Napisz zgłoszenia błędów na EUforum.
W szczególności, poinformuj dowolny program, który nie działa sam, gdy kompilowany jak to robi, gdy interpretowane.

Comments are closed.