PEP 7: Adding anonymous union / struct
Hi, all. PEP 7 includes some C99 features. I propose to add include anonymous union and struct to the list. https://www.geeksforgeeks.org/g-fact-38-anonymous-union-and-structure/ Anonymous union and struct are C11 feature, not C99. But gcc and MSVC supported it as language extension from before C11. Anonymous union is useful when all union members have different names. Especially, when we need to add dummy member only for padding / alignment, union name looks too verbose: ... # in some struct union { struct { int member1; int member2; } s; long double _dummy; // for largest alignment. } u; ... x.u.s.member1 = 42; vs ... union { struct { int member1; int member2; }; long double _dummy; // for largest alignment. }; ... x.member1 = 42; Does anyone know compiler which can be use to compile Python but doesn't support anonymous union / struct? Regards, -- Inada Naoki <songofacandy@gmail.com>
AIX is somehow supported and uses xlc compiler: does xlc support this C11 feature? Do you want to use it in Python 3.8 and newer only? Victor Le mer. 17 avr. 2019 à 13:14, Inada Naoki <songofacandy@gmail.com> a écrit :
Hi, all.
PEP 7 includes some C99 features. I propose to add include anonymous union and struct to the list. https://www.geeksforgeeks.org/g-fact-38-anonymous-union-and-structure/
Anonymous union and struct are C11 feature, not C99. But gcc and MSVC supported it as language extension from before C11.
Anonymous union is useful when all union members have different names. Especially, when we need to add dummy member only for padding / alignment, union name looks too verbose:
... # in some struct union { struct { int member1; int member2; } s; long double _dummy; // for largest alignment. } u; ... x.u.s.member1 = 42;
vs
... union { struct { int member1; int member2; }; long double _dummy; // for largest alignment. }; ... x.member1 = 42;
Does anyone know compiler which can be use to compile Python but doesn't support anonymous union / struct?
Regards, -- Inada Naoki <songofacandy@gmail.com> _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/vstinner%40redhat.com
-- Night gathers, and now my watch begins. It shall not end until my death.
On Wed, Apr 17, 2019 at 8:27 PM Victor Stinner <vstinner@redhat.com> wrote:
AIX is somehow supported and uses xlc compiler: does xlc support this C11 feature?
I find Language Reference for v11.1 (2010/4/13) https://www-01.ibm.com/support/docview.wss?uid=swg27017991 I find "anonymous union" in p73. I can not find language reference for versions older than v11.1. And I can not find "anonymous struct" in v11.1 too. Maybe, we should consider only anonymous union?
Do you want to use it in Python 3.8 and newer only?
Yes. In case of bpo-27987, Python 3.6 and 3.7 uses named union for PyGC_Head. So changing dummy from "double" to "long double" is enough. In case of Python 3.8, I removed dummy from PyGC_Head and stop using named union because it is (implicitly) aligned by two words (16byte on 64bit, 8byte on 32bit platform) already. But we can align it more explicitly by using anonymous union, without adding many `.gc.` again. Regards, -- Inada Naoki <songofacandy@gmail.com>
participants (2)
-
Inada Naoki
-
Victor Stinner