Set the namespace free!

Hello, guys. Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns an object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change. Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers. !for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo) This would allow the user to declare any identifier with any name: for = with(return) + try What do you think of it? It is a major change, but I think Python needs it. -- haael

On 22 July 2010 15:04, Bartosz Tarnowski <bartosz-tarnowski@zlotniki.pl> wrote:
What should I do then, when the attribute is a reserver word?
You would use elem.getattr('param'). That's what it's for.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark).
Oh, God, no. This would be better off on the Python Ideas list. Well, it would be better of stone dead IMHO, but better ideas than here. -- Cheers, Simon B.

On 2010-07-22, at 14:45 , Simon Brunning wrote:
On 22 July 2010 15:04, Bartosz Tarnowski <bartosz-tarnowski@zlotniki.pl> wrote:
What should I do then, when the attribute is a reserver word?
You would use elem.getattr('param'). That's what it's for. getattr(elem, 'param') I believe, rather than elem.getattr('param')

On Thu, 22 Jul 2010, Bartosz Tarnowski wrote: [....]
My proposal: let's make a syntax change.
I'm pretty sure this belongs on python-ideas.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
Is today April 1st? Seriously, an identifier-quoting capability like PostgreSQL has wouldn't necessarily be a bad idea, but would be a topic for python-ideas, not here on python-dev. Isaac Morland CSCF Web Guru DC 2554C, x36650 WWW Software Specialist

!for boo in foo:
!if boo is !None: !print(hoo) !else: !return !sorted(woo) I feel most people could not bear such a difficult syntax. Why have I to type so much '!'s ? On Thu, Jul 22, 2010 at 10:04 PM, Bartosz Tarnowski < bartosz-tarnowski@zlotniki.pl> wrote:
Hello, guys.
Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns an object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
This would allow the user to declare any identifier with any name:
for = with(return) + try
What do you think of it? It is a major change, but I think Python needs it.
-- haael
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/ysj.ray%2Bpython-dev%40gma...
-- Ray Allen Best wishes!

I have no idea why my last post was a copy of the previous one. Webmail choking on a hairball. It was supposed to say: === Oops, :name does break things, e.g. if x :return So, ::name or &name or |name or whatever. I'm very amused by all the jokes about turning python into perl, but there's a good idea here that doesn't actually require that... Regards (and hoping it works this time) - Greg

On Thu, Jul 22, 2010 at 12:53 PM, <gregory.smith3@sympatico.ca> wrote: ..
So, ::name or &name or |name or whatever.
I'm very amused by all the jokes about turning python into perl, but there's a good idea here that doesn't actually require that...
No, there isn't. And both '&' and '|' are valid python operators that cannot be used this way. If you want ::, I think you can find a language or two to your liking. :-)

On Thu, Jul 22, 2010 at 11:49 AM, Alexander Belopolsky <alexander.belopolsky@gmail.com> wrote:
On Thu, Jul 22, 2010 at 12:53 PM, <gregory.smith3@sympatico.ca> wrote:
I'm very amused by all the jokes about turning python into perl, but there's a good idea here that doesn't actually require that...
No, there isn't. And both '&' and '|' are valid python operators that cannot be used this way.
If you want ::, I think you can find a language or two to your liking. :-)
A syntax for escaping reserved words used as identifiers is a worthy and interesting idea, but I don't think it's worth adding to Python. Appending '_' in the kinds of cases described by the OP is what's suggested by the style guide, and seems acceptable to me. Prefixing all reserved words with punctuation as suggested by the OP is, of course, completely ludicrous. He might just be trolling. Reid P.S. "I'm not trolling!" http://www.youtube.com/watch?v=6bMLrA_0O5I P.P.S. Sorry, I couldn't help it.

