« first day (1012 days earlier)      last day (763 days later) » 
00:00 - 15:0015:00 - 00:00

00:05
Shouldn't be too hard, but what are we going to use property testing on?
All the elements require the normal "does the output equal the expected value" sort of testing right?
@lyxal (also, why did you think I'd hate the idea of property testing?)
Because I feel like half of version 3 development has somewhat been "hey I found this cool library/framework" of "what about this idea that completely breaks a lot of things" and then you figuring out how to handle them
Which I feel like might be a bit unfair on you
@lyxal Gonna have to disagree there
I have not figured out how to do symbolic stuff, and the only breaking idea you had that I can remember is the modifiers that couldn't be parsed normally, which you figured out yourself with the new non-parser-combinator parser
I think for the Sympy replacements, we could just do approximations with numeric methods for most of them and call it a day
I just realized I've never used anything but the most basic of unit tests before
I should try out integration tests and different styles of tests (property tests like you suggested, for one)
Exhibit a: "hey can you create a prototype of how vyxal as scala would work?" VyxalS. Exhibit b: "hey look at this cool parsing library let's make that work for all sorts of non-combinatorial structures" a pretty good attempt at making things like structure closing work. Exhibit c: "hey I'm gonna rewrite the docs for a lot of things in v3" you go ahead and graciously write a lot more detail than I had
Also, there's all the tiny little style changes you suggest on my horrible scala + all the times I have scala questions you answer them
Thanks for all the praise lol
@lyxal You mistake my intent there - I make those little changes not because I want to help you learn, but because I am a pedant and an idiom nazi and I want to show my superiority to people :P
@user you misunderstand, I feel like I've somewhat forced you to be the expert for all our scala needs.
00:15
To be honest, I kinda feel bad for pushing you to use Scala for v3, because it seems like moving from Python to a less mainstream language (and a compiled one, at that) is going to make it harder for people to contribute
Ginger even said they'd probably step away once v3 hit
@user ah but you see you didn't push at all
Moving away from python was always going to happen
Wait really?
Oct 21, 2021 at 9:56, by Bubbler
Speed cannot be improved unless y'all move away from Python
Because of speed, being dynamically typed, or something else?
Ah
We're using scala because when I asked "what compiled languages exist that make lazy evaluation nice" you suggested it
And even then, I experimented with Golang before settling on scala
00:18
Damn, should've suggested Haskell
Would've gotten major points for bringing more people into the FP cult
@lyxal TIL that has lazy evaluation
@user I wouldn't have gone for Haskell though :p
@user it doesn't
Oh
That's why it's not being used :p
I liked how go has simple packaging, but holy hell it's painful for what we want to do
@lyxal But you will, eventually. The FP side is too tempting...
@user the restrictive type system, however, isn't :p
00:20
Nim would've been cool, somewhat close to Python in terms of syntax, extremely flexible syntax, chock full of features. Just somewhat buggy and not that well supported
Scala is great for this. It's really good with lists and stuff and I really appreciate the dynamic typing feel
+ it can compile to js
@lyxal fwiw, there are a few dynamically typed FP langs like Elixir
Yeah it tries to fuse OOP and FP and mostly succeeds
@user but then that makes us look like 05ab1e :p
Nothing wrong with that
osabie is one of the greats
@user vyxal is basically already 05ab1e with only a few extra features. I don't need any more reasons for comparison :p
00:22
@user I'll use this
@user I want to change that :p (s/is/was)
Are you planning to dethrone 05AB1E? :o
Always been the plan
And it's kinda already happened
@user eh, I might just rewrite the entirety of v2 so that I don't have an aneurysm every time I look at the 7.5k line elements file
like seriously what were yall THINKING with that
Or kidnap all the contributors, make them give you access to the osabie repo, and then make the language useless?
00:25
Sep 27, 2022 at 1:49, by lyxal
in The Nineteenth Byte, 1 min ago, by Seggan
Jelly:                                    2100
Vyxal:                                    2077
05AB1E:                                   2009
Fig:                                      1992
SOGL V0.12:                               1963
Gaia:                                     1955
Neim:                                     1923
Ohm v2:                                   1918
gs2:                                      1912
Pyke:                                     1910
Oasis:                                    1905
@Ginger Yeah aneurisms are bad for you
Sep 27, 2022 at 1:49, by lyxal
In your face 05AB1E
@user ooh I could do that too :p
Always make sure you have aneurysms instead
@Ginger Okay, in our defense, we did try to split it up into multiple files
It didn't really work
@user you gotta wait two minutes before you say this stuff :p (also for some reason Edge's spellcheck didn't say that was wrong, which is weird because it's usually pretty good about that stuff)
00:25
We did put some stuff in helpers.py though
@Ginger just be glad it isn't in one file like it used to be
Any fellow 🔥🔥 of 2021 veterans remember why exactly splitting into several different files didn't take?
Hell yeah I do :p
I'll be honest: It's better to have one 8000 line file than two 4000 line ones
What happened? Recursive imports or something?
00:27
Trying to turn something that relied on global into multiple files
@Ginger It's better to have one 4000 line file than two 8000 line ones
I'd rather have randomgarbage.py than randomgarbage.py and randomgarbagehelpers.py
Yeah well my editor rather wouldn't
@user It's better to have zero files at all and a burrito than one 4000 line file
It was literally impossible to do anything back when everything was in elements.py
00:28
skill issue
Now it's figuratively impossible to do anything
@user basically, everything operated on global variables and things that were defined once at the top of the single file and used everywhere.
oh yeah, that
why did you do it that way
Why else do you think the context class exists? :p
@Ginger jelly
why not just do eval(code, vyxal.elements.__dict__)
which is still bad but a marked improvement
00:30
Over what?
You're going to hate me for this, but now that we don't have global variables, what if we...tried splitting everything up again...haha, just kidding...unless...?
@user we could give it a go I guess
No, no go. Only Python and Scala please.
I'll do it (once I finish Crosshatch)
@user It'd just be renaming things and changing namespaces
00:31
It depends on whether v3 will be done soon enough ig
@lyxal Cool
@lyxal wait, how much of a speedup are we talking here? (from switching to Scala)
Just look up "java vs python speed"
just because Pyxal is slow right now doesn't mean it has to be
@Ginger the speed up that inherently comes from moving away from interpreted languages
Not as fast as Myxal (I think) but fast enough that less things will time out
switch to PyPy? Google says it's nearly a 100x speedup
00:33
We do have to keep in mind that Vyxal v2 transpiles to Python, which does JIT and all that fancy stuff, while we're interpreting Vyxal ourselves in v3. That said, Vyxal is a simple enough language that it shouldn't matter
@Ginger o.O
yeah lol
Pypy is only good if pythonanywhere supports it
@lyxal host on Radvylf's server!
And have thousands of dead links? No thank you
redirect!
00:35
Hmm, I guess that'd work
wait hold please
Or at least ATO
I'm getting some major disagreements about how much faster it is
@Ginger what also comes up as an issue each time this is suggested is that we lose control over the online site
The JVM is almost certainly still significantly faster than PyPy though
00:36
okay so lemme just temper yalls expectations
PyPy is faster... if you write your code well
Duh
it's very, very fast with certain kinds of things, but not so much with others
@Ginger so, it won't work for us
@Ginger What kinds of things?
researching...
@Ginger anything can be fast if you write things it's optimised for :p
00:38
Oh, CPython doesn't have JIT
okay so after further analysis PyPy is probably not the solution to our problem
sadge
In that case, one thing to keep in mind is that most Vyxal programs end pretty quickly and won't give PyPy time to warm up
exactly
basically it works well for long-running stuff (for example it's REALLY good at raytracing, it's like 40x faster than CPython) but not short things like Vyxal
@Ginger ᴵ'ᵐ ˢᵉᶜʳᵉᵗˡʸ ʰᵃᵖᵖʸ
@user no, you're user
00:39
ᴵ ʷᵃⁿᵗ ᵘˢ ᵗᵒ ᵘˢᵉ ˢᶜᵃˡᵃ
@Ginger That's what you think. But my secret identity is happy
I don't want to learn a new language just to work on this project with yall!
:(
I promise it's a cool language worth learning
It really is
00:40
yeah sure, but most people don't know it
And it's not that different from most mainstream languages, syntax-wise
It's not like Haskell or whatever
lol
@Ginger I was skeptical about it at first too, but now I love it.
actually, how different is it from Java? bc I know Java (for some value of know)
It's pretty similar to Java if you write it that way
Some Scala code can look very different from Java, but we're not doing that
00:41
you got any code for me to look at?
Yeah, gimme a sec
@Ginger not very. It's just a bit nicer. I managed to learn it from java
It is a JVM language after all
^
If you know Kotlin, Scala is a little less Java-like than that (Kotlin is sorta Scala Lite)
00:43
@user alright, first impressions are that 1. this looks a bit weird but 2. this code is SO MUCH CLEANER THAN V2
You'll get over the weirdness :)
The main differences are to do with how objects can be created
There's more flexibility in scala
I will happily learn Scala if it means that the project has that code style
@Ginger it does :)
And there won't be any more bugs with elements returning generators instead of LazyLists and general typechecking stuff
00:44
^
alright, I'll add that to my todo list!
but first: Crosshatch
It's wonderful - it handles all the iterator stuff for us
@Ginger The elements look like this
(actually now that I'm looking at it Crosshatch will be wayyyyy better in v3)
@user :O
I will pay you all I have (approximately $1, give or take a dollar) if you implement the v3 repl
00:46
not really sure how you'll get me that dollar, but sure I'll do it
The lexer is only 175 lines long, most of which is token type declarations
@Ginger @lyxal Psst, ˢᵉᵉᵐˢ ʷᵉ ʰᵃᵛᵉ ᵃ ⁿᵉʷ ᶜᵒⁿᵛᵉʳᵗ ᶠᵒʳ ᵒᵘʳ ᶜᵘˡᵗ
one thing at a time tho, v2 ain't dead yet :p
Compared to the 189 lines of python which is not mostly token type declarations
@user 😎
@Ginger When I said give or take a dollar, I meant take. I'm broke.
00:46
@user We aren't a cult though. That's jelly
@user sure, I'll take your dollar :p
lol
in The Nineteenth Byte, Jan 2 at 16:33, by caird coinheringaahing
Vyxal: Corporation
Jelly: Religion
Pyth: Mafia
Rust: Cult
JS: Therapy
See, we're a corporation :p
ᵈᶦᵈ ʸᵒᵘ ˢᵉᵉ ʷʰᵃᵗ ʳᵃᵈᵛʸˡᶠ ʲᵘˢᵗ ˢᵉⁿᵗ ᶦⁿ ᵀᴺᴮˀ ˡᵉᵗ'ˢ ᵖˡᵃᶜᵉ ᵃ ˢⁿᶦᵖᵉʳ ᵇᶦᵈ ᵃⁿᵈ ˢᵗᵉᵃˡ ᵗʰᵉ ᴿᴬᴹ ᶠʳᵒᵐ ʰᶦᵐ
Missed opportunity to call Rust a Cargo cult
@Ginger I have no idea what someone could want with that much RAMm
00:48
@user lmao
pxeger says ATO manages with 2GB of RAM
Or is it GiB? idk which is which
gigglebytes
quick yall before v3 gets too far along sort all the source files into folders
    case Left(error) =>
        println(s"Error while executing $code: $error")
        ???
lmao, what does ??? do
if (somethingWentWrong):
    print("whoopsies")
    idfk
??? is the equivalent of pass in python I think
that's great
wow, scala even has NotImplementedError :b
given fnCtx: Context =
  Context.makeFnCtx(origCtx, ctx, contextVarM, contextVarN, params, inputs)
the heck does given do
Oh you'll like this: it makes it so that you don't need to pass it as an explicit parameter
00:54
whaaaaat?
also what's Right and Left?
It's an assumed parameter for all functions in that file that take a context (the given thing)
@Ginger it's to do with things that can return null and errors I think
You'd need to ask user for more details
so as in "that's Right" and "I have no sanity Left"?
Typically speaking, left means there's an error, right means there's a normal value returned
@lyxal am confused
2
Q: Scala: Either, Right, Left

Tim JosephI am new to Scala and currently trying to work with the play framework. This is working code I wrote: def authenticate = Action (BodyParsers.parse.json) { req => req.body.validate[AuthenticationForm].map {form => UserRepository.findByCredentials(form).map { user => user....

It's for when things can be a union type
01:10
@Ginger If you know Rust, it's like Result
Here's the docs on it
Suppose you want to write a parser to parse a file. If it succeeds, you want to get an AST object representing the parsed code. If it fails, you want to get a string containing an error message. That's where Either comes in. Your parser can return an Either[String, AST], so that if it succeeds in parsing, it returns a Right containing the AST, and if it fails, it returns a Left containing the error message
Unlike Python, Scala can't really use the same variable for AST and String, so Either is used for that. You can make a variable val x: Any that can hold ASTs and Strings, but it can also hold anything else, so you lose the type safety (Scala 3 does have union types but because of erasure on the JVM, you can't check whether, say, a value of type List[String] | List[Int] is a list of strings or ints at runtime)
@Ginger wdym? Like separate folders for list stuff, number stuff, etc.?
01:31
@lyxal If you like smoky bendy tongs, you're going to love this
Oh.
Now that is really unfortunately named :p
That's like the root of why I make the slowly boil tweezers jokes
Mentally misreading it as what one might usually expand your link as :p
Poor Chris
Maybe it really is a great tool, but he should've named it something else
Too true
 
1 hour later…
02:59
@user exceptions go brr
03:13
Throwing and catching exceptions can be expensive
Also, Scala doesn't have checked exceptions
In terms of performance? You're only throwing one at a time
Eithers can be nicely mapped and stuff
@emanresuA Okay yeah, for Vyxal parsing there's only one
But in general, you don't want to throw exceptions all the time
Eithers are more convenient to handle too. Being able to map them is more convenient than try-catch
Came here to say that Mill can link JS but man, it is poorly documented
03:27
Exceptions are a lot more convenient when there are multiple kinds of errors you could get and you don't want to have an Either[ERror1, Either[Error2, ...]
Mainly a style thing, I guess
03:40
Wait mill only officially supports Unix?
Oh yeah right wsl
Forgot that exists
The script they provide is written in sh
But Mill itself runs on the JVM, and millw does support Windows
idk why millw is a third-party thing, but apparently they're planning on making it official
Lyxal approved on PR #1563 (Vyxal/Vyxal): "lgtm. Should be interesting to see if mill gets better support."
> Using millw is recommended.
oh
I think it'd be cool if millw was called windmill
03:57
ahah
Ooh
It'd just be a little long, but maybe the command itself could be called wmill or something
What do y'all think about supporting two build systems, one slightly annoying to use but with better docs and support, and the other easy to use but with poorer docs? Worth the effort to see if the second one gets better eventually?
:+1: but before merging I have some questions on how to use mill
Shoot
When I run .\mill fastLinkJS, it just opens the build script in firefox
is that supposed to happen?
Uhhh
No
04:01
I've installed millw and executed it
Try just mill fastLinkJS maybe?
and powershell complains when I just use mill that it doesn't exist
Oh
PS C:Documents\vyxal> mill fastLinkJS
mill : The term 'mill' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the
name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ mill fastLinkJS
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (mill:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: The command mill was not found, but does exist in the current location. Windows PowerShell does not load commands from the current 
do I need to restart my computer first.
Possibly?
04:03
see you in a bit :p
Wait no
You could also just put millw.bat in Vyxal and add it to git
Too late
It's restarting
So that other Windows users can also use it
rip
Can I have an f in the chat for lyxal
He will be remembered
Well at least I didn't get any prompts to get win 11
He has risen again!
Does it work now?
04:04
I wouldn't know
I'm waiting for discord to stop being silly
Oh you're on your phone
And computer now
Still complains mill doesn't exist
:(
still opens the build script as a text file in ff
I guess you could just do this then
@lyxal That's really weird, I'm surprised it does anything at all
04:07
hey wait am I supposed to move the file named millw somewhere first?
I think you'd need to rename millw.bat to mill.bat
did that
does mill.bat need to be in the vyxal dir?
Yeah, in the same directory as the other mill script
oh
that makes it work
\o/
04:09
PS C:Documents\vyxal> .\mill fastLinkJS
←[34mCompiling C:Documents\vyxal\build.sc←[39m
←[31mCannot resolve fastLinkJS. Try `mill resolve _` to see what's available.←[39m
dang
Oh yeah it's js.fastLinkJS
Since fastLinkJS is only a task for the js module
./mill jvm.assembly and ./mill fastLinkJS seem to work, and when you open index.html in your browser and open up the console, you should be able to run Vyxal.execute.
what's that then?
Err
@lyxal I totally never typed that, see?
lol
Anyhow it's doing something now
Oop
It's errored
f
What's the error?
04:12
One second
It's a pretty big one
huh
seems to not recognise any of the files
Huh
Let me try to run it on my computer again, maybe I didn't run it after making my last changes
Silly me, I forgot the importance of hygiene
ah of course
that'll do it to you
hate it when that happens
tell me when you're back from washing your hands
04:27
Okay, changed the way the modules work a little based on Upickle's build.sc
are your hands thoroughly clean?
lol yeah
good.
I forgot to do ./mill clean after changing build.sc and running js.fastLinkJS again, so I didn't realize it'd stopped working
Lemme know if it works for you now
it does
just successfully compiled
04:28
\o/
If you open the index.html in your browser and go to the console, can you run Vyxal.execute()?
looks like it
Awesome
Time to merge, then?
just curious what are the args to the function?
Right now, it's just the code and the inputs (as a single string)
I just made a minimal thing to test if it even ran at all
Vyxal.execute("1 1+", "")
2
merge time
ysthakur merged PR #1563 (Vyxal/Vyxal) (Vyxal:v3-mill → Vyxal:version-3): Mill support for v3
ysthakur deleted branch Vyxal/v3-mill
I'm also working on a wrapper to allow running sbt commands directly instead of going into its shell, just so we'll have another option later
Next thing I'll be working on is more tests for things + consistent test structures
👍
 
2 hours later…
06:16
I've got loop inside lambda and need recursive call lambda from the loop.
But in this code λ...[...| x]..; "x" means continue loop. How to make lambda call in that place? Thank you!
07:06
Also, is anyone else's code timing out on weekgolf? Mine takes >2 seconds on the interpreter.
TKirishima isn't active, so I don't know what to do
@lesobrod you'd have to place the lambda in the register and call the register function inside the lambda
x inside loops and lambdas is something that's been bothering me for a while in regards to nesting
I'm thinking of making x just recursion and adding a miscellaneous digraph for continue
Same with break and return
@lyxal Thanks, i'll try. Well better introduce different symbols for recursion and break
07:29
Continue tbh isn't particularly useful
 
2 hours later…
09:20
+1
Btw, it turns out sbt can be run without the shell, you just need to use the --client option. I just wasted like 5 hours trying to make my own sbt client when it's existed this whole time
You can just do sbt --client compile or whatever without dropping into the shell
Kinda verbose but easily aliased
So what does that mean for using mill?
I guess mill has a much smaller advantage now
Are the benefits of using mill over stinking brown turds negated by having a shell?
Yeah that was the main thing
Oh
09:24
Mill will let you use a nicer project structure and is supposedly less complex, but the current level of nesting isn't that bad and we don't care if sbt is more complex since it's got way more documentation and we're not doing anything advanced
So...we probably won't need mill :(
What's the directory structure like with mill?
Also I'm reading that mill is somewhat faster than syringed baby toys
I've noticed that stock background trash is slow at doing a lot of things, a speed up would be nice
Plus, we could be all hip by using a lesser known tool - reject traditional tools and be radical :p
09:46
@lyxal pretty much anything you want it to be
plus you won't have to worry about running out of ways to say small bowel transplant
5
@Ginger Left is the type on the left and Right is the type on the right :P
@lyxal I’ll admit i am tempted by less mainstream things but schadenfreude bringing trains have tons of questions on SO so it’s better for beginners
scala presumably got this from haskell where having the error type on the left is an actual matter of increased utility, since types curry
If someone has to do debugging at some point, mill might be harder to do that with
@UnrelatedString oh i always wondered why it was backwards
Itd be nicer to have it be left biased in scala
Steve's beige train is a bit more battle-tested
09:51
...also just gave me the worst idea
oh no
But yeah we should probably just use several belated tanks
10:19
@UnrelatedString is it the same idea to sandbox a challenge based on acronym expansions like we're doing?
it's uncurried Either
which doesn't seem to be possible
DatatypeContexts, considered a misfeature for good reason, seems not to also provide for somehow unpacking MultiParamTypeClasses
@UnrelatedString do explain
haskell fuckery
like in haskell, if your value's an int and your error's a string that's Either String Int
but what i attempted to create was a type UncurriedEither that would express that as UncurriedEither (String, Int)
So trying to reduce a list of types by union?
10:45
a more specific case of that i suppose
11:13
0
A: Sandbox for Proposed Challenges

lyxalSalacious Bacon Tripod code-golfrandomstring In a certain chatroom, we like making acronym jokes about the build tool we use called sbt. While it usually stands for "Scala Build Tool", we aim to come up with all sorts of meanings, such as: Stupid Brick Teeth Sussy Baka Training Shady Blue Touris...

I have immortalised the meme :p
11:53
@emanresuA LIES!
I use continue all the time
@user kinda
12:10
@lyxal Lyxal’s casually promoting the vyxal chatroom.
13:09
@mathcat didja get the list regex working? :p
13:45
I am in school rn lol
 
1 hour later…
14:58
So.
It seems that week.golf can't handle map-lambdas.
Anything involving mapping lambdas is timing out.
00:00 - 15:0015:00 - 00:00

« first day (1012 days earlier)      last day (763 days later) »