« first day (4428 days earlier)      last day (714 days later) » 
00:00 - 17:0017:00 - 00:00

17:00
I was Jo King
now I'm not
smh did you even take Time Travel 101
@JoKing please confirm
@Ginger they did not teach us about impersonation
they did where I went to school
but anyway
slight issue: the way you've done unresolved and concrete types is, uh, pretty different from how I've done it
specifically unresolved ones
so whenever the parser sees a type, it either converts it directly into a ConcreteType (if its a builtin type), otherwise an UnresolvedType (theres also the dyn and Void types, but those dont matter rn)
hm
okay, I'm doing about half of that already :p
I'm not doing any direct conversion yet
then type type resolver takes that unresolved type and if its fully qualified, searches for it in that dependency
17:03
my literals get parsed as nodes, and then my janky-ass MVP runner system turns them directly into instances of the correct PrimitiveObject subclass
if its not fully qualified, does a quick search
so should I change the parser to parse literals as (my equivalent of) ConcreteType?
then for all fields, etc of unresolved types, it recurses
@Ginger no, just type literals
so like int and such?
ok that makes sense
why are primitive and concrete types different in rabbit?
that shouldnt be legal
17:05
wdym?
my primitive types are just compiler defined subclasses of Object
while you apparently have a distinction between them in ur interpreter?
errrrr
I have a RabbitObject ABC, which all objects are subclasses of
mhm
primitives are subclasses of PrimitiveObject which is a subclass of RabbitObject
PrimitiveObject just provides some functionality for an object representing a value
clarification: the only place my primitives and user defined classes are different is during parsing, where they are automatically resolved. everywhere during type resolution and such they are treated like all other classes
17:07
I don't have classes, but yes that's mostly what I'm doing (I think)
nope
hmm
do you have any other subclasses of RabbitObject?
yes
which ones
17:08
a singleton Nothing object, FunctionDeclaration, and WrappedFunctionDeclaration
no structs yet
well erm PrimitiveObjects should be considered as structs for the purposes of type resolution
wait hol'up lemme back up a bit
I said that wrong, RabbitObject is essentially a struct
actually no, it just is one
how are struct types implemented in the interpreter
they aren't, yet
do that then come back
17:10
MVP remember?
@Seggan well that's what I need help with :b
dont worry about resolution, just get a skeleton struct impl first then come back
struct type impl?
or struct impl?
because I pretty much already have structs in the form of RabbitObject, but I don't have any way to represent their types
because, well, they don't have any yet
@Ginger this
hmmmmmmmmmmmm
okay right
I have an UnresolvedType class, I guess I need a ResolvedType class as well
@Seggan my UnresolvedType has a List of generic parameters (in the form of UnresolvedTypes); is this something that the base Type class should have? (I think yes)
also, do I need to have Unresolved versions of NothingType and NeverType? (I think not)
What's the difference between the two? I've usually seen Nothing and Never as different languages' names for the same thing, akin to Unit vs void
17:22
Nothing is used for functions that, well, return nothing (like Kotlin's Unit); Never is used for functions that never return (like Rust's !)
Ah, got it. Kotlin refers to the latter as Nothing, hence my confusion
Yeah I don't see why you'd need unresolved versions of those
@Ginger no
cool
@Ginger erm idk
that statement is a bit confusing
@Bbrk24 with regards to ur pr comment: those warnings are nothing to worry about; the shadowed functions call the shadowing ones anyway
its kinda required for multiplatform
Yeah I'm aware. I only left the comment because we were explicitly suppressing some warnings but not others
17:31
yeah i fixed that in the commit named Fix weird spacing :P
@Seggan like the type Foo<Bar, Baz> would have a list of UnresolvedTypes for Bar and Baz
yeah
yeah as in do it?
yep
kewl
17:33
TIL that the <title> tag is mandatory in HTML5.
wait what
also @user ima do lazylist as well bc ive done it in kotlin before
@Seggan implementation implemented
17:53
@Seggan I always want to read your name as seċġan
@Bbrk24 it was is read schghan
thats back when the Sʨɠɠan hivemind existed
I see
I regret nothing
now copy rol reread the above
there's a lot of above to reread q:
@Seggan *cough*
18:17
I've been thinking of adding a footer to the Trilangle online interpreter, but I'm not certain what I'd put in it. Presumably at least a link to the interpreter's GitHub repo, but what else?
@Bbrk24 Ooh, Old English? Nice
@Seggan Is ConcreteType used for classes?
huh, Rabbit (currently) has 1.3k lines of code
One library I worked on had more lines of comments than code and whitespace combined
lmao
@Ginger looks like it
Well to be fair, when the entire documentation is in comments in the source, that'll happen
18:35
@Ginger yeah
well, anything thats not dyn, Void, or a function type
hmmmmm
@Ginger Kotlin Magic™
adapting your code to structs is proving to be challenging
@Seggan I'm going to nuke generics as an intrinsic property of types
only structs need 'em
muh associatedtypes
oh boy that caused exciting new issues
18:42
More seriously, what about generic enums?
@Bbrk24 can be added later
update: UnresolvedType has evolved into UnresolvedStructType
My laptop's battery meter disappeared?
@Ginger fine with me
@Ginger uh oh
@Bbrk24 infinite battery life?
Nah, my settings app says I'm on 21%
the meter on the taskbar is gone though
@Seggan all types that can be literally expressed in a program's source are either structs/primitives, nothing, or never, and nothing and never are already resolved
hmm, I forgor about functions and traits
eh screw it I'll do that later™
18:59
okay: trait inheritance
@RydwolfPrograms how should I do trait inheritance, Rust-style supersets or actual inheritance? I like option 2
19:11
@Seggan is the isSubclassOf implementation for Interfaces used anywhere?
also, shouldn't Interface's isAssignableFrom check for if other implements it?
also also, why doesn't FunctionType have a name property?
@Ginger in the isAssignableFrom of ConcreteType
@Ginger oops
@Ginger because... function types dont have names?
whar ?
(String, Int) -> Double where is the name in that?
the super constructor is just passed the toString()
oh right, lambdas
19:47
so i just learned what markov chains are
and they are cool
19:59
IKR?!
Indeed
@Bbrk24 yes, they should (not at my laptop rn)
i forgot that bit
Got it. I'm also not sure how the Taylor series for log works with complex numbers -- I know for reals it only converges in (0, 2)
be warned tho that abs requires a square root i think
and computers do not like square roots
an alternate myself once used a program doing nothing but square roots as a space heater
@Seggan doesn't look like it, it seems to check that other is a ConcreteType first
20:08
Here's a log implementation that I wrote as part of my Aussie++ math library:
THE HARD YAKKA FOR log IS (x) <
    YA RECKON x < 0 ? <
        BAIL NaN;
    > WHATABOUT x == 0 ? <
        BAIL -inf;
    > WHATABOUT x == 1 ? <
        BAIL 0;
    > WHATABOUT !isFinite(x) ? <
        BAIL x;
    > WHATABOUT x > 1 ? <
        BAIL log(x / e) + 1;
    > WHATABOUT ? <
        THE HARD YAKKA FOR sumTerm IS (i) <
            BAIL intPow(1 - x, i) / i;
        >
        BAIL -sum(sumTerm, 1);
    >
