Re: [perl #78112] [BUG] Null PMC access when using placeholder parameter in rhs of attribute assignment in class declaration in Rakudo

2010-10-03 Thread John Harrison
std seems to complain that the placeholder variables are not valid here.
Maybe we need more clarification on whether this should work or not.


ash_ std: class A {has $.a = $^b + 1 }; say A.new(1).a

p6eval std 237d266: OUTPUT«[31m===[0mSORRY![31m===[0m␤Placeholder variable
$^b may not be used here because the surrounding package block takes no
signature at /tmp/Fx9q_bkcz8 line 1:␤-- [32mclass A {has $.a =
$^b[33m⏏[31m + 1}; say A.new(1).a

--
John Harrison


On Tue, Sep 28, 2010 at 5:34 PM, Carl Mäsak perl6-bugs-follo...@perl.orgwrote:

 # New Ticket Created by  Carl Mäsak
 # Please include the string:  [perl #78112]
 # in the subject line of all future correspondence about this issue.
 # URL: http://rt.perl.org/rt3/Ticket/Display.html?id=78112 


 hudnix rakudo: class A {has $.a = $^b + 1;has $.b = $^a }; say
 A.new(1,2).a
 p6eval rakudo 624188: OUTPUT«Null PMC access in type() [...]
 * masak submits rakudobug
 masak rakudo: class A { has $.a = $^b }; A.new
 p6eval rakudo 624188: OUTPUT«Null PMC access in isa_pmc() [...]



Re: [perl #78156] AutoReply: [BUG] Null PMC access on does Callable

2010-10-01 Thread John Harrison
This appears to only happen on mutli subs but I am still looking for other
causes.

--
John Harrison


On Fri, Oct 1, 2010 at 11:11 AM, perl6 via RT
perl6-bugs-follo...@perl.orgwrote:

 Greetings,

 This message has been automatically generated in response to the
 creation of a trouble ticket regarding:
[BUG] Null PMC access on does Callable,
 a summary of which appears below.

 There is no need to reply to this message right now.  Your ticket has been
 assigned an ID of [perl #78156].

 Please include the string:

 [perl #78156]

 in the subject line of all future correspondence about this issue. To do
 so,
 you may reply to this message.

Thank you,
perl6-bugs-follo...@perl.org

 -
 Some subs can 'does Callable' while other return Null PMC access errors.

 TimToady rakudo: say print does Callable
 p6eval rakudo 8827d0: OUTPUT«Null PMC access in clone()␤  in
 'infix:does' at line 37␤  in 'infix:does' at line 537:CORE.setting␤  in
 main program body at line 22:/tmp/NXqor71nBI␤»
 TimToady oo
 TimToady rakudo: sub foo {}; say foo does Callable
 p6eval rakudo 8827d0: OUTPUT«foo␤»

 --
 John Harrison




Re: slurpy hash

2010-08-18 Thread John Harrison
One thing also worth noting is that $1 is an alias to $/[1].

perl6
 my $1 = 2; say $1;
2
 my $1 = 2; say $/[1];
2


Also, $foo is an alias to $/foo. This would make them rather difficult
to use in parameters, IMO.


--
John Harrison


On Wed, Aug 18, 2010 at 3:12 AM, Moritz Lenz mor...@faui2k3.org wrote:



 Am 18.08.2010 01:33, schrieb Darren Duncan:

  David H. Adler wrote:

 Hm. So how are valid parameter names defined? Identifiers in perl6 seem
 to be composed of letters, digits and underscores (and hyphens and
 apostrophes between letters).


 That's correct.


  Are parameter names defined differently?


 Yes and no. If you want to use the normal syntax like this:

 sub f(:$named-name) { ... }

 your indeed limited to identifiers. But with slurpy hashes you can use any
 key, really:

 sub f(*%h) {
   say %h{ '++' };
 }
 f(|{ '++' = 'non-identifier names work'})

 However this is rather clumsy, and should be reserved for interoperation
 with other languages which have different ideas of what an identifier is.


  You certainly seem to be able to declare a variable $1.


 If Rakudo allows that, it's a bug. STD.pm6, Larry's Perl 6 grammar, says
 Can't declare a numeric variable about it.


  I believe that Perl 6 identifiers can be any string at all, but that
 then they have to appear quoted in the general case;
 the above
 restriction just refers to the common case of unquoted identifiers. This
 said, I'm not sure yet what the syntax is for quoting identifiers. --


 This distinction is new to me. For identifier means what you call
 unquoted identifier, and my reading of the synopsis so far hasn't
 contradicted that unerstanding in any way.

 But that's really a question of how you call stuff - your explanation is
 correct, as I demonstrated above.

 Cheers,
 Moritz



Re: Methodicals: A better way to monkey type

2010-04-21 Thread John Harrison
Ruby has a similar functionality that lets you define methods on an instance
object. Really, its how class methods are specified, you just put the class
name as the name of the object. Here is an example:

a = Object.new
def a.foo
   puts foo and #{self}
end

They will stay on the object as long as the object exists. So, if its a
scoped variable, it will go away when you leave the scope.

--

John Harrison


On Wed, Apr 21, 2010 at 7:49 AM, Andrew Whitworth wknight8...@gmail.comwrote:

 This idea strikes me as being extremely similar to C#'s extension
 methods, a feature that I've found to be particularly beneficial in
 many cases. The fact that these methodicals are lexically-scoped is
 especially nice, and the fact that they can be applied post-hoc to
 arbitrary data items that have no prior support for them (like Parrot
 objects) would be very nice to have on Parrot in particular where
 language interoperation could be a big deal in the future.

 +1

 --Andrew Whitworth



 On Wed, Apr 21, 2010 at 3:16 AM, Stefan O'Rear stefa...@cox.net wrote:
  (The following describes a proposed extension to Perl 6, methodical
 scoped
  operators or methodicals for short.  It is written in the present tense
 for
  simplicity but should be understood as the future conditional.)
 
  Normally, when you write a method call, the definition of the method is
  entirely in the domain of the receiver's class:
 
 $object.make-me-a-sandwich;  # $object gets to decide what this means
 
  However, this is not always how things work.
 
 $object.WHAT;  # Larry says that WHAT should return the protoobject
 
  WHAT, WHENCE, postcircumfix:[ ], and similar operators have semantics
  (although not implementation) defined by the language itself. Currently,
 Perl 6
  fakes this by having all values inherit from Any or Mu or Cool, which
 define
  the basic, overridable versions of these method-like operators. This
 cheat
  actually works pretty well in a homogeneous environment, but it fails if
 we have
  to consider objects from outside Perl 6.
 
 $parrot-array.WHAT;  # Method WHAT not found for invocant of type ...
 
  The problem here is that scopes are conflated - WHAT is defined by the
  language, which is approximately a lexical scope, while methods on an
 object
  are in some entirely different scope.
 
  A methodical is an operator which syntactically behaves as a method but
 is
  subject to scoping rules.  Methodicals are defined using the ordinary
 method
  keyword, qualified with my or our.  (TODO: This seems the most natural
 syntax
  to me, but it conflicts with existing usage.  Which is more worth having
 on
  it?)  Methodicals do not need to be declared in classes, but they should
  generally have declared receiver types.
 
 {
 my method make-me-a-sandwich(Num:) { ... }
 
 2.make-me-a-sandwich; # calls our method
 
 ham.make-me-a-sandwich; # either an error, or method dispatch
 }
 
 2.make-ma-a-sandwich; # ordinary method dispatch
 
  The primary use case for methodicals is naturally in the setting.  Many
 of the
  methods which are currently defined on lower-level types could become
  methodicals and they would be available on all values, in any code
 compiled
  within the Perl 6 setting, without polluting the referencing environments
 of
  non-Perl 6 code in the same object environment.
 
 my method WHAT($thing) { ... }
 
  Rakudo already uses something very much like an ad-hoc direct
 implementation of
  methodicals to handle postcircumfix operators.
 
  Methodicals are also useful in user code where the most natural phrasing
 of a
  calculation is as a property of a system type, for instance from the
 Mandelbrot
  Advent example:
 
 my method mandel(Complex:) {
 my $z = 0i;
 for ^$max-iterations {
 $z = $z * $z + self;
 return 1 if ($z.abs  2);
 }
 return 0;
 }
 
  Since methodicals do not pollute global referencing environments, and do
 not
  compromise encapsulation, MONKEY_TYPING is not needed here.
 
  A methodical defined inside a class functions much like a private method.
  There may be something interesting here, but I'm not entirely sure what.
 
  There are two natural implementations of methodicals in terms of other
 language
  features.  First, it is possible to treat methodicals as ordinary methods
  (monkey typing under the hood), but with generated names; the true name
 is
  bound to the program name only within the correct scope.  If possible,
 the
  methods should be treated as anonymous, accessible only though an opaque
 name
  object.  Care must be taken to prevent incorrect exposure of private
 fields and
  methods.
 
  Alternatively, a methodical can be desugared to a multi sub with the same
 scope
  as the methodical itself, changing statically named method calls into
 calls to
  the methodical.  This gives reflection invisibility and privacy for free,
 but
  may require more work

Re: Symbol '$x' not predeclared in anonymous

2010-03-10 Thread John Harrison
Each line is executed independently. Local variables from 1 line of code
will not persist between returns.

Some things do persist though, classes for instance will persist, roles will
persist, grammars will persist, but sub routines will not, neither will
variables. I believe there are plans for some improvements, eventually, but
right now its fairly simplistic.

On Tue, Mar 9, 2010 at 11:42 AM, Kiffin Gish kiffin.g...@planet.nl wrote:

 I want to play around with perl6 and see what it can do.

 $ cd rakudo
 $ ./perl6
   my $x = 8
  say $x
 Symbol '$x' not predeclared in anonymous

 How can I define variables and use them later?

 --
 Kiffin Gish kiffin.g...@planet.nl
 Gouda, The Netherlands





-- 
John ash Harrison


Re: Custom errors on subsets?

2010-01-05 Thread John Harrison
Would it make sense to have the failure bound to the function parameter
rather than the subset? eg.:

sub foo (Str $name where { $_ ~~ :f } else { die Houston, we don't have a
file } ) { ... }

Just a thought...

On Tue, Jan 5, 2010 at 1:07 AM, Ovid
publiustemp-perl6langua...@yahoo.comwrote:

 --- On Mon, 4/1/10, yary not@gmail.com wrote:

  From: yary not@gmail.com

  How about
  multi sub foo(Any $name) { die Houston, we have a major
  malfunction.}

 Looks like tha would work, but it forces the developer to remember to write
 this extra code every time they may have a constraint failure, if they
 forget, we're back to the old, cryptic message.  It would be much nicer to
 be able to do this (psuedo-code, obviouly):

  subset Filename of Str where { $_ ~~ :f }
 :OnFail { No such file: '$_' }
  subset Celsius  of Num where { $_ = -273.15 }
:OnFail { Celsius temperature should be a Num = -273.15, not '$_'  }

 With something akin to that, developers won't have to write extra
 boilerplate every time a constraint fails.  Plus, the code is friendlier :)

 Cheers,
 Ovid
 --
 Buy the book - http://www.oreilly.com/catalog/perlhks/
 Tech blog- http://use.perl.org/~Ovid/journal/
 Twitter  - http://twitter.com/OvidPerl
 Official Perl 6 Wiki - http://www.perlfoundation.org/perl6





-- 
John ash Harrison


Re: Perl 6 IDEs

2009-12-07 Thread John Harrison
http://github.com/petdance/vim-perl has vim syntax highlighting for perl 6.

2009/12/7 Steffen Schwigon s...@renormalist.net

 Víctor A. Rodríguez (Bit-Man) vic...@bit-man.com.ar writes:
  Hi perlsixers,
 
  we've been working a bit on Perl 6 lately [1] and some work, even the
  basic coding, would be great if we use some IDE.
  I'm a regular Eclipse user and EPIC seems the natural choice for me,
  but it doesn't support Perl 6 (yet). Also tied to install Padre on top
  of Ubuntu but just went to nowhere :-P
 
  Did anyone tried any other Perl 6 aware IDE ??

 There is a Perl6 aware cperl-mode.el for Emacs which works quite ok.
 Don't start a war on whether it's an IDE. I just wanted to mention it.
 Find it in the Pugs repository.

 Kind regards,
 Steffen
 --
 Steffen Schwigon s...@renormalist.net




-- 
John ash Harrison