<mfiano>
Ah, so possibly suitable for soft real-time applications, then.
<hightower3>
Can a file being compiled somehow reference the directory where it is located? I have somefile.cr and it needs to load "../something.json" relative to the directory where it itself is located.
<oprypin>
hightower3, yea just __DIR__
<hightower3>
I did so and thought it worked, but it's giving me errors now... I thought it worked previously because I happened to run the compile from the right dir... let me review the error in more detail now
<hightower3>
ah it works of course, I've overriden the value later... thanks for pointing it out
<mfiano>
Are there any other published books other than "Programming Crystal"?
<oprypin>
i dont think so.
<FromGitter>
<Blacksmoke16> I'd read the reference material if you haven't already
<FromGitter>
<jrei:matrix.org> straight-shoota: we'll need another Debian repository change haha
<FromGitter>
<jrei:matrix.org> I didn't see an SaaS solution, only on-premise
<FromGitter>
<jrei:matrix.org> That's interesting, that's the opposite of what Atlassian did
<straight-shoota>
yeah, I've seen that yesterday
<straight-shoota>
I'm not involved in the package release process, though
richbridger has joined #crystal-lang
aquijoule__ has quit [Ping timeout: 264 seconds]
<FromGitter>
<jrei:matrix.org> Yes that's Brian, I pinged him here – should be busy
<FromGitter>
<jrei:matrix.org> I will look to alternatives, I used it too in the past
<FromGitter>
<mattrberry> @asterite In case you're ever curious, here's a branch that segfaults for me before the first frame when running Pokemon Emerald. Updating the two instances of `Proc(Void)` to `Proc(Nil)` in scheduler.cr prevents this segfault from happening
<FromGitter>
<mfiano> Just wanted to say I'm new here, and really enjoying the simplicity of the language.
mfiano has left #crystal-lang ["WeeChat 2.9"]
<FromGitter>
<mfiano> I've been married to a complicated (yet powerful and expressive) language for a couple decades. Currently evaluating whether Crystal is a good fit for my domain, and worth porting hundreds of thousands of lines. Even if not, I will probably end up using it for other tasks.
<FromGitter>
<Blacksmoke16> Good to hear. We'd be happy to help with any questions and such
<FromGitter>
<mfiano> Not really a question, but in playing around with the compiler any program compiled with `--lto=thin` fails with a ton of `Invalid memory access (signal 11)`. Is this expected?
<FromGitter>
<Blacksmoke16> probably not
<FromGitter>
<mfiano> Also another oddity I discovered is compiling any program that doesn't use concurrency at all with `-Dpreview_mt` performs better. I wish I knew why :)
<FromGitter>
<Blacksmoke16> is it possible it's using it under the hood
<FromGitter>
<mfiano> it's a single recursive fibonacci function
<FromGitter>
<Blacksmoke16> ah, wonder if its some LLVM optimization? :shrug:
<FromGitter>
<mfiano> Eh, I'm not complaining, just exploring.
* FromGitter
* mfiano is not used to LLVM or ALGOL-derived languages at all.
<FromGitter>
<djberg96> a class type can't be scoped?
<FromGitter>
<djberg96> seems I can do `SomeClass(A)` but not `SomeClass(A::B)`
<FromGitter>
<Blacksmoke16> correct, the former is just defining a generic arg named `A`, there are some issues regarding expanding upon it, i.e. to restrict the types that *could* be used, but its not a thing yet
<FromGitter>
<Blacksmoke16> currently can do something like that by using a macro in the `initialize` method
<FromGitter>
<Blacksmoke16> but not as clean as it would be on the lang level ofc
<FromGitter>
<mattrberry> Does the Crystal formatter have any support for formatting inside of macros, or is that left out intentionally?
<FromGitter>
<mattrberry> Oops, minor copy-paste error on the rd check
<FromGitter>
<mfiano> Does Crystal have syntax for sealing a class?
postmodern has joined #crystal-lang
_ht has joined #crystal-lang
<FromGitter>
<erdnaxeli:cervoi.se> What would it mean?
<FromGitter>
<mfiano> Some languages allow "sealing" a class or method, which means that they can only be extended in the same source file only. Extended meaning sub-classing or adding new type-restricted methods of the same name.
MasterdonX has joined #crystal-lang
<FromGitter>
<mfiano> It's like "finalizing" a class, but only applying to code external to the current file.
<FromGitter>
<erdnaxeli:cervoi.se> Hmm ok, I don't know anything similar for Crystal
MasterdonX has quit [K-Lined]
<FromGitter>
<asterite> Michael Fiano: what complicated yet powerful and expressive language? Just curious
<FromGitter>
<asterite> Matthew: macros just operate at the text level, that's why they don't get formatted
<FromGitter>
<asterite> Michael Fiano: I proposed Sealed classes like ten times in the past. I would like to have such a feature but others seem to lot find it useful or understand the purpose. In the meantime many other languages support that.
<FromGitter>
<asterite> I'm guessing now that other language is Scala. Haskell is also a possibility but less probable.
postmodern has quit [Quit: Leaving]
<FromGitter>
<asterite> Ah, no, Haskell doesn't have a Sealed thing
<FromGitter>
<naqvis> yeah Scala, Kotlin have this feature and now Java15 also introduce sealed class/interface feature
<FromGitter>
<mfiano> I have used it exclusively for the last 20 years or so, but I got the idea from Scala and Kotlin (I'm familiar with them and thought it was a pretty useful feature, but haven't really used them).
<FromGitter>
<mfiano> Doubt there are any other Lispers around here; we seem to be a rare breed :) I am currently evaluating Crystal as a target to switch to for professional game engine development in our small studio. We have lots of code, and while Lisp is a great language with near C performance and flexibility, sometimes it gets in the way of game development, sacrificing performance and code clarity. It also suffers from us
<FromGitter>
... having to implement lots of things ourselves, because of the lack of community and existing libraries being somewhat poor. ⏎ ⏎ Crystal seems very nice so far, but still experimenting to see if it sticks with me. I will say it is much more pleasant to work with than Nim, which is highly unstable and tries to do too much (I t ... [https://gitter.im/crystal-lang/crystal?at=601e8c471ed88c58d824f788]
deavmi has joined #crystal-lang
<FromGitter>
<jrei:matrix.org> @mfiano: what do you use for broad phase collision detection?
<FromGitter>
<mfiano> Currently, just a BVH of spheres and OBBs, created automatically from an octree. Collision detection is one thing we have that works, but needs a lot more work.
<FromGitter>
<jrei:matrix.org> It is a complex topic for sure
<FromGitter>
<jrei:matrix.org> For now I did only a basic one based on a grid
aquijoule_ has quit [Ping timeout: 256 seconds]
<FromGitter>
<jrei:matrix.org> Did you Game Engine has an UI like Godot?
<FromGitter>
<jrei:matrix.org> Or it is focused on pure server side
<FromGitter>
<mfiano> The thing with Lisp, is you don't need a UI, since it is all interactive already. You can compile individual functions, variables, and DSLs and see changes on the fly. For example, we have a DSL for shader functions, so we can just tell our editor to update them as the game is running. I sent you a message on Matrix though, as to keep this channel more on-topic :)
<FromGitter>
<jrei:matrix.org> Thanks, sure
<FromGitter>
<jrei:matrix.org> Because UI on Crystal for Windows may be not ideal
deavmi has quit [Quit: Eish! Load shedding.]
deavmi has joined #crystal-lang
<FromGitter>
<oprypin:matrix.org> why would that be? ui is actually in a better state that anything else
<FromGitter>
<jrei:matrix.org> Maybe, but I doubt it is production-ready
<FromGitter>
<jrei:matrix.org> At least with no ui, it could run on Docker for Windows or WSL
ua_ has joined #crystal-lang
ua has quit [Ping timeout: 264 seconds]
richbridger has joined #crystal-lang
hightower3 has quit [Ping timeout: 276 seconds]
<FromGitter>
<szTheory_gitlab> How do you do dynamic dispatch like Ruby's Object#public_send ? I'm trying to port this code: `receiver.__send__(method, *extract_params(scanner))`
<FromGitter>
<Blacksmoke16> `#send` doesn't exist in Crystal. You'd prob be best off refactoring things so you dont need that
<FromGitter>
<szTheory_gitlab> I see, thanks. So you have to know the method names at compile time, can't do dynamic dispatch?
<FromGitter>
<Blacksmoke16> there are some workarounds, but in the end it would have to call the actual method
<FromGitter>
<szTheory_gitlab> OK yup that's what I was thinking too with a case statement
<straight-shoota>
it would help if you could tell us about your use case
<FromGitter>
<Blacksmoke16> or something along those lines, but ofc there isnt any compile time saftey on if you pass an invalid method name, and the return type would be a big union of every method
<straight-shoota>
not just how to do X in Crystal, when X is just a solution that works in Ruby
<FromGitter>
<Blacksmoke16> with a method called `def regex` when does `case/in` on each member
<straight-shoota>
Or just use procs
<FromGitter>
<jrei:matrix.org> it is all possible, with macro, to iterate over methods of a given object
<FromGitter>
<jrei:matrix.org> if what you want is to test all methods of an object
<FromGitter>
<szTheory_gitlab> I'm thinking that instead of having these blocks in the specs that assign to `@maps`: ⏎ ⏎ ```code paste, see link``` ⏎ ⏎ Read from `def regex` like George is saying. Then make a subclass of `HtmlBeautifier::Parser` that overrides `#regex` as needed for each spec [https://gitter.im/crystal-lang/crystal?at=601eb9bf9d5c644f66551201]
<straight-shoota>
seems way too complex to me
<straight-shoota>
specs are supposed to be simple :D
<FromGitter>
<Blacksmoke16> oh this is a spec
<FromGitter>
<Blacksmoke16> yea id go with something simple, not really worth the effort
<FromGitter>
<jrei:matrix.org> not sure why there are regexes?
<FromGitter>
<HertzDevil> tbf i don't think there are any real use cases for `send` in ruby either
<straight-shoota>
+1
<FromGitter>
<HertzDevil> seems like a consequence of its extremely dynamic nature rather than an intrinsically desirable feature
<FromGitter>
<jrei:matrix.org> like eval?
<straight-shoota>
yep
<FromGitter>
<HertzDevil> `send` makes more sense in lua for example where no language-level oop exists and you have to roll your own
<FromGitter>
<szTheory_gitlab> Well I am trying to port this library from Ruby to Crystal without altering it's behavior. I'm also still learning Crystal. I was thinking the easiest way is to just port it 1:1 as much as possible from Ruby to Crystal with the specs still passing. Then I can start refactoring to clean up the code and make it more Crystal like. This is still my first pass so I'm hoping to alter things as little as
<FromGitter>
... possible while still keeping the specs passing
<straight-shoota>
that's definitely a good idea and should work for the most part
<FromGitter>
<Blacksmoke16> i means as long as you make it so the specs are the same the design aspect of that doesnt really matter as much
<FromGitter>
<jrei:matrix.org> ok, so you could try my library then - which is not recommended but could help in your refactoring
<FromGitter>
<Blacksmoke16> compared to the actual lib code
<straight-shoota>
Can you give a linkt to the Ruby code?
<FromGitter>
<szTheory_gitlab> Thanks some great suggestions. One last thing- is there already an opinionated HTML formatted for erb/eex/ecr written in Crystal? The Ruby version is too slow and I couldn't find any existing solution which is why I'm porting this
<FromGitter>
<szTheory_gitlab> formatter*
<FromGitter>
<szTheory_gitlab> My ultimate goal is to hook this up to a VS Code extension so people in Ruby/Elixir/Crystal can all take advantage of it in the editor on save
<FromGitter>
<jrei:matrix.org> the thing to remember is the macro for loop to emulate the #send feature
<FromGitter>
<szTheory_gitlab> Awesome thanks!
deavmi has quit [Ping timeout: 272 seconds]
deavmi has joined #crystal-lang
DeBot has quit [Quit: Crystal IRC]
asterite has quit [Quit: Bye]
jhass has quit [Quit: Bye]
straight-shoota has quit [Quit: ZNC 1.8.2 - https://znc.in]
DeBot has joined #crystal-lang
asterite has joined #crystal-lang
straight-shoota has joined #crystal-lang
jhass has joined #crystal-lang
<FromGitter>
<Daniel-Worrall> @szTheory_gitlab FWIW if you were porting it to use, I have js-beautify working through duktape here https://github.com/Daniel-Worrall/beautify
<FromGitter>
<oprypin:matrix.org> @djberg96 https://github.com/djberg96/sys-uname main branch should contain shard.yml, then everything picks it up. other branches are not used for anything
<FromGitter>
<djberg96> ah, can't do that, it's a repurposed repo
<FromGitter>
<djberg96> i have too many already, i was trying to avoid making more
<FromGitter>
<oprypin:matrix.org> don't repurpose
<FromGitter>
<jrei:matrix.org> No need to, many branches is not better
<FromGitter>
<oprypin:matrix.org> yea actually there's 0 advantage to many branches over many repos
<oprypin>
funny thing is, you can even have it as one repo locally but many repos on github
<oprypin>
how did i just type this over 2 different chat methods 😩
<FromGitter>
<djberg96> there's no advantage one way or another
<FromGitter>
<djberg96> it's just a workflow
<oprypin>
umm i think we see one advantage
<oprypin>
that is you can actually publish a library for crystal
<FromGitter>
<jrei:matrix.org> It confuse people, I look at the readme. Plus, no history shared
<FromGitter>
<jrei:matrix.org> Better having a monorepo then
<FromGitter>
<jrei:matrix.org> Or use GitLab, you can group repository in one
<oprypin>
every instance where i had multiple unrelated branches in one repo eventually i ended up merging
<FromGitter>
<jrei:matrix.org> And, how would you handle tags in the multi-branch way?
<FromGitter>
<Blacksmoke16> you can have tags based on diff branches fwiw
<FromGitter>
<djberg96> as for shared history, you can always create an orphan branch (which I didn't do, oops)
<oprypin>
djberg96, of course you can but we're saying that there's no advantage then even more so
<FromGitter>
<jrei:matrix.org> @Blacksmoke16: I know, but you can't have a same tag
<FromGitter>
<jrei:matrix.org> Say, I wan't to release the Ruby lib in 1.0, and same for Crystal
<FromGitter>
<Blacksmoke16> ah yea fair point
<FromGitter>
<jrei:matrix.org> @djberg96: note that you're monkey patching the stdlib – `System` already exists
<FromGitter>
<djberg96> yes. i know.
<FromGitter>
<jrei:matrix.org> If I use your lib in my code, people may think I use the stdlib
<FromGitter>
<jrei:matrix.org> (If not careful)
<FromGitter>
<djberg96> i didn't see anything like Ruby refinements, so here we are
<FromGitter>
<djberg96> @Blacksmoke16 yeah, it's probably a bad idea, i never really tried one repo/multiple languages, was partly curious to see if/how git could handle it
<FromGitter>
<djberg96> just googling about, it seems the argument for monorepos is mainly aimed at large organizations and/or large code bases
<raz>
monorepo is the way to go unless you like pain. lots of pain.
_ht has quit [Remote host closed the connection]
alexherbo2 has joined #crystal-lang
sorcus has quit [Quit: WeeChat 3.0]
sorcus has joined #crystal-lang
alexherbo26 has joined #crystal-lang
alexherbo2 has quit [Read error: Connection reset by peer]
alexherbo26 is now known as alexherbo2
hamoko[m] has joined #crystal-lang
<FromGitter>
<wyhaines> @djberg96 You were, I think , the first person that I really had conversations with about Ruby back in those early days when we were both learning it, and here you are now! The world is small. :)