2016 aggiornamento: lambda-stile di Apple con chiusure sono state ancora una volta presentato al gruppo di lavoro nel corso della riunione di Londra 2016, in un new proposal document che cerca di affrontare molti dei mancanze del precedente tentativo, riordinare la terminologia e le spiegazioni e approfondire il modo in cui le chiusure e le lambda possono essere fatte "a forma di C".
Dal the reception was cautiously positive (7-0-9 Sì/No/Astenuta), sembra molto probabile che qualcosa di simile a questo sarà presto disponibile nella lingua.
La risposta breve è semplicemente che il C non include le funzioni lambda perché nessuno ha ancora fatto una proposta accettabile per il gruppo di lavoro ISO C per includere funzioni lambda.
È possibile dare un'occhiata a un elenco di alcune delle proposte discusse dal gruppo di lavoro qui: http://www.open-std.org/jtc1/sc22/wg14/www/documents
L'unica proposta di lambda di ogni tipo che posso trovare in tale elenco sono blocchi di Apple (come dimostrato nella risposta di Yu Hao), nel documento N1451. Tale proposta è ulteriormente discussa in N1483, che lo confronta con lambda C++ e N1493 e N1542 che sono i verbali delle riunioni in cui sono stati presentati tali documenti.
C'erano diversi motivi per cui non poteva essere accettata la proposta di N1451, N1542 riportate in:
- inizialmente la commissione ha avuto difficoltà a comprendere la proposta
- utilizza citazioni errate e la terminologia che contraddice l'esistente C standard
è apparentemente vago e incompleto
- Apple stava tentando di brevettare la funzione (non è chiaro se questo è un ostacolo alla standardizzazione o meno, ma assumerei così).210
- Una caratteristica completamente nuova con completamente nuova semantica proposto nel 2010 avuto precisamente zero possibilità di essere pronto in tempo per il 2011, e avrebbe sostenuto il rilascio di C11
- blocchi come presentato non sono compatibili con il C++ 11 lambdas
Sembra anche che non erano convinti che al momento dimostrasse un'utilità sufficiente. La standardizzazione C sembra essere molto conservativa e, con un solo compilatore principale che implementa la funzione, è probabile che vorrebbe aspettare e vedere come compete con i lambda C++ e se qualcun altro lo raccoglie. Non è realmente una funzione "C" in contrasto con una funzione "Clang" fino a quando più compilatori lo stanno offrendo.
Detto questo, i voti della commissione apparentemente si appoggiano leggermente a favore del lungometraggio (6-5-4 Sì/No/Astenuto), ma non abbastanza per il consenso necessario per includerlo.
Per quanto ne so, l'altro grande, C++ 11 lambda, non è stato proposto per l'inclusione in C da parte di nessuno; e se non lo chiedi non ottieni.
Qualsiasi proposta di lambda in C aggiungerebbe un gran numero di nuove regole su vite e luoghi variabili e la copia e l'allocazione e ... ecc. Per molte persone questo potenzialmente inizia a sembrare molto simile a un C, con valori che vengono spostati dietro la parte posteriore del programmatore o che hanno improvvisi cambiamenti imprevisti nel loro ciclo di vita - evitare questo genere di cose è la metà del motivo per cui le persone scelgono di scrivere in C al giorno d'oggi. Quindi deve esserci anche una proposta che in realtà coincide con la "filosofia" di C prima che possa essere presa sul serio. Sono sicuro che questo può essere fatto, ma entrambe le grandi proposte finora sono state progettate per linguaggi con una "filosofia" molto diversa in cui questo genere di cose è meno di un ostacolo, e non necessariamente riflettono lo scopo di C e personaggio come stanno attualmente.
Benvenuto in SO. Questo sito è per domande tecniche, quindi penso che la tua domanda sia una sorta di limite, qui. Faresti meglio a chiedere questo in un forum o in un gruppo di discussione. Altrimenti si potrebbero anche trovare facilmente i verbali delle sessioni del comitato per gli standard C online e vedere cosa discutono. Non ricordo che questo sia stato discusso di recente. –