Am 22.07.2010 21:49, schrieb Reid Kleckner:
On Thu, Jul 22, 2010 at 11:49 AM, Alexander Belopolsky <alexander.belopolsky@gmail.com> wrote:
On Thu, Jul 22, 2010 at 12:53 PM, <gregory.smith3@sympatico.ca> wrote:
I'm very amused by all the jokes about turning python into perl, but there's a good idea here that doesn't actually require that...
No, there isn't. And both '&' and '|' are valid python operators that cannot be used this way.
If you want ::, I think you can find a language or two to your liking. :-)
A syntax for escaping reserved words used as identifiers is a worthy and interesting idea, but I don't think it's worth adding to Python.
Exactly. Such a feature is much more needed for languages that don't feature globals(), getattr() and __dict__s. Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out.

Date: Thu, 22 Jul 2010 14:49:17 -0400 Subject: Re: [Python-Dev] Set the namespace free! From: alexander.belopolsky@gmail.com To: gregory.smith3@sympatico.ca CC: python-dev@python.org
On Thu, Jul 22, 2010 at 12:53 PM, <gregory.smith3@sympatico.ca> wrote: ..
So, ::name or &name or |name or whatever.
I'm very amused by all the jokes about turning python into perl, but there's a good idea here that doesn't actually require that...
No, there isn't. And both '&' and '|' are valid python operators that cannot be used this way.
Um, of course. Serious brain freeze today, using too many languages at once. Yeah, that's it. Despite my knuckleheadedness, I say there's still a hole here that can be easily plugged. it's clumsy that you can't call, e.g. GenerateURL( reqtype='basic', class='local') other than by GenerateURL( **{'reqtype': 'basic', 'class': 'local'}) ... just because 'class' is a keyword. That's letting a parser issue degrade the value of a really good feature. Likewise for attributes; python allows you to have named parameters or attributes called 'class' and 'import' if you like; it just doesn't let you write them directly; this restriction doesn't seem to be necessary except for the parse issue, which is fixable. I.e. nothing would break by allowing GenerateURL(::class = 'local') or Request.::class. See my previous longer post for the full discussion (not the short stupid one).

On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski <bartosz-tarnowski@zlotniki.pl> wrote:
Hello, guys.
Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns an object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
This would allow the user to declare any identifier with any name:
for = with(return) + try
What do you think of it? It is a major change, but I think Python needs it.
-- haael
I'm not a fan of this - I'd much prefer[1] that we use the exclamation point to determine scope: foobar - local !foobar - one up !!foobar - higher than the last one !!!foobar - even higher in scope We could do the inverse as well; if you append ! you can push variable down in scope. Jesse [1] I am not serious.

On Thu, Jul 22, 2010 at 10:41 AM, Jesse Noller <jnoller@gmail.com> wrote: ..
I'm not a fan of this - I'd much prefer[1] that we use the exclamation point to determine scope:
foobar - local !foobar - one up !!foobar - higher than the last one !!!foobar - even higher in scope
We could do the inverse as well; if you append ! you can push variable down in scope.
Replace '!' with '$' and we have a winner! [IANSE]
[1] I am not serious.
[IANSE] I am not serious either.

