TimToady .tell nine I have a minor gripe: the way .precompile handles .err, it always hangs if I put out more than a buffer of debugging info to stderr from inside the compiler 02:00
hmm, ENOBOT?
IOninja .tell nine irclog.perlgeek.de/perl6-dev/2017-...i_14061211 02:01
err 02:02
wtf, bot!
I think I forgot to detach :P
.tell nine irclog.perlgeek.de/perl6-dev/2017-...i_14061211
yoleaux2 IOninja: I'll pass your message to nine.
TimToady .tell jnthn the %?LANG mechanism is rather bogus, insofar as it can't actually tell you the current language, only the language after the last add_categorical, which retroactively redefines %?LANG for earlier parts of the block 02:26
yoleaux2 TimToady: I'll pass your message to jnthn.
Geth rakudo: MasterDuke17++ created pull request #1017:
Support smartmatching char Ranges
04:50
masak ...but retroactively redefining %?LANG sounds like one of those "tree falls in the woods" things -- since we're never going to parse the earlier parts of the blog again anyway 05:52
block* 06:02
TimToady EVAL wants to know the current language... 06:47
masak oh! 07:13
something feels... odd about that
EVAL is a runtime notion, and it's asking for a "current state" of the parser at that point
don't know how exactly to express what I feel is odd about that 07:14
TimToady it's almost like a...macro... 07:15
TimToady wanders off to read a book in a language that doesn't require %*LANG to parse it... 07:22
nine . 07:41
yoleaux2 02:02Z <IOninja> nine: irclog.perlgeek.de/perl6-dev/2017-...i_14061211
nine TimToady: in my defense, I wasn't the one who added capturing of STDERR and I patched it out a 100 times because it makes debugging precomp issues really hard. Unfortunately it is really useful for end users. 07:43
TimToady: but I guess there is also room for improvement.
I'd love to get rid of those extra processes entirely. 07:44
samcv ok so current collation test results are back 07:55
Failed 15590 tests of 194761
so we're failing 8% of tests
i'm guessing most of them are caused by us only checking per cp and not checking for series of cp's that have a collation value assigned to them 08:04
going to add a MVM unicode property MVM_COLLATION_NO_QC, and will be set true for codepoints which are the first cp in series that has a different weight 08:14
so `sub foo ( $thingy) { }` is basically like `sub foo ( Any $thingy) ` right? 08:24
since it won't work if you try and pass Mu through
arnsholt Yeah 08:25
samcv reasoning? 08:26
arnsholt Mu is the root of the type system, but Any is the root of the subtree for "normal" objects
samcv so it _is_ typed
hah
arnsholt I can't remember the details around the reasoning here, but shenanigans involving junctions (which descend from Mu and not Any) are involved IIRC 08:27
And yeah, I'm pretty sure omitting the type means that the compiler puts in Any for you 08:28
samcv but that's still faster than doing typed objects like Str?
arnsholt Hmm?
samcv isn't it faster to not put any type in the signature? 08:30
arnsholt Not sure, TBH 08:39
Geth rakudo/nom: 07a9fbe9b9 | (Daniel Green)++ | src/core/Range.pm
Support smartmatching char Ranges

Before `say ("a" .. "c") ~~ ("a" .. "c")` would give the error:
  `Cannot convert string to number: base-10 number must begin with
valid digits or '.' in '⏏a' (indicated by ⏏)`
08:43
rakudo/nom: 0d8624d425 | (Samantha McVey)++ | src/core/Range.pm
Merge pull request #1017 from MasterDuke17/support_smartmatching_char_Ranges

