2016 aktualizacja: Apple style lambdas z zamknięciami zostały ponownie przedstawione grupie roboczej na spotkaniu Londyn 2016, w new proposal document który stara się rozwiązać kilkoma niedociągnięcia z poprzedniej próby, uporządkowanie terminologii i wyjaśnień oraz bardziej szczegółowe informacje na temat tego, w jaki sposób zamknięcia i lambdy mogą być "podobne do C".
Od the reception was cautiously positive (7-0-9 Tak/Nie/wstrzymywanie się) wygląda na bardzo prawdopodobne, że wkrótce pojawi się coś podobnego do tego języka.
Krótka odpowiedź jest po prostu, że C nie zawiera funkcje lambda bo nikt jeszcze nie dokonał dopuszczalny wniosek grupy roboczej ISO C włączenia funkcji lambda.
Można spojrzeć na listę niektóre z propozycji omawianych przez grupę roboczą tutaj: http://www.open-std.org/jtc1/sc22/wg14/www/documents
Jedyna propozycja lambdas jakiegokolwiek rodzaju, że mogę znaleźć się na tej liście są bloki Apple (jak wykazano w odpowiedzi Yu Hao), w dokumencie N1451. Ta propozycja jest omawiana dalej w N1483, która porównuje ją z lambdami w języku C++ i N1493 i N1542, które są protokołami z posiedzeń, na których przedstawiono te dokumenty.
Było kilka powodów, dla których propozycja w N1451 nie mógł zostać przyjęty, podane w N1542:
- początkowo komisja miała trudności ze zrozumieniem propozycję
- to używa nieprawidłowych cytatów i terminologii, która jest sprzeczna z istniejącymi C standardowy
- jest najwyraźniej niejasny i niekompletny
- Apple było w trakcie próby opatentowania tej funkcji (nie jest jasne, czy jest to przeszkoda w standaryzacji, czy nie, ale tak bym to zakładała)
- Zupełnie nowa funkcja zupełnie nowe semantyki proponuje w 2010 miał dokładnie zerową szansę być gotowy na czas do 2011 roku, a byłby podniósł uwalnianie C11
- bloków jak przedstawione nie są kompatybilne z C++ 11 lambdas
Wygląda również na to, że nie byli przekonani, że obecnie wykazuje wystarczającą użyteczność. Standardyzacja C najwyraźniej stara się być bardzo konserwatywna, a mając tylko jeden główny kompilator implementujący tę funkcję, prawdopodobnie będzie chciał poczekać i zobaczyć, jak konkuruje z lambdami w C++ i czy ktokolwiek inny ją podnosi. Nie jest to funkcja "C" w przeciwieństwie do funkcji "Clang", dopóki nie oferuje jej wiele kompilatorów.
Wszystko, co powiedzieliśmy, głosy komisji najwyraźniej nieznacznie pochyliły się na korzyść tej cechy (6-5-4 Tak/Nie/wstrzymać się), ale nie na tyle, aby osiągnąć niezbędny konsensus.
O ile mi wiadomo, inne duże, lambdy C++ 11, nie zostały zaproponowane do włączenia do C przez kogokolwiek; a jeśli nie pytasz, nie dostaniesz.
Każda propozycja lambda w języku C dodawałaby całą masę nowych reguł dotyczących zmiennych okresów istnienia i lokalizacji oraz kopiowania i alokacji i ... itd. Dla wielu osób może to wyglądać bardzo nie-C, dzięki wartościom przenoszonym za plecami programisty lub nagłym nieoczekiwanym zmianom w ich życiu - unikanie tego typu rzeczy to połowa powód, dla którego ludzie decydują się pisać w C obecnie. Musi więc istnieć propozycja, która faktycznie odpowiada filozofii C, zanim zostanie potraktowana poważnie. Jestem pewien, że można to zrobić, ale obie duże propozycje zostały opracowane z myślą o językach o bardzo odmiennej "filozofii", w których tego typu rzeczy nie stanowią przeszkody i nie muszą koniecznie odzwierciedlać celu C i postać w obecnym stanie.
Dobrze dla SO. Ta strona jest przeznaczona do pytań technicznych, więc myślę, że twoje pytanie jest w pewnym sensie pogranicze tutaj. Lepiej zapytaj o to na forum lub w grupie dyskusyjnej. W przeciwnym razie łatwo znajdziesz minuty sesji komitetu normalizacyjnego C online i zobaczysz, o czym rozmawiają. Nie pamiętam tego ostatnio. –