I agree with the idea, but a far less radical change is needed to get the desired result. The basic idea is this: it should be possible to use any name as an identifier in the syntax, including names like 'while' and 'import'. But there is no need to mess up the entire language to allow this (either by quoting all the identifiers, perl-style, or by marking the keywords). All that is needed is something like this: foo = 7 :foo = 7 # exactly like foo=7 :while= 3 # assigns 3 to variable 'while' globals()['while']=3 # current way to do this print element.:for # from example below # # keyword parameters to a function call: # BuildUrlQuery( lang='en', item='monsoon', :class='normal') # -> "?lang=en&query=monsoon&class=normal" The generic keyword function call is a really nice language feature, but it's rather impaired by the need to avoid those names which happen to be keywords. The lack of this is most painful when you are auto-generating python code which forms a bridge to another language with its own namespace (as in XML example). It's a pain when some of the names you might generate could conflict with python keywords. So, you end up using dicts and getattrs for everything and the code gets much less readable. With a simple escape like :name available, it's worthwhile to do everything with identifiers and generate the escape only as needed for these. One of the great strengths of python is the ability to form cleans and comprehensive bridges to other languages and environments (thus, in many cases, avoiding the need to write programs in those other environments :-) ). This feature would fill a gap there. The python tcl/tk interface is a bit messed up since tcl/tk uses some names for options which conflict with python keywords, and so you need to add '_' to those names. There is a feature like this in VHDL: \name\ and \while\ are identifiers, the backslashes are not part of the name, but just quote it. In VHDL you can write identifiers like \22\, and \!This?is=Strange\ as well; since VHDL creates modules that have named ports, and those modules can interface to things generated by other environments, they needed a way to assign any name to a port. For python, I'm not sure it makes sense to allow identifiers that doesn't follow the basic rule "[A-Za-z_][A-Za-z_0-9]*" -- that could break some debugging tools which expect variable names to be well-formed -- but it would be useful to be able to use any well-formed name as an identifier, including those which happen to be keywords. I've suggested :name, which doesn't break old code, and doesn't require using any new punctuation. Syntax would not change, just the lexical definition of 'identifier'. If the intent is to allow arbitrary names (not just well-formed ones), then n'name' would work better (and is consistent with existing stuff).
Date: Thu, 22 Jul 2010 10:41:39 -0400 From: jnoller@gmail.com To: bartosz-tarnowski@zlotniki.pl CC: python-dev@python.org Subject: Re: [Python-Dev] Set the namespace free!
On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski <bartosz-tarnowski@zlotniki.pl> wrote:
Hello, guys.
Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns an object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
This would allow the user to declare any identifier with any name:
for = with(return) + try
What do you think of it? It is a major change, but I think Python needs it.
-- haael
I'm not a fan of this - I'd much prefer[1] that we use the exclamation point to determine scope:
foobar - local !foobar - one up !!foobar - higher than the last one !!!foobar - even higher in scope
We could do the inverse as well; if you append ! you can push variable down in scope.
Jesse
[1] I am not serious. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo....

oops, :name does break things, e.g if x :return So, it could be ::name or |name or &name or !name or whatever. From: gregory.smith3@sympatico.ca To: python-dev@python.org Subject: RE: [Python-Dev] Set the namespace free! Date: Thu, 22 Jul 2010 16:24:27 +0000 I agree with the idea, but a far less radical change is needed to get the desired result. The basic idea is this: it should be possible to use any name as an identifier in the syntax, including names like 'while' and 'import'. But there is no need to mess up the entire language to allow this (either by quoting all the identifiers, perl-style, or by marking the keywords). All that is needed is something like this: foo = 7 :foo = 7 # exactly like foo=7 ...

So OK, thank you for response. No, I wasn't joking. I'm sorry, I didn't know that you Python guys get offended from being compared to PHP or Perl. Perhaps that shouldn't surprise me, though. I have posted all of this here, because I was hoping this feature would be implemented secretly, without anyone knowing. Life isn't that simple it seems, I would have to go through all this PEP publication and stuff. Blame yourselves. Reconsidering various ideas you have posted, I think the following solution would be best: All alphanumeric sequences preceded by a dot (".") should not be treated as reserved words. This would allow now reserved names as attributes without any change. Highest level identifiers would need to be simply preceded by a dot.
boo.if = 3 boo.with = hoo.as .while = 1 .for = .def fun(.class="a")
This doesn't require any major change, does not break anything and as a side effect makes some very old code _valid_, at least syntactically. I am going to repost this now on a valid list. Wish me luck, you opportunists. -- Regards, haael

On Thu, Jul 22, 2010 at 9:24 AM, <gregory.smith3@sympatico.ca> wrote:
I agree with the idea, but a far less radical change is needed to get the desired result. The basic idea is this: it should be possible to use any name as an identifier in the syntax, including names like 'while' and 'import'. But there is no need to mess up the entire language to allow this (either by quoting all the identifiers, perl-style, or by marking the keywords).
Yuck. Anyone who feels they need a variable named the same a reserved word simply feels wrong and needs reeducation. New words are introduced very rarely and we do care about the ramifications when we do it. What next? An optional way to support case insensitive names using a unicode character prefix? -gps
All that is needed is something like this:
foo = 7 :foo = 7 # exactly like foo=7 :while= 3 # assigns 3 to variable 'while' globals()['while']=3 # current way to do this
print element.:for # from example below # # keyword parameters to a function call: # BuildUrlQuery( lang='en', item='monsoon', :class='normal') # -> "?lang=en&query=monsoon&class=normal"
The generic keyword function call is a really nice language feature, but it's rather impaired by the need to avoid those names which happen to be keywords.
The lack of this is most painful when you are auto-generating python code which forms a bridge to another language with its own namespace (as in XML example). It's a pain when some of the names you might generate could conflict with python keywords. So, you end up using dicts and getattrs for everything and the code gets much less readable. With a simple escape like :name available, it's worthwhile to do everything with identifiers and generate the escape only as needed for these.
One of the great strengths of python is the ability to form cleans and comprehensive bridges to other languages and environments (thus, in many cases, avoiding the need to write programs in those other environments :-) ). This feature would fill a gap there.
The python tcl/tk interface is a bit messed up since tcl/tk uses some names for options which conflict with python keywords, and so you need to add '_' to those names.
There is a feature like this in VHDL: \name\ and \while\ are identifiers, the backslashes are not part of the name, but just quote it. In VHDL you can write identifiers like \22\, and \!This?is=Strange\ as well; since VHDL creates modules that have named ports, and those modules can interface to things generated by other environments, they needed a way to assign any name to a port.
For python, I'm not sure it makes sense to allow identifiers that doesn't follow the basic rule "[A-Za-z_][A-Za-z_0-9]*" -- that could break some debugging tools which expect variable names to be well-formed -- but it would be useful to be able to use any well-formed name as an identifier, including those which happen to be keywords.
I've suggested :name, which doesn't break old code, and doesn't require using any new punctuation. Syntax would not change, just the lexical definition of 'identifier'. If the intent is to allow arbitrary names (not just well-formed ones), then n'name' would work better (and is consistent with existing stuff).
Date: Thu, 22 Jul 2010 10:41:39 -0400 From: jnoller@gmail.com To: bartosz-tarnowski@zlotniki.pl CC: python-dev@python.org Subject: Re: [Python-Dev] Set the namespace free!
On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski <bartosz-tarnowski@zlotniki.pl> wrote:
Hello, guys.
Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns
an
object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
This would allow the user to declare any identifier with any name:
for = with(return) + try
What do you think of it? It is a major change, but I think Python needs it.
-- haael
I'm not a fan of this - I'd much prefer[1] that we use the exclamation point to determine scope:
foobar - local !foobar - one up !!foobar - higher than the last one !!!foobar - even higher in scope
We could do the inverse as well; if you append ! you can push variable down in scope.
Jesse
[1] I am not serious. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/gsmith%40alumni.uwaterloo....
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/greg%40krypto.org

On Sat, Jul 24, 2010 at 3:31 AM, Gregory P. Smith <greg@krypto.org> wrote:
Yuck. Anyone who feels they need a variable named the same a reserved word simply feels wrong and needs reeducation. [...]
While I agree with you in principle, I have been finding it frustrating trying to calculate yield in my financial applications lately... ;) That being said, yield is pretty much the only (reserved) word I have had problems with finding (descriptive) alternative (variable) names for, so far. Anders

Am 26.07.2010 10:59, schrieb Anders Sandvig:
On Sat, Jul 24, 2010 at 3:31 AM, Gregory P. Smith <greg@krypto.org> wrote:
Yuck. Anyone who feels they need a variable named the same a reserved word simply feels wrong and needs reeducation. [...]
While I agree with you in principle, I have been finding it frustrating trying to calculate yield in my financial applications lately... ;)
In the spirit of optimistic programming, why not assume a large one and call it Yield? ;) Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out.

Georg Brandl writes:
Am 26.07.2010 10:59, schrieb Anders Sandvig:
On Sat, Jul 24, 2010 at 3:31 AM, Gregory P. Smith <greg@krypto.org> wrote:
Yuck. Anyone who feels they need a variable named the same a reserved word simply feels wrong and needs reeducation. [...]
While I agree with you in principle, I have been finding it frustrating trying to calculate yield in my financial applications lately... ;)
In the spirit of optimistic programming, why not assume a large one and call it Yield? ;)
That's certainly more workable than the obvious near-synonym, "return".

On Thu, Jul 22, 2010 at 10:04 AM, Bartosz Tarnowski < bartosz-tarnowski@zlotniki.pl> wrote:
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
A) this should be in the 'ideas' list
B) it will never ever happen. not only does it have very few benefits it makes every single piece of python code ever written invalid and it is a bad idea to arbitrarily add punctuation to the language.

Am 22.07.2010 15:04, schrieb Bartosz Tarnowski:
Hello, guys.
Python has more and more reserved words over time. It becomes quite annoying, since you can not use variables and attributes of such names. Suppose I want to make an XML parser that reads a document and returns an object with attributes corresponding to XML element attributes:
elem = parse_xml("<element param='boo'/>") print elem.param boo
What should I do then, when the attribute is a reserver word? I could use trailing underscore, but this is quite ugly and introduces ambiguity.
elem = parse_xml("<element for='each'/>") print elem.for_ #????? elem = parse_xml("<element for_='each'/>") print elem.for__ #?????
My proposal: let's make a syntax change.
Let all reserved words be preceded with some symbol, i.e. "!" (exclamation mark). This goes also for standard library global identifiers.
!for boo in foo: !if boo is !None: !print(hoo) !else: !return !sorted(woo)
You raise a good point. However, I'd rather explicitly signify names instead of keywords: for $boo in $foo: if $boo is $None: print($hoo) else: return sorted($woo) That also has the advantage of introducing a measure of much needed compatibility with industry-leading web programming languages. Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out.

On Thu, Jul 22, 2010 at 11:54 AM, Georg Brandl <g.brandl@gmx.net> wrote: ..
That also has the advantage of introducing a measure of much needed compatibility with industry-leading web programming languages.
Looks like our messages crossed in flight. pathologically-eclecticly-yours

On Thu, 22 Jul 2010 16:54:58 +0100 Georg Brandl <g.brandl@gmx.net> wrote:
You raise a good point. However, I'd rather explicitly signify names instead of keywords:
for $boo in $foo: if $boo is $None: print($hoo) else: return sorted($woo)
That also has the advantage of introducing a measure of much needed compatibility with industry-leading web programming languages.
Also, Python would gain much needed flexibility if we allowed indirect name lookup using `$$foo`. Current abstractions are too poor compared to best-of-breed OO languages such as PHP or Perl 5.

On Thu, Jul 22, 2010 at 10:37 AM, Antoine Pitrou <solipsis@pitrou.net> wrote:
On Thu, 22 Jul 2010 16:54:58 +0100 Georg Brandl <g.brandl@gmx.net> wrote:
That also has the advantage of introducing a measure of much needed compatibility with industry-leading web programming languages.
Also, Python would gain much needed flexibility if we allowed indirect name lookup using `$$foo`. Current abstractions are too poor compared to best-of-breed OO languages such as PHP or Perl 5.
Let's not forget additional lookup operators, like %foo, to specify the kind of lookup we're interested in (whether we want the result as a dict vs. list vs. whatever). We could even allow overloading (something like object.__$__) to allow objects to customize the results of their lookup operations. Really, I think with this and a world-class regex implementation we'll be well-positioned when the Internet finally hits it big. -- Chris
participants (17)
-
Alex Light
-
Alexander Belopolsky
-
Anders Sandvig
-
Antoine Pitrou
-
Bartosz Tarnowski
-
Chris Bergstresser
-
Georg Brandl
-
Greg Ewing
-
Gregory P. Smith
-
gregory.smith3@sympatico.ca
-
Isaac Morland
-
Jesse Noller
-
Reid Kleckner
-
Simon Brunning
-
Stephen J. Turnbull
-
Xavier Morel
-
岳帅杰