Makra są używane do udostępniania sekwencji instrukcji obliczeniowych programiście jako pojedynczej instrukcji programu, dzięki czemu zadanie programistyczne jest mniej żmudne i podatne na błędy. [
Wiem, że są one wyjątkowo niebezpiecznie implementowane w C / C ++. Czy nie można ich wdrożyć w bezpieczniejszy sposób? Czy wady makr są na tyle poważne, że przewyższają ich ogromną moc?
Preprocesor C jest dołączony do C, ale ma zupełnie inną składnię niż język główny: znaczące spoczynkowo białe znaki (koniec linii kończy instrukcję, przerwa po tym, jak makro określa początek listy zastępczej) bloki oparte na słowach kluczowych zamiast wzmocnionych bloków elifzamiastelse if definicje oparte na słowach kluczowych zamiast deklaracji odzwierciedla użycie, …
Z różnych porównań szablonów C ++ i generycznych C # / Java takich jak ten - /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 Mam wrażenie, że szablony C ++ są implementowane przez pewnego rodzaju przetwarzanie wstępne (zamiana zwykłego tekstu przed parsowaniem), a nie kompilowanie. Ponieważ sprawdzanie typu w szablonach C ++ przypomina makra C. Mam na …
Common Lisp pozwala pisać makra, które wykonują dowolną transformację źródłową. Schemat zapewnia higieniczny system dopasowywania wzorów, który pozwala również przeprowadzać transformacje. Jak przydatne są makra w praktyce? Paul Graham powiedział w Beating the Averages, że: Kod źródłowy edytora Viaweb zawierał prawdopodobnie około 20-25% makr. Jakie rzeczy ludzie faktycznie robią z …
Uczę się Scheme z SICP i mam wrażenie, że duża część tego, co czyni Scheme, a tym bardziej LISP, jest systemem makro. Ale skoro makra są rozszerzane w czasie kompilacji, dlaczego ludzie nie tworzą równoważnych systemów makr dla C / Python / Java / cokolwiek? Na przykład można powiązać pythonpolecenie …
Czytam „Standardową bibliotekę C” PJ Plaugera, co jest naprawdę interesujące. Książka wyjaśnia nie tylko, jak KORZYSTAĆ z biblioteki, ale także sposób jej implementacji. Skończyłem czytać ctype.hsekcję, aw nagłówku funkcje są zadeklarowane zarówno jako makra ORAZ funkcje. Na przykład int isdigit(int); ale również #define isdigit(c) (_Ctype[(int)(c)] & _DI) Nie rozumiem, dlaczego …
W obecnej formie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi poparte będą faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź centrum pomocy w …
Próbuję nauczyć się trochę LISP i dużo czytałem o znaczeniu makr LISP, więc chciałbym zdobyć trochę doświadczenia w pracy z nimi. Czy możesz zasugerować praktyczny obszar zastosowania, który pozwoliłby mi użyć makr do rozwiązania rzeczywistego problemu i zrozumienia przydatności tego konstruktu programistycznego? UWAGA To nie jest ogólny projekt, który powinienem …
Patrząc na dekoratorów Pythona, ktoś stwierdził, że są tak potężni jak makra Lisp (szczególnie Clojure). Patrząc na przykłady podane w PEP 318 , wydaje mi się, że są one po prostu fantazyjnym sposobem użycia zwykłych starych funkcji wyższego rzędu w Lisp: def attrs(**kwds): def decorate(f): for k in kwds: setattr(f, …
Powiedzmy, że chcę mieć w kodzie kilka typów komunikatów wyjściowych. Jednym z nich jest DEBUG, który jest drukowany tylko wtedy, gdy kod jest kompilowany w trybie debugowania. Zwykle musiałbym napisać coś takiego #ifdef DEBUG std::cout << "Debug message" << std::endl; #endif co jest dość kłopotliwe i denerwujące w użyciu w …
Słyszałem, że makra Clojure są łatwiejsze do pisania, ale nie tak niezawodne jak makra higieniczne Racket. Moje pytanie składa się z 2 części: Czym gensymróżnią się od makr higienicznych? Co zapewniają makra Racket, których nie ma Clojure? (czy to bezpieczeństwo, kompozycja, czy cokolwiek innego)
Czytałem o bibliotekach napisanych przez ludzi dla języków takich jak Java i C #, które wykorzystują tkanie kodu bajtowego do robienia rzeczy takich jak przechwytywanie wywołań funkcji, wstawianie kodu rejestrującego itp. Czytałem również o makrach Lisp / Clojure w spróbuj lepiej zrozumieć, jak z nich korzystać. Im więcej czytam o …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.