Support smartmatching char Ranges
samcv damn " " ~~ /<:space> ugh. i'm making a script that rebuilds the unicode database until i rebreak space again 08:50
well fix it in perl 6, but it's actually broken
but results it in fixing it
good. i it ran like 4 times until it rebroke/fixed it :) 08:52
jnthn samcv: fwiw, putting a "boring" type (Str, Int, SomeClass, etc.) into a signature shouldn't be any slower than Any being there. It's only things like subtypes that will be slower 10:04
samcv thanks jnthn :) 10:08
did you see the talk about that filename having issues?
thinking again it could be valid utf-8 because, the browser gets the filename from the URL right?
jnthn No, but saw the github issue
I think not a bug
We decode filenames using utf8-c8
samcv even if other things handle it fine? 10:09
it causes issues with interoperating with other software
jnthn When they are either not UTF-8 or not NFC we use synthetics to ensure that the original byte sequence can be recreated 10:10
samcv ok. it's not NFC
maybe then
jnthn If you open the file, all works out, I presume? 10:11
Because use encode it using utf8-c8 on the way back out...
*becuase we
samcv but you cannot access it by name then
jnthn "by name"? 10:12
samcv "Symphony No. 1 in C Minor, Op. 68 - IV. Adagio - Piu􏿽xCC􏿽x80 andante - Allegro non troppo, ma con brio.mp3 != ("Symphony No. 1 in C Minor, Op. 68 - IV. Adagio - Più andante - Allegro non troppo, ma con brio.mp3".IO "perl.pl".IO "new".IO "find_bad_files.p6".IO "file with spaces".IO "file with ' in it".IO)
jnthn Things like open should be turning it back into the exact same byte sequence before passing it off down to the file system
samcv yeah they do, but you cannot try and open the file
if some other program passes the filename to perl 6 it won't open the file
jnthn Passes how, exactly? 10:13
samcv not sure how they were doing it in #perl6
they were processing some database of the files 10:14
jnthn OK, :enc<utf8-c8> when opening the file
samcv and then it was unable to open the file as written in the text file
is there a way to get from that to any type of object like a Uni object or somethnig idk 10:15
some way to get the actual text out of it
jnthn What does "the actual text" mean?
samcv the codepoints of the actual filename
jnthn Filenames aren't stored in codepoints 10:16
samcv there should be a way to get the codepoints of the filename
jnthn That's the whole point of this.
samcv exactly
jnthn So why are you asking to do it? :)
samcv that's why i'm saying. is there a way to get to the codepoints
because something not in NFC gets these Private Use characters in it 10:17
but i want to get from the filename to how it's stored in non-NFC form
jnthn $that.encode('utf8-c8')
Gets you the original bytes
samcv don't i want to decode maybe?
jnthn No, decode is bytes to string
samcv yeah but what if you want the codepoints of those bytes? and want it to be in whatever form it's there 10:18
is there a way?
let's say we want to rename the file using perl 6 to be in NFC form 10:19
how would somebody do that
because i see this being a problem for people where it spits out there Private use characters, and the answer should usually be, you should rename the file to be in NFC form
jnthn $that.encode('utf8-c8').encode('utf8')
d'oh
$that.encode('utf8-c8').decode('utf8') 10:20
samcv perfect :)
jnthn This whole area is kinda horrible and "can't win", sadly
samcv heh
but that seems like the right way™ is to rename the file using ^
and then everything is good again 10:21
:)
jnthn Most people just want to use Str for filenames, environment variables, etc.
And the world is kinda converging-ish on average kinda on utf8
But you can't rely on any of those things being utf8
They're just a load of bytes
samcv yeah 10:22
if only everything was always in NFC form always and forever :)
jnthn Indeed :)
samcv maybe i should email archive.org there's an issue with that file 10:23
since that's where they downloaded it from
jnthn Doesn't OSX like to store things in NFD?
samcv uhm 10:24
i thought they stored it in NFC?
no clue though
does it store it in NFD and then tell the user the NFC?
jnthn Dunno, and maybe it depends on filesystem and stuff 10:25
samcv OS X's HFS+ filesystem requires that all filenames be stored in the UTF-8 representation of their fully decomposed form. In an HFS+ filename, "ä" MUST be encoded as 0x61cc88, and "ö" MUST be encoded as 0x6fcc88.
apparently
jnthn Wow :)
samcv so on os x everything looks like crap?
jnthn So they even enforce it rather than prefer it
samcv or maybe it allows you to access the files using NFC
i'm guessing that's the case 10:26
jnthn Maybe
samcv that if you ask for filename XYZ in NFC, then it grabs the file
can you run os x virtual machines nowdays?
jnthn That'd be entirley possible given they've declared what canonical is
I...don't think so. Not legally, surely :)
moritz actually likes the idea of forcing a composition
samcv: it's quite hard, due to licensing
samcv lameeeeeeeeeeeeeeeeee 10:27
samcv sets up travis build
then just gonna print out some perl 6 things with this weird file and see what happens
moritz last I looked, Azure's Linux VMs were cheaper than Windows VMs
either licensing, or Microsoft realized that Linux has a lower TCO :-)
samcv licening from themself :P 10:28
moritz yes, but different department, probably :-)
samcv now that i added in MVM_COLLATION_QC i will integrate it into my test of the unicode collation suite tests
and *hopefully* those are the only ones we are failing 10:29
u: fingers crossed
unicodable6 samcv, U+1F91E HAND WITH INDEX AND MIDDLE FINGERS CROSSED [So] (🤞)
samcv m: '🤞'.uniprops('Age') 10:30
camelia ( no output )
samcv m: '🤞'.uniprops('Age').say
camelia rakudo-moar 0d8624: OUTPUT«(9.0)␤»
samcv nice!
jnthn, utf8-c8 is always the same private use characters substituted right? so if i saved the filenames it would always be the same unlike synthetics? 10:36
jnthn samcv: Yes, we always use that same private use char
samcv very nice :)
jnthn samcv: One other thing we might consider is if stdout/stderr should default to utf8-c8, not utf8
samcv: So we reproduce the original bytes automatically on output 10:37
samcv hm
that could be annoying for people cause if they save the strings they get gobbly gook
jnthn Well, yeah, it puts off the point at which you need to actually make a decision about what you want. 10:38
Or hides it for longer
samcv i don't really want them to be in utf8-c8 tbh :\ would make my job harder 10:39
jnthn *nod* 10:40
samcv we probably need a section in the docs about this 10:41
if we don't already
jnthn Yeah, we should
samcv we have a Unicode page so it could go there, and some link also be to other places that are relevant like slurp and such
jnthn nine: So, htmlify.p6 in p6doc tries to use .precompile in PrecompilationRepository in parallel. 10:51
nine: This goes...very badly
nine: For example, $!lock-count in CompUnit::PrecompilationStore::File is not in any way protected, so they race on it 10:52
So we die with "unlock when we're not locked!" or so at times
But looking a level up in the .precompile method itself, it does: 10:53
my %ENV := %*ENV;
And then mutates %ENV
And there's races in there too, it seems
If we make a private copy of the environment we might well get further... 10:55
And I guess I can put some locking in around the lock file recursion count
nine jnthn: oh, sorry. I actually expected concurrency issues to surface much earlier and then forgot about that part.
jnthn Yeah, well, I guess my real question here is: if I patch those two up, will I just be looking at the next problem? :) 10:56
Looking at the code, %!dir-cache seems like the next probelamtic part 10:57
Perhaps more importantly: given the current design, do you believe there's a way to put in appropriate concurrency control that would still allow for the precompilation of differnet docs to take place concurrently? 10:58
That is, the subprocesses to run concurrently?
And then we can just lock while dealing with the outcome of that?
nine jnthn: replacing %*ENV dynamically with a modified clone would even make the code cleaner as we can get rid of the cleanup in addition to make it safer. 10:59
jnthn Yeah, I was wondering if I was missing something there :)
But if we can just do that bit of cleanup, well, nice :)
nine I don't see anything keeping us from having concurrent precompilation. 11:01
jnthn OK 11:02
Then I'll see if I can fix things up some :)
nine It already copes with separate programs accessing the same precomp store in parallel (including updating the files), so the rest is just protecting the caches and counters.
jnthn Cool
That's what I was hoping :)
nine jnthn: I can also have a look at it in the evening if you'd like to spend your time elsewhere.
jnthn What is the lock file to protect?
I already started fiddling with the ENV cleanup so guess I can do that bit :) 11:03
nine There is no lock file anymore. Atomic replacement of the precomp file is the way we handle parallelism.
jnthn $!lock //= $.prefix.child('.lock').open(:create, :rw);
$!lock.lock(2) if $!lock-count == 0;
nine wait a second 11:04
jnthn That's in CompUnit::PrecompilationStore::File
The $!lock-count is one thing htmlify trips over, fwiw
nine Ah, yes, we don't use a lock file for reading, but still for writing
We could get rid of that easily but that'd be wasteful as all parallel processes would precompile and overwrite the other's results 11:05
It could do with being more fined grained though. One lock file per precomp file would allow for parallel precompilation of different modules. 11:06
jnthn There's no way for us to get into deadlocks with our own processes over this, I presume? :)
Yeah, though if we make it fine-grained then we still need to be really very careful that we don't end up vulnerable to lock acquisition order deadlocks... 11:07
nine jnthn: I guess only if we had circular dependencies
jnthn Hm, true
Modules really should form a DAG
nine I prefer them that way :)
jnthn Kinda required by one-pass parsing :)
nine And by our precompilation in general as for circles you'd have to be able to precompile a file without its dependencies present. 11:08
jnthn OK, so I think you're saying we're safe :) 11:09
nine indeed :) 11:11
arnsholt jnthn, samcv: I'm pretty sure OS X normalizes file names coming in, so you should be able to request a file by any equivalent name and get the right one back out 11:24
samcv yeah that's what i thought 11:25
wish linux did that
arnsholt Which makes git and other software sad
samcv heh
how so?
because you can't have two filenames which are NFC equivilant to each other?
in the same folder ;)
arnsholt Because it puts in a file with one name, and then when it goes to look for it, it's not there 11:26
Because the filename it gets back is a different byte sequence from the one used when it was stored
There's a Torvalds rant on how stupid (he thinks) this is
samcv well the real solution is store all filenames in NFC form
always and forever!
arnsholt The real solution would be for all software to handle Unicode properly =) 11:27
samcv and then save files only in NFC form?
arnsholt And then save filenames as Unicode strings and compare them fucking correctly. At which point the exact normalization used (or not) is immaterial =)
samcv can't git just do unicode properly or something :P 11:28
and not allow filenames that have the same NFC form? 11:29
and something something
i just updated my linux like 2 days ago and already a new one is out 11:30
arnsholt git is proud Unix software and disregards any conception of strings other than just a bunch of bytes 11:31
samcv heh
#bytelivesmatter
arnsholt And apparently anyone who thinks filenames should be anything *other* than a pile of bytes is an idiot
samcv even ones which aren't proper unicode!
arnsholt *snort*
samcv heh
;) 11:32
arnsholt Same problem as on OS X happens on NTFS, apparently
samcv yeah
let me have my ugly pile of bytes dammit!
i want to save my filenames in utf-16!
SHIFT-JIS even! 11:33
jnthn EBCDIC or bust!
samcv looks like we fail one collation test comparing 0x6C 0xB7 0x21,0x6C 0xB7 0x21 11:34
heh. i'm sure this test must be refering to codepoints with collation quickcheck = False. must be a trick
since they're all the same except one cp
m: Uni.new( 0x6C, 0xB7, 0x21,0x6C).Str.say 11:35
camelia rakudo-moar 0d8624: OUTPUT«l·!l␤»
samcv m: Uni.new( 0x6C, 0xB7, 0x21,0x6C).Str.uninames.say
camelia rakudo-moar 0d8624: OUTPUT«(LATIN SMALL LETTER L MIDDLE DOT EXCLAMATION MARK LATIN SMALL LETTER L)␤»
samcv haha
hilarious
evalable6, say '!.uniprop('MVM_COLLATION_QC') 11:42
evalable6 samcv, Full output: gist.github.com/8d4fa2acfb028cc54e...1599dd37eb 11:43
samcv, rakudo-moar 0d8624d: OUTPUT«(exit code 1) 04===SORRY!04=== Error while compiling /tmp/OMG23IRAZG␤Two terms i…»
samcv evalable6, say '!'.uniprop('MVM_COLLATION_QC')
evalable6 samcv, rakudo-moar 0d8624d: OUTPUT«0»
nine samcv: thing is, POSIX doesn't tell you in which encoding file names actually are. So assuming it's UTF-8 just because your locale is UTF-8 is kinda bold already. 11:48
samcv heh
true 11:49
sanity does
this one person says On the other hand, the default filesystem on Mac OS X (HFS+) enforces all filenames to be valid UTF-16 in a variant of NFD. 11:50
is this true? it's utf-16? (wtf?)
Geth rakudo/nom: bab1c027c4 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationRepository.pm
Work on private copy of environment in precompile.