>
@Ginger hrm
@DLosc yeah saw that one
@Bbrk24 interesting
it works properly?
seems too simple to be true lol
yeah, I tested it
Only works for real numbers
pow was a bunch of special-case handling followed by BAIL exp(y * log(x));, and then sqrt was pow(x, 0.5)
@Bbrk24 ahh
but were doing complex numbers
Yeah
I think my approach for exp works for complex numbers, but I know that for log it gets more complicated
20:11
@Seggan okay, I have actual type implementations, so now how do I resolve/check them?
read the above
tis what i was talking about
whar ?
https://chat.stackexchange.com/transcript/message/63183677#63183677
https://chat.stackexchange.com/transcript/message/63183687#63183687
https://chat.stackexchange.com/transcript/message/63183689#63183689
https://chat.stackexchange.com/transcript/message/63183699#63183699
aight
private fun exp(x: Complex): Complex {
    val epsilon = newDec("0.000001")
    val zero = newDec("0")
    var diff: Complex
    var result = Complex(zero, zero)
    var i = 0
    var runningFactorial = 1

    do {
        diff = x.power(i) / Complex(runningFactorial.toDec(), zero)
        result += diff
        i += 1
        runningFactorial *= i
    } while (diff.abs() > epsilon)

    return result
}
This should work for exp, right? Even if it's not the most efficient
20:36
idk
i havent done exp
here is the java lib were using
That does look simpler
and here is log
this is actually quite simple, idk why i didnt take a peek
It helps when you already have real-valued exp and log to build off of
very
i dont think i added the expect funs for those yet
once you have exp and log, then you got pow
Option 1: I branch off of your branch and add them. Option 2: you add them once you get back to your computer
Also, did you see my most recent comment?
20:45
no
The Complex.power(Int) is broken
@Bbrk24 i wont be on for another hour or 2, you can add if ya want
@Bbrk24 ouch
ill be working on lazylist anyway
> By this logic, 2i ** 2 is 4i
oops
stupid copilot
i knew i shoulda checked
funny that i did check the Complex.power(Dec) tho :P
While I'm adding these, I might as well add Dec.log() and Dec.exp() too, right? I imagine both of the base libraries implement them already
20:48
going though BigComplexMath, its actually really simple to extend the real valued functions to the complex domain
@Bbrk24 yep
did you happen to add comparison to Complex?
(actually Dec needs it too)
No. I can do that in my branch for Dec, but I don't see how it's well-defined for Complex
CMP: better name for an arbitrary decimal type than Dec? BigDecimal is kinda long and Decimal runs into shadowing issues. Cant name it Float either
@Bbrk24 oh yeah, it isnt
im forgetting my algebra, argh
@Seggan problem: In the JS library, .log() is the base-10 log, and the natural log is .ln(). Do I just have to call it ln rather than log?
nope. actual fun log(): Dec = this.ln()
@Seggan Dek from Greek Deka (ten).
20:54
eh
Dec/Dek and Deque are pronounced the same. Likely won't cause that much confusion in the grand scheme of things but
except we are using Deques as stacks
ah there it is
Why is Dec not /dess/?
my brain pronounces it dek
20:56
@Seggan NSDecimalNumber (not serious)
whats NS for
The NS namespace, like NSObject, NSString, NSNumber...
ouch
(Objective-C didn't have namespaces proper, so you'd put a couple letters on the beginning of all your class names to prevent clashes.)
ouch
20:58
The standard library, and also AppKit, are NS. UIKit is UI. CoreImage is CI. AlamoFire is AF. and so on
im surprised the coders fingers dont hurt
Autocomplete exists :P
@Adám Because when looking at an abbreviation, one tends to pronounce it as written rather than as part of the word it's abbreviating. I'd also pronounce FatRat like the rodent even though it's an abbreviation for "Rational."
@DLosc jiff then?
@Adám That one's ambiguous: you can find words that start with gi- with either pronunciation (e.g. gift vs gist).
21:05
I intuitively pronounce it with a hard G, but I pronounce it with a J when I know it'll annoy someone
Ooh, found a non-computer example: spec /spɛk/, short for "specification"
@Seggan It doesn't seem that you can retroactively conform a type to an interface in Kotlin, meaning Dec can't adopt Comparable
oh yeah...
but you can still make an operator fun compareTo
which will do the same thing
Oh? okay, I'll try that
@DLosc Another non-computer example: zoo /zuː/, short for zoological garden /ˌzəʊə…/
21:13
and then there's char which i've heard as car, care, char (like burn) (I pronounce it as car personally)
not chair though I think
@Adám Ah, indeed
@hyper-neutrino Huh, I say "char" (like burn)
@Adám you pronounce it with a schwa? i do it zoo oh logic...
car
@Seggan sounds like you've back-ported from zoo.
@hyper-neutrino i used to pronounce char (burn), but now i do car
21:15
I say zoh oh logic…
@Adám but zooplankton i pronounce zoh planck tun lol
@DLosc interesting - TBF, of the three I listed I think the one I use might actually make the least logical sense if only by a bit - if you were to pronounce it as just the start of "character" it'd be care and if you just ignore the origin and just pronounce it as usual then it'd be char like burn, car is some weird mix of the hard K from character but the short A from char lmao
> inferred type is Number but Int was expected
then again, why is character's first A long in the first place? english pronounciation doesn't make logical sense either ig :P
@Bbrk24 what are you comparing with
@hyper-neutrino its not long
21:17
@hyper-neutrino You're just pronouncing it the authentic Latin way ;)
@Seggan It is in AmE
its not chayracter
@Seggan The JS library's builtin .comparedTo function returns NaN if either operand is NaN, so it doesn't return an integer
And I think in BrE too right?
@Bbrk24 use signum on it then
21:17
@Seggan oh yeah I forgor what long A was
@Seggan Well that's also a long A, but a long A before an R is still a long A even though you pronounce it differently
character != car-ecter
@RydwolfPrograms no the car A is ä
@Seggan Kotlin's sign function returns a float. Do I just have to call .toInt()
@Bbrk24 yep
Th difference with chayrecter is that the ay ends the syllable and the r is a leading consonant
@Seggan What's ä in this context?
21:19
ah A
oh wait
I've never heard it pronounced that way
This might depend on whether you pronounce merry, marry, and Mary the same or differently
For me "character" starts with a much different sound than "car" or "charcoal"
wait does A have 4 different pronounciations
@RydwolfPrograms same lol i mixed up
IMO the "a" in "character" is just a variant of long A
21:20
my character is a short e
i can write it cherecter
Like, lots of consonants slightly change how nearby vowels are pronounced
why isnt english like russian
That doesn't give every vowel letter a zillion different distinct vowel sounds
i mean, russian has 2 letters just for sh and sch
in russian, mostly 1 letter == 1 sound. 1 vowel == 1.5 sounds. simple
(some vowels have 1, others have 2 sounds
russian also has 2 letters for eh and e
I guarantee you you could find an instance in Russian where there's more than one allophone for a phoneme
Which is just what's going on with character
21:23
yes, but its very rare
It's not some weird English jank
i literally just took a test a week ago where i had to list off two obvious examples
#1, final obstruent devoicing
According to Wikipedia, "Russian vowels are subject to considerable allophony"
not my russian :P
21:23
#2, /e/
@Seggan how about zoölogical garden?
@Adám yeah thats how i pronounce it
exp, log, power, and compareTo are now up
but zooplankton is zoh plankton
@Bbrk24 noice
Heh, welcome to the zoö!
21:25
Rhymes with stoa
no it doesnt
and then there's the whole clusterfuck of either palatalization of velars is allophonic or high front/central vowel quality is allophonic but not both
@DLosc I had a conlang with <z> /st/ so they'd be identical there
Actually probably not because its vowel reduction wasn't as severe as English
@UnrelatedString you mean ний vs ньий?
21:29
*googles furiously*
mhm
does english prohibit 3 consecutive identical vowels?
Maybe? I can't think of a counterexample at least. I know it allows two of the same vowel in a row, so maybe you could get three across a word boundary
> No, English does not prohibit three consecutive identical vowels. However, it is relatively rare for words in English to have three consecutive identical vowels, and when they do occur, they are often the result of combining two words or using a prefix or suffix. Examples of words with three consecutive identical vowels include "cooeeing," "preemptive," and "reenforcement."
e.g. osmosis in animals; zooosmosis
according to chatgpt
21:35
i.e. nonsense
If you'd like to see a boa
Or a myna bird from Goa
Or a giant, flightless moa
Then you really ought to go a-
long to find them at the zoö!
@Adám But "osmosis" has a different O sound than "zoo-"
so?
I thought you meant vowel phoneme, not vowel letter
oh
i know swedish orthography prohibits 3 consecutive identical letters, so stressymptom becomes stress-
symptom when hyphenated to fit a line.
21:40
chatgpt is giving nonsense for both english and russian
Can't find any examples of this in a dictionary of 60k words I have downloaded, I'll try a bigger dictionary
I did find a few examples of three consonants tho
apparently tiiitaa is "wait" in maori
I think I need a better dictionary
i dont think those are legal words
They aren't lol
21:43
also this is getting ottnb
Well no such thing as "legal"
> yyyymmdd
But they're not words people actually use
@RydwolfPrograms No, don't you remember, these words were outlawed recently
21:56
@RydwolfPrograms you might be interested in that word list that is based on English Wikipedia word frequencies
Oh I made one of those once
One for CGCC too
The latter was gonna be Ash's compression dict
@RydwolfPrograms for wikipedia?
@lyxal Yeah
I've got an SD card lying sround somewhere with Wikipedia on it
You what
> over 19 GB compressed (expands to over 86 GB when decompressed).
22:20
0
Q: How long to carry sort?

Wheat WizardCarry sort is an \$O(n)\$ "sorting algorithm". Here's how it works. The algorithm moves left to right along a list. As it traverses a list it "carries" a single item, the largest item it has encountered so far. Once it encounters a larger item it picks up that item and drops the item it is alread...

@NewPosts Damn your fast! Dont you ever sleep?
 
1 hour later…
23:30
@RydwolfPrograms ok so I've been doing a little thinking and toss/catch is going to be SO COOL
it might actually be my new favorite Rabbit feature
its my fav rol feature
@Ginger me on my way to smother the interpreter's fingers in butter so it can't catch anything it's tossed
wtf
@Seggan k
@Ginger it'll drop everything it tries to catch because it'll just slip out
23:36
ಠ_ಠ
KevinLPG has entered the chat
Hi yes that's me, creator of vyxal
1 hour ago, by lyxal
> Vyxal was created by KevinLPG, a programmer and competitive code golfer. The language was first released in 2020 and has since gained a small but dedicated following among golfers and enthusiasts of esoteric programming languages.
ah yes, Kevin Likes Programming and Golfing
@KevinLPG I saw that :p
Kevin: Lyxal? Probably Gone
5
@Ginger it'd be a funny prank for anyone using rabbit
major corporations: bye
sometimes I think you live in a parallel universe where everything is almost the same but slightly different
like in A Sound of Thunder
23:40
da hell, kevinlpg???
aw what no star?
@AidenChow hi yes hello
@Ginger what?
huh
woogly
@Seggan 👍
23:47
ty
erm im assuming you can move the messages too?
thanks kevin
no worries
I missed a few
For golfing purposes, is there a significant difference between NodeJS/SpiderMonkey/V8/Babel Node?
I found the "tips for golfing in JavaScript" article: codegolf.stackexchange.com/questions/2682/…
I/O
23:54
The only language-specific tip on there is that SpiderMonkey has inline expressions/lambda expressions/whatever you call them, but that's a JS standard now so it's not relevant.

(that said I didn't bother to check past page 1)
Whatever engine IE uses accepts different date formats than V8 and SpiderMonkey
00:00 - 17:0017:00 - 00:00

« first day (4428 days earlier)      last day (714 days later) »