Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Nov 27 19:45
    mohd-akram synchronize #11439
  • Nov 27 19:14
    straight-shoota synchronize #11499
  • Nov 27 18:48
    mgomes ready_for_review #11482
  • Nov 27 18:20
    HertzDevil labeled #11482
  • Nov 27 18:20
    HertzDevil labeled #11482
  • Nov 27 18:17
    HertzDevil synchronize #11495
  • Nov 27 18:02
    HertzDevil labeled #11503
  • Nov 27 18:02
    HertzDevil labeled #11503
  • Nov 27 18:02
    HertzDevil labeled #11503
  • Nov 27 18:02
    HertzDevil opened #11503
  • Nov 27 17:42
    mgomes edited #11482
  • Nov 27 17:28
    mgomes synchronize #11482
  • Nov 27 15:42
    straight-shoota closed #11501
  • Nov 27 15:27
    straight-shoota labeled #11501
  • Nov 27 15:27
    straight-shoota unlabeled #11501
  • Nov 27 13:04
    HertzDevil synchronize #11502
  • Nov 27 11:47
    HertzDevil synchronize #11496
  • Nov 27 11:47
    HertzDevil synchronize #11495
  • Nov 27 10:48
    HertzDevil labeled #11502
  • Nov 27 10:48
    HertzDevil labeled #11502
mfiano
@mjfiano:matrix.org
[m]
Ok so
In my main src/origin.cr file I have this and only this:
require "./origin/scalar"
require "./origin/shared"
require "./origin/vector"
In vector.cr it starts out like this:
module Origin::Vector(T)
  forward_missing_to @data

  include Origin::Shared(Float64) # Error: undefined constant Origin::Shared

  ...
end
The include compiles if I put it in a macro included though
These are the errors that drive me crazy because I don't see where they are coming from.
I only have 3 files, and this is the last file parsed
shared.cr should have already been loaded and the module defined...
George Dietrich
@Blacksmoke16
Do you have this all pushed up atm?
mfiano
@mjfiano:matrix.org
[m]
No but I could
Give me a minute
mfiano
@mjfiano:matrix.org
[m]
Hey Mr. Grant, my stalker :)
George Dietrich
@Blacksmoke16
what were you running to get that?
mfiano
@mjfiano:matrix.org
[m]
I didn't think to run that, because the semantic analyzer in nim showed the aforementioned error in my buffer upon saving
s/vim/vim/
err nim -> vim. must be almost that time :/
The test code I have under those 3 requires is:
alias V2 = Origin::Vector2
x = V2.new(2.0, 8.123)
pp! x + x
pp! x == V2.new(2.0, 8.123_001)
pp! V2.rand(V2::ZERO, V2::ONES)
pp! V2.rand
pp! V2::ZERO.zero?
pp! x.clamp
pp! x.same_direction?(x)
pp! V2::LEFT
George Dietrich
@Blacksmoke16
thz
worked fine for me?
mfiano
@mjfiano:matrix.org
[m]
:/
George Dietrich
@Blacksmoke16
sure you dont have anything else going on?
mfiano
@mjfiano:matrix.org
[m]
I'm positive. everything else is checked in
George Dietrich
@Blacksmoke16
what's crystal --version say?
and like crystal env
mfiano
@mjfiano:matrix.org
[m]

https://i.lisp.cl/iMWLBA.png

This is what I see when I save that file

1.0.0
George Dietrich
@Blacksmoke16
ohh, let me make that not a macro now
mfiano
@mjfiano:matrix.org
[m]
CRYSTAL_CACHE_DIR=/home/mfiano/.cache/crystal
CRYSTAL_PATH=lib:/usr/lib/crystal
CRYSTAL_VERSION=1.0.0
CRYSTAL_LIBRARY_PATH=''
CRYSTAL_OPTS=''
George Dietrich
@Blacksmoke16
ah ok
i kno why
no nvm
mfiano
@mjfiano:matrix.org
[m]
can you even repro?
George Dietrich
@Blacksmoke16
yea i get Error: undefined method 'rand' for Origin::Vector2.class
mfiano
@mjfiano:matrix.org
[m]
Good, it's not just me
George Dietrich
@Blacksmoke16
i think i see the problem tho
mfiano
@mjfiano:matrix.org
[m]
So yeah, if you can figure out why the macro hook makes it work, i might be able to figure out why i get tons of these similar problems
George Dietrich
@Blacksmoke16
by including Origin::Shared that triggers the macro included hook which extends the class methods on Origin::Vector, but by wrapping that in another macro included makes it not expand until Origin::Vector is included in the actual Vector* types
mfiano
@mjfiano:matrix.org
[m]
I think my mind just imploded
George Dietrich
@Blacksmoke16
i'd argue maybe modules aren't the best solution here versus some parent structs?
mfiano
@mjfiano:matrix.org
[m]
Well inheritance graph is going to get hairy...i have a lot to add
I'd rather use mixins if possible
George Dietrich
@Blacksmoke16
but if the mixins are included in every type, doesnt that defeat the purpose?
basically recreating the same structure, but in a diff way
mfiano
@mjfiano:matrix.org
[m]
So I guess the 2 solutions I see are
1) Copy the include Origin::Shared into each concrete type instead of once in the Vector mixin.
2) I already forgot because I'm tired :(
Well right now, yes it does defeat the purpose. It might get a little hard to model with inheritance later on
Shared is intended to be stuff common to all base math types (vectors, matrices, and quaternions). Vector is stuff common to all vectors (but Vector3 is special and will define more stuff for itself), and then there will be higher order math types making use of these 3 base types or varying dimensions
It's a rather large project, about 20kloc of Lisp
George Dietrich
@Blacksmoke16
even if you have methods defined on parent types, you can override them