Avoids data races and over-sharing of the %*ENV hash, and allows us to eliminate cleanup logic.
11:51
rakudo/nom: accc156603 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationStore/File.pm
Avoid race in CompUnit::PrecompilationStore::File.

Allow duplicate work if that should ever happen, and just bind the result.
rakudo/nom: 39c517e6f1 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationStore/File.pm
Lock in CompUnit::PrecompilationStore::File.

Avoids various data races that would break parallel precompilation, as attempted in htmlify.p6 from p6doc. Seems to make things a good bit better.
samcv yay jnthn
jnthn 11 runs in a row of the [Coke]++ htmlify bug golf branch without a crash 11:52
samcv woo!
masak \o/
samcv 🎉
jnthn Got it running in a loop; guess I'll leave it while I have lunch :)
timotimo "a variant of NFD" o_O 12:01
jnthn lunch & 12:02
samcv timotimo, because they couldn't just make it NFC :P 12:04
catbert17 jnthn: do you see how much memory a htmlify.p6 run uses?
samcv that would be too simple!
timotimo they could also not just make it NFD?
catbert17: probably multiple gigabytes :)
samcv timotimo, also why use NFD when NFC is better 12:05
timotimo *shrug*
samcv maybe they think NFD will be more stable?
catbert17 timotimo: :)
ilmari developer.apple.com/legacy/library...Subtleties
samcv could read unicode.org/reports/tr15/#Stability...ized_Forms
ilmari (linked from the wikipedia page on HFS+) 12:06
samcv tbh if they store it on filesystem as NFD they should tell all programs the NFC form only 12:07
or something
orrr just store it as NFC
and call it a day. and if the file doesn't exist, then try and NFC it and then recheck if that file exists 12:08
if so hand back said file
timotimo sounds like something wine would have to do :) 12:09
samcv heh 12:16
i still can't run htmlify.p6 at least 12:20
complains about trying to get the result about a broken promise
timotimo you mean with --parallel (or what it's called)?
samcv
timotimo if the golfed version runs a hundred times in a row, it's time to roll out some new golf lawn 12:21
samcv that's what i was thinking :)
jnthn Yup, the htmlify golf still going strong after lunch 12:36
catbert17: Well, this golf doesn't seem to use much... 12:38
samcv: That's what the golf gave prior to my fixes above 12:39
ooh, it just spat out a warning though
Use of uninitialized value $!checksum of type Any in string context
Once in like 150 runs 12:40
Oh, damn, there's still a race possibility in CompUnit::PrecompilationUnit::File 12:41
Fine, it can get a lock too
timotimo jnthn: your daily test runs for moarvm.org/measurements pull new versions of perl6-bench every day, right? 12:47
arnsholt jnthn: That's how you solve concurrency problems, innit? Lock ALL the things! 12:48
jnthn timotimo: I think so
arnsholt: Yes, except deadlocks and contention, which you solve by locking less of the things :P 12:49
arnsholt I'm sure those are purely academic concerns that never crop up in real life ;p 12:50
jnthn Real academics build everything lock free, and when that's not hard enough, they go wait free too. :P 12:51
timotimo they seem to not need any coffee 12:52
samcv well if you get deadlocks can you not just wait longer :) and it'll eventually undeadlock 12:53
timotimo we prefer having it unlock in the time span of a human's life 12:54
Geth rakudo/nom: 917d473bbe | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationStore/File.pm
Do locking properly in precomp store File class.

