Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 05:14
    HertzDevil labeled #13013
  • 05:13
    HertzDevil edited #13013
  • Feb 08 18:26
    beta-ziliani milestoned #13043
  • Feb 08 18:26
    beta-ziliani milestoned #13043
  • Feb 08 18:00
    Blacksmoke16 labeled #13053
  • Feb 08 17:59
    straight-shoota labeled #13053
  • Feb 08 17:59
    straight-shoota labeled #13053
  • Feb 08 17:59
    straight-shoota assigned #13053
  • Feb 08 17:59
    straight-shoota opened #13053
  • Feb 08 12:19
    straight-shoota closed #13010
  • Feb 08 12:19
    straight-shoota closed #13050
  • Feb 08 12:18
    straight-shoota closed #13048
  • Feb 07 18:12
    HertzDevil labeled #13052
  • Feb 07 18:12
    HertzDevil labeled #13052
  • Feb 07 18:12
    HertzDevil labeled #13052
  • Feb 07 18:12
    HertzDevil opened #13052
  • Feb 07 17:49
    straight-shoota closed #13051
  • Feb 07 17:46
    beta-ziliani milestoned #13051
  • Feb 07 17:46
    beta-ziliani milestoned #13051
  • Feb 07 14:03
    beta-ziliani review_requested #13050
Quinton Miller
@HertzDevil
that's a distinct issue from deciding how to namespace that iterator class
stdlib simply puts all those iterator wrappers as private classes/structs namespaced under Iterator
Taupiqueur
@alexherbo2
I can put a class in a class, like Walk.Filter?
Quinton Miller
@HertzDevil
class Walk
  private class Filter
  end

  def filter
    Filter.new(...)
  end
end
if it isn't private you refer to it from outside with Walk::Filter
Taupiqueur
@alexherbo2
I never seen a class in a class, so I’m not sure what is the convention
Instinctively I would have go to a Walk module, putting the two iterators in it
@HertzDevil the naming convention for iterators would be Walker or Walk?
usually class are nouns
Quinton Miller
@HertzDevil
Dragonbox   9.39  (106.50ms) (± 3.31%)  84.1MB/op        fastest
   Grisu3   6.73  (148.67ms) (± 4.11%)  68.7MB/op   1.40× slower
soon
Benjamin Wade
@RespiteSage
Does stdlib have its own logic for type promotion when adding different numeric types, or does it rely on LLVM for that?
In particular I'm thinking about the case of a + b, where b is a wider type than a.
So like Int8#+(UInt64), as an extreme example.
Daniel Worrall
@Daniel-Worrall
Int#+(otherInt) returns self class, so no
Benjamin Wade
@RespiteSage
No, that's not what I mean.
Daniel Worrall
@Daniel-Worrall
It'll raise overflow, not promote
Benjamin Wade
@RespiteSage
This is what I mean: https://carc.in/#/r/bid3
Maybe "type promotion" was the wrong wording.
Unless I'm sorely mistaken, the hardware doesn't do arithmetic on numbers of mismatched length, so either Crystal or LLVM has to turn those numbers into the same type under the covers.
Presumably it's the larger type, and then they try to convert it to the left-hand type, which could raise overflow.
I'm asking this because I'm trying to handle arithmetic with mismatched numeric types in saline.
Benjamin Wade
@RespiteSage
Okay, found it
Daniel Worrall
@Daniel-Worrall
yikes, my playground docker container was using 1.2GB of memory
From IRC (bridge bot)
@FromIRC
<Guest15> hello all. i am wondering if variadic functions are supported for crystal functions and procs. ive tried playing around with VaList and viewing the specs around it, but i cant seem to make sense of it. does anyone happen to have an example of passing multiple arguments via variadic functions with crystal?
maybe you could use valist exactly like c i don't know
Lance Dillon
@riffraff169
just a question: c varargs no, but is it possible to link to a c function that accepts varargs, but you dont pass varargs...so you would create a crystal function for each variant you want...
if you only need one, you would create the static (sort of) crystal function, pass the data to the varargs c function statically, but the c function would do its varargs thing with your data...
i hope that was clear
George Dietrich
@Blacksmoke16
image.png
From IRC (bridge bot)
@FromIRC
<Guest64> hey, is it possible for a crystal macro to edit other portions of the code base when called? for example, i have a macro that defines a proc, but i also want to append the procs name to a case clause in another def method. so that each time the macro is called, it creates the proc, but also adds it to the list of when clauses
<Guest64> https://pastebin.com/sPpFLwhP is a quick little mock up
Lance Dillon
@riffraff169
you could probably have a macro create another source file to be added to the list of files to be compiled and linked...that file will define the method
maybe
From IRC (bridge bot)
@FromIRC
<Guest64> hmm, i will try exploring that avenue. i was also thinking perhaps a macro calling a macro might work, in which the second macro might define the when clause. id have to play with it later
<Guest64> as a side question: is there a cleaner way to create default args
<Guest64> from a splat of types for a macro? for example if *types contains
<Guest64> {Int32, Int32}, when the macro defines a definition i use: def my_def({%
<Guest64> for type, index in args %}arg{{index}} : {{type}},{% end %}) which
<Guest64> expands to def my_def(arg0 : Int32, arg1 : Int32)
George Dietrich
@Blacksmoke16
You can append them to a constant, then iterate over it in a finished hook
But im not really sure you need a macro here, versus just a method and hash of procs
Lance Dillon
@riffraff169
yeah, just create a dispatch table....hash key being name, value being proc, then call the proc when a key matches
could even have it be a list of procs, that can be called in order... and can change them dynamically if needed... basically like hooks
From IRC (bridge bot)
@FromIRC
<Guest64> i was thinking something similar as well. i may be able to make a hash of string, proc() work to my liking
<Guest64> thanks for the ideas
Kirk Haines
@wyhaines
@guest64 Macros create code in the place where the macro is called. Also, macros can not call other macros -- they look like methods, but they aren't really methods. However, macros do have access to constants. So you could have your first macro, the one that defines a proc, inject data into a constant that a later macro, involved with the case statement creation, accesses to build said case statement.
From IRC (bridge bot)
@FromIRC
<Guest64> thanks for the advice, im trying to use a hash to contain my map of String, Proc, but while trying to add my procs to the hash I get this error: