#raku


|<   <<<   <<   <   9 July 2021   >   >>   >>>   >|
Search 
Live Today I feel lucky Raw Index Home

§ 00:02 reportable6 left 00:04 reportable6 joined 00:16 Doc_Holliwood left 01:16 greppable6 left, releasable6 left, statisfiable6 left, coverable6 left, squashable6 left, linkable6 left, evalable6 left, quotable6 left, reportable6 left, bisectable6 left, committable6 left, shareable6 left, notable6 left, unicodable6 left, tellable6 left, nativecallable6 left, benchable6 left, sourceable6 left, bloatable6 left, releasable6 joined, shareable6 joined, bisectable6 joined, tellable6 joined 01:17 coverable6 joined, greppable6 joined, evalable6 joined, reportable6 joined, squashable6 joined, sourceable6 joined 01:18 quotable6 joined, linkable6 joined, benchable6 joined, committable6 joined, unicodable6 joined 01:19 nativecallable6 joined, notable6 joined, statisfiable6 joined, bloatable6 joined 02:19 bisectable6 left, linkable6 left, greppable6 left, statisfiable6 left, evalable6 left, releasable6 left, notable6 left, unicodable6 left, benchable6 left, sourceable6 left, tellable6 left, bloatable6 left, reportable6 left, squashable6 left, coverable6 left, quotable6 left, committable6 left, nativecallable6 left, shareable6 left, squashable6 joined, benchable6 joined, bloatable6 joined 02:20 statisfiable6 joined, reportable6 joined, releasable6 joined, greppable6 joined, sourceable6 joined, nativecallable6 joined, committable6 joined 02:21 bisectable6 joined, tellable6 joined, quotable6 joined, notable6 joined 02:22 unicodable6 joined, shareable6 joined, evalable6 joined, coverable6 joined, linkable6 joined 02:36 john joined 03:01 john left 03:06 Eddward_ joined 03:08 Eddward left 04:08 coverable6 left, releasable6 left, evalable6 left, notable6 left, reportable6 left, quotable6 left, shareable6 left, tellable6 left, bloatable6 left, committable6 left, greppable6 left, statisfiable6 left, unicodable6 left, squashable6 left, benchable6 left, nativecallable6 left, bisectable6 left, linkable6 left, sourceable6 left, nativecallable6 joined 04:09 quotable6 joined, benchable6 joined, shareable6 joined, notable6 joined, committable6 joined, statisfiable6 joined, reportable6 joined 04:10 unicodable6 joined, tellable6 joined, releasable6 joined, greppable6 joined, bloatable6 joined, sourceable6 joined, linkable6 joined, coverable6 joined, evalable6 joined 04:11 bisectable6 joined, squashable6 joined 04:51 bd3i left
avuserow §
m:
sub f(@a) {dd @a}; f([:1a, :2b]); f([{:1a, :2b}]);
04:53
camelia §
rakudo-moar 1bd0411c0: OUTPUT: «Array element = [:a(1), :b(2)]␤Array element = [:b(2), :a(1)]␤»
avuserow §
why is my hash getting eaten in the second case? and is there any way to modify `f` so it does not happen?
I know I can add a trailing comma so it works so I'm guessing it's a form of the single argument rule? 04:54
m:
m: sub f(@a) {dd @a}; f([{:1a, :2b},]); # works but easy to forget :(
04:55
camelia §
rakudo-moar 1bd0411c0: OUTPUT: «Array element = [{:a(1), :b(2)},]␤»
§ 05:44 Sgeo left 05:56 RandalSchwartz left 06:01 Doc_Holliwood joined 06:02 reportable6 left 06:04 reportable6 joined 06:25 xerxes joined 06:28 Eddward_ left 06:36 ufobat joined 07:08 holyghost left 07:14 abraxxa left 07:20 Doc_Holliwood left
raydiak §
yes, single-argument rule. the hash is being flattened into the array 07:23
m:
dd [{:1a, :2b}]; dd [{:1a, :2b}.item]
camelia §
rakudo-moar 1bd0411c0: OUTPUT: «Array element = [:b(2), :a(1)]␤Array element = [{:a(1), :b(2)},]␤»
§ 07:27 rhett joined, patrickb joined, rhett left
solitario §
m:
say ("Hello world!");
07:57
camelia §
rakudo-moar 1bd0411c0: OUTPUT: «Hello world!␤»
§ 08:23 xerxes left 09:17 MoC joined 10:12 peder left 10:15 peder joined 10:27 patrickb left 10:33 Doc_Holliwood joined
Altreus §
single-argument rule feels like a gotcha-by-design 11:04
§ 11:10 sono left 11:38 patrickb joined 12:02 reportable6 left 12:05 reportable6 joined
lizmat §
Altreus: you have no idea how much discussion (online and in person) has happened about that in 2015 before the GLR 12:08
§ 12:14 Eddward_ joined 12:15 Manifest0 left
Altreus §
I do not indeed! I have to imagine it wouldn't be a thing if it hadn't been considered better than not having it 12:18
I think it's one of those things where you don't realise how often it does DWIM when you're grumbling that it doesn't 12:19
§ 12:24 Eddward_ left 12:33 phogg left 13:22 patrickb left 13:24 patrickb joined 13:40 RandalSchwartz joined 13:42 phogg joined 13:48 phogg left 13:54 bd3i joined 14:22 Sgeo joined
avuserow §
yeah, I remember the GLR from following IRC. of course, I didn't see the depth of the conversations. 14:26
it's interesting that hashes can flatten. I guess it makes sense since they are iterable
jdv §
"gotcha by design"? 14:36
Altreus §
The amount of debate that must have gone into deciding on this single argument feature suggests that it is the preferred option even though it is going to catch people out quite regularly 14:47
There's no way nobody realised the gotcha potential of this, but it went into the design anyway
liz's comment implies even more debate went into it than I even expected, so there must have been some pretty solid justification given how much of a gotcha it has turned out to be 14:48
§ 15:01 swaggboi left 15:26 Eddward_ joined 15:44 bd3i left
lucs §
What happens with Inline::Perl5 if I later change my version of Perl, making unavailable the one that was active when I installed the module? 15:45
§ 15:49 RandalSchwartz left
gfldex §
lucs: as long as you upgrade, you should be fine 15:58
lucs §
Not sure what you mean by "upgrade". 15:59
tonyo §
he renames his perl lib from perllib5 to perllib6 16:00
lucs §
? 16:01
gfldex §
lucs: Your Perl code will behave the same way then if you would run it in Perl. If the change would work in pure Perl it will work with Inline::Perl5.
lucs §
In other words, Inline::Perl5 uses whatever version of Perl happens to be in the PATH? 16:02
gfldex §
Inline::Perl5 is using the Perl runtime to execute Perl code in Raku.
it's the libperl
lucs §
I see, okay, thanks. 16:03
gfldex: Also, thanks for those cool blog posts :)
gfldex §
you are welcome
Also, you are welcome to blog yourself. :)
lucs §
Nah, I don't have much to say. 16:04
gfldex §
I found that blogging is a great way to advance as a Raku beginner.
I'm advancing since 2008. :)
lucs §
And if anything, there are already way to many blogs, etc., cluttering up google search with beginner answers.
*too many 16:05
jdv §
p6 will never really die;)
tonyo §
perls strategy to never die was to blog that perl is dead
jdv §
the 100 year game 16:06
gfldex §
We advanced beginners get very little feedback from new beginners. It's hard to improve learning material if you can't watch the learners.
tonyo §
https://news.perlfoundation.org/post/wewantyoutosayperlisdead
Altreus §
I like it 16:25
Shame I'm only learning about it several months later
lizmat §
.oO( It's never too late to say that Perl is ... )
16:40
Altreus: re single arg rule 16:41
you want:
for @a { }
to iterate over @a, right ?
you don't want to have to do:
for @a.flat { }
that, in a nutshell, is why there is a single arg rule 16:42
Juerd §
Nothing says "Perl is dead" quite like signatures having had experimental status for 7 years :)
gfldex §
m:
role mean { method make-fun-of-perl {} }; say „Perl is dead.“ ~~ True but mean;
16:45
camelia §
rakudo-moar 5ecc8308f: ( no output )
§ 16:45 Voldenet left
jdv §
Juerd: or maybe the new "core oo system" not doing types. oo sans types - yeah, ok. 16:46
Juerd §
jdv: I don't see how that would say it's dead. If awkward design decisions meant programming languages were dead, that'd be true for basically every single one of them 16:47
Altreus §
lizmat: That seems like the sort of nutshell that contains a very complex nut 16:49
But if it were the choice between this gotcha, and for |@a {}, I'd choose the latter 16:50
lizmat §
well, yeah, that was an option...
gfldex §
The single argument rule doesn't work well for made up example code. In practical code it works rather well.
§ 16:50 Voldenet joined
lizmat §
except that prefix | at the time was not slipping yet 16:51
jdv §
Juerd: i guess its not as strong as your example. to me is hints at it.
gfldex §
m:
sub f($a is raw) {dd $a}; f([:1a, :2b]); f([{:1a, :2b}]);
camelia §
rakudo-moar 5ecc8308f: OUTPUT: «Array element = [:a(1), :b(2)]␤Array element = [:a(1), :b(2)]␤»
Altreus §
Well I don't want to open that can of nuts
lizmat §
for 1..5 { } # should that also need to become: for |1..5 { } ? 16:52
all in all I think the single arg rule is at least consistent 16:53
Altreus §
It's a choice of being more specific in one case, or in another case
lizmat §
and consistency was one of the goals of the GLR, as iteration and flattening before the GLR are were.... interesting
and definitely much harder to teach 16:54
Altreus §
But adding a comma that is astonishing to people not deep into raku, versus adding a piece of syntax that means expand this list...
lizmat §
so yeah, the 1-arg rule may be a gotcha, but it is something that is easily teachable
Altreus §
But it's also easily forgettable, which is why it's a gotcha
You can know it but still not realise you've been got by it
gfldex §
So far, I never hit this gotcha in practical code. 16:55
Altreus §
I'm assuming that the original message that prompted the discussion was the result of practical code
I know that kawaii_ has come across it himself
gfldex §
I use descructure a lot. So I might just dissolve stuff before the one arg rule applies. 16:59
kawaii_ §
I always forget about the 1 arg rule, without fail 17:02
jdv §
i've been tripped up by it multiple times 17:06
but i normally figure it out fast - it is an unfortunate design that's hostile to the drive by user i guess 17:07
Altreus §
I guess it's more obvious when your single argument needed manual destructuring than when it was automatically destructured 17:08
jdv §
if i coded in raku normally i likely wouldn't continue to forget
Altreus §
Potentially true. I'm constantly being put back into the P5 mindset where it's the context that's important 17:09
although I find P5's contexts to be a very elegant concept
lizmat §
fwiw, I find contexts in Perl the ultimate gotcha 17:14
and there are examples of serious issues in production code because of it
tonyo §
what is the "ultimate" gotcha on perl's contexts? 17:16
avuserow §
yeah, my example was simplified for IRC, but was real-world use 17:23
§ 17:23 MoC left
avuserow §
I'm working on a module for generating SQL from data structures (think a simpler version of perl's SQL::Abstract) 17:23
and I thought I had a nice way of representing where clauses: lists, using pairs for equality, and hashes for custom comparison 17:24
so you would be able to write `[{:op<LIKE>, :$foo}]` and get `WHERE foo LIKE ?` with $foo as your bound param
Altreus §
Hmm, then the single-argument rule must be equivalent and it just requires experience in either situation
The only issues I've ever had with context have actually cropped up recently, and frankly you get what you deserve when you expose HTTP status codes to calling code that doesn't need to know 17:25
return ($code, $body) is NOT correct no matter how much you ignore me in code review :P 17:26
(The issue is that people not reading the docs called this in scalar context and accidentally got what they wanted, i.e. $body)
I guess things working by accident is way worse than things breaking by accident 17:27
§ 17:28 Manifest0 joined
tonyo §
avuserow: db::xoos has a sql generator like that - the module was broken with some changes to the meta model six or so months ago 17:29
but that code exists and still works
avuserow §
it looks like it uses hashes for representing where clauses. how does it handle the need for duplicate columns? (e.g. to generate `WHERE a > ? AND a < ?`) 17:36
also I'm not fully able to use an ORM in this application, I need to run raw SQL fairly often. but for simple queries, I'd like to generate my own where clauses. 17:37
Altreus §
Sounds like SQL::Abstract, in which you do and => [ a => { '>', $val }, a => { '<', $val } ] or something similar 17:39
avuserow §
to get reasonable performance on some of my queries, I'm having postgres generate json directly: "SELECT json_agg(data) FROM ($sql) AS data"
Altreus §
i.e. you use an array and override the default behaviour, which is or
also for that you use between :) 17:40
avuserow §
between is not quite the same, it's <= and >=. which does not matter with integers but matters a lot with timestamps 17:41
Altreus §
ah you're right
but yeah if it's like SQL::Abstract it's usually quite simple
I prefer using data structures to represent SQL because SQL is great for humans to write and utter shite for computers 17:42
avuserow §
yeah, I've gotten a lot of mileage out of SQL::Abstract, though some of its stuff is maybe a bit more magic than I want these days
and after reading this (http://blog.kazuhooku.com/2014/07/the-json-sql-injection-vulnerability.html), which I only _kind of_ agree with, I thought I would try my hand at making a less magic representation 17:44
tldr is if you accept JSON from a user, and put it in SQL::Abstract or friends, the user can change your comparison operators, and such
oh, also, by using an array for where clause, the signature of `update` does not have two Hashes in a row (for %set and %where), so I don't forget the ordering any longer 17:49
§ 17:56 ufobat left 18:03 reportable6 left, reportable6 joined 18:05 Eddward_ left 18:10 aolko[m] joined
aolko[m] §
hi, i'm a curious php guy, curiously peeking into raku, feels a little weird 18:10
let's try starting off with:
1. is it possible to define your own keywords or redefine already existing ones?
* hi, i'm a curious php guy, curiously peeking into raku, feels a little weird, have some questions
lizmat §
depends on what you consider a keyword
aolko[m] §
for example `my` 18:11
§ 18:11 notna joined
lizmat §
that would be tricky 18:11
aolko[m] §
i want it to be either `var` or `$`
§ 18:11 notna left
lizmat §
so would this be about changing aspects of Raku, or to create an entirely new language ? 18:12
aolko[m] §
and yes most likely that would require building a separate module for that
§ 18:12 notna joined
aolko[m] §
<lizmat "so would this be about changing "> something in-between the two 18:12
arrays, i feel like, would require the most tricks, since, you know, in php, there's only just arrays, no dicts, no hashes 18:14
gfldex §
aolko[m]: technically yes, but you would have to define a fairly brittle slang and we don't good a nice interface for slangs yet. 18:18
aolko[m] §
well, yes, but i'd rather go for a "toolkit module"
gfldex §
You can stick a slang into a module. 18:19
avuserow §
m:
no strict; $foo = 1; say $foo # `no strict` exists, if you really want it?
camelia §
rakudo-moar 5ecc8308f: OUTPUT: «1␤»
aolko[m] §
unless you can spin a language of raku itself with those fixes as part of stdlib
from*
gfldex §
You can "subclass" the Raku grammar and change it. This subclass is lexically scoped. 18:20
avuserow §
m:
sub postfix:<!>(Int $n) {[*] 1 .. $n}; say 6! # defining a new operator is easy enough, for what it's worth
camelia §
rakudo-moar 5ecc8308f: OUTPUT: «720␤»
aolko[m] §
alright, so i can add to and change, what about "removing the fat"?
gfldex §
If you start removing stuff from the grammar you will have to re-write the compiler. 18:21
aolko[m] §
ouch
won
won't be easy for me
gfldex §
The compiler makes plenty of assumptions about the grammar.
aolko[m] §
can it be modified to be "unbiased"? 18:22
gfldex §
here is an example how far you can stretch a slang: https://raku.land/zef:tony-o/Slang::SQL
But, as I wrote, we don't got nice interfaces for slangs. That may change in the comming years. 18:23
aolko[m] §
it won't really be a slang, rather a mod
gfldex §
In Raku that is the same thing. 18:24
aolko[m] §
🤷‍♂️
(if one can modify the compiler)
Kaiepi §
i tried that once 18:25
m:
use nqp; BEGIN nqp::getcomp('Raku').^mixin: role { }
camelia §
rakudo-moar 5ecc8308f: ( no output )
gfldex §
slangs are hard. You need to know the grammar very well. 18:26
aolko[m] §
it's in java and c 🥲
<gfldex "slangs are hard. You need to kno"> what if instead, uhh, there would be a way to parse my own grammars? 18:27
Kaiepi §
huh, doesn't throw from a precomp context anymore
if memory serves me, at least
bisectable6, use nqp; BEGIN nqp::getcomp('Raku').^mixin: role { } 18:28
bisectable6 §
Kaiepi, Will bisect the whole range automagically because no endpoints were provided, hang tight
Kaiepi, Output on all releases: https://gist.github.com/48d47af045ea3245462c397ce6a5c2c4
Kaiepi, Bisecting by exit code (old=2019.11 new=2020.01). Old exit code: 1
Kaiepi, bisect log: https://gist.github.com/3c4c4d19f5742b7d9a8b049c82deb18f 18:29
Kaiepi, (2020-01-24) https://github.com/rakudo/rakudo/commit/b787095358bcbac4c6326b99e9673e54ef5afd58
Kaiepi, Bisecting by output (old=2017.06 new=2017.07) because on both starting points the exit code is 1
Kaiepi, bisect log: https://gist.github.com/2ffdecf989df871eab47c41d22eec28b
Kaiepi, (2017-07-08) https://github.com/rakudo/rakudo/commit/1a4d94930c581e915a2351049e8ee12246c4c26c
Kaiepi, Bisecting by output (old=2017.05 new=2017.06) because on both starting points the exit code is 1
Kaiepi §
stahp
bisectable6 §
Kaiepi, bisect log: https://gist.github.com/fa3c4ba2ce4de3ba9396c0751c72ad25 18:30
Kaiepi, (2017-06-01) https://github.com/rakudo/rakudo/commit/c81b7a4b1a1f8a5c0d7c96cdd63a763cb5fd2068
Kaiepi, Bisecting by output (old=2016.09 new=2016.10) because on both starting points the exit code is 1
Kaiepi, bisect log: https://gist.github.com/dea4ba5922301455329e48c507c7063e
Kaiepi, (2016-09-27) https://github.com/rakudo/rakudo/commit/222d16b0b94911fdedb06ee6ad817d0f14b9c05c
Kaiepi, ⚠ New output detected, please review the results manually
Kaiepi, Output on all releases and bisected commits: https://gist.github.com/bbb128038b4cbe46200e24cc6fd69b2f
gfldex §
aolko[m]: this might shed some light: https://www.youtube.com/watch?v=lwIXF25KJCo 18:31
Kaiepi §
aolko[m], if you try to modify the compiler, make sure it works when used from another module 18:32
aolko[m] §
i'd go full dog there https://i.kym-cdn.com/entries/icons/original/000/008/342/ihave.jpg 18:33
§ 18:34 john joined 18:36 sono joined
Voldenet §
Same tbh, don't all programmers feel like that? 18:38
§ 18:39 john left
aolko[m] §
no, after all you have languages popping left and right 18:39
as well as frameworks
so, at some capacity they know what they are doing and i'm not
Voldenet §
it's easy to make any framework and language, really - you just fork github code and sed-replace the name to your own one
please don't actually do that, it's a joke 18:40
aolko[m] §
and i meant from scratch
:P
Voldenet §
I wouldn't use scratch programming language, but sure why not :> 18:41
aolko[m] §
and i meant "from zero", using just the vanilla source language :P
gfldex §
At least you will have something to do for the next 10 years. :) 18:42
aolko[m] §
nah, i don't have 10 years, i'm basically looking to replace a crumbling mess that is php7/php8 18:43
Voldenet §
Just read dragon book, it's only 1k pages of specialized jargon
aolko[m] §
therefore the need is hot
i don't do jargon, i do domain-specific knowledge
i.e. "knowledge-for-the-current-task/set-of-tasks only" 18:44
§ 18:45 notna left
Voldenet §
aolko[m]: if you want to just declare your own keywords, perl5 has Keyword::Declare module for this 18:45
aolko[m] §
perl5 is dead, Jim
Voldenet §
no it's not, that's why perl6 renamed into raku 18:46
aolko[m] §
it is dead and will not recieve major updates, and it's not the channel for it
§ 18:47 notna joined
Voldenet §
…perl7 was already announced though… 18:47
aolko[m] §
🤷‍♂️
Kaiepi §
ohhh wait it was $*W i was trying to mess with, not the compiler 18:48
m:
BEGIN $*W.^mixin: role { }
camelia §
rakudo-moar 5ecc8308f: ( no output )
Kaiepi §
and even then, only seems to happen when precomp is involved
could be other ways to shadow it though
aolko[m] §
and there seems to be no way of building a binary iirc 18:49
that [https://youtu.be/lwIXF25KJCo] was rather clumsy and didn't really clear things up 18:54
§ 19:05 john joined 19:11 john left 19:24 john joined 19:36 john left 19:51 john joined 20:23 notna left 20:24 john left 20:27 patrickb left 21:25 Kaiepi left 21:26 Kaiepi joined 21:39 Altai-man joined 21:41 Altai-man left, john joined 21:51 Kaipi joined 21:52 Kaiepi left, john left 22:25 japhb left 22:31 swaggboi joined, japhb joined
SmokeMachine §
.tell avuserow have you taken a look at Red’s SQL generation? Mostly on how it converts Raku’s code into SQL? 22:44
tellable6 §
SmokeMachine, I'll pass your message to avuserow
SmokeMachine §
.tell avuserow it seems more magical than what you want… but maybe it worths taking a look 22:47
tellable6 §
SmokeMachine, I'll pass your message to avuserow
§ 23:06 Eddward_ joined 23:08 RandalSchwartz joined 23:49 Doc_Holliwood left

|<   <<<   <<   <   9 July 2021   >   >>   >>>   >|
Search 
Live Today I feel lucky Raw Index Home