Turns out that there's some races in there besides the initial one to write @!dependencies. So, use a lock. Fixes a warning that was spat out in 1 run in 100 of the htmlify.p6 golf.
12:57
jnthn samcv: What was your invocation of the (non-golf) htmlify.p6 that you got an explosion on? 12:58
samcv gist.github.com/a1981762c62bc708bd...ffd5c86030 12:59
timotimo that's the result, not the invocation :P 13:00
samcv oh
vtrue 13:01
jnthn samcv: Is that on Rakudo HEAD? (or HEAD~1 now?)
samcv do you want original exception?
yeah
timotimo i think he wants the commandline you ran?
samcv or the exception reported first
oh
htmlify.p6 --parallel=2
time to try htmlify.p6 --parallel=1.5 13:02
catbert17 jnthn: try a full build, time permitting, memory usage is too high for us poor 32-bit people
timotimo "an =SUBTITLE"? :P
jnthn It doesn't have an grammar :P
samcv where are you getting this an =SUBTITLE from 13:03
jnthn Yay, clean spectest with my commit above
jnthn shoulda waited for it to finish before pushing the button... :)
samcv gonna make install again
jnthn samcv: OK, will try running htmlify.p6 --parallel=2 in master of doc now :) 13:04
catbert17 cool
jnthn I seem to have fixed the issues in [Coke]++'s golf at least.
Which is nice in that it gave something to focus on first
samcv yep
jnthn But I'm guessing there are more issues
catbert17 sitting on a java conference typing on my iPad 13:05
jnthn Could not find Pod::To::HTML
Heh, I was writing Java yesterday
I wrote my first lambda and was all like "wow, lambda in Java!"
Then thigns didn't work well at all
Turns out I'd compared two strings using == :P
catbert17 :-) 13:06
jnthn Guess the lambda really made me think I was back in C# :P
samcv i guess one reason to not steal the ICU is that ICU stores strings as UTF-18
jnthn Could not find Pod::To::HTML
samcv s/18/16
jnthn grmbl
Oh, but that's in the META.info 13:07
Hmm, wonder if there's a way to just install a module's dependencies using any <zef panda>
samcv yeah --depsonly 13:08
in panda
jnthn ooh, thanks :)
samcv and there's a zef one too i forget which
oh zef has --depsonly
not sure about panda
also my libreoffice won't even launch. not that i ever use it but wanted to do a spreadsheet 13:09
gonna reboot
timotimo buh. for 1 .. hugenum { } gets the for-to-while optimization, but only in the non-void half of the tree 13:11
and then it uses the void half of the tree obviously
jnthn Huh, thought I put in a general fix for that not so long ago 13:13
Geth rakudo/nom: a63d82aa51 | (Samantha McVey)++ | src/core/Range.pm
Revert "Support smartmatching char Ranges"

This reverts commit 07a9fbe9b99ec8ff5c23f9cd350db70225623b53.
13:14
jnthn Ah, and now I need to make init-highlights etc apparently :-)
timotimo why do we have a microbenchmark that repeatedly grabs the .sigil out of a signature's first param?
that means your run completed?
(also, that test is bogus) 13:15
(i mean "benchmark")
jnthn Ah, now I get a broken Promise error 13:16
So, yeah, somehting still up
Always seems to die in the same place, though :) 13:20
(Same place in the code, I mean.)
timotimo maybe the failure is a legit failure this time? 13:21
Geth roast: c25f6cbe37 | (Samantha McVey)++ | S03-smartmatch/range-range.t
Test smart matching string Range's which hold numbers and Ranges which are numbers
13:22
IOninja samcv: moving discussion here, so others could chime in... 13:33
samcv ok
IOninja Topic: should '0'..'9' ~~ 0..10 ?
samcv, I don't really see the parallel with 1 ~~ '1' here. There's no ambiguity, since if there's an Str on the right you use Str eq and with number ==, but with Range... 13:34
Hm
samcv well if it == then uhm
IOninja I think we should assume the comparison of the Range on the right side, same as 1 ~~ '1' vs '1' ~~ 1 13:35
jnthn htmlify.p6 does contain data races
timotimo the general rule of "the RHS dictates what kind of match is done" should be adhered to
samcv that sounds good
IOninja I mean, if the range on the right is numeric then use numeric comparison; if it's string then use string
timotimo not sure how exactly that influences your discussion
samcv jnthn, i thought that was the case too :)
sounds good IOninja
IOninja m: say '0'..'9' ~~ 0..10
camelia rakudo-moar a63d82: OUTPUT«True␤»
IOninja m: say 0..10 ~~ '0'..'9' 13:36
camelia rakudo-moar a63d82: OUTPUT«False␤»
IOninja m: say '10' before '9'
camelia rakudo-moar a63d82: OUTPUT«True␤»
IOninja m: say '10' after '0'
camelia rakudo-moar a63d82: OUTPUT«True␤»
IOninja So 0..10 ~~ '0'..'9' should give True
jnthn Perl6::Documentable::Registry.add-new is called from multiple threads for example
samcv m: say 0..10 ~~ '0'..'9'
camelia rakudo-moar a63d82: OUTPUT«False␤»
IOninja m: say 'a'..'z' ~~ '0'..'9'
camelia rakudo-moar a63d82: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja And that should not explode. 13:37
samcv m: say '0'..'9' ~~ 0..10
camelia rakudo-moar a63d82: OUTPUT«True␤»
IOninja And 'a'..'z' ~~ 0..9 probably should not explode either and just return false since we don't generally want smartmatching to be explosive, right?
m: 'a' ~~ 1 13:38
camelia rakudo-moar a63d82: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja Oh, never mind.
(unless that's wrong).
samcv heh
IOninja I mean, if I have $a and I have $b I kinda imagined the *smart* match would be smart enough to tell me if the thing are smartly-true without me worrying about exploding stuff 13:39
samcv m: say 0..3 ~~ '0'..'3'
camelia rakudo-moar a63d82: OUTPUT«True␤»
samcv i sorta agree IOninja 13:40
Geth roast: 99d22dcc8e | (Samantha McVey)++ | S03-smartmatch/range-range.t
Add more Range ~~ Range tests
13:42
samcv added some more tests to roast
IOninja: also, should we use is-deeply on smartmatch tests? 13:46
i mean, since `ok "foo"` would pass
jnthn Got once patch for doc already 13:49
Language lesson now; will continue investigating after that :)
samcv thank you jnthn :)
[Coke]_ jnthn++ fixing coke/bughunt
DrForr Heh, I had Romanian lessons yesterday. 13:50
jnthn [Coke]: Thanks for the golf, it was good to have at least one of the problem areas isolated before bug hutning
[Coke] I figured I might have to re-golf once you fixed one. Let me know if that's the case.
jnthn I may need that, but for now I can find some things without golfing 13:51
bbi1h
[Coke] rakudobrews an up to date rakudo to verify. 13:52
samcv [Coke], or you mean breaking it ;) 14:00
timotimo he moved the goalpost
Geth roast: 43ade7b723 | (Samantha McVey)++ | S03-smartmatch/range-range.t
Put RT number for bug and use is-deeply instead of ok

