# New Ticket Created by Klaas-Jan Stol # Please include the string: [perl #58252] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=58252 >
The following issues are not entirely clear from PDD19: [1] according to PDD19 (PIR) you can declare a .const as follows: =item .const <type> <identifier> = <const> Define a constant named I<identifier> of type I<type> and assign value I<const> to it. The I<type> may be either an integer value or a string constant. The constant is stored in the constant table of the current bytecode file. <type> stands for "int", "num", "string" or "pmc". However, writing "pmc" does not make any sense, because <const> must be some literal constant, such as 42, 3.14 or "hello"; it doesn't make sense to write: .const pmc x = "hi" # what type will x be? THerefore, should we allow "pmc" as a type here? I see 2 reasonable solutions: 1: disallow "pmc" altogether 2: based on the type of the constant (int-constant, num-constant or string constant), make the variable (eh, constant) a constant of one of the standard types (Integer, Float or String , respectively). [2] you can declare a .const using a PMC class type id: .const .Sub x = "foo" AFAIU, type ids will be removed altogether (is this true?). If so, then the above would be invalid. Instead, we might allow for writing: .const "Sub" x = "foo". Which seems a nice enough solution, but this solution is rather limited, in that you can't create, for instance, an Array constant: .const "Array" a = "foo" # doesn't make sense. I know the creation of Sub constants is useful, so we definitely should keep something like this around. I see the following solutions: 1: only allow pmc types that are reasonable: - .const "Integer" x = 42 - .const "Float" PI = 3.14 - .const "String" message = "hi there" - .const "Sub" x = "foo" and report an error message if you would do something weird as ".const 'Env' e = 10". 2: extend syntax for other variants, for instance, to initialize arrays and hashtables: - .const "Array" a = (1, 2, 3, 4) # creates a constant array with 4 elements, nrs 1 to 4 - .const "Hash" h1 = {"x"=>42, "y"=>10} ## using syntactic sugar form that is used for named arguments as well - .const "Hash" h2 = { 42 :named("x"), 10 :named("y") } ## to be consistent with the above, using syntax well-known in named-arguments. Not sure if this would be helpful/possible, but just some thoughts. comments welcome. kjs