»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend! Set by sorear on 4 February 2011. |
|||
00:00
benabik is now known as benabik_away
00:05
molaf joined
|
|||
sorear | sjohnson: don't ask to ask | 00:07 | |
sjohnson | i asked if anyone was good at it, not if i could ask a question | 00:08 | |
:) | |||
but, i get ya. my question is this | |||
00:08
markmont left
|
|||
sjohnson | to make things simple, if you have a commercial app and you distribute a GPLv2 program with it, such that a .zip file might contain commercialapp.exe and GPLv2-program.exe... | 00:09 | |
what are the license requirements? | |||
00:09
am0c left
|
|||
sorear | see the "mere aggregation" clause | 00:09 | |
sjohnson | thanks | 00:11 | |
flussence | ahh, after having to write bad code all day at work, I get to spend the night ripping apart Ancient Perl code and replacing it with p6... | 00:12 | |
jnthn | zzz & | 00:13 | |
sjohnson | sorear: that answers that question, thank you. next question is in my .zip example | 00:15 | |
must i then include gplv2.txt license text as the third file? | |||
flussence | if you're distributing a GPLed binary thing, you need to give the user the license text and either tell them where to get the source or bundle that with it | 00:16 | |
00:18
shi joined
|
|||
sjohnson | so, provide a URL i suppose in, say, LICENSES\ultravnc.txt ? | 00:20 | |
flussence: what if i never modified the source? | 00:21 | ||
00:21
kst joined
|
|||
sjohnson | i still need to provide the source, and or where they can find it? | 00:21 | |
flussence | if it's unmodified, I guess you're just mirroring the upstream's binary so it'd be ok to link to their source | ||
sjohnson | unfortunately, the source url doesnt work for UltraVNC | 00:22 | |
flussence | hm | ||
in that case I think you'd have to provide it yourself somehow | |||
sjohnson | hmm.. the authors themselves who distribute .zip files with binaries don't include the source | 00:23 | |
i wonder if that means that i don't have to either if it's unmodified. very confusing stuff, this GPL | |||
flussence | there's source stuff here, but it's a bit out of date: sourceforge.net/projects/ultravnc/files/ | 00:25 | |
looks like svn.sf.net's just down. no surprise there... | 00:27 | ||
sjohnson | ah | ||
thanks for the help | |||
00:30
molaf_ joined
00:34
molaf left
00:38
pecastro left
00:45
bacek left
00:50
kaare_ left
00:58
bacek joined
01:09
IllvilJa joined,
cdarroch left
01:33
Chillance left
01:58
IllvilJa left
02:01
noganex joined
02:04
noganex_ left
02:15
stkowski left
|
|||
flussence | ok, I'm done for the night; liking where this is going: github.com/flussence/Text-Tabs-Wra...xt/Tabs.pm | 02:51 | |
03:13
whiteknight left
03:18
shi left
03:43
kst left
03:44
kst joined
03:46
jaldhar joined
03:50
shortcircuit left,
shortcircuit joined
04:10
kaydsoft left,
cafesofie left
04:11
kaydsoft joined
04:24
ponbiki joined
04:26
felliott left
04:27
Su-Shee left
04:28
Su-Shee joined
04:32
IllvilJa joined
|
|||
sorear | TimToady: How likely are we to see $*endsym in Perl 6? | 04:35 | |
04:42
arlinius joined
04:46
stifynsemons joined
04:57
justatheory left
05:13
coldhead left
|
|||
TimToady | sorear: I would be interested in considering other ways of factoring out common data, but I'm not very interested in undoing the factorization, in a DRY way | 05:22 | |
we could, for instance, make <nofun> parse a <sym> instead of the other way around | |||
but then it's less clear that <nofun> is parsing the symbol | 05:23 | ||
so I think the current way is clearer | |||
sorear | I have nothing against DRY | ||
the problem I have with the current way is that expecting <sym> to react to dynamic variables breaks LTM semantic purity | |||
TimToady | it seems like there should be a way to do it with the body of the proto that would be better in that respect | 05:24 | |
if the subrules didn't parse the sym, then the proto could say { <sym> <endsym> {*} } | |||
but then the multis don't have the option to parse anything other than the standard sym | 05:25 | ||
so all the multies could work one way or the other, but not both | 05:26 | ||
it's sort of the "is parsed" vs "is reparsed" distinction that we proposed at one point | |||
05:27
envi joined
|
|||
TimToady | I can certainly see the benefit of knowing the endsym at compile time | 05:27 | |
sorear | I can't see any way out of knowing the endsym at compile time. | 05:28 | |
TimToady | though, of course, you still have to allow for the dynamicity of new derived grammars | ||
and that happens at run time | |||
sorear | viv cheats and interprets :$*endsym = 'foo' as a "use sym :for('xxx') :after('foo')" | ||
What's is reparsed about? | |||
TimToady | for user macros, basically | 05:29 | |
macro foo () is parsed # assumes "foo" is already recognized | |||
macro foo () is reparsed # assumes "foo" is not already recognized | |||
comparable to whether we assume the <sym> is already matched | 05:30 | ||
might even turn into exactly that underneat | |||
h | |||
if the macro name ends up as the sym | |||
and I don't see why not | |||
sorear | the least bad idea I have is something like, regex twigil:sym<!> is endsym<begid> { } # sym -> \! <.begid> proto regex twigil is endsym<begid> {*} # all twigil:xxx that are defined such that the compiler can see this proto, get a begid definition | 05:31 | |
TimToady | it used to be that way, once upon a time | 05:32 | |
don't remember why I changed it | |||
sorear | I'm operating under an assumption that endsym matters to LTM | 05:33 | |
TimToady | I think that's right | ||
so it has to know at the time the new lexer is created | 05:34 | ||
sorear | niecza's LTM cache stuff likes to assume that one regex with one runtime type -> exactly one lexer | ||
TimToady | which isn't necessarily compile time, but then it requires more JIT optimization | ||
well, one doesn't change the regex, but new types can be created | 05:35 | ||
I suppose evil code could even change the ISA pedigree | 05:36 | ||
and potentially use a different proto | |||
sorear | @ISA? In my Perl 6? | ||
TimToady | I didn't say @ | ||
sorear | we have to make certain assumptions about class pedigree immutability, if gradual typing is going to work | 05:37 | |
it does no good to say my Dog $x if the compiler can't prove any implications of $x ~~ Dog | |||
TimToady | sure, though declarative pessimization is alway spossible | 05:38 | |
but then it's, like, declared | |||
and on the user's head be it | |||
we can certainly assume the lack of evil if no evil has been declared | 05:39 | ||
and we can even put off the analysis of evil for now :) | 05:40 | ||
"Doctor, it hurts when I do this." "What's that to me? I just deliver babies." | 05:43 | ||
jdhore | TimToady, Sorry to bother you and i know this is perhaps a bit inappropriate, but i absolutely LOVE Perl. You are the man. | 05:44 | |
TimToady | :) | 05:53 | |
05:53
aindilis joined
|
|||
sorear | TimToady: the other big semantic gap between viv and niecza is cursor mutation | 06:16 | |
{ $<POST>:delete; } and co | |||
06:48
Vijayasarathy joined,
Vijayasarathy left
07:07
orafu left
|
|||
xinming_ | After lwall learnt Japanese, And choose the Mu as a type name in perl 6, Hoped he chose Chinese before the Japanese. ;-) | 07:13 | |
sorear | What do you mean by that? | 07:15 | |
xinming_ | sorear: Mu is a Japanese pronouncation for 无(Simplified Chinese), and 無(Traditional Chinese), They both pronounced Wu in Chinese, But not Mu. :-P | 07:16 | |
07:18
flatwhatson_ left
|
|||
dalek | ecza: 79f521f | sorear++ | / (3 files): Bring Niecza's STD a bit closer to the real thing -800 lines diff -u output; also tracks several recent improvements. |
07:20 | |
sorear | xinming_: I see | 07:23 | |
sorear -> sleep | 07:25 | ||
07:38
rgrau left,
stifynsemons left
07:45
coldhead joined
08:05
[particle] left
08:28
kaydsoft_ joined,
kaydsoft left
08:29
nadim_ left
08:32
kaydsoft_ left,
nadim_ joined
08:36
kfo joined
08:39
kfo_ left
08:45
risou joined
08:57
pothos left,
pothos joined
09:15
kaydsoft joined
09:16
Mowah joined
09:17
risou left,
risou_ joined
09:20
kaydsoft left
09:21
kaydsoft joined
10:18
dorlamm joined
10:28
user_1926 joined
10:31
user_1926 left
10:37
kiffin joined
10:38
kiffin left
|
|||
snarkyboojum | perl6: my $x = 5; $x.++; say $x | 10:39 | |
p6eval | pugs, niecza v2-5-g79f521f: OUTPUT«6» | ||
..rakudo 924242: OUTPUT«Could not find sub &postfix:<.> in main program body at line 22:/tmp/zpiS6wKv1W» | |||
snarkyboojum | yay niecza | 10:40 | |
10:50
orafu joined
10:56
fIorz joined,
florz left,
fIorz is now known as florz
10:58
karb joined
11:11
hirschnase joined,
hirschnase left,
toto__ joined
11:12
toto__ left
11:17
jaffa4 joined
|
|||
jaffa4 | hi | 11:18 | |
Is redeclaration of a variable allowed in Perl 6? | |||
11:19
masak joined
|
|||
jaffa4 | Is redeclaration of a variable allowed in Perl 6? | 11:19 | |
masak | std: my $a; my $a | ||
p6eval | std 625303c: OUTPUT«Potential difficulties: Useless redeclaration of variable $a (see line 1) at /tmp/Gj_bdbKR8q line 1:------> my $a; my $a⏏<EOL>ok 00:01 119m» | ||
masak | allowed, but if it's in the same block, you get a warning. | ||
hi, #perl6! | |||
jaffa4 | rakudo fails for redeclaration | ||
masak | yes, it does. | ||
jaffa4 | I tried an example | ||
I fixed the example, is that ok? | 11:20 | ||
masak | not sure I understand. | ||
jaffa4 | I have access to github perl6 repository | ||
read -write | |||
Is it ok if I commit that? | |||
11:21
coldhead left
|
|||
masak | permission > forgiveness, so yes :) | 11:21 | |
if you want someone to review the patch first, that's OK too. | |||
jaffa4 | The change works , I tested it. | ||
ok | |||
masak | yes, we implicitly expect any committer to have run the spectests on the commit. | 11:22 | |
jaffa4: there might be some RT ticket that can be closed if such a commit goes in, too. | 11:23 | ||
masak looks | |||
jaffa4 | RT ticket? | 11:26 | |
masak | yes, it's our issue tracker. rt.perl.org/rt3/ | 11:27 | |
but I looked, and I don't see any ticket for that. | 11:28 | ||
jaffa4 | I am not surprised | ||
masak submits one | |||
11:29
dorlamm left
|
|||
masak | that way, you'll get the satisfaction of having a closed ticket in RT :) | 11:31 | |
tadzik | o/ | ||
masak | \o | ||
rakudo: my $a; my $a; say 'alive' | |||
p6eval | rakudo 924242: OUTPUT«===SORRY!===Redeclaration of symbol $a at line 22, near "; say 'ali"» | ||
karb | rakudo: my Pair @nums = 1=>'one'; say @nums[0].perl | 11:32 | |
p6eval | rakudo 924242: OUTPUT«(timeout)» | 11:33 | |
karb | This gives error "maximum recursion depth exceeded" | ||
masak | :( | ||
tadzik | funny | ||
masak | jaffa4: rt.perl.org/rt3/Ticket/Display.html?id=83430 | ||
11:38
karb left
|
|||
jaffa4 | What is its number? | 11:38 | |
masak | #83430 | 11:40 | |
11:41
fhelmberger joined
|
|||
jaffa4 | ph I just changed the example, that is a smaller task. | 11:42 | |
nietza: print "hel;lo" | 11:44 | ||
niecza: print "hel;lo" | |||
p6eval | niecza v2-5-g79f521f: OUTPUT«hel;lo» | ||
jaffa4 | niecza: print <hel;lo> | 11:45 | |
p6eval | niecza v2-5-g79f521f: OUTPUT«hel;lo» | ||
11:45
sECuRE left,
sECuRE joined
|
|||
jaffa4 | niecza: print 1+3; | 11:45 | |
p6eval | niecza v2-5-g79f521f: OUTPUT«4» | ||
jaffa4 | niecza: print "1"+3; | ||
p6eval | niecza v2-5-g79f521f: OUTPUT«4» | 11:46 | |
jaffa4 | niecza: my $b=4; print "1"+$b; | ||
p6eval | niecza v2-5-g79f521f: OUTPUT«5» | ||
masak | jaffa4: you mentioned that you had a patch for #83430. are you about to commit it to github? | ||
s/commit/push/ | 11:47 | ||
jaffa4 | no, you misunderstood me | ||
masak | I see I did. | ||
tadzik | I feel like coding | ||
masak | <jaffa4> Is it ok if I commit that? | ||
jaffa4: what is it you have to commit? | 11:48 | ||
jaffa4 | >>>I fixed the example, | ||
masak | <masak> not sure I understand. | 11:49 | |
which example? | |||
I don't think I've missed any relevant backlog. | |||
jaffa4 | cookbook/arrays/ 4 01 | 11:50 | |
it is really almost nothing. | |||
snarkyboojum | that was the vital piece of missing information | ||
masak | ah. yes. | ||
jaffa4 | all is well that ends well, now you have it. | 11:51 | |
masak tries to find this example | |||
jaffa4: you don't happen to have the URL? | |||
snarkyboojum | masak: I'm guessing, github.com/perl6/perl6-examples/bl...program.pl | 11:52 | |
jaffa4 | github.com/perl6/perl6-examples/bl...program.pl | ||
tadzik | perlcabal.org/syn/S32/IO.html#uri_ -- method of what should 'method uri()' actually be, and how would it make use of $self? | ||
snarkyboojum | oops.. I'll butt out :) | ||
masak | jaffa4: thanks. | 11:53 | |
tadzik | also, in Rakudo we have IO, but not IO::File nor IO::Directory | ||
masak | jaffa4: yes, that's a redeclaration. it's legit Perl 6, but it currently dies in Rakudo. | ||
jaffa4: feel free to fix it. | |||
jnthn | o/ | 11:54 | |
masak | tadzik: S32 is full of sludge and outright liquid. | ||
jnthn! \o/ | |||
jaffa4 | I have just noticed | ||
nietze here is better than the one i have. | |||
masak | tadzik: S32/IO, I mean. | ||
jaffa4 | nietcza: my Int $b=4; | 11:55 | |
masak | jaffa4: "niecza". yes, it's frequently updated. | ||
jaffa4 | niecza: my Int $b=4; | ||
p6eval | niecza v2-5-g79f521f: OUTPUT«===SORRY!===In my declaration, typename 'Int' must be predeclared (or marked as declarative with :: prefix) at /tmp/qPhWWfdG6T line 1:------> my Int⏏ $b=4;Malformed my at /tmp/qPhWWfdG6T line 1:------> my ⏏Int | ||
..$b=4;Par… | |||
tadzik | masak: IMHO, having uri() is a bit bloaty | 11:57 | |
I feel more like a URI::Handler or something | |||
masak | good intentions lie behind most of what's in there today. but it's not a design I'd like to see implemented. | 11:58 | |
jaffa4 | but? | 11:59 | |
masak | I'd like for IO to follow the path of DateTime: someone to slim it down to its absolute minimal spec, so that we can discuss usable features from the standpoint of what can be implemented. | ||
12:01
MayDaniel joined
|
|||
snarkyboojum | perhaps inspiration could be taken from IO::All, though that'd hardly be slimming down the spec :D | 12:03 | |
jaffa4 | by the way, I created this github.com/jaffa4/Parrot-and-Perl-...udo-37.exe | ||
masak | nice. jaffa4++ | 12:04 | |
snarkyboojum: I'd like for inspiration to be taken from other languages and theirs IO solutions. someone with the tuits could settle on the 'most elegant' solution, and spec it. | 12:05 | ||
snarkyboojum | masak: do you mean inspiration from other languages other than Perl 5? | 12:08 | |
masak | aye. | 12:09 | |
snarkyboojum | oh, I find IO::All quite inspirational :D | ||
masak | I looked a bit at Haskell's libraries when we were re-doing Temporal, for example. | ||
and Ruby's, and Python's. | |||
jaffa4 | I have been thinking running some speed test | 12:10 | |
snarkyboojum | masak: definitely makes sense to look at other languages, but I don't see any reason to exclude Perl 5 | 12:11 | |
12:11
kst left
|
|||
jaffa4 | Are there perl 6 code available for that? | 12:11 | |
12:11
kst joined
|
|||
masak | snarkyboojum: no, me neither. see what happened in the end with Temporal; most of the inspiration ended up coming from DateTime.pm :) | 12:12 | |
snarkyboojum | masak: was going to be my next point :) | ||
masak | so I don't disagree with you at all. | ||
snarkyboojum | masak: seems like it :) | ||
masak | it's just that I like the idea of going beyond the river of Perl ideas and look at what other communities have settled on. | ||
sometimes there are really good ideas to be had in the other camps. | 12:13 | ||
non-obvious improvements. | |||
snarkyboojum | I'd say you'd be crazy not to :) | ||
we'll have to stop agreeing like this :P | 12:15 | ||
jaffa4 | rakudo: for (0..100000) {} | 12:18 | |
p6eval | rakudo 924242: OUTPUT«(timeout)» | ||
moritz_ | we know that lazy list iteration is slow | 12:21 | |
jaffa4 | is there $_ In Perl 6? | 12:25 | |
masak | yes. | ||
jaffa4 | rakudo: m://; | ||
p6eval | rakudo 924242: OUTPUT«===SORRY!===Confused at line 22, near "m://;"» | ||
jaffa4 | rakudo: :m//; | ||
p6eval | rakudo 924242: OUTPUT«===SORRY!===Confused at line 22, near ":m//;"» | ||
moritz_ | std: :m// | ||
p6eval | std 625303c: OUTPUT«===SORRY!===Bogus term at /tmp/fBgk0GsgrK line 1 (EOF):------> :m//⏏<EOL>Parse failedFAILED 00:01 119m» | ||
masak | rakudo: $_ = "OH HAI"; m/H/; say ~$/ | ||
p6eval | rakudo 924242: OUTPUT«H» | ||
masak | jaffa4: S05 outlines the syntax for matching and substituting. | 12:26 | |
12:26
rgrau joined
|
|||
jaffa4 | rakudo: m/h/; | 12:27 | |
p6eval | rakudo 924242: OUTPUT«Method 'match' not found for invocant of class '' in main program body at line 22:/tmp/I96tmA5RE2» | ||
masak | that's class Any, by the way. | ||
12:27
fredbot joined
|
|||
masak | rakudo: $_ = 'oh my'; s[my] = "HAI"; .say | 12:28 | |
jaffa4 | rakudo: $_="o";m/h/; | ||
p6eval | rakudo 924242: OUTPUT«oh HAI» | ||
rakudo 924242: ( no output ) | |||
12:28
fredbot left
|
|||
jaffa4 | rakudo: $_="o";m:g/h/; | 12:29 | |
masak | rakudo: $_ = 'oh 2!'; s[\d+] += 40; .say | ||
p6eval | rakudo 924242: OUTPUT«===SORRY!===Adverb 'g' not allowed on m at line 22, near ";"» | ||
rakudo 924242: OUTPUT«===SORRY!===Missing assignment operator at line 22, near "+= 40; .sa"» | |||
12:29
gfldex joined
|
|||
masak submits rakudobug | 12:29 | ||
gfldex | parrot seams to eat ram again | ||
jnthn | :/ | 12:30 | |
moritz_ | masak: known | ||
gfldex activates hawkeye_mode to watch parrot | 12:32 | ||
masak | moritz_: known, or known and submitted? | 12:34 | |
moritz_ | masak: there's a fudged test in the test suite. Don't know if there's a ticket too | ||
jaffa4 | rakudo: say $*ERR: "$_\n"; | 12:35 | |
p6eval | rakudo 924242: OUTPUT«===SORRY!===Confused at line 22, near "say $*ERR:"» | ||
jaffa4 | rakudo: say $*ERR "$_\n"; | ||
masak Justins the ticket | |||
p6eval | rakudo 924242: OUTPUT«===SORRY!===Confused at line 22, near "say $*ERR "» | ||
jaffa4 | rakudo: $*ERR.say "$_\n"; | 12:36 | |
p6eval | rakudo 924242: OUTPUT«===SORRY!===Confused at line 22, near "$*ERR.say "» | ||
moritz_ | rakudo: $*ERR.say: "$_\n" | ||
p6eval | rakudo 924242: OUTPUT«Any()» | ||
masak | std: say $*ERR: "$_\n" | ||
p6eval | std 625303c: OUTPUT«ok 00:01 122m» | ||
jaffa4 | ok | ||
rakudo: $*ERR.say: "$_\n"; | 12:37 | ||
p6eval | rakudo 924242: OUTPUT«Any()» | ||
12:39
am0c joined
|
|||
jaffa4 | what is Unable to parse blockoid, couldn't find final '}' at line 4/ | 12:40 | |
rakudo: for (1..4) {$*ERR.say: "$_\n";} | 12:41 | ||
p6eval | rakudo 924242: OUTPUT«1234» | ||
12:41
rgrau_ joined
12:43
rgrau left
|
|||
gfldex | parrot eats ram while mingling core.pm again. How about a ulimit in the build script to have it fail eartly (before it hits PARROT_REVISION)? | 12:43 | |
masak | jaffa4: to me, the error "Unabable to parse blockoid" means the same as "Confused", just inside of a "{}" block. | 12:44 | |
moritz_ | gfldex: just set a ulimit before starting the rakudo build | ||
gfldex: some of us have enough ram, and a ulimit would slow down the build for us/them | |||
gfldex | moritz_: i know how to handle it. My concerns are more with folk that give Rakudo a try on a host that does not have 2GB+ RAM and turn it down after restarting their machine in anger. | 12:47 | |
moritz_ | gfldex: well, the correct fix is to consume memory, not to impose arbitrary limits | 12:50 | |
jnthn | ...to consume *less* memory? :) | 12:51 | |
moritz_ | gfldex: if you can identify a changeset or a branch merge that changed the beahvior for the worse, we can bug the parrot folks with it | ||
aye, what jnthn said :-) | |||
gfldex | i would like to see arbitrary limits so the person that commits to parrot knows there is something wrong with that commit fairly quickly | ||
moritz_: i will dig for the commit | 12:52 | ||
12:52
[Coke] left
|
|||
moritz_ | ++gfldex | 12:52 | |
tadzik | hey look: feather.perl6.nl:3000/ | 12:54 | |
here be ecosystem webservices | 12:56 | ||
dalek | p-rx/nom: 6a63e74 | jonathan++ | src/metamodel/ (2 files): Support .^name on KnowHOWs. |
12:59 | |
p-rx/nom: 0b5765d | jonathan++ | src/NQP/ (2 files): Stop treating meta-object names as strings, and actually reference the meta-objects, just as we do with Actions classes. |
|||
moritz_ | jnthn: what do you think about supporting actual .^method syntax in nqp? | 13:00 | |
jnthn | moritz_: +1 | 13:01 | |
moritz_: Have almost done it quite a few times. :) | |||
But there's always been something more pressing. ;) | 13:02 | ||
13:02
whiteknight joined
|
|||
jnthn | Feel free to go ahead and add it. :) | 13:02 | |
moritz_ | jnthn: rakudo uses a special helper for .^ calls... I think that's a bit overkill. What about just constructing the right method calls right away? | ||
jnthn | If you have tuits and interest, anyways. :) | ||
moritz_ | interest, yes :-) | ||
jnthn | Yeah, it's overkill. I wanna kill that in Rakudo | ||
Note that .HOW is not a method. | |||
(in nqp-rx/nom) | |||
moritz_ | tuits... currently yes | ||
let's see if I can manage it :-) | 13:03 | ||
first step: parsing | |||
jnthn | moritz_: Look for elsif $<longname> eq 'HOW' { in Actions.pm | ||
For a clue on the actions bit :) | |||
moritz_ | yes, that helps | ||
now get it parse... | |||
moritz_ looks at STD | 13:04 | ||
ah, token dotty:sym<.*> | |||
Juerd | tadzik: Port 3000 doesn't listen on ipv6; users with an ipv6 connection can perhaps not visit that url. | 13:06 | |
13:08
risou_ left
|
|||
tadzik | Juerd: no problem as for now, I just plan to try if the whole idea of mine works, then I'll think about deployment more. But thanks for pointing it out | 13:09 | |
13:10
[Coke] joined
|
|||
Juerd | I'm just creating awareness | 13:12 | |
It's up to others to decide if it and when it's worth the trouble to actually make it work :) | |||
moritz_ | jnthn: I got the parsing to work, but I'm wondering if we don't need a bit of a refactor to make .^ calls work without too much PAST introspection | 13:15 | |
13:17
shi joined
|
|||
jnthn | moritz_: Maybe | 13:18 | |
moritz_: What are you thinking of changing? | 13:20 | ||
13:28
pmurias joined
13:36
am0c left
13:41
cafesofie joined
13:43
sftp left
|
|||
moritz_ | jnthn: not sure what's the best approach | 13:44 | |
jnthn: the big problem I'm seeing is putting the invocant into the argument list | 13:45 | ||
13:45
sftp joined
|
|||
jnthn | moritz_: eek, yes | 13:46 | |
moritz_: That's muchly an issue as well because we want to only evaluate the invocant once. | 13:47 | ||
moritz_ | maybe having an $*EXTRA_ARGUMENT that is added in <arglist> | ||
jnthn: I think that's the real reason that rakudo uses a helper | |||
jnthn | moritz_: Right. To avoid messing around with these kinds of things. | 13:49 | |
moritz_ | perhaps a helper isn't such a bad idea after all :-) | 13:52 | |
13:52
shi left
|
|||
jnthn | moritz_: Maybe but...making .HOW.foo and .^foo have radically different performance characteristics is...not so desirable. | 13:52 | |
$obj.HOW is a couple of pointer follows | 13:53 | ||
moritz_ | right | ||
13:54
am0c joined,
felliott joined
14:01
kaare_ joined
|
|||
jnthn | brb, nom shopping | 14:05 | |
dalek | ecza: a7ef71e | pmurias++ | cl-backend/backend.lisp: [cl-backend] classes are now put in a stash |
14:12 | |
masak | tadzik: [ecosystem webservices] nice | 14:19 | |
tadzik: that's probably where we want to publish Emmentaler stuff eventually. | |||
14:20
drbean left
|
|||
tadzik | masak: si. I think it'd be nice to have it API-exposed, like /tests/Acme;Meow | 14:21 | |
masak | can't hurt :) | ||
dalek | p-rx/nom: 594f186 | jonathan++ | / (3 files): Start to stub out role meta-objects. All roles are implicitly parametric because a mention of $?CLASS is generic. The base here could be built up to do parametric roles in NQP, but that's not on the cards at the momnet; of course, Rakudo's meta-objects will carry a full implementation of those. |
14:30 | |
tadzik | hah, from the neutro runtime, 40 seconds is JSON parsing the projects list | 14:34 | |
masak | that's as strong an argument for eval(slurp) as I've ever heard. | 14:36 | |
14:36
risou joined
|
|||
tadzik | 1296916472: parsing json | 14:39 | |
1296916512: parsed | |||
iirc Parrot has some JSON parser, maybe it'll be faster than Pureperl at this moment | 14:40 | ||
masak | sure, but then the output would be Parrot data structures. | ||
tadzik mumbles something about language interoperability | 14:41 | ||
14:41
risou left
14:42
risou joined
|
|||
pmichaud | good morning, #perl6 | 14:48 | |
masak | morning, pm | 14:49 | |
14:49
risou_ joined
|
|||
tadzik | 'afternoon, pmichaud | 14:50 | |
14:52
risou left
14:54
am0c left,
am0c joined
14:59
flatwhatson_ joined
15:00
baest joined
15:01
rgrau_ left
|
|||
jnthn | o/, pmichaud | 15:03 | |
pmichaud | o/ jnthn | ||
15:04
mkramer joined
|
|||
dalek | ast: eb0af12 | (Fitz Elliott)++ | S03-operators/flip-flop.t: [flipflop.t] add tests for flipflop op |
15:04 | |
jnthn | pmichaud: Back from the teaching. :) | 15:05 | |
pmichaud | excellent. How did it go? | ||
15:05
pmurias left
|
|||
jnthn | Very well. Had a lovely bunch of students, and they all gave me excellent ratings in the evaluation form. :) | 15:05 | |
pmichaud | fantastic; jnthn++ | 15:06 | |
jnthn | pmichaud: Let me know when you hit the point of wanting to "freeze" the nom branch for migration. | 15:07 | |
felliott | hello, #perl6 | ||
jnthn | pmichaud: I'm currently working through the roles bits. | ||
masak | saluton, felliott. | ||
felliott | o/, masak! | ||
I've decided to take a stab at implementing the flipflop operator. | 15:08 | ||
pmichaud | jnthn: maybe later today? | ||
jnthn: I'll know more in a couple of hours | |||
jnthn | pmichaud: Sure, whenever you're ready. | ||
pmichaud | things got... interesting.... here over the last couple of days. | ||
jnthn | pmichaud: I tend to work in small commits. | ||
More interesting than "omgz snow"? | 15:09 | ||
felliott | I've got the basics working and was wondering if someone would mind critiquing my code? | ||
pmichaud | caused by the omgz snow, yes :) | ||
felliott | Especially the pir, which I half-understand and half-cargo-culted. | 15:10 | |
jnthn | Ah. :) | ||
felliott | my branch is here: github.com/felliott/rakudo/tree/flipflop | ||
Or the calss code is in a gist here: gist.github.com/812508 | |||
s/calss/class/ | |||
I also have some questions about the spec. | 15:11 | ||
15:11
Axius joined
|
|||
felliott | What should ff do when given non-matchable args? | 15:11 | |
Literals or code, for example. | 15:12 | ||
masak | flussence: flipflip! \o/ | ||
masak looks | |||
jnthn | masak: misstab :) | ||
felliott | In P5, literal ints were matched against the current line number, but TimToady indicated in 2005 that that may not be necessary anymore. | 15:13 | |
www.nntp.perl.org/group/perl.perl6....24098.html | |||
masak | jnthn: huh. weird. my tab key generally works flawlessly. :) | 15:14 | |
flussence flops | |||
masak | flussence: sorry about the flop. :) | ||
felliott flips | 15:15 | ||
felliott flips and flussence flops | |||
jnthn | felliott: Maybe should be %!ff_cache so it doesn't accidentally end up user-visible. | ||
masak | hm. a class... well, I suppose that makes sense. | ||
felliott | fox in socks on chicks on clocks | ||
Ah, you can make a private global? | 15:16 | ||
flussence | I've never understood the ff/p5.. op. It's probably good for something but I just can't get my head around it. Are there any examples out there? | ||
jnthn | felliott: You can install whatever name you want from PIR ;) | ||
felliott | Intriguing.... | ||
felliott takes notes | 15:17 | ||
jnthn | Well, I guess you can from Perl 6 too, we just don't support ns interpolation yet... :) | ||
felliott | flussence: I've committed some new tests to S03-operators/flip-flop.t that might be useful. | ||
jnthn | Is the FlipFlop class spec, ooc? | ||
felliott | no | 15:18 | |
but I saw a suggestion that it might be implemented that way. | |||
that was in the irclogs, iirc | |||
jnthn | felliott: The .perl method seems to return code that would make a Range rather than a flipflop | 15:19 | |
15:19
thundergnat joined
|
|||
felliott | if that's not kosher, I don't mind redoing it, but I'll need a lot of help | 15:19 | |
thundergnat | Hello #perl6 | ||
felliott | hello, thundergnat! | ||
the flipflop spec right now is: "do it like Perl5 but call it ff" | 15:20 | ||
jnthn | :) | ||
thundergnat | I just uploaded a new perl6 solution to rosettacode - Deconvolution 2d+: rosettacode.org/wiki/Deconvolution/2D%2B#Perl_6 Only the 4th language represented for that task | 15:21 | |
\o/ | 15:22 | ||
jnthn | felliott: I don't have a problem with it being a class, though I don't fully understand flip flops either. ;) | ||
felliott: Provided that approach is OK, the patch looks overall sane to me. | |||
thundergnat | Gives an eye-opening example of how grindingly slow perl 6 is though.... | ||
felliott | cool, thanks! | ||
jnthn | I'd just want to hide the cache, and as I mentioned the .perl looks a bit off. | ||
+ ('^' if $.exclude_first), | 15:23 | ||
64 | |||
+ '..', | |||
65 | |||
+ ('^' if $.exclude_last), | |||
felliott | oh, yes, I stole it from Range and forgot to update it. | ||
jnthn | Guessing...yes, that. :) | ||
felliott | :p | ||
thundergnat | Tcl version completes in well under a second for 3D deconvolution. Perl 6 take 300 seconds on my machine. :-( | ||
4D deconvolution took just over 7 hours! | 15:24 | ||
I didn't test 5D..... | |||
sorear | good * #perl6 | ||
felliott | Another hacky bit is the ff cache lookup | 15:25 | |
sorear | thundergnat: Whose Perl 6 are you finding so slow? | ||
felliott | I currently use the filename and line num. | ||
thundergnat | er... rakudo. I should make that clear, i guess. | ||
felliott | I think I saw a suggestion to use the calling block's mem addr., but I'm not sure how to do that. | 15:26 | |
I tried &?BLOCK, but it's NYI, I think | |||
Can I do that in pir? | |||
The current approach works in most sane cases, but two distinct ffs on the same line (e.g. in a oneliner) would use the same object. | 15:27 | ||
jnthn | felliott: Well, calling block is also not fully it | 15:28 | |
shortcircuit | thundergnat: Which P6 implementation are you poking at? | ||
jnthn | felliott: Since there may be two uses of the flipflop operator within that block | ||
felliott: Of course, there may be two on one line too | 15:29 | ||
felliott: Needs to really have char position or, maybe better, bytecode position. | |||
thundergnat | shortcircuit: I am using Rakudo 2010.12. Just added that info to the rosettacode page. | ||
sorear | felliott: I tried implementing ff earlier but couldn't make heads or tails of the spec(test)s | ||
felliott | can we access that in pir? | ||
sorear: yes, I don't really like them, either. | 15:30 | ||
I added some new ones that I think are clearer. | |||
shortcircuit | thundergnat: You might try other P6 implementations. They might be faster. I don't know. | ||
pmichaud | afk, phone call | ||
jnthn | felliott: Not sure...looking. | 15:31 | |
felliott | jnthn: is there a way to get bytecode position in rakudo or pir? | ||
sorry, repeating myself | |||
shortcircuit | thundergnat: have you seen this page yet? rosettacode.org/wiki/Reports:Tasks_..._in_Perl_6 | ||
felliott | echo.. echo.. echo | ||
jnthn | felliott: I probably know how to write a dynop to get it... :) | ||
sorear | felliott: ff really needs to be a macro so it can generate a $unique++ parameter | ||
felliott | O_O I don't know what that is. | ||
thundergnat | shortcircuit: yep. I've been adding perl6 tasks from that page. | 15:32 | |
felliott | sorear: hmm? do you mean the for the state? | ||
sorear | felliott: yes | ||
jnthn | That'd be one way to do it. | 15:33 | |
Once you macro-ize somehting you throw away runtime customizability though. | |||
felliott | Would that be preferable to a class? | ||
shortcircuit | thundergnat: Sweet. RC is my site, so I'm glad you've got a feel for the site layout already. I haven't had time to spam out my usually greetings to new users yet this year. | ||
thundergnat | shortcircuit: I've done about 8-10 perl6 and perl tasks so far, though some were added anonymously before I signed up for an account | ||
sorear | felliott: perl 5 ff doesn't involve classes at all, so I'd say yes | 15:34 | |
(and it's macroey) | |||
jnthn | sorear: Yes but a lot of Perl 5 things don't involve classes at all, when they do in Perl 6. :) | 15:35 | |
felliott | is there anything else in rakudo that's implemented as a macro that I can look at for reference? | ||
(macroey is my favorite pasta) | |||
sorear | pasta? | ||
jnthn | lol :) | ||
felliott | lame pun | ||
jnthn still got it :) | |||
shortcircuit | thundergnat: There are a couple other implementations of P6 you could try. Niecza is under heavy, active development. I know pugs exists, but I know almost nothing else about its status. | 15:36 | |
jnthn | felliott: You can get the bytecode positon by getting the call frame of the op (at the Parrot context PMC level), getting the context's current_cont attribute, and then doing get_addr on that. | 15:38 | |
sorear | felliott: make_feed in Actions.pm | ||
thundergnat | shortcircuit: Yeah I know, I lurk heavily in #perl6 but my work and life schedule prevents me from actively participating very much. :-( | ||
jnthn | I think that'd get you a unique bytecode address. | ||
felliott | ace. jnthn++ sorear++ | ||
jnthn | As sorear says, you could do it as a compile-time transformation too. | ||
sorear | shortcircuit: pugs is the most likely future of niecza... a compiler with a bus number of 0 :/ | 15:39 | |
jnthn | In which case you don't need to worry about what I just told you. | 15:40 | |
It's a much bigger re-working of what you have at the moment though. | |||
sorear | shortcircuit: nobody understands it well enough to improve it, except audrey, who [clarification: is not dead but] hasn't touched it in 3+ years | ||
felliott | I guess both ways make their own kind of sense right now. | ||
jnthn | felliott: Yes. I expect @other will have opinions. Suspect TimToady and pmichaud would have some worth hearing. :) | 15:41 | |
felliott: I think it could be made to work well either way... | |||
felliott | and I still have some spec questions to clear up. | ||
jnthn | *nod* | ||
15:42
Mowah left
|
|||
felliott | jnthn, sorear, thanks to both of you! I'll bring this up again when they're around. | 15:43 | |
sorear | std: s{x} {y} | 15:46 | |
p6eval | std 625303c: OUTPUT«===SORRY!===Unexpected block in infix position (two terms in a row, or previous statement missing semicolon?) at /tmp/_CeFkUdybq line 1:------> s{x} ⏏{y} expecting infix or meta-infixParse failedFAILED 00:01 120m» | ||
sorear | std: s{x}{y} | ||
p6eval | std 625303c: OUTPUT«===SORRY!===Unexpected block in infix position (two terms in a row, or previous statement missing semicolon?) at /tmp/Xxhkmy4imX line 1:------> s{x}⏏{y} expecting any of: infix or meta-infix quantifierParse failedFAILED | ||
..00:01 120m» | |||
15:46
risou_ left
|
|||
sorear | phenny: STD.pm6 won't parse s{x}{y}. Bug? | 15:46 | |
phenny: tell TimToady STD.pm6 won't parse s{x}{y}. Bug? | 15:47 | ||
phenny | sorear: I'll pass that on when TimToady is around. | ||
sorear | I kinda need that clause don't I | ||
15:47
Axius left
|
|||
masak | :) | 15:47 | |
15:48
shi joined
15:54
rgrau joined
16:05
stifynsemons joined
16:08
am0c left
16:14
Patterner left
16:16
Psyche^ joined,
Psyche^ is now known as Patterner
16:22
am0c joined
|
|||
dalek | psi: c22255a | masak++ | .gitignore: [.gitignore] blib ufo generates this directory. |
16:29 | |
psi: e23dbc9 | masak++ | / (2 files): FUTURE refactor Instead of $/ -> SIC, the compiler now does $/ -> FUTURE -> SIC. The net gain of ~150 lines also translates to a heightened readability and less tangled code. Bright FUTURE ahead indeed. |
|||
16:30
risou joined
16:37
pmurias joined
|
|||
pmurias | sorear: hi | 16:37 | |
phenny | pmurias: 04 Feb 23:35Z <sorear> tell pmurias -L NULL | ||
sorear | pmurias: hi | ||
jnthn | masak: Yes, that's the FUTURE refactor, but what's this patch do in the PRESENT? | 16:38 | |
:P | |||
pmurias | sorear: if i use -LNULL -e 'say 1' is get an error | 16:39 | |
Unhandled exception: System.NullReferenceException: Object reference not set to an instance of an object | |||
sorear: re likely future of niecza are you planning to abandon it? | 16:40 | ||
16:41
Axius joined
|
|||
sorear | pmurias: I'm not planning per se but it's pretty much inevitable... I won't be a student forever | 16:42 | |
you need a bit more code to make say 1 work | 16:43 | ||
pmurias | -e '1' | ||
sorear | for instance, definitions of say and Num | ||
masak | jnthn: the PRESENT is, as far as I know, an illusion created by our minds. | ||
sorear | you also need stubs for Mu, Any, ClassHOW, Nil | ||
pmurias | if i want a custom setting how do i compile that? | 16:44 | |
sorear | and the unit name needs to be set to "SAFE" or "CORE" | ||
pmurias | i saw that hardcoded | ||
sorear | Custom settings should sit on top of SAFE or CORE | ||
I hadn't thought about SAFE-less settings yet | 16:45 | ||
you could do MYSETTING.setting: module MYSETTING; sub fact($n) { $n ?? $n * fact($n-1) !! 1 }; {YOU_ARE_HERE} | 16:46 | ||
then mono run/Niecza.exe -C MYSETTING | |||
then mono run/Niecza.exe -L MYSETTING -e 'say fact(5)' | |||
pmurias | the reason i'm considering it is tha the common lisp backend won't be able to handle everything from the start | 16:47 | |
sorear | that should work; it's the use case I designed niecza's settings around | ||
oh. _that_ use case | |||
pmurias | but i might handle it with hacks on the backend level | ||
in mildew i used to specify that a setting is compiled by passing a compiler option | 16:48 | ||
but the less we do in the build system the better | |||
could we determin settings on the .setting extension? | 16:49 | ||
sorear | niecza used to do the same thing, until I realized that the option was dead code | ||
actually, you don't need to compile the setting manually | |||
-L MYSETTING will compile it if it hasn't already been | |||
pmurias | i know | 16:50 | |
sorear | and it doesn't need to be called .setting; .pm will work too | ||
pmurias | would compiling the setting manually with -L MYSETTING work | ||
? | |||
16:50
justatheory joined
|
|||
sorear | What do you mean? | 16:52 | |
pmurias | if i compiled my custom setting with -L | ||
but i think i'll go with hacks on the backend level | |||
sorear | You shouldn't need much in the way of hacks for now | 16:53 | |
-Bdotnet doesn't like to compile anything other than SAFE with -LNULL | |||
But that's entirely -Bdotnet's fault | 16:54 | ||
-Bclisp doesn't need to have the same flaw | |||
16:54
orafu left
|
|||
pmurias | sorear: for how long will you remain a student? | 16:54 | |
sorear | dunno | ||
16:55
orafu joined
|
|||
TimToady | one must study all one's life, anymore... | 16:55 | |
phenny | TimToady: 15:47Z <sorear> tell TimToady STD.pm6 won't parse s{x}{y}. Bug? | ||
16:55
rgrau_ joined,
rgrau_ left
|
|||
TimToady | notabug | 16:55 | |
bracketed forms of s{} are stolen for s{} = 'y' | 16:56 | ||
sorear | What's the recommended p5->p6 for that syntax? | ||
ah | |||
pmichaud | TimToady: o/ wb! How was the trip? | ||
TimToady | two days late going, one day late coming back, and we're exhausted, but we had a pretty good time | 16:57 | |
pmichaud | (good time)++ | ||
TimToady | Indian drivers are...amazing... | ||
met a lot of nice people | 16:58 | ||
some of 'em may show up here someday | |||
sorear imagines an influx of Indian drivers. | 16:59 | ||
masak .oO( Indian DLLS? ) | |||
s/S/s/ | 17:00 | ||
TimToady | we were very well taken care of too | ||
the whole thing was completely organized by the students themselves | 17:01 | ||
we wished we could've got there in time to see the flaming robots and such, but the visas were slow in coming | |||
my talk was the very last thing scheduled, and we barely made it in time for that | 17:02 | ||
yesterday finally got my yellow fever vaccination (from an allergist, since I have problems with eggs) | 17:03 | ||
so we can go to Africa at the end of the month | 17:04 | ||
(Italy first though) | |||
17:04
dakkar joined
|
|||
dalek | ecza: de2b3f3 | sorear++ | / (2 files): Refactor type object checking into ACCEPTS |
17:06 | |
pmichaud | (lots of travel)++ | 17:11 | |
I saw some good twitter comments about your presentations, so I gather they went well. | 17:12 | ||
17:14
Axius left
|
|||
TimToady | sorear: is there some reason you copied the doubled curlies from STD? they were really only there for gimme5... | 17:15 | |
sorear | TimToady: reducing noise in diff output | 17:16 | |
TimToady | you may edit STD too, y'know :) | ||
TimToady is thinking about the usefulness of %foo<bar> :exists :delete | 17:20 | ||
benabik_away | /nick benabik | 17:21 | |
TimToady | hugme: hug benabik_away | ||
hugme hugs benabik_away | |||
benabik_away | That was odd. | ||
17:21
benabik_away is now known as benabik
|
|||
TimToady | extra space before / | 17:21 | |
benabik | Musta been a space hanging around the buffer overnight. Forgot to kick it to the door in the morning. | 17:22 | |
sorear | TimToady: if I changed STD I'd have to test it :p | ||
TimToady | ah...well, if you tell me, I can run a snaptest on a faster machine | 17:24 | |
but maybe I'll remove the doubles now and see what happens | |||
17:29
gdey joined
|
|||
TimToady | compiles, and compiles the setting...now snaptesting | 17:30 | |
17:31
sji joined
|
|||
masak | reviews welcome: github.com/masak/yapsi/blob/master...ce/2011.02 | 17:32 | |
17:32
justatheory left
17:33
nadim_ left,
shi left
|
|||
diakopter | masak: does it work ok on niecza? | 17:34 | |
masak | my guess is "no", but I haven't tried. | ||
if someone would like to branch and adapt Yapsi to Niecza, I would support that endeavor with gusto. | |||
17:34
nadim_ joined
|
|||
dalek | psi: fe5d76c | masak++ | doc/ChangeLog: [doc/Changelog] updated |
17:35 | |
psi: 4cef98c | masak++ | doc/ROADMAP: [doc/ROADMAP] updated |
|||
psi: 0c57255 | masak++ | lib/Yapsi.pm: [Yapsi] better DEBUG output for FUTURE::Val |
|||
psi: c7970c0 | masak++ | doc/announce/2011.02: [doc/announce/2011.02] added |
|||
TimToady | sorear: I assume you are no longer relying on the # end tweaks (DO NOT REMOVE) lines? | 17:36 | |
diakopter wonders what other gimme5isms could be extricated | 17:37 | ||
or even vivisms? | 17:38 | ||
TimToady | can't get rid of vivisms without fixing viv, since we still use it | 17:39 | |
but that's a good question... does viv still need the tweaks comments? | |||
sorear | TimToady: neither viv nor niecza relies on the # end WHATEVER comments | 17:41 | |
role, tweaks, grammar, etc | |||
arnsholt | masak: I liked "It's so cute, it almost looks like Ruby!" =) | ||
masak | arnsholt: good. I was unsure about that one. :P | 17:43 | |
17:43
pecastro joined
17:46
risou_ joined,
risou left
|
|||
dalek | psi: c79003f | masak++ | doc/announce/2011.02: [doc/announce/2011.02] FUTURE is like PAST Just different. |
17:51 | |
17:58
icwiener joined
|
|||
felliott | TimToady / pmichaud: can I pester you with some questions about flipflop? | 18:00 | |
specifically, should it be implemented as a class or a macro? | 18:01 | ||
TimToady | it's more like a macro that contains a state variable | 18:04 | |
state $secret ?? (RHS and $secret = False) !! (LHS and $secret = True) | 18:06 | ||
or something like that | |||
felliott | thank you! I'll go learn about macros and try it again. | 18:12 | |
benabik | TimToady: Discussing state $secrets in open IRC now? | ||
sorear | TimToady: state, eh? | 18:13 | |
masak | Rakudo had 'state' at one point, and then it was taken away from us... :/ | 18:14 | |
sorear | buubot: eval: sub accum { sub { (state $i)++ } } my $x = accum; my $y = accum; say $x->(); say $y->(); | ||
18:14
justatheory joined
|
|||
sorear | bleh | 18:14 | |
TimToady: state variables are not shared between sub clones, while in Perl 5 .. state is truly global, marked on the optree | 18:15 | ||
TimToady | not supposed to be | ||
sorear | TimToady: do you intend for ff to function like state? | ||
TimToady | ff requires state | 18:16 | |
and I thought p5 fixed the semantics of state | |||
sorear | when you say state, do you mean scope_declarator:state, or "something with memory"? | ||
TimToady | either or both :) | ||
state is one way to handle state | 18:17 | ||
jnthn | masak: The precious.... | ||
jnthn wonders if the way state was done in alpha was really so bad we couldn't just do it that way again. | 18:18 | ||
It got all the semantics right. | |||
sorear | How did alpha do it? | 18:19 | |
niecza has a rather simple implementation of state that I'm quite pleased with | |||
jnthn | sorear: I forget. It was a while ago. :) | ||
TimToady | hidden outer lexical and a START block is one way | 18:20 | |
jnthn | It attached it somehow per-closrue though. | ||
sorear | niecza uses the hidden outer lexical | 18:21 | |
TimToady | though START depends on state... | ||
sorear | no START is needed unless there's an initializer | ||
START is handled using state | |||
TimToady | so state is the more primitive | ||
sorear | vaguely like unless ((state $)++) {... } | ||
sorear re-reads pp_ctl.c | 18:22 | ||
TimToady | could even be state Bool $ if boolean ++ is faster :) | ||
sorear | wow, this is even more evil than I thought. :p | ||
storing data in TARGs, really?? | |||
masak | TARGs? | 18:23 | |
TimToady | p5ism | ||
just lexical slots | |||
masak | oh. | ||
well, what's the alternative? | |||
also, who's going to suffer, except perhaps introspectors? | |||
TimToady | the p5 TARG model assumes the lexpad is persistent | ||
if your lexpad isn't persistent then you have to hide it in the OUTER:: | 18:24 | ||
dalek | psi: 7ee11ce | masak++ | lib/Yapsi.pm: [Yapsi] bumped SIC version Between releases, the SIC version is always the version number of the upcoming release. |
||
jnthn | TimToady: I had START done in terms of state, iirc. | ||
TimToady | jnthn: yes, I had it backwards above | ||
sorear | TimToady: what type does ff return? | 18:25 | |
TimToady | was confused with the initializer | ||
sorear: hmm, well, in P5 it returns a scalar :) | |||
which might be an integer or a string | |||
sorear | in p5 it returns a scalar that looks rather int-y | ||
TimToady | but was sometimes 42e0 | ||
to indicate the end X| | 18:26 | ||
felliott | Does it still need to e0 bit now that we have explicit excluders? | ||
TimToady | the e0 hack was just a hack | ||
I'm not attached to it | |||
felliott | yay! | ||
TimToady | but returning the sequence number is useful | ||
masak | today while running I thought about '{ my $a; say "2"; INIT { $a = 42 } }' -- and how the outer block will have to be somehow instantiated in order for the INIT block to have something to assign to. | 18:27 | |
jnthn | masak: In nqpclr you get the static lexpad in that case | ||
masak | makes sense. | ||
jnthn | So every future instantiation of the outer has $a being 42 | ||
masak | I like that. | ||
jnthn | Yes, me too :) | ||
It made a bunch of stuff easy :) | 18:28 | ||
masak | I think that's what I arrived at last time I thought about it. | ||
jnthn | Sadly, Parrot doesn't have it that way at the moment. So nqp-rx/nom has to work around it. | ||
sorear | niecza: { my $a; say "2"; say $a; INIT { $a = 42 }; } | ||
p6eval | niecza v2-7-gde2b3f3: OUTPUT«(timeout)» | ||
sorear | niecza: { my $a; say "2"; say $a; INIT { $a = 42 }; } | ||
p6eval | niecza v2-7-gde2b3f3: OUTPUT«242» | ||
masak | \o/ | ||
sorear++ | |||
jnthn | Good. :) | ||
We all agree on how it should be then. :) | 18:29 | ||
sorear | niecza needs to be faster. | ||
TimToady | we could all be wrong.... :) | ||
jnthn | TimToady: :P | ||
masak | at least we'll be wrong together :) | ||
TimToady | we've all been wrong before... | ||
felliott | TimToady: should literal Ints args to ff still be matched against the line number? | 18:30 | |
sorear | felliott: I do not beleive that Rakudo has the concept of a current line number (yet?) | ||
felliott | oh, well that would make it difficult. :) | ||
jnthn | I think it does :) | ||
TimToady | it's an evil global concept that is probably not worth repeating | 18:31 | |
sorear | felliott: the p5 spec is talking about $*IN.current-line, *not* $?LINE | ||
jnthn | Oh | ||
*that* sort of line number :) | |||
felliott | yes. | ||
TimToady | it's not even $*IN | ||
jnthn | rakudo: $*IN.get for 1..2; say $*IN.ins | ||
TimToady | it's $*LAST-USED-FILEHANDLE in p5 | ||
p6eval | rakudo 924242: OUTPUT«2» | ||
jnthn | :) | ||
rakudo: say $*OUT.outs; say "omgz"; say $*OUT.outs; | 18:32 | ||
p6eval | rakudo 924242: OUTPUT«Method 'outs' not found for invocant of class 'IO' in main program body at line 22:/tmp/Y9hC9Wd2bq» | ||
jnthn | aww! | ||
sorear | ff is primarily useful when using Perl as "like sed, but better" | ||
TimToady | if we do the line number thing, I think $*IN.ins is probably sufficient | ||
sorear | jnthn: what exactly does .ins count? | 18:34 | |
jnthn | sorear: I dunno...I'm not sure I want to look. ;) | ||
sorear | haha | 18:35 | |
TimToady | except that $*IN.ins doesn't work against $*ARGFILES, unless we rebind $*IN on each file | ||
which would be evil | |||
jnthn | sorear: calls to .get, it seems. | 18:37 | |
sorear: If one calls .read or slurps, it seems to not pay much attention | |||
TimToady | that's what I'd expect | ||
jnthn | lines is doen in terms of .get | 18:38 | |
So that would appear to do the right thing | |||
TimToady | lines is really "chunks" if you redefine the delimiter | ||
but it's still per-get | |||
jnthn | .read returns a Buf so I guess we'd not expect it to be trying to make sense of newlines though. | ||
18:43
barika joined
|
|||
TimToady | I suppose one could make an argument that +$*IN should return the line number | 18:43 | |
then we could at least reduce it to $*IN == 5 ff $*IN == 10 | 18:44 | ||
dalek | ecza: 1900c4a | sorear++ | / (3 files): Implement ~~ topicalization |
||
p-rx/nom: 8f6ca5a | jonathan++ | / (2 files): Add an NQPModuleHOW. |
|||
p-rx/nom: ae3ec52 | jonathan++ | src/NQP/ (2 files): A little cleanup and consistency improvement in the actions to eliminate some bits left over from the 6model transition, and in prep for roles additions. |
|||
TimToady | if you're gonna go that far, it seems better to just translate 5 ff 10 to $*IN.ins == 5 ff $*IN.ins == 10 | 18:45 | |
sorear | macroily? | ||
syntactically? | 18:46 | ||
TimToady | that's the idea, yes | ||
jnthn | Erm. | ||
TimToady | well, it's a p5ism | ||
jnthn | ...why on earth is nqp-rx/nom running its tests in ~44s today, when a week or so ago it ran them in 27s on the same machine... | 18:47 | |
sorear | cron? | ||
TimToady | and it's obviously useless to pass literal integers to a boolean operator, so might as well put them to good use | ||
diakopter | jnthn: more tests? :) | 18:48 | |
jnthn | diakopter: Nope. There's no commits that look likely. :/ | 18:49 | |
Hm | |||
Repeatable slowdown too. | |||
If it was one-off I could put it down to background tasks... | |||
diakopter | was a consensus/BDFL-decree reached about str ? | 18:50 | |
badly degrading disk? | 18:51 | ||
18:52
sji left
18:53
thundergnat left
18:54
cjk101010 joined
|
|||
TimToady | the BDFL said he wanted to see a real cross-implementation use-case for it | 18:54 | |
19:01
cjk101010 left,
cjk101010 joined
|
|||
dalek | d: c4ade8e | larry++ | STD.pm6: remove gimme5isms |
19:01 | |
jnthn | OK, must be something about this machine today. :/ Going back to a revision I know was nippy, it's also slower now, and yet my laptop is snappy with the latest master. | 19:04 | |
So, seems I didn't introduce a bizzare regression. | 19:06 | ||
19:06
justatheory left
|
|||
TimToady | I'm fine with a function like uri(), because it's, like, universal, y'know | 19:07 | |
19:07
justatheory joined
|
|||
TimToady | and again, it's in an outer lexical scope, so can easily be overridden | 19:08 | |
we can go all Batteries Included without looking like PHP | 19:09 | ||
any universally recognizable name is fair game, especially if we can load the actual implementation lazily | |||
sorear | What do you mean by a cross-implementation use case of str? | 19:11 | |
It seems to me that the semantics of str should be such that simple implementations can just let str be a synonym for Str | |||
TimToady | I don't want to put native str into the Perl 6 language itself if it's going to mean something different on every implementation, unless there's a use case for discussing the native str generically across all implementations | 19:12 | |
19:12
MayDaniel left
|
|||
TimToady | I don't see such a use case yet, but I ain't omniscient | 19:13 | |
sorear | What is the use case for int? | ||
diakopter | :P | 19:14 | |
TimToady | storage as a C type | ||
what is "str" in C? | |||
sorear | Oh, you view native types from an interop POV? | ||
That is very interesting | 19:15 | ||
Previously I have only considered them from an optimization POV | |||
TimToady | I would like to be able to do all my C programming in Perl 6. :) | ||
colomon | +1 | ||
TimToady | sorry if that makes your head asplode | 19:16 | |
diakopter | do you want to all your ARM programming too? :P | 19:17 | |
TimToady | or at least all my Java and C# programming | ||
this sentence no verb | |||
diakopter | verb | ||
TimToady | I don't want to verb | 19:18 | |
it weirds me | |||
19:20
pmurias left
|
|||
Util | rakudo: my $scale = 1/0; $scale.perl.say; my @M = [1, 2],[3,0]; my @N = @M[0] X* $scale; say "X* OK"; my $d = @N.perl; say ".perl OK $d"; | 19:21 | |
p6eval | rakudo 924242: OUTPUT«1/0X* OK.perl OK [1/0, 1/0]» | ||
Util | rakudo: my $scale = 1/0; $scale.perl.say; my @M = [1, 2],[3,0]; my @N = @M[1] X* $scale; say "X* OK"; my $d = @N.perl; say ".perl OK $d"; | ||
p6eval | rakudo 924242: OUTPUT«1/0Divide by zero in 'infix:<div>' at line 3759:CORE.setting in 'Rat::new' at line 4144:CORE.setting in 'infix:</>' at line 4233:CORE.setting in 'infix:<*>' at line 4217:CORE.setting in <anon> at line 155:CORE.setting in <anon> at line 1 in main program body at | ||
..line … | |||
Util | rakudo: my $scale = 1/0; $scale.perl.say; my @M = [1, 2],[3,0]; @M[1] = @M[1] X* $scale; say "X* OK"; my $d = @M.perl; say ".perl OK $d"; | ||
p6eval | rakudo 924242: OUTPUT«1/0X* OKDivide by zero in 'infix:<div>' at line 3759:CORE.setting in 'Rat::new' at line 4144:CORE.setting in 'infix:</>' at line 4233:CORE.setting in 'infix:<*>' at line 4217:CORE.setting in <anon> at line 155:CORE.setting in <anon> at line 1 in 'Any::join' at | ||
..line … | |||
Util | 1) In all three versions, why is div-by-zero allowed in the statement: "$scale = 1/0" ? | ||
2) In the "my @N = @M[0]" version, why is there no error during X* ? | |||
3) In the "my @N = @M[1]" version, why is there an error during X*, when the only change from the previous version is that we divide 0 by 1/0 ? | |||
Even if all three of those behaviors are intended, this one I am *most* puzzled by: | 19:22 | ||
4) In the "@M[1] =" version, why does the "Divide by zero" error not occur until the .perl call? | |||
diakopter | tl;cr | ||
colomon | Util: 1/0 isn't divide by zero, it's making an ugly, ugly Rat. | ||
Util | colomon: If that is how it *should* work, then it explains #1 and #2. | 19:23 | |
TimToady | rakudo: say 0 * (0/1) | 19:24 | |
p6eval | rakudo 924242: OUTPUT«0» | ||
TimToady | rakudo: say 0 / (1/0) | 19:25 | |
p6eval | rakudo 924242: OUTPUT«0» | ||
diakopter | TimToady: what about str as alias for buf32 (or buf16)? | ||
TimToady | eek | ||
benabik | rakudo: say 1/0 | ||
p6eval | rakudo 924242: OUTPUT«Inf» | ||
benabik | rakudo: say 1/Inf | 19:26 | |
p6eval | rakudo 924242: OUTPUT«0» | ||
benabik | Mathmatically, those are very not true. | ||
TimToady | how 'bout we use ucs4 to mean a ucs-4 buffer | ||
Util | (I do not necessarily agree that 1/0 should be a legal Rat, but that is not a point I want to press right now.) | ||
diakopter | ok, and then alias str to ucs4 :P | 19:27 | |
sorear | benabik: we use the affinely extended reals around here | ||
std: X: loop { }; X: loop { } | |||
p6eval | std 625303c: OUTPUT«===SORRY!===Illegal redeclaration of 'X' at /tmp/oJP51E5k2p line 1:------> X: loop { }; X: ⏏loop { }Illegal redeclaration of symbol 'X' (see line 1) at /tmp/oJP51E5k2p line 1:------> X: loop { }; X: ⏏loop { }Check | ||
..failed… | |||
Util | #1,2,3 are about policy and Spec; #4 is a bug, methinks. | ||
TimToady | you can alias str that way in your implementation, but I still don't see a cross-impl use case | ||
sorear | TimToady: does Perl 6 still think a bare block is a repeat {} while False ? | ||
masak | benabik: I agree, but IEEE-754 doesn't, IIRC. | 19:28 | |
TimToady | sorear: nope | ||
benabik | sorear: Hadn't encountered that before. Interesting and IIRC blows up some parts of calculus. But fair enough. | 19:29 | |
TimToady | benabik: we would generally prefer not to blow up the rocket just because the mathematicians are unhappy. :) | 19:30 | |
benabik | TimToady: There are Perl 6 rockets now? Awesome. ;-) | 19:32 | |
diakopter | TimToady: ok, you persuaded me. :) | 19:33 | |
19:33
kst left,
tty234 left
|
|||
benabik | masak: I thought the FP spec considered x/0 an error... But +Inf basically is an error flag, I guess. Thanks for the pointer. These are things I should consider when I'm trying to get an MS focusing on compilers. | 19:33 | |
19:33
kst joined,
dakkar left
|
|||
benabik found good information on IEEE-754 in the Java VM spec of all places. | 19:34 | ||
masak | benabik: I haven't really read IEEE-754, but I've use Java which implements it. | ||
TimToady | in Perl 6 we basically consider Inf and NaN to be very weak unthrown exceptions | ||
masak | benabik: in Java, x/0 is an error for ints, and results in Infinity for floats and doubles. | ||
TimToady | but our Int can represent Inf (int can't, of course, so throws the error) | 19:35 | |
benabik | masak: IEEE doesn't like making reading their specs easy, AFAICT. Java's VM doc does explain it a bit though. | ||
TimToady | perl6: my Int $x = Inf; say $x; | 19:36 | |
p6eval | niecza v2-8-g1900c4a: OUTPUT«===SORRY!===In my declaration, typename 'Int' must be predeclared (or marked as declarative with :: prefix) at /tmp/2USsFJu2Sm line 1:------> my Int⏏ $x = Inf; say $x;Malformed my at /tmp/2USsFJu2Sm line 1:------> my | ||
..⏏Int $x… | |||
..rakudo 924242: OUTPUT«Type check failed for assignment in '&infix:<=>' at line 1 in main program body at line 22:/tmp/e8CFg0LcYQ» | |||
..pugs: OUTPUT«Inf» | |||
TimToady | hah | ||
benabik | TimToady: our Int should represent Inf, but sometimes doesn't? | 19:37 | |
TimToady | spec says Int type contains ±Inf, but rakudo doesn't implement it yet | ||
rakudo: say Inf.WHAT | 19:38 | ||
p6eval | rakudo 924242: OUTPUT«Num()» | ||
TimToady | it thinks Inf is a floater | ||
benabik | Hm. Does Int also hold NaN? | ||
TimToady | dunno if the spec says | ||
masak | rakudo: my Int $x = NaN; say $x | 19:39 | |
TimToady | yes, it says | ||
p6eval | rakudo 924242: OUTPUT«Type check failed for assignment in '&infix:<=>' at line 1 in main program body at line 22:/tmp/1PcxSs7rkJ» | ||
masak | TimToady: what does it say? :) | ||
TimToady | S02:675 | ||
masak submits rakudobug | |||
diakopter | niecza: my ::Int $x = Inf; say $x; | ||
p6eval | niecza v2-8-g1900c4a: OUTPUT«===SORRY!===Action method multi_declarator:null not yet implemented at /tmp/7bCmtP_kRh line 1:------> my ::Int $x ⏏= Inf; say $x;Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/SAFE.setting line 377 (SAFE | ||
..die @ 2) at … | |||
benabik | P6 Int does FP error propagation. I knew if I hung out here I'd learn neat stuff. | 19:42 | |
masak | :) | ||
Inf and NaN are both Real, but they seem to be late-bound as to whether they're Int or Num. | 19:43 | ||
I wonder if there's really one Int.Inf and one Num.Inf, who do their best to make the world believe they're really the same value. | |||
ingy | o/ | 19:44 | |
colomon liked TimToady's earlier suggestion that there's just one Real.Inf. | |||
TimToady | o/! | ||
masak | ingy! \o/ | ||
19:44
justatheory left
|
|||
masak | colomon: well, but then it'd have to do some trickery to get into Int and Num containers. | 19:44 | |
19:45
gfldex left
|
|||
TimToady | Real Magic | 19:45 | |
19:47
tty234 joined
|
|||
sorear | benabik: I'm looking at www.validlab.com/754R/drafts/archiv...-10-04.pdf now | 19:48 | |
19:48
gfldex joined
19:51
kst left
|
|||
TimToady | std: s[foo][bar] | 19:52 | |
p6eval | std 625303c: OUTPUT«===SORRY!===Missing assignment operator at /tmp/p5L3udBk3A line 1:------> s[foo][⏏bar] expecting any of: bracketed infix infix or meta-infixParse failedFAILED 00:01 121m» | ||
TimToady | std: s{foo}{bar} | ||
p6eval | std 625303c: OUTPUT«===SORRY!===Unexpected block in infix position (two terms in a row, or previous statement missing semicolon?) at /tmp/ndikcW91hW line 1:------> s{foo}⏏{bar} expecting any of: infix or meta-infix quantifierParse failedFAILED | ||
..00:01 121m» | |||
TimToady | ah | ||
19:52
kst joined
19:53
cafesofie left
20:09
arlinius left
|
|||
Util | Thanks to all! | 20:18 | |
20:30
benabik is now known as benabik_away
20:32
arlinius joined
20:33
kst left
20:34
extra11 joined,
kst joined
20:39
envi left
20:44
vmspb joined,
MayDaniel joined
20:46
pecastro left
21:03
Mowah joined
21:10
solarion joined
21:11
coldhead joined
21:23
wooden joined
21:25
molaf_ left
21:26
justatheory joined
21:33
dorlamm joined
21:37
pmurias joined
21:52
cafesofie joined
21:54
enjay joined
21:55
enjay left
|
|||
dalek | d: 29e9ef5 | larry++ | STD.pm6: improve message on s{foo}{bar} |
21:56 | |
p-rx/nom: 50264f9 | jonathan++ | src/ (4 files): Implement does so roles can be composed. Based on the meta-object, do code generation a little differently for bodies of parametric types. Have NQPClassHOW instantiate the role with the correct type object and add it and the generic version to its roles done list. .^does works as a result. Also update type check cache publisher to know about roles. Missing: all the rest of composition. |
22:01 | ||
22:02
extra11 left,
gdey left,
nadim_ left
22:03
nadim_ joined
22:27
MayDaniel left
22:30
cjk101010 left
|
|||
dalek | p-rx/nom: ea83082 | jonathan++ | src/metamodel/how/NQP (2 files): .^add_method, .^add_multi_method, .^attributes, .^add_parent and (todo) .^add_role for parametric and concrete role meta-objects. Should mean we're just a composer away from working roles in NQP. |
22:30 | |
mathw | hmm connection timeouts on github | ||
jnthn | Hmm, hadn't noticed any issues with it today. | 22:31 | |
mathw | I can get to it on the web no trouble | ||
but I can't clone rakudo | |||
either by git:// or https:// | |||
jnthn | oh :( | 22:32 | |
mathw | yet the web interface is using https on the same server | ||
so it should work... | |||
jnthn | I've been pushing OK, though not to that repo. But still, it's odd that push would work but not clone. | 22:33 | |
mathw | yes | ||
ah | |||
hmm | |||
I seem to have problems tracerouting to it | |||
hopefully whatever glitch that is will resolve | 22:34 | ||
jnthn | pmichaud: I'm done with commits for today. | 22:39 | |
pmichaud: So if you want to move the repo this evening, feel free to go ahead. | |||
mathw | ahah | 22:41 | |
I can clone rakudo over SSH when I log in to github | |||
that took about 2 seconds | |||
I love git | |||
jnthn | The only problem with git is that every other version control system I have to work with feels so...awful. | 22:42 | |
mathw | we use SVN at work | ||
with a very unpredictable server, and requiring lots of cross-branch merging | |||
the kind of thing git's really good at | |||
jnthn | That's the best of the non-git ones I get to work with... :) | 22:43 | |
jnthn grumbles about Microsoft's heap of crap that it calls version control. | |||
mathw | oh we used to use that | ||
fortunately that was before my time | |||
22:43
dorlamm left
|
|||
jnthn | Oh my. | 22:43 | |
Yeah, one place I consult at uses it. | |||
mathw | but occasionally we have to delve into it to retrieve the source code for a few very old products still in use | ||
jnthn | I think it's the number one cause of office cursing. | ||
mathw | fortunately my machine doesn't have it installed, so I have an iron-clad excuse to avoid that | 22:44 | |
jnthn | :D | ||
mathw | my boss has it, and he does those tasks | 22:45 | |
22:45
am0c left
|
|||
mathw | I'm currently writing a document explaining a new source control/branch management strategy we've worked out | 22:46 | |
unfortunately it's one that, while doable in SVN, would be far better in git | |||
I doubt we can pull it off, but I'm going to try and shoot for bonus points and get a git migration | |||
jnthn | But @rest aren't up for a git migration? | ||
Well, can always try. :) | |||
mathw | oh I think the rest of the branching working group would go for it | 22:47 | |
22:47
dorlamm joined
|
|||
mathw | we could probably convince the developers in general | 22:47 | |
it's convincing the management and the IT services people to run a git server alongside their svn server for us | |||
Tene | My office is working towards a git migration. | ||
mathw | and to be honest... well... they're not very good at running an svn server | ||
Tene | We've already got a lot of engineers using git-svn. | ||
mathw | git-svn might be a workable intermediate solution | 22:48 | |
we'll see. Even if we stick to svn, this new policy will be better | 22:49 | ||
22:59
jaffa4 left
23:00
cjk101010 joined
23:02
Mowah left
23:08
kaare_ left
23:16
dorlamm left
23:25
nethogz joined
23:31
nethogz left
23:33
drbean joined
23:34
cjk101010 left
|
|||
masak | lol, I blogged! strangelyconsistent.org/blog/that-is-so-octal | 23:36 | |
masak expects this blog post to have a fairly narrow target group... | 23:37 | ||
jnthn suspects that @other won't eight it though... | 23:38 | ||
masak | :P | 23:39 | |
exercise for those who eight it: would the existence of a really good Set type in Rakudo have saved me characters in the one-liner? how? | 23:40 | ||
I maintain that the real problem for types like Set and Bag in Perl 6 is that their semantic niche is already occupied (successfully) by arrays and hashes, and even if they are a closer match to what the user might want, they weren't there first. | 23:42 | ||
23:43
pmurias left
23:46
Sarten-X left
|
|||
Tene | masak: why did you use the subscript @g-$_ instead of *-$_ ? | 23:48 | |
23:50
N3T joined,
N3T left
|
|||
Tene | masak: it would be nicer in your first() line. | 23:51 | |
my $mex = first $set ∌ *, 0..*; | |||
23:52
Sarten-X joined
|
|||
Tene | "my $set = ⦃ @g[*-1,*-2] ⦄; my $mex = first $set ∌ *, 0..*;" vs "my %set; ++%set{@g[@g - $_]} for 1, 2; my $mex = first { !%set.exists($_) }, 0..*;" | 23:52 | |
I'm not sure how much of that is Set and how much of that is just golfing, though | 23:53 | ||
23:53
dju joined,
dju left,
dju joined
|
|||
Tene | Oh, there's another short program later on. | 23:54 | |
masak | also, that's non-standard Perl 6, so you'd have to 'use Tene::Set' or something... | 23:55 | |
Tene | masak: That's what I remember seeing in Set classes posted here in the past, and I'm pretty sure that was implemented in the Pugs repo somewhere | 23:56 | |
masak | core Perl 6 doesn't have non-latin-1 characters. | 23:57 | |
at least that's been a tendency for a few years now. | |||
Tene | masak: also, you said "The existance of a really good Set type", which I interpreted as meaning "available in core". | ||
You're right that that wasn't necessarily implied, though. | |||
masak | right, I'm not criticizing. just reacting. :) | 23:58 | |
Tene | Yeah. | ||
masak | as to why I didn't use *, I definitely could have. | ||
but I've been bitten by * before, and I wanted to be on the safe side. | |||
Tene | Sure, @g is fine, it just took me a couple of tries to read it. | ||
masak tries it with * | 23:59 | ||
works nicely, I'll replace it in the post. Tene++ | |||
I was wary that two subtractions might cause trouble... :) |