Also align some columns while I am at it.
14:02
IOninja samcv: personally I never use `ok` in roast and use `is` only when I'm ok with stringy comparison. Simply because many things can be `ok`: 1, True, 'a'..'b'; while with `is-deeply` you say that this operation needs to return a Bool 14:05
samcv yeah
these are old files
IOninja m: use Test; is <a b c>.Seq, <a b c>
camelia rakudo-moar a63d82: OUTPUT«ok 1 - ␤»
IOninja That passes ^ which means one implementation can return a Seq while another returns a List. And since Seqs can only be iterated once, that means some code will work on one implementation but will explode on another, even though both pass the roast test 14:06
samcv yeah 14:07
m: use Test; is <a b c>.Seq, "a b c"
camelia rakudo-moar a63d82: OUTPUT«ok 1 - ␤»
samcv also this :)
also there's some code here IOninja that uses eval 14:13
because of some problem with pugs
is it safe to remove that eval ;)
IOninja shrugs
timotimo it should have been fudged as a skip
samcv did that exist back then 14:14
so can i do that now?
timotimo that'd probably be good, right?
samcv need to test in EVAL() since class definitions happen at compile time, 14:15
# ie before the plan is set up.
also this
timotimo ah, well, that's A Thing 14:17
samcv that works fine if i take out the eval
it was, eval-lives-ok 14:18
m: class A { method foo { return "" ~~ * } }; A.new.foo.say 14:19
camelia rakudo-moar a63d82: OUTPUT«{ ... }␤»
samcv m: say "" ~~ *
camelia rakudo-moar a63d82: OUTPUT«{ ... }␤»
samcv wat
timotimo haha
samcv m: say ("" ~~ *).WHAT
camelia rakudo-moar a63d82: OUTPUT«(WhateverCode)␤»
timotimo i don't think it's supposed to curry there
samcv heh
wtf
timotimo or maybe it is? not sure about that 14:20
IOninja Don't think so 14:21
00:29 brokenchicken it ain't currying over the ~~
00:30 TimToady nope, it's one of the exeptions
irclog.perlgeek.de/perl6/2017-02-02#i_14028467
timotimo fair enough 14:22
samcv m: my @a = 'ā, 'b', 'o', 'ø';
camelia rakudo-moar a63d82: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Two terms in a row␤at <tmp>:1␤------> 3my @a = 'ā, '7⏏5b', 'o', 'ø';␤ expecting any of:␤ infix␤ infix stopper␤ postfix␤ statement end␤ statement …»
samcv wat
timotimo misses a ' 14:23
after the first thingie
samcv oh. yes.
m: my @a = 'ā', 'b', 'o', 'ø', 'Z','z'; @a.collate; 14:25
camelia rakudo-moar a63d82: OUTPUT«Use of the 'coll' operator is experimental; please 'use experimental :collation'␤ in block <unit> at <tmp> line 1␤␤»
samcv m: use experimental :collation; my @a = 'ā', 'b', 'o', 'ø', 'Z','z'; @a.collate.say
camelia rakudo-moar a63d82: OUTPUT«(b ā o ø z Z)␤»
timotimo should it warn about the collate method instead of the coll operator that's called by the collate method? 14:26
samcv interesting. looks like ā comes after b. not sure what languages use that but it's probably its own letter in alphabet
meh maybe.
pretty obvious what it means when it tells you to use experimental :collation
[Coke] verifies that coke/bughunt seems to be working. whee.
samcv i mean would be nice if i had the experimental check inside collate method and not in coll operator 14:27
because it makes the sorting 2+ times faster
maybe 4
timotimo the experimental check does that? 14:28
samcv yep
timotimo you could have a sub ACTUAL_COLL that doesn't have the check and coll just calls that and collate uses ACTUAL_COLL for sorting
samcv for sure
and also would be much faster if it only checks $*COLLATION once 14:29
so ACTUAL_COLL would probably accept the collation level as argument
as a native int or whatever
timotimo it could perhaps set its own $*COLLATION so that it doesn't have to look far in the dyn var cache (though i hardly know anything about the dyn var cache)
samcv set its own? what? 14:30
i mean it should query the collation-level once, then use that int for the whole sort
timotimo my $*COLLATION = nqp::getdynlex('$*COLLATION') or whatever
samcv cause if the user changed it
timotimo that's fair
samcv well it only needs one value from it
timotimo oh, only one, eh?
samcv well evenually will be more but
timotimo ok
samcv will also take those as ints too
and plug it into the nqp op
if i have ACTUAL_COLL inside the 'coll' multi's then it'll probably just get inlined right 14:31
timotimo hah, give the candidate you want a named argument it requires :D
samcv what? come again 14:32
is that the best way to get it to inline it?
timotimo might work well
IOninja got failures in t/spec/S03-smartmatch/range-range.t; mising TODO? gist.github.com/zoffixznet/b9ef17f...bbcd6f0306 14:33
Hm.. and t/spec/S17-promise/nonblocking-await.t failed during stresstest run "Bad plan. You planned 19 tests but ran 8." but works fine when I run it on its own
samcv uhm it should be todo'd 14:34
oh i see 14:35
no wait it is todo's 14:36
err but there's an extra one i see
ok fixed
Geth roast: 3513d7f108 | (Samantha McVey)++ | 2 files
Convert more to is-deeply
roast: f0e5562dfc | (Samantha McVey)++ | S03-smartmatch/range-range.t
Remove extra test
samcv my kexec-prepare.sh is so nifty for using kexec to reboot without rebooting 14:42
it doesn't restart the hardware, just go to shutdown and loads the new kernel. brb gonna reboot without rebooting
IOninja .ask TimToady what's your take on 1e0/0e0 exploding (for natives we even get a "can't unbox failure" exception). With Rat.Num we follow IEEE semantics, yet with two Nums we explode; feels weird. Should we make Num/* and */Num follow IEEE and return NaN for 0/0 and +/-Inf for rest of */0? 14:48
yoleaux2 IOninja: I'll pass your message to TimToady.
jnthn back 15:15
IOninja :( 15:17
IOninja is getting a new boss
Looks like my Perl 6 hacking time will shrink significantly
timotimo the next boss is going to hover over your desk and micromanage you all the time? 15:18
IOninja Well, due to a chain of events, my current boss doesn't have the time to boss me, so I just do design requests from reps when they come in and hack on Perl 6 when they don't come in. And I'd guess the new boss would be more intersted in what I do here.... 15:19
timotimo ah, ok 15:20
IOninja is reminded of a scene from Office Space
timotimo the "what do you do here" scene? 15:21
or "what is it, exactly, that you do here?" 15:22
nine Wouldn't it be nice to have at least a day per week for your personal projects? Oh, I work at a place that gives you that. And I'm looking for a developer.
IOninja The what is it exactly that you do here :P 15:23
nine: developer in what language? 15:24
timotimo any turing complete language! :P
nine IOninja: Perl with nobody getting in your way if you want to introduce Perl 6 15:27
Well, Perl 6 is already responsible for setting up our production VMs. Sadly it hasn't made it into software development yet. 15:28
IOninja :) 15:31
jdv79 cdn.quotesgram.com/img/60/92/163242...gress1.jpg 15:37
IOninja heh
timotimo i really like that actor, the one who also plays doctor cox on scrubs 15:38
jdv79 bob slydell? 15:39
[Coke] John C. McGinley
timotimo coke has the right one
even though in the picture it's the left one
jdv79 that' the character's name 15:40
one of "The Bobs"
anyway
[Coke] jdv79, going for the deep cut, and right over my head. Whoops 15:41
timotimo oh 15:42
i'm confused
[Coke] jdv79 gave the character's name, I gave the actor's name. 15:49
jdv79 i want more names. i only have one. 15:51
not really
timotimo yeah, what was "the deep cut" thing about? 15:52
[Coke] a deep cut is from when DJs would play a song that was not popular or well-known. 15:55
timotimo oh
[Coke] I just know they were "the bobs", I didn't even remember that they HAD last names.
sorry. ameringlish regional slang. 15:56
Geth rakudo/nom: 71a128391e | (Jonathan Worthington)++ | src/Perl6/Actions.nqp
Give fakesignature a $/, $_, and $!.

