🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
00:00
reportable6 left
00:02
reportable6 joined
00:21
cacci left
|
|||
leont | I'm observing that «raku -e 'unit sub MAIN(:$foo);' --foo» gives warnings from rakudo's own argument handling (as in of the binary, not the Raku level argument handling). I'm pretty sure it didn't use to do that (but I don't have an old rakudo laying around) | 01:01 | |
Oh, it's more fascinating than that. It works as I expect when there's a space between -e and its argument, but breaks if there isn't. That has got to be a bug. | 01:05 | ||
lucs | <docs.raku.org/language/modules.html> mentions: | 01:12 | |
"ï½¢requireï½£ loads a compunit and imports definite symbols at runtime." | 01:13 | ||
What are "definite symbols"? | |||
guifa_ | probably should read "defined symbols", as in the symbols defined as exported by the module | ||
actually, "exported symbols" is probably even better | |||
lucs | I guess that would make sense. | 01:14 | |
I wonder how sentences like that get produced... | |||
guifa_ | probably by people whose native language isn't English | ||
definite and definite are fairly close in meaning | |||
err | |||
defined and definite | |||
lucs | Right. | 01:15 | |
01:15
zebzzw joined
|
|||
lucs | But even "defined" doesn't seem to convey what is meant. | 01:15 | |
guifa_ | defined in the sense of "defined by the module" (which is different from being defined in the assigned context) | ||
hooray for English ambiguity lol | 01:16 | ||
01:17
clsn_ left
01:25
initrd joined
|
|||
lucs | Welp, after a bunch of tests, 'require Foo;' appears to be unable to import anything, no matter how they are declared in Foo.rakumod. | 01:43 | |
I hope I'm just missing something. | 01:44 | ||
guifa_ | So if my memory serves me correctly, `require Foo` might only give you access to `our` scoped variables | ||
rather than exported | 01:45 | ||
via Foo::whatever | |||
in other words, the docs are really poorly worded | |||
lucs | Was about to say... :) | 01:46 | |
Which is sad, because hey, they're the docs. | |||
guifa_ | Tbh, require isn't used very often | 01:50 | |
most people just use, well, use | |||
lucs | I understand, but still, LTA. | 01:51 | |
01:51
razetime joined
|
|||
lucs | If I understood it more, I'd offer a pull request, but right now, the best I can do is raise and issue that would basically say "That doc doesn't work.", and that's not very helpful. | 01:52 | |
*an | |||
guifa_ | just put in an issue instead | 01:53 | |
lucs | (I'm not even able to work out a correct "our" usage to make an export work.) | 01:54 | |
guifa_ | seriously, that's hugely helpful, anytime a doc isn't clear, that's something that needs to be fixed | ||
so in theory with our | |||
it should be | |||
module Foo { our $foo = 42); | |||
then later | |||
require Foo; say $Foo::foo; | |||
or | |||
say Foo::<$foo> | 01:55 | ||
guifa_ is saying this from memory so don't quote him | |||
lucs | I was trying with class Foo {our method foo {say "FOO"} , and later sa | ||
Dammit, pressed return before finishing editing, please disregard. | 01:56 | ||
Your example works. | 01:58 | ||
guifa_ | - | ||
if I can ask, is there any reason you're using require instead of use? | 01:59 | ||
lucs | For help with development: given a foo.raku, I want to either 'require FooVersionOne' or '...VersionTwo' for example, based on some condition. | 02:00 | |
It's not intended to be in released code. | 02:01 | ||
There are othe ways to do this of course, but I wanted to try with 'require'. | 02:02 | ||
02:04
cacci joined
|
|||
guifa_ | yeah I think the run-time loading of symbols is a little tricky, because at compile time it can't be sure what's available | 02:05 | |
so you have to indirect references | |||
in the docs that's mentioned as | |||
::("Foo::EXPORT::exportpackage::symbol_name") | 02:06 | ||
lucs | Ah, I see that, right. | ||
guifa_ | (indirects are always resolved at runtime, which is needed because `requries` is a runtime thing) | 02:07 | |
lucs | I seem to remember it was easier in Perl, where 'use' was kind of like 'require', then 'import'. | ||
(Perl was easier, but a lot less powerful, there is that :-) ) | 02:08 | ||
guifa_ | I think the general idea is that MOST of the time you just want to use, well, `use` | ||
lucs | That is certainly my experience. | 02:09 | |
guifa_ | Raku really pushes hard the idea of torturing the developer to benefit the user | 02:10 | |
optional importing is definitely a module developer level thing -- an end user should know what modules they have and just install accordingly | |||
lucs | Hehe! I like that, even though I'm not much of a masochist. | ||
guifa_ | I definitely take it to the extreme in my modules. I like to make it so they ultimately export a single sub or two, and make the end user completely unaware of all the stuff going on in the background | 02:11 | |
lucs | I totally agree. The interface to a module should be as simple as possible. | 02:17 | |
And if there are many features, good defaults should cover the most frequent usages. | 02:18 | ||
(reported the doc issue) | 02:27 | ||
guifa_ | Right now I'm working on an international number formatter | 02:29 | |
99% of users will just use `format-number $number` | |||
but I do have an advanced interface for power users who need extra control, by way the more traditional `number-formatter(%options)`, that produces a callable | 02:30 | ||
lucs | I know there are comma vs period delimiter differences, but I don't know of others. | 02:31 | |
Will be interesting to see. | |||
guifa_ | ha there's a lot | ||
what symbols are used for digits (01234, versus eastern arabic, versus a bunch of other systems) | |||
lucs | I'm sure there are. I've been confronted to my ignorance often enough to expect unexpected stuff a lot :) | 02:32 | |
guifa_ | how large numbers are separated (e.g. English in most countries uses 123,456,789; but in India, it's 1,234,567,89) | ||
02:33
initrd left
|
|||
guifa_ | and I think some places do 1,2345,6789 because their systems are based on myriads | 02:33 | |
guifa_ is afk | 02:38 | ||
lucs | (crazier than I'd ever have thought) | 02:41 | |
03:10
cacci left
03:17
rf left
03:25
razetime left
04:00
razetime joined
04:34
razetime1 joined
04:36
razetime left,
razetime1 is now known as razetime
05:21
razetime1 joined
05:22
razetime left,
razetime1 is now known as razetime
05:51
razetime1 joined,
razetime left,
razetime1 is now known as razetime
05:52
razetime left
05:54
nort joined
05:55
razetime joined
06:00
reportable6 left
06:01
razetime left
06:02
reportable6 joined
06:35
abraxxa joined
06:49
tea3po left,
tea3po joined
06:50
japhb left
06:55
Sgeo left
06:57
japhb joined
07:07
tea3po left,
tea3po joined
07:33
jpn joined
07:48
jpn left
08:05
jpn joined
08:15
jpn left
08:57
dakkar joined
09:22
jpn joined
09:33
jpn left
09:35
jpn joined
10:17
cacci joined
|
|||
Nemokosch | Yesterday, I messed around with RakuConfig and string serialization overall, because of the syntax highlighter | 11:06 | |
Today, it paid off: there is a Template6 issue I can finally take up on. | |||
11:12
peder left
11:17
sena_kun joined
|
|||
Geth | Raku-Steering-Council/main: 89250c6fa4 | (Elizabeth Mattijsen)++ | minutes/20230318.md Add minutes of 18 March 2023 meeting |
11:18 | |
11:26
peder joined
11:42
peder left
|
|||
lizmat | and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2023/03/20/2023-12-priced-2/ | 11:43 | |
11:45
peder joined
12:00
reportable6 left
12:02
reportable6 joined
12:23
mtj left
|
|||
Nemokosch | the docs say: "Heredocs include the newline from before the terminator." | 12:34 | |
lizmat | and they do? | 12:35 | |
Nemokosch | what if I don't want that newline to be added? do I just chomp it or is there a more official way? | ||
lizmat | chomp is what I always use | 12:37 | |
q:to/FOO/.chomp | |||
or .chop | 12:38 | ||
Nemokosch | hm okay, .chomp will do I suppose. It's not the worst thing to happen that something can be solved from code, without entering yet another tricky escape situation | 12:44 | |
lizmat | if you're worried about speed, .chop is quicker I think, but .chomp more conveys meaning | 12:45 | |
13:12
kolibrie joined
|
|||
kolibrie | I have a program that I intend to run for days or weeks at a time, but it is being killed by the OS after a day or so, I think because it is using up too much memory (growing over time). I would like to be able to debug the memory leak and find out where it is happening, so I can fix it. What tools, modules, or procedures do you recommend for | 13:23 | |
tracking down a memory leak? The program itself is short, but uses a multitude of modules, some of which are custom built for this program, and some that are open source. What seems ideal to me would be to have a list of which objects exist, with snapshots of that over time, so I can see which objects are growing in number, and which are staying | |||
relatively stable. Or maybe there is something better. What do you recommend? | |||
13:33
jgaz joined
13:38
rf joined
|
|||
lizmat | kolibrie perhaps commaide.com/features 's features wrt to running and debugging could be of help ? | 13:39 | |
you would need the paid version for the profiler though | |||
rf | Morning folks | 13:41 | |
lizmat | rf o/ | ||
13:42
peder left
|
|||
Anton Antonov | @rf "Humming-Bird is a very unopinionated web framework." -- Yeah, right. | 13:44 | |
rf | :^) it's just functions | ||
13:44
peder joined
|
|||
Anton Antonov | @rf Sure. Basically that is a popular excuse to be lazy and not make the necessary functionalities that facilitate rapid development. | 13:45 | |
jast | can't have everything :) | 13:46 | |
Anton Antonov | In other words -- opinionated frameworks are more useful. | ||
jast | (I have no familiarity with Humming-Bird but more generally you can't check all the boxes in *any* project) | ||
depends on what you want | |||
things designed for rapid development can have downsides for more complex / more mature projects | |||
Anton Antonov | @jast Not everything, just the most common, popular, or useful. | ||
rf | I disagree. I made Humming-Bird so that people could structure, design, and create systems that make sense to them | ||
I don't want to impose a strict guideline on how to build systems, rather, I'd prefer to give them the tools to do so | 13:47 | ||
jast | I do like unopinionated projects, and a subset of opinionated ones | ||
Anton Antonov | @rf I get it. (Still sounds like excuse for laziness.) | ||
jast | of course some things do suffer from being unopinionated, too | 13:48 | |
Anton Antonov | @rf Generally speaking, documenting other approaches might be useful. | ||
@rf It looks like that blog post refers to two, right? (Or is it just one.) | 13:49 | ||
rf | The only opinions Humming-Bird has is that your routes type Request, Response -> Response and I prefer it that way. If I wanted an opinionated framework I would have used Cro | ||
jast | the straightforward way to make something unopionated more friendly for rapid development is to layer an optional, more opinionated thing on top of it | ||
and whether that's up to the original maintainer or other people... well, matter of opinion :) | 13:50 | ||
kolibrie | lizmat Thanks for your recommendation. Looking at a summary of what the comma profiler reports on, I'm not sure how that would help me. Have you used it for tracking down memory leaks? | ||
Anton Antonov | @rf I have only heard (or remembered) leont making statements like that. (Including Cro.) | ||
jast | looking at other languages there's a huge market for very unopinionated web frameworks that are mostly "just functions" | 13:51 | |
lizmat | kolibrie: no, I'm stockholm syndromed to vim :-) | ||
jast | come to the dark side (emacs + evil-mode) :-) | ||
Anton Antonov | Amsterdam syndromed too. | 13:52 | |
leont | Anton Antonov: what did I say? | ||
lizmat | well, I was born in Amsterdam, so that's hard to forget :-) | ||
Anton Antonov | @leont 🙂 Hi! | ||
@leont "The distance to Cro matters." (For Raku projects.) | |||
kolibrie | @lizmat I'm also a vim user. | 13:53 | |
leont was also born in Amsterdam and a vim user 😛 | |||
Anton Antonov | @lizmat You might have seen this : "They say I have been in Amsterdam, but I don't remember..." | ||
jast | I've been to Amsterdam and I used to use vim pretty much exclusively | ||
so you're basically past me | 13:54 | ||
lizmat | Anton Antonov then you must have had a good time :-) | ||
Anton Antonov | So, my speculation is that lizmat tries other non-vi(m) editors, but remembers/recalls only vi(m) the next day. | ||
lizmat | :-) | 13:55 | |
Anton Antonov | @lizmat Just in passing to a conference in Egmond aan Zee. | 13:56 | |
rf | Anton another thing is, I think web-development should be fun too. I find it's a lot more enjoyable to work on less-opinionated frameworks. | 13:58 | |
14:00
kolibrie left
|
|||
Nemokosch | The problem with opinionated framework is that you learn something that you don't even know if you need, or why you need it | 14:02 | |
Anton Antonov | @rf I get it. I am saying that you should/could demonstrate that the framework is non-opinionated by building different, opinionated solutions with it. Ideally, for the same problem (but that might be boring.) | ||
Nemokosch | which breaks down especially badly if there are more meaningful approaches | ||
14:02
kolibrie joined
|
|||
rf | I write a lot of Spring-Boot for my job, it's super duper opinionated, I hate it. Mainly because the ideas don't cross-over to other languages or frameworks. That's one thing I wanted to avoid as well. | 14:04 | |
14:10
sena_kun left
14:15
kolibrie left
|
|||
jast | somewhat unrelated: I'm working on designing (not implementing yet :-)) a somewhat opinionated (non-Raku) web framework where data is virtually always operated on in RAM without fetches from disk/network, but still allowing Web Scaleâ„¢. It's... complicated. :-) | 14:20 | |
currently researching ways to achieve fast reads on distributed consensus based top-level metadata without breaking the current design. fun stuff. | 14:21 | ||
El_Che | jast: everything in RAM, mm. When I think about springboot I think of our containerized apps that use 2-4 gig RAM to do less that out Go apps do with 20-40 mb :) | 14:23 | |
jast | the goal was to do it in a language that doesn't treat RAM like candy :-) | ||
El_Che | jast: so the "adding everything in RAM" sound weird because I thought maybe they were already doing that | ||
:) | |||
*sound | 14:24 | ||
jast | the thing they're doing is probably slightly different, it's a complicated technology called "bloat" | ||
El_Che | they are good at it | ||
:) | |||
jast | I was planning to give the application code the illusion that all the data it needs is always available in RAM, except in certain cases where it needs to work on data dependencies involving billions of objects | 14:25 | |
El_Che | talking about bload Java-based Keycloak moved from wildfly/jboss to quarkus and now it uses 1/4 of the ram as before in my usedcase (a busy oidc provider) | ||
jast | and in well-defined cases all of the data needed for an operation *is* actually in RAM so you get free linearization of operations and ultra fast write throughput | 14:26 | |
14:26
Sgeo joined
|
|||
jast | I like thinking about weird stuff like this :)\ | 14:26 | |
El_Che | well, if ram behaviour is known before hand, there is no problem. Lost of people wouldn't mind adding ram for lots of speed | ||
however, web scalable == expenisve | 14:27 | ||
jast | as keeping everything in RAM (even across many machines) gets too expensive, the application can transition towards having some of its data use more traditional access patterns where async fetches will be necessary | ||
El_Che | you'll get blog post on how X moved from Ruby to Go/Rust/Whatever and now uses 50x less RAM :) | 14:28 | |
jast | which gives you the best of both worlds | ||
assuming I can make it work............ | |||
small "if" :) | |||
El_Che | so caching, essentially? | ||
jast | that's more of an afterthought | ||
the cornerpoint of distributing the dataset is being confident that you know which node has primary authority over each bit of data | 14:29 | ||
getting that and having it be both fast and 100% robust is... non-trivial | |||
El_Che | that's a hard problem | ||
jast | so I think there'll be a way to specify that certain data can be eventually consistent using simple conflict resolution rules | ||
for instance, submitting a log entry to the wrong node by accident is healable, log entries (ideally) don't depend on each other so it can be inserted in the right place later on without violating the semantic integrity of the log | 14:30 | ||
(assuming that it's fine for log entries to show up slightly delayed) | 14:31 | ||
El_Che | isn't that what mongodb is trying? | ||
jast | have I mentioned that distributed computing is super fun, and impossibly difficult? | ||
but really the key of what I'm doing is to make it possible to control which guarantees you need for which of your application data, and have simple code initially which you can extend to deal with more difficult distribution requirements over time | 14:32 | ||
mongodb is more of a "this is what you get for all your data, take it or leave it" and personally I wouldn't trust it with anything important :) | |||
14:33
cacci left
14:37
rypervenche joined,
cacci joined
|
|||
El_Che | haha | 14:42 | |
[Coke] | We're using it for a large internal project, so far so good | 14:58 | |
exp | for what purpose [Coke]? | 15:03 | |
Anton Antonov | @Coke What? A you referring to: (1) a Raku package (e.g. "Humming-Bird"), (2) Raku in general, or (3) MongoDB? | ||
exp | jast: i'm very sceptical about the proposition that "log entries ideally don't depend on each other" | 15:05 | |
jast | I mean obviously it depends on the exact thing you're using a log for | 15:10 | |
but time series data often has a lot of data independence as long as there's an eventual clear ordering of events | 15:11 | ||
for instance, recording a series of measurements, if you send in a measurement out of order the other measurements don't suffer as a result, and if the measurement arrives in the correct spot before you actually do anything with the measurements, it doesn't matter | 15:14 | ||
going back to MongoDB, I suspect that in the presence of network congestion or partitions there can be stale reads. stale reads are really hard to prevent without significantly affecting read throughput | 15:15 | ||
[Coke] | 1/2/3 - 3. MongoDB. I use Raku for lots of automation, tooling, but it's not part of our main app | 15:20 | |
tonyo | . | ||
Anton Antonov | @Coke -- good to know. | 15:21 | |
There are at least a dozen of Raku packages for doing Artificial Intelligence (AI) and Machine Learning (ML). I consider making some likely and unlikely combinations of them. What would be a good namespace for those? Here are few names I consider: "AI::Fusion", "ACME::AI::Blending" , "ACME::AI::MushUp" . | 15:24 | ||
perryprog | ... there's ML stuff for Raku? That is a surprise. | 15:25 | |
Anton Antonov | I think "AI::Fusion" might be misleading -- seen as referring to a concrete AI contraption. | ||
@perryprog Are you joking, provocative, or you really do not know? 🙂 | 15:26 | ||
dakkar | (very tangential: it's usually "mash up", not much "must up"; also traditionally it's spelled `Acme` not `ACME`; then again, it's just names) | ||
perryprog | I really didn't know! | ||
dakkar | (and of course I typo that… ☹) | ||
Anton Antonov | @perryprog Here is reference: raku.land/?q=ML . | ||
perryprog | But I'm also still in the mindset of assuming no-one uses Raku in production for some reason. | 15:27 | |
... hopefully that makes sense and isn't as cynical as I think it is | 15:28 | ||
Nemokosch | yeah, go figure lol | ||
Anton Antonov | @perryprog Yeah, I use DSLs like raku.land/zef:antononcube/DSL::Eng...yWorkflows to help production. But that is not directly in production... | ||
perryprog | That counts! | ||
I would count "in production" as "used on a preferably non-solo team for non-personal reasons". I think that definition works. | 15:29 | ||
El_Che | perryprog: you underestimate the non-solo team in big places | 15:30 | |
Anton Antonov | I am currently trying to convince a certain company to use Raku in production. (Again, for natural DSL-related projects.) | ||
perryprog | I said "non-solo" team because it'd be easy to have a personal workflow that consists of raku scripts being part of a runbook for example (which is basically personal), where Raku was chosen due to you being the sole member, and not the product of a group decision on how to architect some system. | 15:31 | |
Anton Antonov | @El_Che ... and non-multi cohorts in small places... | 15:32 | |
perryprog | Since the idea behind "in production" is really that "people agree that this thing is good to use in a professional environment, with dynamic groups of people working on the project the thing is being used for" | ||
Anton Antonov | I am solo Raku programmer in that company, but I there are at least a few consumers of the Raku-mande functionalities (via Cro and Docker.) | 15:33 | |
15:33
buffet left
|
|||
Nemokosch | this definition also rules out a lot of consulting, pretty much | 15:34 | |
Anton Antonov | My motivation for implementing Raku ML packages initially was mostly to support my DSLs. | 15:35 | |
15:35
buffet joined
|
|||
rf | In production means its accessible to stake-holders and customers imo | 15:36 | |
Anton Antonov | * ... "Raku-made" above, not "Raku-mande"... | ||
perryprog | As an example, I'm reminded of the classic Hacker Scripts. I wouldn't count whatever language these were written in to be used "in production", in most contexts. github.com/NARKOZ/hacker-scripts#readme | ||
Nemokosch, disagree speaking from personal experience. | 15:37 | ||
(albeit limited) | |||
rf | If when you use my product, Raku code is even touched, it's in production. | ||
perryprog | also we should get raku added to that repo | ||
rf, but what about Raku used in build automation? (CI/CD) | 15:38 | ||
Anton Antonov | @rf Then this is Raku-product then : antononcube.shinyapps.io/DSL-evaluations/ . | ||
rf | perryprog: Sure, CI/CD is part of a production pipeline therfor it is part of production | 15:39 | |
perryprog | But that's not always accessible to stake-holders and customers, right? | ||
rf | The stake-holders are the developers | ||
perryprog | Oh | ||
rf | the customers are the developers, anaylysts, etc | ||
perryprog | neeeeeeeevermind | ||
Anton Antonov | @rf Is this a Raku-production: pypi.org/project/DSLTranslation/ ? (For access of a Raku Cro service within Python sessions.) | 15:40 | |
rf | Probably? | ||
Anton Antonov | @rf For me to claim "production level" effort means extensive documentation. (Also, often related demo-movies.) | 15:42 | |
15:42
mtj joined
|
|||
Nemokosch | I don't know. It seems a bit bizarre to say it's not production if, for example, others don't have to know that the tool you created for a particular problem, is written in Raku | 15:43 | |
It would make more sense for the outcome to matter. | |||
rf | Anton: Documentation has nothing to do with something being used in production. Look at most internal libraries, they're typically not documented at all but still used extensively | 15:45 | |
If you want people to adopt your library documentation is important, but it is not determanistic of how the software is used | 15:46 | ||
Anton Antonov | To a large extend, my efforts to make Raku "work" with/within Jupyter, Markdown, and Mathematica are for production purposes. My target users are data analysts and data scientists. Hence, transparency of the algorithms and easy to understand usage documentation are essential. | ||
rf | Yeah that makes sense, you're targeting your audience | 15:47 | |
Anton Antonov | @rf "If you want people to adopt your library documentation is important, but it is not determanistic of how the software is used" -- unfortunately that is not true for code generating DSL packages. People are really not paying attention to the results, they just get stuck "why is this working" / "why are showing me this" . | 15:48 | |
[Coke] | another ping: any raku folks attending TPRC in Toronto? | 15:49 | |
Voldenet | I've worked with tons of production-ready software that was massively underdocumented | 15:50 | |
apparently business needs features, not docs. eh | |||
rf | Typically haha | ||
Typically haha | 15:51 | ||
Nemokosch | Anyway, the social aspect is very important, and one part of it is to set the right expectations, rather than falling into the nirvana trap | ||
Anton Antonov | @Coke FWIW I considered the idea to go TPRC this year, and decided not to go. For logistics / time related reasons... | ||
perryprog | Voldenet but it's self documenting!! :P | ||
Voldenet | perryprog: well yes, I can read that disassembly just fine, it's _relatively_ self-documenting :> | 15:52 | |
Nemokosch | we don't know if Raku will ever be rationally (whatever we mean by that) chosen over XYZ super duper popular general purpose language | 15:53 | |
but I'd say that goes for most languages, and there are many popular languages that don't have a "killer feature", or perhaps never even had one | |||
15:53
derpydoo joined
|
|||
Voldenet | Raku was chosen over XYZ many times by now | 15:54 | |
by me at least | 15:55 | ||
You can't exclude people from your statement, otherwise you'd end up with a tautology :) | |||
Anton Antonov | @perryprog "but it's self documenting" -- I know where these kind statements make discussion go. Here is A relevant summary with ML-context flavor: cdn.discordapp.com/attachments/768...nknown.png | ||
Nemokosch | same - whether that was a "rational" choice, is another story 🙂 | ||
perryprog | ... lol | 15:56 | |
not totally fair, but still funny | |||
rf | Do I need performance? C++. Do I need to formally verify? OCaml. Else, Raku. | ||
Anton Antonov | @rf "Do I need to formally verify? OCaml." -- Another non-Mathematica user. (Thinking of non-opinionated-ness.) | 15:58 | |
rf | Coq and OCaml > Mathematica | ||
Nemokosch | from what I can recall, Mathematica was very much "pay to win" software 😆 | 15:59 | |
rf | Yeah, you pay someone else to do it for you | ||
Because its not a very good language :^) | |||
Anton Antonov | @rf "Coq and OCaml > Mathematica" -- Maybe true in some specific, idiosyncratic universe (populated mostly with hummingbirds.) | 16:00 | |
rf | Hahahah | ||
Voldenet | I like TLA+ more than coq | ||
maybe because I use it for distributed concurrency | 16:02 | ||
Anton Antonov | @perryprog -- thanks! | 16:03 | |
[Coke] | .ask tbrowder - why is github.com/tbrowder/Windows-Test/b...6.json.pdf ?? | 16:12 | |
tellable6 | [Coke], I'll pass your message to tbrowder__ | ||
[Coke] | (it looks like it's a META6.json for PDF, not a pdf of the json file) | 16:13 | |
perryprog | rf, what about Julia? :> | 16:23 | |
rf | It's a fine language, just not my cup of tea | 16:24 | |
Anton Antonov | @perryprog Julia is little bit like Obama -- it got an award for just showing up. | 16:27 | |
perryprog | I don't follow. | ||
But personally I'm quite a fan of Julia, I've used it pretty often for a few years now. | |||
Cliche but I suspect it will be a fairly Big Dealâ„¢ in a few years in a lot of environments | 16:28 | ||
Anton Antonov | Since Julia is a Lisp-based -- and so are R and Mathematica -- I do not see Julia worth learning. (If I am not payed to use it.) | ||
rf | I think one benefit of Julia over R is it's very fast but idk if that's important in data land | 16:30 | |
Nemokosch | isn't the "killer feature" of Julia being fast? | ||
perryprog | It's one of them. | 16:31 | |
rf, it very much is | |||
Anton Antonov | @perryprog "I don't follow." -- see en.wikipedia.org/wiki/J._H._Wilkin...l_Software . The way I see it, Julia got an award for releasing version 1.0. Nothing about Julia is that new or outperforming existing systems. (Mathematica, R, Python, etc...) | ||
perryprog | (Though I'm an outsider to data land, so take that with a grain of salt) | ||
Oh, that's not at all true IMO Anton | |||
Anton Antonov | Of course speed is important in the data land. | 16:32 | |
16:32
derpydoo left
|
|||
It has to be balanced -- again, of course -- with easy-ness of computation specifications. | 16:32 | ||
16:32
cacci left
|
|||
R is way too arcane in that regard. (Because it was made statisticians.) But the ecosystem of packages by RStudio makes R much more useful. | 16:33 | ||
Voldenet | Julia is nice, because you can even replace core types | 16:34 | |
perryprog | There's a lot of excellent stuff Julia does in a way that makes it uniquely well suited for a lot of tasks. It has a quite good dynamic type system, it has multiple dispatch (which is super, super, super awesome), great C and python interop (among other things), amazing support for distributed computing, as well as threading and coroutines, extremely good handling of typecasting between different number types... | 16:35 | |
Voldenet | the worst part is that "you can replcae core types" | ||
perryprog | lol | ||
Voldenet | now, imagine amount of combinations you can produce with it | 16:36 | |
and debugging all of it | |||
rf | I wonder how outlandish it would be to run Raku on Beam | ||
perryprog | multiple dispatch also lends itself extremely well to interop between different packages. There's a Measurements package which provides a generic Measurement which wraps a numerical value, letting you say 1.0 ± 0.1. | ||
Anton Antonov | @perryprog In the Rraku DSL Data Wrangling package I mentioned above I show code generation for Julia. In those experiments -- 1-2 years ago -- Julia was always slower than R and Python. (But I was comparing only CSV file ingestion and a particular paradigm of data transformations. See Julia's "DataFrames".) | ||
Voldenet | basically this: yuri.is/not-julia/ | 16:37 | |
apparently julialang is too flexible at some points | |||
tbrowder__ | [Coke]: thats correct, i should mv it to a dev subdir | 16:38 | |
perryprog | It then automatically propagates that error according to normal rules, so ((1.0 ± 0.1) * 2)^2 = 4.0 ± 0.8. The way it's implemented also takes advantage of automatic differentiation of functions which basically means any package instantly supports this propagation. (Except for some things that only work with strict Float64 :P) | ||
tellable6 | 2023-03-20T16:12:28Z #raku <[Coke]> tbrowder - why is github.com/tbrowder/Windows-Test/b...6.json.pdf ?? | ||
perryprog | Anton, are you including the JIT compilation cost? While it's fair to sometimes include it in some benchmarks, it's worth noting there's now ways to minimize it. | 16:39 | |
Voldenet | in fact for large things non-flexible languages are better | ||
Anton Antonov | @perryprog Below WL == Mathematica 1. "It has a quite good dynamic type system" -- so does WL. 2. "it has multiple dispatch (which is super, super, super awesome)," -- so does WL 3. "great C and python interop (among other things)" - so does WL 4. "amazing support for distributed computing" -- so does WL 5. "as well as threading and coroutines" -- cannot comment now... 6. "extremely good handling of typecasting between different | ||
number types..." -- so does WL | |||
perryprog | Voldenet, while Yuri has some good points in that now-infamous article, there have since been like eight hundred responses to that essay on why some stuff they say isn't totally fair. | 16:40 | |
Nemokosch | Voldenet: enter Go xD | ||
perryprog | Anton, WL is icky!! | ||
checkmate freedom hater | |||
Anton Antonov | Now, these "responses" of mine are just to support my claim that Julia does not bring something particularly new. | ||
perryprog | Totally fair | ||
Anton Antonov | @perryprog Your attitude is something Stephen Wolfram does not understand. | 16:41 | |
perryprog | lol | ||
Nemokosch | Stephen 'Sigma' Wolfram | ||
Anton Antonov | Julia is not different -- it really feels "same family" language if you know LISP, Mathematica, (or R). | 16:42 | |
perryprog | Don't get me wrong, WL is genuinely incredible, but I don't think it's ethical to rely on closed source algorithms or implementations in academic research. You're locking your methodology behind a paywall. | ||
Voldenet | Nemokosch: well yes, golang is awfully simple and non-abstract, it's nice for doing things | ||
tellable6 | Voldenet, I'll pass your message to Nemokosch | ||
[Coke] | tbrowder__: my recommendation would be to rename it to meta6-pdf.json - the last extension should be the type. | ||
Voldenet | but at some point you start hating how non-generic and inelegant it is, it feels too simple | 16:43 | |
Anton Antonov | @perryprog Simply not true. Wolfram Engine is free for developers -- you get it using an email. | ||
Nemokosch | it's almost like you are biased towards the Wolfram system, Anton | ||
:DD | |||
perryprog | The algorithms are still closed source and proprietary! | ||
Anton Antonov | WL has first class documentation -- I do not know any other system for mathematical computations with better documentation. | ||
perryprog | Oh that's 100% true | 16:44 | |
It's absurdly good | |||
Like, it's unfair how good it is | |||
rf | octave.org/ | ||
Nemokosch | by the way, I only read like the first two paragraphs of that "why I can't recommend Julia anymore" and like... do y'all not realize that it could be literally written about Raku? | ||
rf | It could also be written about 95% of languages | 16:45 | |
Nemokosch | too many tricky interactions, impossible to prove anything on the most superficial level | ||
perryprog | Anton, perhaps I should've been clearer: I view the closed source implementation bit as a much bigger detail than WL being paywalled (in some cases, in some cases like you said it's free). | ||
Nemokosch | from the OCaml nihilist's perspective, maybe | ||
Anton Antonov | @perryprog "The algorithms are still closed source and proprietary!" -- 1) So? 2) Not entirely true, many of the complicated algorithms have published WL-written prototypes. 3) Especially, for ML algorithms -- they are verifiable (in a variety of ways.) | 16:46 | |
Nemokosch | but this is something Raku does particularly bad at, thanks to the Perl heritage | ||
rf | I can use dependent typing | ||
perryprog | "To reproduce our results just run this black box that we created with these inputs" | ||
rf | It is semi-provable | ||
Nemokosch | the control flow is crazy though | 16:47 | |
(and the type system is stuck in the "weird flex" position - that I really wouldn't call "production ready" at all) | |||
perryprog | I just don't think it's in the spirit of academic research to have the algorithms (among other details) that some research was done using to be just as open as the results of the research. | 16:48 | |
Anton Antonov | @perryprog I am somewhat biased toward WL (as @Nemokosch was readily kind enough to mention above.) | ||
perryprog | That's totally fine, no worries | ||
It'd be like omitting the "Procedure" section saying "To reproduce the results, hire one of of our lab employees who will perform the test in our lab with no witnesses and will send you the results" | 16:49 | ||
(And these analogies aren't totally fair, I'm just using them to illustrate where I'm coming from—they aren't meant to be the basis of my points.) | |||
Anton Antonov | @perryprog I am / was a Mathematica power user. So, the WL-community is somewhat surprised I am spending so much time with Raku. (BTW, that includes Stephen.) | 16:50 | |
perryprog | Lol | ||
Stephen is a very interesting guy. | |||
His personality is... something. | 16:51 | ||
Anton Antonov | Absolutely! Some of the most insightful comments about computing I have heard from him. | ||
perryprog | Heh. I meant that in the slightly negative connotation. | 16:52 | |
I don't agree with a lot of his views. | |||
Anton Antonov | It is just academia for reason decided to "hate" Stephen. (And understand why, but I also understand why he finds that surprising.) | ||
perryprog | I mean, the reason he finds that surprising is part of the reason for that hate, I think. | 16:53 | |
rf | The only person I know who uses WL besides anton is Xah Lee, and he is pretty crazy | ||
tonyo | stephen diehl ? | ||
perryprog | Stephen Wolfram | 16:54 | |
Anton Antonov | @perryprog I know. 🙂 That is why I produce and compare same computational workflows in different systems. Mathematica often wins, and in many cases is just decisively better. | ||
perryprog | But he's very, very, very self-centered on his work. This isn't necessarily a bad thing but it makes a lot of his discussions end up going from a normal topic (like PL theory) to "oh here's how WL does that" and then a giant tangent about WL and how great it is. | ||
I really just can't get by the fact that it's closed source. To me that's a fundamental reason to never use it for anything that's not intended only for yourself. | 16:55 | ||
Anton Antonov | @rf You realize, I might mention idiosyncratic, hummingbird universes, again, right! | ||
perryprog | oh goodness | 16:56 | |
Anton Antonov | @perryprog "But he's very, very, very self-centered on his work." -- One of my friends summarized Mathematica as "made for brilliant physicists." | 16:57 | |
perryprog | s/brilliant physicists/SW | ||
Anton Antonov | Fine -- I am just saying there are other people thinking in those lines. | ||
Nemokosch | so Mr Wolfram is a physicist I guess? xD | ||
perryprog | You aren't good at Mathematica. You're good at temporary emulating a fraction of Stephen Wolfram's mindset. —Joseph-Louis Lagrange | 16:58 | |
Oh I'm just being facetious, sorry | |||
Nemokosch | Lagrange xdd | ||
perryprog | Also, correct me if I'm wrong, but isn't Mathematica only fast for... /some/ things, but way slower for any task that isn't just normal numerical analysis? Like, isn't it slow in the areas outside of the parts that have fine-tuned optimized compiled implementations? | 16:59 | |
Anton Antonov | I need to go to a meeting -- I will tell more about Julia's mandelbrot-ness later. | ||
Nemokosch | The French are historically outstanding at claiming people who would have never been French in a less imperialistic world | ||
perryprog | Anton hasn't responded, therefore I wasn't wrong, and therefore WL is slow. | 17:01 | |
I win. | |||
Also very relevant: blog.wolfram.com/2019/04/02/why-wo...n-reasons/ | 17:03 | ||
Anton Antonov | @perryprog "[...] normal numerical analysis" -- symbolic mathematics of WL is fast. | ||
perryprog | Oh, that too yeah | ||
I mean stuff outside of like. Math stuff. | |||
Anton Antonov | Like what? 🙂 | 17:04 | |
perryprog | Not-math stuff. | ||
perryprog hides | |||
Anton Antonov | It is complicated to answer this -- of course there are some "preferred" areas. | 17:05 | |
@perryfrog "Not-math stuff." -- For example, let us take image processing. Is this math stuff or not? | 17:06 | ||
I would say Mathematica's image processing is great -- again I do not know any other system that it is better. | 17:07 | ||
tonyo | perryprog: what in the actual crap is this list | 17:08 | |
Anton Antonov | @tonyo Hahaha | ||
tonyo | everyone knows FOSS repos have no direction or hierarchies, it's just absolute chaos on the git hub!!!! | 17:09 | |
meanwhile i'm rewriting a bunch of stuff i lost in fez because the vm corrupted itself | 17:10 | ||
rf | I love FOSS anarchy | 17:20 | |
Anton Antonov | @rf Yes, lots of fuss-ing humbugs. | 17:29 | |
tbrowder__ | yeah, sounds good | 17:33 | |
Anton Antonov | @trbrowder__ Interesting "Date::*" mnodules. | ||
17:39
dakkar left
|
|||
rf | Hmm, I don't think I necessarily understand the whole "Unwinds the whole stack" thing when it comes to the LEAVE phaser | 17:50 | |
I thought unwinding the stack was mostly a thing with exceptions | 17:52 | ||
17:55
ab5tract joined
|
|||
Nemokosch | well, exceptions are caught by another phaser | 18:00 | |
I guess the principles are shared | |||
18:00
reportable6 left
|
|||
rf | I guess it is possible to have memory problems if LEAVE is called after the call-stack pops the block | 18:00 | |
Maybe that's why | |||
18:01
reportable6 joined
|
|||
Nemokosch | the latest Template6 version just doesn't want to show up on raku.land | 18:01 | |
even though it is installable | 18:02 | ||
rf | raku.land has a update timer iirc | 18:03 | |
Just give it a few minutes | |||
Nemokosch | the thing is, I uploaded 3 hours ago 😅 | ||
rf | oof | ||
Nemokosch | and the site is built "3 mins ago" | ||
tonyo | m: try { CATCH { default { $_.ⅆ } }; my $p = Proc::Async.new('curl5', '--version'); await $p.start; }; | 18:06 | |
camelia | X::OS+{X::Await::Died}.new(await-backtrace => Backtrace.new, os-error => "Failed to spawn process curl5: no such file or directory (error code -2)") | ||
tonyo | i think this documentation may be wrong, docs.raku.org/type/Proc::Async#method_start | 18:08 | |
rf | m: try { CATCH { default { $_.ⅆ } }; my $p = Proc::Async.new('curl5', '--version'); try sink await $p.start; }; | 18:10 | |
camelia | ( no output ) | ||
rf | m: try { CATCH { default { $_.ⅆ } }; my $p = Proc::Async.new('echo', 'foo'); $p.start.tap({ .say }); }; | 18:11 | |
camelia | foo X::Method::NotFound.new(invocant => Promise.new(scheduler => ThreadPoolScheduler.new(uncaught_handler => Callable), status => PromiseStatus::Kept), method => "tap", typename => "Promise", private => Bool::False, addendum => Any, in-class-call =>… |
||
tonyo | locally i get Unhandled exception in code scheduled on thread 4 | ||
Failed to spawn process curl: no such file or directory (error code -2) | |||
and i have curl in my path | |||
m: try { CATCH { default { $_.ⅆ } }; my $p = Proc::Async.new('curl5', '--version'); sink await $p.start; }; | 18:12 | ||
camelia | X::OS+{X::Await::Died}.new(await-backtrace => Backtrace.new, os-error => "Failed to spawn process curl5: no such file or directory (error code -2)") | ||
tonyo | m: try { CATCH { default { $_.ⅆ $_.resume; die 'dead' } }; my $p = Proc::Async.new('curl5', '--version'); sink await $p.start; }; | ||
camelia | X::OS+{X::Await::Died}.new(await-backtrace => Backtrace.new, os-error => "Failed to spawn process curl5: no such file or directory (error code -2)") Too late to resume this exception in block at <tmp> line 1 in any at <tmp> line 1 in b… |
||
rf | m: my $p = shell 'echo foo'; $p.say; | ||
camelia | foo Proc.new(in => IO::Pipe, out => IO::Pipe, err => IO::Pipe, exitcode => 0, signal => 0, pid => 12763, command => ("echo foo",)) |
||
perryprog | tonyo, that list is one of the reasons I don't like WL for ideological reasons. It's closed source because they want $$. | 18:13 | |
rf | Why the try catch? | ||
At the start | |||
perryprog | The second reason being I don't think implementation details in academic research should be closed source. | ||
tonyo | perryprog: that list is a thinly veiled attempt at guarding revenue under the guise of "it's for your benefit" | 18:14 | |
perryprog | Aye. | ||
tonyo | academia has mostly skated the implications of covid..if their intentions were really altruistic then the videos, lectures, etc would be made available to anyone interested since covid kind of forced them to figure out how to digitalize their content. seems like the wrong kind of non-news | 18:16 | |
rf: makes little difference, i still get the code 4 | 18:17 | ||
perryprog | Anton, image processing is mathy stuff. I'm thinking of things that Mathematica isn't really designed for. It's not a very good point ("Programming language X is bad at the things X wasn't designed for!")—I'm thinking about things like what you'd more often see in commercial environments like high scale web apps/APIs, or high performance tools that aren't pure number crunching. (Say, parsing) | ||
Oh, like Wolfram Alpha. Wolfram Alpha is as slow as poop. | 18:18 | ||
tonyo | rf: i'm trying to make that Proc::Async statement _not_ die whether the command exists or not | 18:23 | |
right now, no matter what i seem to do it responds with Unhandled exception in code scheduled on thread 4 | 18:24 | ||
18:24
jpn left
18:28
jpn joined
|
|||
rf | you need to use try sink | 18:47 | |
I think | |||
m: try { CATCH { default { $_.ⅆ } }; my $p = Proc::Async.new('curl5', '--version'); try sink await $p.start; }; | |||
camelia | ( no output ) | ||
18:50
teatwo joined,
tea3po left,
teatwo left
18:51
teatwo joined
18:53
tea3po joined
18:56
teatwo left
|
|||
ugexe | could probably do like whenever .start(|%_) { .so ?? Promise.new.keep($_) !! Promise.new.break($_) } | 18:57 | |
19:00
jpn left
19:01
ProperNoun left
19:05
jpn joined
19:11
jpn left
19:14
teatwo joined
19:17
tea3po left
|
|||
Anton Antonov | @tonyo Wolfram Research made available for everyone all of the COVID materials, data, simulations, discussions procured and curated by them. (And now @perryprog is going to say "because they $$.") | 19:18 | |
perryprog | because they $$ | 19:19 | |
oops just finished reading your message | |||
19:19
abraxxa left
|
|||
perryprog | google, how do I delete my message in IRC | 19:19 | |
Anton Antonov | 🙂 Aha, as expected. And on cue. | ||
You should ChatGPT | |||
perryprog | Jokes aside, Wolfram Research does a lot of great stuff. | ||
Anton Antonov | You can use "WWW::OpenAI" | ||
perryprog | And to be clear, WL is incredible. | 19:20 | |
It's just a combination of dislike for Stephen Wolfram, the business practices of WR, and primarily the closed sourceness that makes me adverse to WL's use. | 19:21 | ||
Anton Antonov | Here : | 19:23 | |
cdn.discordapp.com/attachments/633...letion.png | |||
perryprog | Awesome so glad ChatGPT added that feature to IRC for me | 19:24 | |
Anton Antonov | @perryprog "[...] high performance tools that aren't pure number crunching. (Say, parsing)" -- I have made a fair amount of parsing in /with Mathematica before I moved to Raku. | 19:25 | |
19:25
ab5tract left
|
|||
perryprog | Oh neat! Okay so I'm probably just wrong regarding that point. | 19:25 | |
Though WA is slow as poop. (And I say that as a paid subscriber for WA Pro.) | 19:26 | ||
Anton Antonov | Actually, Mathematica can be just fine in that regard. It is LISP-descendant, so the usual LISP-paradigm methodologies apply. | ||
Yeah, W|A is something I do not use often. (And I speak as former W|A developer...) | 19:27 | ||
perryprog | Oh wow, you worked for WR? | 19:28 | |
Anton Antonov | Aha, 7-8 years. | 19:29 | |
perryprog | That's pretty neat. | ||
Anton Antonov | @perryprog You can read here some of my thought on the LISP-Mathematica-Raku connection: mathematica.stackexchange.com/a/246565/34008 . | 19:30 | |
perryprog | btw can you hook me up with free mathematical license? Thanks in advance | ||
Looking at your bio... I think I've directly used both NIntegrate and the chemical equation balancer thingy. That's kinda wild. | 19:32 | ||
Anton Antonov | @perryprog "btw can you hook me up with free mathematical license? Thanks in advance" -- 🙂 See here: www.wolfram.com/developer/ | 19:33 | |
perryprog | That doesn't give access to Mathematica! :P | ||
Anton Antonov | As for NIntegerate -- | ||
perryprog | oh. My school gives free access to Mathematica. Hahahaha | 19:34 | |
Anton Antonov | @perryprog "That doesn't give access to Mathematica!" -- Yeah, you have hook it up to Jupyter. | ||
And/or Visual Studio Code. | |||
@perryprog Most of the chemical balancer is available in Raku: raku.land/zef:antononcube/Chemistr...ichiometry | 19:35 | ||
perryprog | Oh that's very cool. I naïvely assumed former employees couldn't do... that, on account of the history WR has with NDAs and research. | 19:36 | |
(aka, CA/ANKoS drama) | 19:37 | ||
Anton Antonov | No, the NDA is not that restrictive. It is in my TODO list to implement NIntegrate in Raku: github.com/antononcube/Raku-Math-NIntegrate . | ||
perryprog | And great Stack Exchange post btw | 19:38 | |
Anton Antonov | @perryprog Thanks! And, yeah, Stephen Wolfram have made fair amount of academia enemies over the years. | 19:39 | |
perryprog | That's putting it lightly | ||
Also not exactly well known for his... workspace environment but that's only heresy so it's less fair to him to argue using that. | 19:40 | ||
lizmat | moritz: is there a semantic difference between rx:s/ \d+ / and rx:s/ \d + / ? | 19:48 | |
19:49
jpn joined
20:10
vrurg_ joined
20:13
vrurg__ joined,
vrurg left
20:16
vrurg_ left
20:52
jpn left
|
|||
moritz | lizmat: uhm, that's the kind of rule I don't remember particularly well | 21:13 | |
I have a raku v2022.02 lying around here whose `--target=ast` claim they differ | |||
seems that it parses \d + as [\d<ws>]+ | 21:14 | ||
21:22
jpn joined
21:28
jpn left
21:30
squashable6 left
21:31
squashable6 joined
21:39
zebzzw left
21:41
jpn joined
21:48
sena_kun joined
22:07
jpn left
|
|||
guifa_ | that's correct | 22:26 | |
That little things get me all the time when I use rules lol | |||
tonyo | try sink await exits badly locally..wondering if it's a single cpu/thread vm i'm running in | 23:03 | |
23:07
evalable6 left,
linkable6 left
23:09
evalable6 joined
23:10
linkable6 joined
|
|||
lizmat | moritz: yeah, working on regexes and RakuAST atm. That's how it parses, but does it have a different semantic? I don't think so? | 23:11 | |
guifa_ | Yeah semantics should be different. Imagine… | 23:15 | |
rx:s/ <word> + / # <-- inserts spaces between each word | 23:16 | ||
rx:s/ $<word>=[<alpha>+] + / # <-- no spaces between alpha, but yes spaces between words | 23:17 | ||
lizmat | m: say "ab cd" ~~ rx:s/ [<alpha>+]+ / | 23:23 | |
camelia | ï½¢ab ï½£ alpha => ï½¢aï½£ alpha => ï½¢bï½£ |
||
lizmat | m: say "ab cd" ~~ rx:s/ [<alpha>+] + / | ||
camelia | ï½¢ab cdï½£ alpha => ï½¢aï½£ alpha => ï½¢bï½£ alpha => ï½¢cï½£ alpha => ï½¢dï½£ |
||
lizmat | ok, gotcha :-) | ||
tonyo | m: my $proc = Proc.new(:command('curl5', '-v'), :out, :err); dd $proc.err.slurp | 23:24 | |
camelia | No such method 'Channel' for invocant of type 'Any' in block <unit> at <tmp> line 1 |
||
tonyo | something is very wrong locally | 23:29 |