So that we don't end up with unintended sharing of $/ when doing a
  `foo ~~ :($ where /bar/)` on a bunch of different threads at once.
Greatly reduces the cross-thread write log output from htmlify in parallel mode.
16:17
timotimo oh, that's interesting 16:39
[Coke] nifty to see where all the patches today are going. Thanks esp. for the ones in perl6/doc 16:43
jnthn Got a few more lined up also 16:44
All of which were needed fixes, but which don't seem to nail the .level issue
IOninja m: 'a' ~~ 1 16:51
camelia rakudo-moar 71a128: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja jnthn: what's your opinion? Should the above throw as it does or should it just return False instead?
jnthn Probably just False; smartmatch throwing is a bit harsh 16:52
IOninja agreed
jnthn You didn't ask for a coerced result, just if it matched 16:53
htmlify uses quite a few hashes to cache stuff
state %cache;
And the like
This is not safe.
Also @__URLs is pushed to from many threads, etc. 16:54
[Coke] not sure half those caches help; If you could note anything bad you find here, I can add it to the ticket and fix it. 16:59
Geth rakudo/nom: a88da2ef26 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationRepository.pm
Protect %!loaded in CompUnit::PR::Default.
17:00
rakudo/nom: 6c374d53a2 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationStore/File.pm
One more missing lock in CU::PS::File.
rakudo/nom: 2b1eb64864 | (Jonathan Worthington)++ | src/core/CompUnit/PrecompilationUnit.pm
Protect PrecompilationId cache with a lock.
jnthn Caches using state variables are a kind of attractive nuisance. 17:13
Guess we should try and get an `is cached` design we like *and* get it threadsafe 17:14
[Coke]: Just pushed a couple of further fixes to htmlify 17:15
After all this, it's no doubt in better shape, but still blows with the broken Promise over .level 17:16
TimToady .
yoleaux2 09:58Z <jnthn> TimToady: %?LANG is there for the sake of EVAL. I consider this as just another example of what we see in `EVAL 'say $x'; my $x = 42` - that is, by runtime certain things exist at block-level, even if the compiler had a finer-grained view of them earlier.
14:48Z <IOninja> TimToady: what's your take on 1e0/0e0 exploding (for natives we even get a "can't unbox failure" exception). With Rat.Num we follow IEEE semantics, yet with two Nums we explode; feels weird. Should we make Num/* and */Num follow IEEE and return NaN for 0/0 and +/-Inf for rest of */0?
TimToady I think following IEEE is good for checkoff boxes 17:18
if it doesn't impact performance too badly
IOninja OK. Will give it a go and see how it works out.
m: use nqp; say nqp::div_n(0e0, 0e0) 17:19
camelia rakudo-moar 2b1eb6: OUTPUT«NaN␤»
IOninja it prolly be better for performance in some cases, since we can get rid of our check for zero denumerator
TimToady that was easy :)
IOninja denominator
TimToady this is also a case where we really don't want to blow up the rocket's vector division just because a sensor or two were offline 17:20
IOninja :)
jnthn Ah, darn. There's a code-gen bug involving the NEXT phaser in a while loop. That'll be the immediate thing blowing up htmlify.p6 17:24
dogbert17 Original exception: 17:33
No such method 'check-path' for invocant of type 'PathChecker'
in sub at htmlify.p6 line 49
is this new?
jnthn hah, yes :) 17:35
dogbert17 :)
jnthn Thought "eh, this code says path one time too many" then screwed up the tidying :)
I need to rest some, but I also know the next place in Rakudo that needs fixing to make htmlify.p6 happier :) 17:37
IOninja m: say 1^..3 ~~ 2..3
camelia rakudo-moar 2b1eb6: OUTPUT«False␤»
jnthn Not quite sure how I'll fix it yet.
IOninja tries to figure out if that's right or wrong.
jnthn Other discovery - which is likely to thank for EVAL thready issues - is that the NFA alt cache isn't protected 17:38
Or at least partly to blame for such issues...
IOninja m: say 1.5 ~~ 1^..3
camelia rakudo-moar 2b1eb6: OUTPUT«True␤»
IOninja OK, it's right then
jnthn In other news, seems I've exhausted my grant again... 17:40
Guess I'll hafta find time to write a report and apply for more. :) 17:42
IOninja \o/ 17:44
Gonna give a go to Range ~~ Range thing, unless someone already started? 17:55
So MasterDuke started it, but there were some issues and the commit was reverted. I wrote a whole bunch of tests for what the right behaviour should be.... What's a normal thing to do? Implement the right Range ~~ Range thing myself or give MasterDuke the tests and let him finish? 17:58
0.o well, that's new: 18:20
WARNING: unhandled Failure detected in DESTROY:
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏b' (indicated by ⏏)
in block at /tmp/z.p6 line 34
in block <unit> at /tmp/z.p6 line 33
With this code: gist.github.com/zoffixznet/b7fe891...4a664b2822 18:21
m: my $a = 'a'..'z'; my $b = 'c'..'b'; try $a ~~ $b 18:22
camelia ( no output )
IOninja m: use Test; subtest 'z' => { my $a = 'a'..'z'; my $b = 'c'..'b'; try is-deeply $a ~~ $b, False }
camelia rakudo-moar 2b1eb6: OUTPUT« 1..0␤ok 1 - z␤»
IOninja weird. That seems to be the code that produces that weird warning
m: use Test; subtest 'z' => { my @t = ['a'..'z','c'..'b'],; for @t -> ($a, $b) { try is-deeply $a ~~ $b, False } } 18:23
camelia rakudo-moar 2b1eb6: OUTPUT« 1..0␤ok 1 - z␤»
IOninja shrugs
... now fudger hangs on me for some reason :( 18:36
today's not a good day
"skip() was passed a non-integer number of tests. Did you get the arguments backwards or use a non-integer number?" 18:43
Dude, just DWIM -_-
Geth roast: e152a0ff3a | (Zoffix Znet)++ | S03-smartmatch/range-range.t
Add more Range ~~ Range tests

Specs semantics of numeric/string Range smartmatching as discussed at irclog.perlgeek.de/perl6-dev/2017-...i_14064592 and github.com/rakudo/rakudo/pull/1017
For the 4 deleted tests: first three are subsumed by this commit, ... (6 more lines)
18:48
roast: 3688301754 | (Zoffix Znet)++ | S03-smartmatch/range-range.t
Add a couple more Range ~~ Cool tests

Re-adds test added[^1] and removed today[^2]
  [1] github.com/perl6/roast/commit/99d22dcc8e
  [2] github.com/perl6/roast/commit/e152a0ff3a
19:07
rakudo/precomp-singleprocess-resurrection: 37771fe46a | (Arne Skjærholt)++ | src/core/CompUnit/PrecompilationRepository.pm
Initial sketch of precompilation in a single process.

Unfortunately this doesn't quite work yet, as a circular dependency chain is falsely detected when precompiling the NativeCall libraries.
20:30
rakudo/precomp-singleprocess-resurrection: 46a8d55851 | (Arne Skjærholt)++ | src/core/CompUnit/PrecompilationRepository.pm
HLL::Compiler.evalfiles is more appropriate than command_eval.

The latter does exception handling and calls exit(1) if an exception is caught. Using evalfiles lets the exception propagate into the module loader, which lets us handle exceptions during precomp.
Currently it'll just propagate into the same error handler a level up, but this avoids weird exception behaviour in the future, should we want to handle some exceptions.
timotimo oh, arnsholt 20:36
why does it seem to me to come out of nowhere, even though he's spoken in the irclog
Geth rakudo/nom: 8477f3b6b0 | (Zoffix Znet)++ | src/core/Range.pm
Implement proper Range ~~ Range smartmatching

Implements comparison semantics as discussed on
  github.com/rakudo/rakudo/pull/1017 and
  irclog.perlgeek.de/perl6-dev/2017-...i_14064592
  - Use string comparators if RHS range is strigny
... (8 more lines)
20:38
roast: 314b43dba3 | (Zoffix Znet)++ | S03-smartmatch/range-range.t
Unfudge and fix Range ~~ Range tests

All fixes are to incorrect tests that were all added today and
  are not paret of 6.c-errata.
nine timotimo: because it was me who resurrected his branch 20:42
timotimo oh! 20:48
nine I still haven't given up the dream of in-process precompilation. And it'd be a shame if his branch was completely forgotten. 20:49
timotimo mhm
arnsholt Wait, what? 21:03
Aren't those commits mega-old?
I mean, I'm flattered and all, but I haven't worked on that stuff in *ages*
(Been thinking about it, on and off, but that's not actually *doing* anything) 21:04
Oh, there's a -resurrection
So those commits should really have nine++ not me =) 21:05
nine: Anyways, last time I did anything on that stuff there was shenanigans
IIRC, some internal compiler data structures weren't completely reset when we invoked the compiler again, which screwed things up 21:06
When I tried to do something about more recently, the kabooms that had been there were gone
Not sure if it's due to the compiler things being properly reset now, or just happenstance
RabidGravy arnsholt, could you take a look at github.com/arnsholt/Net-ZMQ at some point? 21:08
or rather github.com/arnsholt/Net-ZMQ/pull/9
arnsholt RabidGravy: I'll try to remember to give it a whirl tomorrow night! 21:10
Soon bedtime here now, I'm afraid
RabidGravy no worries 21:12
Geth nqp: 3dc2cad8b0 | (Zoffix Znet)++ | tools/build/MOAR_REVISION
Bump MoarVM

Brings in:
  github.com/MoarVM/MoarVM/compare/2...2-gd10ba49
d10ba49 Merge pull request #526 from zoffixznet/fix-abs-n fd7300d Fix abs_n op for negative zeros ... (6 more lines)
21:54
¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...2-gd10ba49
IOninja I frequently (I think it's the same file) see flappers in t/spec/S11-modules/nested.t 22:04
jnthn Not had that...seen some in my recent await-nonblocking additions though :(
Geth rakudo/nom: f85978b25e | (Zoffix Znet)++ | tools/build/NQP_REVISION
Bump NQP

Brings NQP changes:
  github.com/perl6/nqp/compare/2017....6-g3dc2cad
3dc2cad Bump MoarVM 4e7eee0 Fix typos in POD ... (15 more lines)
22:08
¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....6-g3dc2cad
roast: b8f3dca63b | (Zoffix Znet)++ | S32-num/negative-zero.t
Test abs works on negative zero

Rakudo fix: github.com/rakudo/rakudo/commit/f85978b25e NQP fix: github.com/perl6/nqp/commit/3dc2cad8b0 MoarVM fix: github.com/MoarVM/MoarVM/commit/d1...20afad1884
22:11
dogbert17 jnthn: did an experiment, changing the last line of is_full_collect to 'return percent_growth >= MVM_GC_GEN2_THRESHOLD_PERCENT || promoted > some fixed value;' solved my problems with HARNESS_TYPE=6 TEST_JOBS=2 and running htmlify.p6 on my machine. 22:14
it's a super kludge ifc 22:15
s/ifc/ofc/
Geth nqp: 12be161966 | timo++ | docs/ops.markdown
explain nqp::atposref_* ops
22:20