<< 07-04-2014 >>

00:02:00dom96Unfortunately, I must sleep now. Good night.
00:02:26NimBotAraq/Nimrod devel e66d5c1 Araq [+0 ±1 -0]: updated news.txt
00:02:26NimBotAraq/Nimrod devel b41e3b0 Araq [+0 ±5 -0]: Merge branch 'devel' of https://github.com/Araq/Nimrod into devel
00:02:54Araqdom96, Varriount ok so lets release tomorrow
00:03:04Araqbut really! then
00:03:23dom96lol
00:03:25VarriountOk. If that's the case, then I need to reboot my computer now.
00:03:26dom96ok
00:03:38*Varriount quit (Read error: Connection reset by peer)
00:03:45dom96bye
00:03:48renesacAraq, my pull request with the compressed images for the website was merged on master
00:03:53renesacdon't forget to pull it to devel
00:04:14dom96he'll be merging devel to master
00:04:20dom96so it'll be fine
00:04:22dom96bye
00:04:23renesacright
00:04:32renesacgood night
00:04:39Araqgood night
00:05:07DemosI am getting strange lookup behavior in a template
00:05:46Demosthe template calls a generic proc and the generic proc is not able to find definitions that are in the definition scope but not in the scope of the template instantiation
00:13:02*ics quit (Ping timeout: 246 seconds)
00:21:47*rta quit (Ping timeout: 246 seconds)
00:22:37*BitPuffin joined #nimrod
00:29:57*Varriount joined #nimrod
00:34:36*brson joined #nimrod
00:35:49*rta joined #nimrod
00:36:56*Varriount quit (Quit: Leaving)
00:39:03*brson quit (Ping timeout: 255 seconds)
00:40:56*brson joined #nimrod
01:01:45*seagoj joined #nimrod
01:05:42*q66 quit (Quit: Leaving)
01:06:02EXetoCso does loadExtensions only load referenced extensions?
01:06:56EXetoCit tries to load some unneeded symbol but fails. I generated a module called gltest.nim and now I'm trying to use it
01:12:02*seagoj quit (Quit: Textual IRC Client: www.textualapp.com)
01:17:09*rta quit (Ping timeout: 245 seconds)
01:22:38Demosso command syntax/properties + getStackTrace() is pretty amazing
01:29:56*rta joined #nimrod
01:34:08NimBotVarriount/NimLime master fb6da3a Erik O'Leary [+0 ±2 -0]: Added match support for _ in tmpl's
01:42:30*Guest78262 quit (Ping timeout: 255 seconds)
01:43:07*Guest78262 joined #nimrod
02:08:07*Demos quit (Quit: Lost terminal)
02:18:09*BitPuffin quit (Ping timeout: 255 seconds)
02:24:13*Varriount joined #nimrod
02:28:38Skrylarlol the reference implementation of porter's stemmer is silly
02:28:42Skrylarglobal statics everywhere
02:29:17VarriountI finally got raid 1 working on my computer! :D
02:39:08*brson quit (Quit: leaving)
02:43:08*Demos joined #nimrod
02:50:10*zezba9000 joined #nimrod
02:51:32zezba9000Hey was just wondering if there was any idea of when multiple interfaces might be added into nimrod?
02:52:50Varriountzezba9000: What do you mean?
02:53:33VarriountA type can already fulfill multiple user defined type classes.
02:53:49zezba9000Like right now you can derive from a base class in nimrod, but not interfaces after that like so: "A : B, IC, ID, ect.."
02:54:03VarriountYou mean, multiple inheritance?
02:54:19zezba9000yes, but only with interfaces support like C#, not C++
02:54:55VarriountI'm not quite sure I understand - I don't have much experience with C#
02:55:28Demoszezba9000: apperently it is possible (as in humanity knows how to do it in the context of multiple dispatch) but it is low priority
02:55:46Demosyou can cook up some macros to make and fill vtables and whatnot if you like
02:55:55zezba9000Ok, well in C# I can do "class A : B, IC, ID {...}" C++ can do the same and more, but its not needed
02:56:09Demosbut often typeclasses are a better solution
02:56:11VarriountI think filwit has some things for OO programming.
02:56:45Demossince with typeclasses the module with types "implementing" the typeclass need not depend on the typeclass
02:56:49zezba9000Demos: Well I may make a C# to Nimrod converter... and it would be so much better with multiple interfaces for translation
02:56:58zezba9000Varriount: Ya he is my brother
02:57:12Demoszezba9000: that would be neat. Perobably very hard
02:57:31zezba9000But it might make more sense to use standard nimrod, not his off-shoot
02:57:34Demosone idea is to use the new `.` overloading to access function in the vtable
02:58:09*darkf_ joined #nimrod
02:58:20zezba9000Demos: Iv'e seen how it can be done, but its so dirty
02:58:41Demoszezba9000: how do you mean? v-tables are how c#/java/c++ style OOP works
02:58:45zezba9000I would like it to be human readable. So it maps over well from C# to Nimrod visually
02:59:04zezba9000Demos: But not visually
02:59:35zezba9000It would make the translator cleaner if it didn't need to convert in that way is all.
02:59:37Demoswell sure, you can write macros to make objects with vtables, you could even have the macro go through the type decl and change foo: proc(...) to a vtable entry
02:59:38Demosmaybe
03:00:53Demoszezba9000: well nimrod is not going to copy c#'s object model, and if you are reimplementing all of c#'s syntax and semantics than I am not sure what you are getting
03:01:25zezba9000well, not sure. I don't want to make my life hard. I know C# very well, but changing how Nimrod works is just going to complicate my life lol
03:01:48Skrylarinterfaces... hrmm. i don't think nimrod favors them to be honest
03:01:57*darkf quit (Ping timeout: 265 seconds)
03:02:04Skrylaryou have generics code, and composition of smaller objects
03:02:52*Varriount doesn't get what the difference is between interfaces and typeclasses
03:03:34SkrylarVarriount: interfaces are dynamic
03:03:52zezba9000I code in a OO fashian and am not going to write large code bases outside that model. I don't care if Nimrod does or not, I care about its speed, but it would be nice to have some standard features in a way other langs have then like C#, C++ or D
03:03:55SkrylarIIRC the way go does it, when you say "x as IFoo" it actually makes a struct full of function pointers
03:05:05Demoswell nimrod is not really all about OOP, I really like that nimrod does not bundle functions and data
03:06:04zezba9000Varriount: Example: http://pastebin.com/WBdcNgZh
03:06:31zezba9000Demos: Why not both...
03:06:34Skrylari haven't actually come to a point where i needed interfaces oddly. subclassing yes, but i handled that by just shoving in a "super: Foo" field like go does it
03:06:48Skrylari don't see why it couldn't be done with macros
03:06:51zezba9000C++ has both?
03:07:43zezba9000Varriount: Fixed typo: http://pastebin.com/tzQxVBqu
03:08:10Demosc++ lacks typeclasses. and having method calls be sugar for normal functions makes some kinds of code eaiser to write. Also if you really need dynamic binding you can use nimrod's first class functions
03:08:43Demosanother problem with bundleing data and behavior together is that it means you almost always are thinking of your data one element at a time, which may not be ideal
03:09:21zezba9000But humans thing in terms of objects and data groups?
03:10:04zezba9000Even if the code doesn't have the concept, you apply it yourself. Makes it easier to visually see how you put it together in your head
03:10:31VarriountYes, but not to the extreme. Unless you recieve prolonged exposure to Java.
03:10:35zezba9000Anyway how would I go about duplicating the example in C# to Nimrod?
03:11:08zezba9000Varriount: Both worlds have very good uses. To say ones doesn't is silly
03:11:35Varriount(I maintain the assertion that uncautious use of Java and it's restrictive OO paradigm damages the brain)
03:11:36xenagiis that even advisable? I may be wrong, but, being that C#/Java and Nimrod, are two different languages, they probably have different programming styles
03:12:12xenagiWhy would you want to "duplicate" C# to Nimrod when you should probably write the Nimrod-idiomatic version.
03:12:26zezba9000Varriount: I disagree. I think your just not seeing how it makes life easier in large apps.
03:12:59*rta quit (Ping timeout: 245 seconds)
03:13:03zezba9000xenagi: Because I like C# over any lang in many areas. But I do game dev. And Nimrod is super F'in fast.
03:13:25zezba9000They both have a GC and thus its logical to want C# with the power of nimrod for me
03:13:43zezba9000I target .NET only things like Xbox 360 ect.
03:14:00xenagiah I see
03:14:10zezba9000Indie SDKs in short. Like Vita PSM as well wich is .NET only
03:14:43xenagiNevertheless, I'm not sure I'm qualified to offer Nimrod advice
03:14:47zezba9000But I would love to have that portibility with power on other platforms like PCs ect
03:15:03Demoszezba9000: you realize that idomatic c# is going to be pretty much just as fast in .net as it is in nimrod
03:15:26Demosalso microsoft just announced a compiler that compiles c# to native code
03:15:41VarriountHowever it's not as fast as you might think Demos.
03:15:43zezba9000did tests with that
03:15:45zezba9000Its slow
03:15:51VarriountI've heard that it's slo-
03:15:56DemosVarriount: is it slower than .net?
03:16:04zezba9000Demos: Yes is slower which is funny
03:16:10zezba9000At least right now on x64
03:16:16Skrylarmicrosoft doing a bad job of something?
03:16:21Skrylarhold on, i have to write the media
03:16:28Skrylar:P
03:16:33DemosI mean nimrod is not fast just because it generates native code. Nimrod is fast because it has value types and a thread local gc
03:16:35zezba9000Hell if I know. I think something is just stupid with .NETs math libs
03:16:46zezba9000And they are casting to double when they should not be
03:17:09Demoson that note you will be unable to translate a lot of c# code since c#'s GC is not thread local, nimrod's is
03:17:10Skrylarwell property getters are wildly prevalent and involve a function call
03:17:16Skrylarprobably v-calls too
03:17:20zezba9000Demos: This is the test I use: https://github.com/zezba9000/RayTraceBenchmark
03:17:28Skrylarthere's a whitepaper that talks about how 20% of a C++ program's time is spent in the vtable
03:17:54zezba9000Maybe C# suffers from the same?
03:18:05zezba9000On iOS C++ is 8 times as fast as Mono with LLVM
03:18:07Demosit really depends on what you are doing
03:18:25zezba9000Something about .NET is slow and I wish I knew what the hell it was.
03:19:04zezba9000In that benchmark Nimrod is almost as fast as C++
03:19:14zezba9000Thats what I would like to get out of C#.
03:19:17SkrylarDemos: they did the test by writing code that should be inlinable, then used a GCC flag to force all class calls to be virtual
03:19:18Demosone problem is that classes tend to grow without bound, and if your vtable has like 35 pointers in it that over 4 cache lines
03:19:25Skrylarthats how they determined the overhead of vtabling
03:19:54DemosSkrylar: well if you are using -fgenerate-shitty-code....
03:20:15Demosoh wait they just turned off devirtualization
03:20:32Skrylaryeah, they wanted to see what the overhead was
03:20:47Skrylarit was pretty significant
03:20:50Demosif you actually need dynamic dispatch vtables are pretty fast, sometimes eaiser to optimize if you can make modifying them UB
03:20:57Skrylarcouple that with bad code gen -- no surprise that C# code compiles to slow
03:21:22Demoslike GHC generates native code as well, but they need a slow GC because they are lazy
03:21:45zezba9000Skrylar: I don't know if its code-gen, or something to do with secerity in .NET method calls ect
03:22:00zezba9000There may be more overhead.
03:22:15Demosin cpp people think that "program to an interface" means use pure virtual functions, in reality it means to use a spec, dynamic dispatch is orthogonal
03:22:21Skrylarwhy would a native compiler care about managed security stacks
03:22:43DemosSkrylar: they do checking of various things
03:23:03Demoszezba9000: you could just use c#'s structs and unsafe blocks to write quick code in c#
03:23:04zezba9000Skrylar: You can set the securtiy of the method in C#, so the runtime will not let you dynamicly invoke it ect
03:23:26Skrylarzezba9000: my point is that if you're compiling C# to native code, that doesn't matter
03:23:30Demoszezba9000: also reflection carries a huge hit with it wrt code size
03:23:35zezba9000Demos: LOL I thought of that onces. I could litterally right C code in C# yes
03:23:40Skrylarwhether or not something is dynamically invokable only means it goes in a table or not, thats not a runtime thing :\
03:23:52zezba9000But there is still the Math libs converting everything to doulbes when it should not
03:24:21Demoszezba9000: I would think with math libs the big speed difference would come from heap allocation
03:24:29Demosdoubles are just fine
03:24:40Demosin fact nimrod's float type is in fact a double percision float
03:24:52zezba9000Either way its stupid to have to worrry about those things.
03:25:05*rta joined #nimrod
03:25:08zezba9000The point it to have something easy to use and is fast at the same time.
03:25:26zezba9000Demos: Does not the hardware use 80bit?
03:25:26Demoswell that is why people use dynamic languages. Having everything be the same size is nice. although c# is mostally like that as well
03:25:47VarriountC# is a dynamic language.
03:26:16zezba9000When you chain sin(cos(...)) ect it should do everything in 80bit then it converts to 64bi at the end
03:26:45zezba9000Varriount: No its a strong typed lang
03:27:04zezba9000it does have the dynamic keyword an abylity to be though
03:27:08VarriountHowever it's dynamic in the sense that it is run in an interpreter.
03:27:18zezba9000No its not
03:27:26zezba9000only .NET Micro uses an interpreter
03:27:38zezba9000normal .NET JIT compiles to native instructions
03:27:39Skrylari think everyone is talking in circles now
03:28:11xenagiIs anyone blogging about Nimrod? I'd love a tutorial blog on Nimrod :D
03:28:13Varriountzezba9000: Jit compilation means that parts of an interpreted language are compiled to native code at runtime.
03:29:02Varriountzezba9000: http://en.wikipedia.org/wiki/Common_Intermediate_Language
03:29:10SkrylarVarriount: c# isn't inherently dynamic
03:29:24Skrylarits built on a jvm-clone, but most of the language is pretty tightly bound and typed
03:29:29zezba9000Idk if thats the right way to say it? Its not staticlly compiled like Nimrod, but that doesn't mean its counted as an interpreted lang
03:30:34Varriountzezba9000: C# is interpreted by the CLR (common language runtime), and part's of it are JIT'd, just like Java and the JVM, and Pypy and it's JIT
03:30:35zezba9000The CLR determins how the IL code gets ran.
03:31:19zezba9000No all of it gets JIT compiled. Only .NET micro uses an interpreter
03:31:46zezba9000what part would not be JIT to native instructions?
03:31:46Varriount*shrug* if you say so. Anyway, back to finding out why starbound is reporting error.
03:32:20Varriountzezba9000: Then why isn't a Java program entirely compiled to native code?
03:33:36zezba9000You are not being clear. C# gets compiled to IL. Then the JIT compiles it to native instructions that in turn the work with the CLR.
03:33:56zezba9000C# is not interpeted by the CLR
03:34:18zezba9000Nor is Java
03:34:52zezba9000The reason for IL is hardware agnastic code as you and I both know.
03:37:42*ruzu left #nimrod ("http://quassel-irc.org - Chat comfortably. Anywhere.")
03:37:48zezba9000anyway my whole point here was just wondering about interface support in Nimrod...
03:38:02zezba9000...an ETA I mean.
03:38:46zezba9000but guess there is none as no one here uses OO design practices to that level.
03:40:38Demosdamn fire alarm
03:41:01*xenagi quit (Quit: Page closed)
03:41:08zezba9000lol
03:42:14Varriount"Intel RapidStorage: Data 52% Complete"
03:42:31Demoszezba9000: if you just want compile time checking that you conform to an interface a proc like proc implements(typ: typedesc) = when not(typ is Interface): {.fatal: "does not implement".} could work
03:42:46Demoswhere Interface is a typeclass
03:44:10zezba9000But it would only support one interface no?
03:44:31Varriountuse an "and"
03:45:10Varriountwhen not((typ is interfaceOne) and (typ is interface2) and...):
03:45:20VarriountOr a template
03:47:03Demoszezba9000: nope as many as you like
03:47:12zezba9000k well I need to learn more about Nimrod. First i'm using/learing Roslyn to convert C# to HLSL, GLSL ect.
03:47:14Demosthe difference is that things are bound at compile time
03:47:26Demosso for example a seq[interface] would not work
03:47:42Demosalthough I bet there is a way to get around that
03:47:45zezba9000Then after I know more about Roslyn i'll do some other experements
03:48:50zezba9000But dudes, Nimrod should have interface support built in like C#, C++ and D yo!
03:49:01zezba9000Would attract more ppls to the lang
03:49:25zezba9000Make it easier to port exister code they may have ect
03:49:34Skrylarseems like something a macro could do
03:49:48zezba9000But not someone is going to take the time to write
03:49:55DemosI disagree, in fact I think zach and araq would like to remove inheratance totally and implement it as a library feature
03:50:10zezba900090% of people are not going to do that who would like the feature to be there I think, just a guess
03:50:22SkrylarDemos: he wants to remove the dispatch trees, not inheritance IIRC
03:50:32zezba9000Demos: Thats build in to me :)
03:50:35Demosyeah true
03:50:36zezba9000**built
03:50:47zezba9000Even in .NET things are done that way
03:50:58zezba9000But people consider it part of the lang
03:51:11Demoszezba9000: my first language was java. But I have come to realize that OOP offers almost /nothing/ in terms of code re-use or modularity
03:51:25zezba9000I'm telling your it would be good thing to advertise on...
03:52:02zezba9000Then I would disagree.
03:52:42zezba9000Would you right a billing app in a non OO lang?
03:52:53zezba9000I don't think anyone would today.
03:53:27zezba9000**write
03:54:23Demoswell you probably do not need fast native code for a billing app
03:54:31zezba9000The worst code I have ever seen was 'C' code ported to C# that kept everything non OO in it about C
03:54:41zezba9000But you do for games
03:54:46zezba9000and games should use OO
03:55:08zezba9000the only thing I can think of that does not need it (maybe) is writing service code
03:55:13Demosnot really. OOP for games causes some problems, esp if you model each "thing" in the gameworld as one object
03:55:27Skrylarnow we're arguing about buzzwords...
03:56:01Demosthings tend to get lifted up through your inheratance tree and you get a really super big "player" or "ai" class (just some examples)
03:56:21zezba9000Demos: Thats not true
03:56:25VarriountDemos: Not to mention that it's bad for cpu caches
03:56:56DemosVarriount: that it is, but if you are in C# you are already screwed in that area
03:57:50zezba9000You also know C# has partial classes right?
03:58:00VarriountDemos: Why?
03:58:12Demoszezba9000: partial classes are not the same thing
03:58:21DemosVarriount: because people tend to heap allocate everything
03:58:43zezba9000You are going to have big player classes in Nimrod as well as C#
03:58:47Demosso I guess you still get pwned by all the extra data in each class, and you can fix that. But you can not really exploat prefetch
03:58:50zezba9000How does that make a diff?
03:58:59Demoszezba9000: you dont have a player class
03:59:17Demosyou have a position class, and a health class (or just a distinct int) and so on
03:59:26zezba9000Then your code is not organized...
03:59:31zezba9000lol you have the same in C#
03:59:46zezba9000but you also have a player class that just contains them
03:59:49Demosno it is, the API is very similar to something you might do in ruby (with mixins and so on)
03:59:52zezba9000Or derives from them
04:00:19zezba9000You should have a player class...
04:00:44*Guest78262 quit (Ping timeout: 255 seconds)
04:00:55zezba9000You don't free float objects around. You end up duplicating arrays that don't need to exist and cause bugs
04:01:31Demosyeah, I organise my objects in arrays, one for each type of object
04:01:33zezba9000That reminds me of when I was in Middle school and used C
04:01:39zezba9000horible code
04:02:33zezba9000Demos: So for a player you have a class health array and class position array ect?
04:02:41*Guest78262 joined #nimrod
04:02:55zezba9000That are not contained/grouped in a player class?
04:03:09zezba9000You have now fragmented all your logic
04:03:24Demoswell I have arrays of (EntId, type)
04:03:32zezba9000When you could have a single array or players that you can quickly add and remove logic from
04:03:33Demosso they are linked in "entities" by a simple ID
04:03:49Demoszezba9000: actually logic is really easy to add how I have it set up
04:03:51zezba9000ok dude, you are doing this all wrong
04:03:56Demosmy data has no logic
04:04:00Demosthese are just arrays of data
04:04:09zezba9000You in your mind have the concept of a player no?
04:04:33zezba9000So why not visualise that day in the code how you project the abstract concept
04:04:43DemosI mean sure, but when I am writing code to render the player I do not give a crap about her health
04:04:56zezba9000So...
04:05:07zezba9000You have added on a huge layer of complexity
04:05:18zezba9000As a game dev I used to try thing like you suggest
04:05:33zezba9000bad idea as it makes far more bugs and you end up with more code
04:05:52zezba9000Instead of one Count variable, you now have 5 or more
04:06:09Demoswhy would I have a count variable, what am I trying to count?
04:06:26DemosI don't store any more data than I would if I were doing OOP
04:06:28zezba9000When you add a feature to the player you now have to updated every peace of logic that handles array counts instead of just changing one
04:06:39Skrylari'm bored now... i'll be back later.
04:06:46*Skrylar quit ()
04:06:50zezba9000count vars are built in the array types
04:07:02zezba9000You should use them
04:07:06Demoszezba9000: I do not follow... there are lengths, I do use them
04:07:14Demosactually I use iterators, which is nice
04:07:29zezba9000Let me guess you have one global Length var?
04:07:34Demoswhat?
04:07:36Demosno
04:07:48Demoslength of what?
04:08:13zezba9000For everything that represents the aspstract obj array of player?
04:08:55zezba9000Look i'm telling you, don't do what you are doing. Make a player class. When code starts to get complex it will save your life
04:10:01zezba9000No game dev job would ever let you do what you are doing
04:11:02DemosOK lets get concrete. Lets say my player has 5 "fields". Health, Texture, Mesh, and Position. I then have 5 arrays and when I make a new player I add an item to each array. I have 5 lengths, but tons of other stuff has meshes and positions and whatnot
04:11:31Demosbesides of all the things in your game storeing array length is never going to cause memory problems
04:11:43zezba9000They would never allow that in game dev
04:11:52zezba9000very bad thing to do
04:12:19Demoshttp://macton.smugmug.com/gallery/8936708_T6zQX#!i=593426709&k=BrHWXdJ ?
04:12:29Demosmike acton is a game developer, he ships lots of games
04:12:33zezba9000I would would have my boss looking for someone else if I started doing that
04:12:43Demoswarning: some of those slides are pretty gnarly PS3 perf stuff
04:13:46zezba9000I see some messed up code, but not what we are talking about
04:14:58zezba9000What you are doing should not even be done in C code.
04:15:42Demoswhat specific reason is "what I am doing" wrong. Why will it be harder to maintain/slower/worse/sad etc
04:16:56zezba9000http://pastebin.com/v9Hqeaij
04:18:12Demosnononononononononono why would i have a playerSize array, that is just bad
04:18:19DemosI have a size array and a health array
04:18:43zezba9000Show me how you would make the player in pastebin?
04:18:51Demosand storeing like your mesh and material with health is just bad
04:19:00Demoshttps://gist.github.com/barcharcraz/f7ed665fa352fa7917cf
04:19:18Demosthat is a static mesh, not a plater
04:19:21Demosbut you get the point
04:19:38zezba9000can you give an example with player?
04:19:46zezba9000I don't know how those objects are used in the system
04:21:30renesaczezba9000, I'm writing this whitespace FAQ clearing up misconceptions about it: https://github.com/Araq/Nimrod/wiki/Whitespace-FAQ
04:21:38Demoshttps://gist.github.com/barcharcraz/89949faacc8d88ba884d
04:21:59Demosand so on
04:22:37renesacDemos, the 'EntityID' would be the player class/struct?
04:22:53DemosEntityId is literally type EntityId = distinct int
04:22:58Demosbut yeah
04:23:11renesachow you call 'add' on that?
04:23:19DemosI have some stuff that can pack up an entity into one block of data if you need to like transmit it over the wire
04:23:42Demosadd is just proc add*[T](ent: EntityId, item: T)
04:24:58renesachum, that proc adds the item on it's own array, but refering to the EntityId?
04:25:22*darkf_ is now known as darkf
04:25:24DemosI map the name of each componet type (the T type param) to an identifier
04:26:03Demosthe arrays are private arrays in the module with add
04:26:16Demosso their storage is global, but their scope is not
04:26:19*OrionPK joined #nimrod
04:27:02zezba9000This is just silly. Why? Just contain it in a Player object and call genEntity(Types.PlayerType);
04:27:41zezba9000No you have to search an array object just to get a reference to a obj property?
04:27:46zezba9000**now you...
04:29:35zezba9000genEntity is your obj pool correct?
04:29:51zezba9000...is pulling from a pool?
04:30:19Demosyeah you do. But usually you care about all the components of a given type, and I sort by entity id so you can go though all the entities that share a common set of components in linear time. Note that this is /not/ true of the OOP approach, If I want everything that has a position and a mesh I can do that eaisly
04:30:31Demoswell it is pulling from the pool of 64-bit integers
04:30:44Demosremember EntityId is literally an integer
04:31:48zezba9000This seems slow...
04:32:00zezba9000You have to search the array to find properties...
04:32:16Demosright, but you access them all in order
04:32:19zezba9000When you could directly access them
04:32:20Demosthat is the entire point
04:33:05zezba9000what you still need a player class, even with this
04:33:26zezba9000So when you access transform its no entity[0].positon
04:33:35zezba9000its player.transform.position
04:33:47Demosno
04:34:09Demosit is transforms[some index].position
04:34:24Demosyou can have the entity id be the index into that array, but I do not
04:34:58renesacDemos, things can get deleted from that array, right?/
04:35:39renesacthen a index you had would not be valid anymore, opposed to a pointer to a player struct that would still be valid
04:35:40zezba9000renesac: yes what happens when you delete things?
04:35:40Demosfor me yes, but often it is better to just "disable" it
04:36:00zezba9000But then the index EntityID is wrong
04:36:11Demosyeah, I said you can do that, I do not
04:36:22DemosI store stuff densely
04:36:30renesacso you binary search in this case?
04:37:02Demosyeah, although if you have an index you can search for like 4-5 items around that index to see if you find your item
04:38:00Demosto make this faster you can store another array of EntitiyIds, each index is the entity id of the component in that index of the component array
04:38:08OrionPKlib/core/macros.nim(208, 21) Error: for a 'var' type a variable needs to be passed
04:38:15zezba9000To make this faster you could just have a Player obj...
04:38:36zezba9000and it would be more human readable
04:38:45renesacDemos, but then on each deletion you would have an O(n) operation updating the array of EntityIds
04:38:51Demosanother nice thing there is that the stuff in your component array is just plain data, you can actually copy that whole array right into a memory on your graphics card
04:39:20Demosrenesac: right, but deletions are rarely fast, even with OOP, you need to rebuild all kinds of structures
04:39:20zezba9000Demos: But you can't just do that
04:39:24zezba9000You must batch it
04:39:42zezba9000So only the obj transforms in order get passed and drawn
04:40:25Demosthat is not batching zezba9000, that is ordering by depth, which is not a great thing to order on unless you need transparancy
04:40:58zezba9000No, I mean occlusion culling
04:41:07renesacsure is nice to have homogeneous arrays, if you usually access one element type at time, it is more cache efficient
04:41:14zezba9000You must order an array of ONLY what needs to be drawn
04:41:24zezba9000and pass it to the GPU
04:41:47Demosand you do that with no perf loss. The code to figure out what needs to be culled needs to go though ALL the meshes/renderables anyways, and so you get a cache win from not pulling in stupid data. Then the renderer can look at that data and fetch the right thigns to draw
04:42:16renesacbut the code does seems more complex than if you did group things in a player object/struct
04:42:41Demosit is simpler code! it does not depend on anything aside from just what it needs
04:43:02zezba9000yes, you could do the same thing with a player obj. But when the time comes to draw, you run through the objects and batch them into array pools then..
04:43:24Demosright, but what if players are not the only thing in your scene
04:43:29zezba9000It is more complex code to read when you start doing a lot all over the place with 100s of files
04:43:58zezba9000Demos: The player is derived from the Entity obj
04:44:11Demosand the entitiy object grows without bound
04:44:17zezba9000sure why not
04:44:37zezba9000But the player obj just references the entity array with real names
04:44:46zezba9000So I can do Player.Transform
04:45:05zezba9000but I can only create a Enemy derived from Entity
04:45:13zezba9000and both have the dynamic array you want
04:45:15Demoszezba9000: why not is because if you have a huge entity object you will DESTROY your cache
04:45:51Demosand having an hierarchy does not work great, actually the thing I do is kinda an implicit hierarchy that is better than one I could design myself
04:46:35zezba9000Ok then have a single cache/pool, but you still should have a player obj
04:47:00zezba9000that derives from an entity that handles where it is in your global cache/pools
04:47:17Demosa cache/pool is not going to help you
04:47:39Demosbecause you still need to actually load all that data, which bings it into your CPU cache
04:48:45Demoshttp://www.gdcvault.com/play/1911/Theory-and-Practice-of-the is a persentation on how this kind of thing was actually used
04:48:53zezba9000anyway you look at it, you can have a player obj reference the data rather then index it
04:49:33zezba9000Yes you are making pools.
04:49:43zezba9000But you should still reference those pools by objs
04:50:35renesaczezba9000, but then the data will not be contiguous in memory, and it would have one or two extra indirections to iterate over all instances of the same type of data
04:50:40zezba9000That optamisation layer should exist. But should expose itself via objs
04:50:50DemosI have an exam tomorrow and need to sleep. I dont think OOP is a good way to design software. In particular I do not think modeling objects after the real world is a good idea in almost any situation
04:50:57*Demos quit (Remote host closed the connection)
04:52:12renesacif you do the same optimization than Demos, then your Player object would be the array index, and you would need to update all them in case of a deletion
04:52:38renesacwell, deletions seems costly on demos model, as you have a O(n) array reordering anyway
04:53:32renesacunless you use some rope/btree based array, but he did mentioned other costs
04:54:12zezba9000Yes you would have to have an entity pool I guess
04:54:40zezba9000But when you get back your player from the pool it link up to the transform array ect
04:55:19zezba9000There is also going to need to be a key.
04:55:44zezba9000Its going to need to be a dictionary, but one thats made of two arrays for each entity type
04:56:27zezba9000anyway i'm getting tierd too
04:59:30renesacdid you get a look at my whitespace faq?
05:00:11zezba9000what about it
05:00:50renesacyou were talking about the lack of braces in nimrod another day
05:01:17renesacis there some worry that you have that isn't covered in the faq?
05:02:36zezba9000On the line "const DeBruijnNumbersTable: array[32, int8]" is it required to tab/space out the lines below?
05:03:01renesac"After a continuation, the code can be positioned quite freely. The only rule is that the continuing line must be indented at least one level above the first line."
05:03:22renesacso you can't have them be on the same level as the first line
05:03:25renesacyou need some spaces
05:03:28zezba9000Can I do this: http://pastebin.com/DgeMAxp5
05:03:55renesacno, you need one level of indentation
05:03:58zezba9000So the answer is no then
05:04:07zezba9000Well thats why I don't like whitespace then
05:04:19zezba9000Its why I gave the example I did the other day too
05:04:37renesacis two spaces that troublesome?
05:04:55zezba9000If the IDE could handle white space then I would not care about brackets
05:04:57renesacselect a block and key 'tab'
05:05:12zezba9000yes it makes the code no longer a block
05:05:23renesac?
05:06:00zezba9000https://github.com/reignstudios/ReignSDK/blob/master/Platforms/Common/Reign.Core/Math/Matrix4.cs#L57
05:06:05zezba9000Thats the example I gave before
05:06:23zezba9000I like it when I can make a block with the brackets
05:07:27zezba9000I just find it easier to read when its on the same line
05:07:35renesacI don't understand, if you take the brackets out (and of course changed function declaration, etc), this would be valid nimrod
05:07:59renesacah
05:08:05renesacthe ( );?
05:08:27zezba9000so the 'return' can be on the same line as '(' ?
05:08:47zezba9000you said it must has at least one tab
05:08:52renesacyeah
05:09:00zezba9000well why though
05:09:21zezba9000the parser should be able to tell that '(' means what comes next
05:09:24zezba9000not a white space
05:09:48zezba9000Brackets define what white space fails to do
05:10:14zezba9000Or you could have an IDE define it, but then it would relay on the IDE
05:10:46zezba9000I simply have more control over how I layout any given block
05:10:51renesacand actually, you would need a parenthesis on the first line
05:11:23renesacas the function name alone is already a complete statement (for first class functions)
05:11:33zezba9000I just don't see anything wrong with brackets. I do see something wrong with ';' though
05:13:06zezba9000Brackets define lines. Thus you have the power to layout something is it bests sutes you. Ending marks serve no purpose for the human involved as a human understands the end bracket is the end of the line
05:13:39zezba9000A human can't understand if there is a tab vs 4 white spaces
05:13:44VarriountForgive me if I'm wrong, but in your example, it's the semicolon that allows you to do that.
05:13:45renesacbrackets are redundant, add more lines of code and, as I said on the faq, can get out of sync with the indentation
05:14:00VarriountNot the brackets.
05:14:09renesaczezba9000, you don't have to worry about tab vs space on nimrod
05:14:20renesacit will only accept spaces as indentation
05:14:23zezba9000Varriount: Yes in C#, but I don't like the ';' as I stated its not needed
05:14:36renesacand Varriount has a point
05:14:58renesacit is the ; not the brackets that let you put the parenthesis there
05:15:09zezba9000renesac: But it should not be is the point.
05:15:18zezba9000Don't take C# as my perfect example
05:15:24Varriountzezba9000: There are plans for a nimrod varient with brackets (look in the compiler directory at pbraces.nim)
05:15:27zezba9000Its just the C style brackets I find usful
05:17:04zezba9000Varriount: https://github.com/zah/grip-lang/blob/master/compiler/pbraces.nim
05:17:05zezba9000That?
05:17:32VarriountYes. It will be where the braces parser code is located.
05:17:49VarriountOperational word being the future tense "will"
05:18:04renesacVarriount, why again nimrod needs an extra level of indentation for a line continuation?
05:18:08zezba9000I don't see any '{..}' brackets?
05:18:14renesacgiven an unfinished statement in the previous line?
05:18:18Varriountrenesac: Where?
05:18:26renesacas redundancy to be able to give better error messages?
05:18:52zezba9000Redundent means it no longer has a use
05:18:55Varriountrenesac: It helps reduce ambiguity when parsing.
05:19:11zezba9000Brackets allow me to line up constructor blocks how I like them
05:19:15zezba9000thus its not redundend
05:19:42renesaczezba9000, it is not the brackets, it is the ;
05:19:49renesacunless you are adding brackets to every line
05:19:52Varriountzezba9000: Yet, as I pointed out in your example, it is not the braces that allow you to put those in a block, it's the semicolon
05:19:55zezba9000yes ';' is rudundent
05:20:16renesacno, they are not redundant in your example
05:20:31renesacthey are what makes possible to put the open parenthesis in it's own line
05:20:36VarriountThe C# parser knows that the 'return' statement continues until the semicolon.
05:20:38*nequitans quit (Ping timeout: 240 seconds)
05:21:17zezba9000But the C# should just look for '{' or '}' instead
05:22:17VarriountThat's not how it works though.
05:22:22zezba9000I know
05:22:22renesacnot for deciding the end of a line
05:22:27renesac{} delimit blocks, not lines
05:22:42zezba9000yes but block are what matters, not lines
05:22:58renesacbut your return is a line
05:23:30zezba9000what do you mean?
05:24:01renesacthe return, open parenthesis, elements, and close parentesis are a single line
05:24:06renesacfor the compiler
05:24:10Varriount^
05:24:18zezba9000or ic what you mean
05:24:33zezba9000ok well yes
05:24:35renesacand coincidently the block is a single line too
05:24:47zezba9000not a method block
05:24:53zezba9000its has more then one line
05:25:13zezba9000it states here are lines for a given context
05:25:38renesacthe 'FromMatrix3' has a single line for the compiler
05:25:46zezba9000A would say a line should break "IF" there is no '(...)' brackets
05:25:50renesacunless you are counting the } after the ; as another line
05:27:36renesaczezba9000, a better way to say it would be: you should have a line break when you reach the end of a line with a complete statement.
05:27:45zezba9000http://pastebin.com/J75QsrME
05:28:06renesacif it is not complete (an '(' w/o the corresponding ')' for example) you look at the next line
05:28:08zezba9000oops http://pastebin.com/c31wZ3q2
05:28:15zezba9000has ; marks in there
05:28:25renesacnimrod does essentially this, but adds the additional constraint of one extra indentation level
05:28:28zezba9000renesac: yes correct
05:28:49zezba9000What do you think of my example?
05:29:05renesacthe second one would also be valid in nimrod
05:29:13zezba9000Line break with a RETURN ONLY happens if there was no '(..)' brackets
05:29:16renesacas you can't end a statement with a =
05:29:36zezba9000I think it should not as thats what the ';' mark was for
05:29:38renesacyes, you rule is more restrictive in that sense
05:30:20renesacwhy it should not be allowed?
05:30:47zezba9000Because you normally don't think that way. Keep in mind I have the use of {..}
05:30:57renesacthe fact is that nimrod would treat those 3 as valid
05:30:58zezba9000Its not white space driven in my example
05:31:17zezba9000That example does not depend on white space
05:31:32zezba9000it depends on how the human thinks about a line
05:31:40zezba9000At least how I think people do
05:31:55renesacit depends on line breaks (whitespace)
05:31:57renesacright?
05:32:12zezba9000No it does no depend on whitespace in: http://pastebin.com/c31wZ3q2
05:32:26zezba9000It depends on brackets
05:32:53renesachow the compiler knows that the statement 'int i = 0' has ended?
05:32:56zezba9000a new line is value 'IF' there was no '(' bracket before it
05:33:06zezba9000it the '(' was not closed I mean
05:33:19zezba9000Because there was a return
05:33:20renesacbecause it has a *new line( after it, and no open parenthesis
05:33:25zezba9000yes
05:33:37zezba9000so if it has (int i = 0
05:33:42renesacso it depends on line breaks (whitespace)
05:33:43zezba9000the line would still be open
05:33:48renesacright
05:34:15zezba9000yes and normally when you hit return on the line "int i = 0" it would make sense to a human
05:34:30renesacyou can allow for the dangling '=' in the same way
05:34:37zezba9000and so would "(int i = 0... not being the end of the line
05:35:01renesacif a line has a operator lacking it's right operator, then the line is still open
05:35:02zezba9000ya
05:35:09renesac*operand
05:35:24renesacthen example two would be valid
05:35:25zezba9000ya operators don't effect lines
05:35:30zezba9000only brackets
05:35:47zezba9000no it would not
05:36:06renesachttp://pastebin.com/DgeMAxp5 <-- so this would be invalid under your rule?
05:36:10renesacno brackets on the first line
05:36:15renesacso it has ended on the line break
05:36:18zezba9000because there was a return without there being an open bracket of {...
05:36:44zezba9000or (...
05:36:57zezba9000yes it ends on the line break without ( or {
05:37:26renesacyour FromMatrix3 would also be invalid
05:37:48zezba9000no it would be valid
05:38:05renesac'return new Matrix4' <-- no ( { in this line
05:38:11renesacso it has ended
05:38:24zezba9000http://pastebin.com/yLULzSUq
05:38:27zezba9000thats valid
05:38:47zezba9000ignore the ';' I left in there
05:38:51zezba9000forgot to take that out
05:38:59renesac'return new Matrix4' <-- no ( { in this line
05:39:07renesacso it has ended
05:39:14zezba9000its an OR and AND
05:39:17zezba9000( OR {
05:39:19renesacthe ( would be another statement
05:39:22renesacyes
05:39:30renesacno ( OR { in that line
05:39:34zezba9000but ( is required for method and if starts
05:39:45renesac?
05:39:56renesacso another rule?
05:40:04zezba9000there is a ( or { on every line.
05:40:11zezba9000No there is no other rule
05:40:15renesacI don't see any on line 3
05:40:33*isenmann joined #nimrod
05:40:39VarriountHi isenmann
05:40:39zezba9000ya why would that need one?
05:41:00zezba9000renesac: { came before line 3
05:41:02renesaca line break w/o an opening ( or { means that the line has ended, righ?
05:41:07zezba9000so its still a line
05:41:26renesacthe { is a block delimiter
05:41:38zezba9000no ) OR } OR 'Return' means the line ends
05:42:14zezba9000but 'Return' ONLY ends a line if ( OR { was not closed with ) OR }
05:42:32renesachum, so you could not do 'var res = new Matrix 4 \n ( ... ) \n return res'
05:42:52renesacit would be special case for blocks consisting of a single return line
05:43:19zezba9000yes I guess that would have to be a special case
05:43:48zezba9000So if you are declairing something it expects ( OR { before the line ends
05:44:12renesacok
05:44:24renesacI don't see that much gained from this special case
05:44:35renesacthat justify {} around every block
05:44:50zezba9000you can the aility to make blocks as the Matrix example
05:44:57zezba9000**you gain the...
05:45:22renesacI don't remember needing to do something like that
05:45:53zezba9000Well I use it in my Matrix example
05:45:55renesacand I woudn't mind having to indent a bit more the parenthesis (and put the first one in the first line, actually)
05:46:12zezba9000most people don't
05:46:19renesacnimrod could implement this special case, but special cases are ugly
05:46:45Araqer I think we indeed special cased the closing ]
05:46:56Araqdid you try?
05:47:11Araqbut I only skimmed this conversation...
05:47:36zezba9000Araq: http://pastebin.com/c31wZ3q2
05:48:04renesacAraq, indeed the closing ] can be at the same indentation level as the firs line
05:48:07zezba9000I was saying how that example is valid and no white spaces needed
05:48:11renesacbut the opening one cannot
05:48:32renesaczezba9000, you need new lines, that are whitespace
05:48:46zezba9000Better: http://pastebin.com/FZwH78LY
05:48:47renesacyou only don't enforce indentation
05:49:13zezba9000yes no indentation is needed, as in it doesn't matter in that example
05:50:11renesacall those are valid in nimrod, as you give the needed two spaces from the first line
05:50:35renesacoh, in the last you need a ':' after the if
05:50:37zezba9000Araq: Most clear example: https://gist.github.com/zezba9000/10015396
05:51:11zezba9000renesac: The last example in the gist I posted is not valid in nimrod
05:51:27Araqzezba9000: nor should it be valid
05:51:34Araqas it makes no sense
05:51:36Araqso yes
05:51:39zezba9000Yes it does
05:51:42zezba9000You missed how so
05:51:52Araqwe restrict your freedom to write crap
05:52:07Araqbig deal...
05:52:35zezba9000Araq: No as you can do: https://gist.github.com/zezba9000/10015411
05:52:38zezba9000...with it
05:52:41VarriountOhi Araq
05:52:47zezba9000Its crap
05:52:53zezba9000I just gave an extreme example
05:53:01zezba9000** Its NOT crap lol
05:53:12VarriountNote to self: Do not employ Araq as a diplomat
05:54:17renesacthat last example is only possible after the last return keyword in a funcion in your hypothetical language, or in a language that needs ; to delimit line ends
05:54:53zezba9000No or a closeing bracket }
05:55:05zezba9000Either closes the line
05:55:06renesacok, after any return keyword
05:55:49renesacbut you theoretically don't need the }
05:55:54zezba9000yes you do
05:55:55renesacthe indentation of the block could suffice
05:56:18renesacunless you want to go lower than the indentation of the first line
05:56:18zezba9000as it closes { that is required by the method.
05:56:29zezba9000Or yes you could make it so {..} is not required as well
05:56:33zezba9000if you wanted both I guess
05:56:38renesacyes
05:57:06renesacthat being possible is not a virtue of {}, but of the special case around the return
05:57:16zezba9000so you can still do you white space stuff, but its just for feel and nothing more
05:57:59zezba9000ya guess so
05:59:21zezba9000So in that theoretical model, you can use white space like Nimrod is now, but you don't have to. You can only use the C way
06:00:15zezba9000So it a block formats better with things lined up on the X axis you can do so with the use of brackets (..)
06:00:21renesacthe requeriment for an extra indentation makes it easier to spot continuation lines, and makes possible for the compiler to give better error messages
06:00:37zezba9000renesac: Same with ';'
06:00:45renesacit is not a bad trade of to get rid of ;
06:00:47zezba9000But humans don't need it
06:00:47renesacyeah
06:00:55renesacI agree
06:01:01renesacand I argue the same about {}
06:01:12renesachumans need the indentation, not the {}
06:01:29zezba9000I think both can be useful
06:01:48zezba9000I find it easier to find a block or give scope with {}
06:01:49renesac{} lets you go whack on indentation
06:02:17zezba9000Yes but no one does that, or should not.. you can write shit code in anything.
06:02:26renesaczezba9000, editor highlighting of indentation levels makes easy to spot a block
06:02:53renesacI have it enabled even when coding in C
06:03:17zezba9000but in this model you would be able to give a internal method scope too "scope {}
06:03:34zezba9000I mean with {} if you wanted them
06:03:36renesac?
06:03:44renesacnimrod have 'block:'
06:03:49renesacI'm not sure if that is what you mean
06:03:49zezba9000yes I know
06:04:03zezba9000scope block whatever :)
06:05:07zezba9000Problem is {} is required for a sub block in a method
06:05:25renesacin C#, not in nimrod
06:05:27zezba9000if white space is not to be considered {} is required
06:05:44zezba9000I mean in the hypothetical lang
06:05:47renesacindentation you mean
06:05:52zezba9000yes
06:05:54renesacwhitespace is too general
06:06:25zezba9000k so yes with no indentation taken into account {} is needed for sub method blocks
06:06:35renesacyes
06:06:44renesacfor any type of block actually
06:07:05renesacwell, nimrod has (;) , but that is equivalent to {;} in C#
06:07:10zezba9000Well it would make it consistent to keep them reqardless
06:07:46zezba9000So you can use ; in Nimrod, but you don't need to?
06:07:53renesacbasically, you can chose if you want your language to delimit blocks with indentation or {}
06:07:57renesaczezba9000, yes
06:08:14renesacyou can end any line with it
06:08:17zezba9000What I thought Nimrod could not use {}
06:08:19VarriountAraq: I'm about to go to bed - Is there anything you want me to do?
06:08:29renesacyes, {} are for sets in nimrod
06:08:50zezba9000but if Nimrod does use {} it still required the line indent for the first {
06:09:01renesacbut you have: http://build.nimrod-lang.org/docs/manual.html#statement-list-expression
06:09:10renesacbut not everything can be written inside it
06:09:26renesacnot sure whether it is a bug or a planned limitation
06:09:45zezba9000So you can't do: https://gist.github.com/zezba9000/10015517
06:09:55renesacyeah, I think indentation is still required
06:10:09renesacthey are used most for stuffing things in a single line
06:10:21zezba9000Hmm well if Nimrod supports {} that should negate indentation
06:10:28zezba9000then you could do both
06:10:38renesacI don't think code should behave diferently from what it looks
06:10:57zezba9000Not sure what that means
06:11:07renesachumans look first at the indentation to see block boundaries
06:11:08VarriountAnyway, I'm off. Good luck renesac
06:11:10zezba9000How code looks mades it means differnet things
06:11:17zezba9000**makes it mean
06:12:04zezba9000renesac: Yes I agree, but they also look at brackets to give context
06:12:21zezba9000Like on a single line for ((1+2) * 3)
06:12:33renesacI've already got C code to read with mixed spaces and tabs..
06:12:49renesacbanged my head for a while trying to understand it till I noticed the mixing
06:13:14zezba9000Visual Studios will fix this for you
06:13:20renesacthen I needed to make a search and replace to get rid of tabs
06:13:24renesacso I could read the code
06:13:28zezba9000You should set your IDE to use TABS
06:13:30renesac{} alone don't cut it
06:13:35zezba9000then you don't have the issue
06:13:50renesacit was code I downloaded
06:13:56renesacwith mixed tabs and spaces
06:13:57zezba9000In VS you can just have it auto do it for you
06:14:15zezba9000Well you just use auto formatters
06:14:21renesacVS discovers what tab stop the original coder used?
06:14:29renesacah, right
06:14:38zezba9000no it formats to your style settings
06:14:46renesacyes, I use it too
06:14:53renesacon code blocks though
06:15:02zezba9000Its Edit->Advanced->Format Document
06:15:27renesacuseful especially when getting a code improperly pasted in a forum or blog comment
06:15:37renesacthat is also unreadable w/o indentation
06:16:18zezba9000lol what the code you downloaded?
06:16:49renesacan disk bwt implementation
06:17:49renesacanyway, in python3 and nimrod you don't have those problems
06:18:38renesacno mixing of tabs and spaces, and the code you see on internet will aways be readable (otherwise it would be useless, and the person posting would have fixed it)
06:18:40zezba9000I hate Phyton lol
06:19:00zezba9000You don't have that problem in C++ either if you set your IDE to use Tabs
06:19:13zezba9000I don't know why the hell its not set that way by default
06:19:30renesacI aways set my IDEs to convert tabs to spaces
06:19:39zezba9000Well thats your problem
06:19:47renesacwhy?
06:19:58zezba9000Its way easier to backspace C#/C++ code with tabs
06:20:01renesacwhen set to use tabs, it is more likely a space get added by accident
06:20:03zezba9000in VS anyway
06:20:24zezba9000Set it to block mode
06:20:29renesacwell, most editors have the option to go one indentation level down when backspacing on the start of the line
06:20:40renesaceven when using spaces
06:21:05renesacand when working with blocks of code, you can aways 'shift' + 'tab' or equivalent
06:21:19zezba9000Still its bad, because it confuses the IDE is its mixed
06:21:24zezba9000THus keeping tabs is best
06:21:30renesacI don't mix
06:21:32renesacI use only spaces
06:21:38renesacin python that is PEP8
06:21:54renesacin nimrod is enforced by the compiler
06:22:15renesacand in C is the coding guideline in many places, the kernel for example (8 spaces)
06:22:21zezba9000Python pisses me off. How you access base classes ect
06:22:26zezba9000so ugly
06:22:35renesacsuper?
06:22:49zezba9000no its like __class__ or something right?
06:23:37zezba9000renesac: Well I disagree with the C standard for C and the kernel then :)
06:23:43renesacmaybe, I've never used it though
06:24:13zezba9000O well I used it for making a Blender plugin... god I knew I didn't like it before, but after that I was like gag
06:24:29renesaczezba9000, the problem of using tabs is that you then want to align something
06:24:47renesaclike my first example:
06:24:47renesacsomeReallyLongProc(withMany, commands,
06:24:48renesac that, may, be, broken,
06:24:48renesac in many, lines)
06:24:48zezba9000It makes it easier
06:24:58renesacit will look aligned to you
06:25:01zezba9000I don't align things like that
06:25:15zezba9000I disagree with how a lot of C++/C# devs algin things
06:25:27renesacbut anyone with a different tab stop than you will see this wrong
06:26:11renesacwell, I often do align things like that, when it don't mean many more lines of code
06:26:26renesacso I use space instead of tabs
06:26:34renesacso I have the tab key as an quick way to add spaces
06:26:37zezba9000sure but unless i'm working on someone elses code base with there standard, they can suck it. I would do that like: https://gist.github.com/zezba9000/10015607
06:27:07zezba9000I like making it fit into a block. Easy to see
06:27:11renesacyou forgot the ';'
06:27:13renesac:P
06:27:21zezba9000Well I don't like that stupid thing lol
06:27:30renesacit isn't return for that special case to work
06:27:34zezba9000Do you know how many times in C++ that stupid thing has fucked me up
06:27:45zezba9000Fuck the ';' mark lol
06:27:58renesacI also hate ';'
06:28:02zezba9000When you do intaliser lists, the ';' mark makes no sense
06:28:13renesacbut w/o it you can't write function calls this way
06:28:20renesacthat you like
06:29:06zezba9000well yes but {..} is more important to me then having to do ';'
06:29:26zezba9000In C# the ';' doesn mess you up
06:29:39zezba9000Because the real time parser tells you its an error
06:29:53zezba9000but in C++ holly god dam it will go off in no-mans land
06:30:37renesacwell, if you had to work with a language w/o ';', how you would do that function call?
06:31:07zezba9000I would do it like I posted: https://gist.github.com/zezba9000/10015607
06:31:20renesacit would not work
06:31:23zezba9000I would group each line in context of what those vars being passed in mean
06:31:34renesachow it will know to continue the first line/
06:31:34renesac?
06:31:39zezba9000In the hypithetic lang it would I gave you
06:31:48zezba9000**hypothetical
06:32:07renesacI don't follow
06:32:16renesacI would group each line in context of what those vars being passed in mean <-- ?
06:32:28zezba9000Because the syntax tree contains "someReallyLongProc"
06:32:34renesacyou have a function name in the first line
06:32:34zezba9000So it knows its a method
06:32:42zezba9000C# gets around confix using this all the time
06:32:54renesacyour language don't have first class functions/methods?
06:33:06renesacC# gets around because it has ';'
06:33:56zezba9000But mine gets around it with {} OR ()
06:34:46renesacin nimrod 'var x = someReallyLongProc', x() would now be an alias for someReallyLongProc()
06:34:52zezba9000"someReallyLongProc" is a method defines in the class your typing in. So when "someReallyLongProc" gets hit it requires '(' before the line fully starts
06:35:00renesacyou would need 'var x = someReallyLongProc('
06:35:12zezba9000No
06:35:13renesacfor nimrod know that it needs to look at the parameters in the next line
06:35:31zezba9000Becuase "someReallyLongProc" is a method the compile now requires '(' to be next
06:36:08renesachow would you pass methods as callbacks in your language?
06:36:09zezba9000any whitespace before '(' mark doesn't matter if a method came before it
06:36:49renesacor alias an method name
06:36:50renesac?:
06:37:09zezba9000If you are already in a method block (...) then its uses differently
06:37:25renesaclike 'var p = some.long.namespace.printingfunction'
06:37:32zezba9000You mean like "Foo (someReallyLongProc) {...}" ??
06:37:50zezba9000someReallyLongProc is passed to a function pointion
06:37:53zezba9000**pointer
06:38:04renesacyes
06:38:09renesacp would be a function pointer
06:38:19renesacbut nimrod has type inference
06:38:27zezba9000o ic your point
06:38:29renesacso you can type just what I did
06:39:11zezba9000Well I would require a sybole for that then maybe "var p = &some.long.namespace.printingfunction"
06:39:13zezba9000Or something
06:39:30zezba9000**symbol
06:40:21zezba9000Or you could do "var p = delegate(some.long.namespace.printingfunction)"
06:40:35zezba9000or "var p = delegate some.long.namespace.printingfunction"
06:41:06zezba9000so "delegate" would define that a method name without (..) is required
06:41:33renesacright
06:41:51renesacyeah, that would be a design choice
06:42:12zezba9000I think it would give context to what is going on
06:43:10Araqso ... your problem is {}is already taken in the default syntax, zezba9000 ?
06:43:18renesacbut I guess it is too late to change it in nimrod, even if it indeed does not have any other downside
06:43:32renesacAraq, he wants to call a function like this:
06:43:32renesachttps://gist.github.com/zezba9000/10015607
06:43:56renesacwith the ( ) in the same column as the first line, in separated lines
06:44:42zezba9000Araq: not sure I follow what you mean by {} being already taken? {} would be used in my idea
06:45:21Araqnever mind. I keep thinking you're trying to be helpful.
06:45:45zezba9000renesac: Or: https://gist.github.com/zezba9000/10015517
06:46:23Araqwe could allow that but I don't see the point
06:46:24zezba9000lol I'm getting hammered with difficult question from renesac
06:46:38zezba9000To see if there are any flaws in my idea
06:47:25renesacAraq, the point is that it is his style preference, and in some cases it indeed does look nice
06:47:44renesacI personally don't really care though
06:47:45zezba9000Araq: The point being, you have the option to layout a block of code how you feel it bests fits and is most human readable. No indentation required
06:48:06renesacoh, and I'm agains the 'no indentation required' part
06:48:30zezba9000Well Don't get me wrong, you should indent a method and many thing
06:48:59zezba9000I think there is something to be said for this layout in some cases though: https://gist.github.com/zezba9000/10015517
06:49:04Araqzezba9000: and yet the cost is a redundancy which leads to questions like "what if the compiler and the layout disagree"
06:49:27Araqand also it leads to cascading }}}} which take up valuable screen space
06:49:32zezba9000Its not redundent if I have use for it. It helps me parse whats going on faster
06:49:39zezba9000To me its not redundent
06:49:40Araqwelcome to world of trade-offs
06:50:08Araqit's obvjectively redundant, there is no "to me" here
06:50:09zezba9000No cascading happens with or without }}}
06:50:25zezba9000You simple don't use the } symbol and have a return whitespace instead
06:50:46zezba9000To you there is a "to me"...
06:51:04Araq"return whitespace" doesn't cascade
06:51:14zezba9000The same amount of space is the same in both
06:51:36zezba9000Do you litterally mean people put }}}} in a row?
06:51:39zezba9000No one does that
06:51:47Araqno that would be great
06:51:54zezba9000aww sry but I see your point
06:52:02Araqbut indeed nobody does that so it takes up pages of space
06:52:03renesachttps://gist.github.com/ReneSac/f3afa585841d72df2d02
06:52:08zezba9000no that would be so hard to parse
06:52:19renesac<-- you can't have this density with } in their own lines
06:52:58Araqzezba9000: the Lisp people do use ))))) without the newlines and it's easy to read, for me
06:53:00zezba9000Having a little extra space is blown way out of perpotion here. Its not a bad thing when it makes it easier to sperate whats going on
06:53:40zezba9000I'm going to convert renesac code rly quick to compare
06:54:00Araqit's not "little" extra space, it makes a factor of 1,5 to 2 for many things
06:54:38zezba9000I don't know what code your looking at. When you have huge blocks like that its best to give them space requardless of {}
06:55:34zezba9000renesac: is [A] a template method?
06:55:57renesacA is a generic type
06:56:06zezba9000k cool thought so
06:56:09renesacyes, the proc is generic
06:56:26renesacthis is from tables.nim in the std library
06:56:44zezba9000well let me see if I understnad enough to convert it
06:57:14renesacit was the first relatively deep nested thing I found
06:58:16Araqzezba9000: this number comes from converting thousands of lines of Pascal to Nimrod where Pascal takes up the same amount of screen space as a C-like language
06:59:04zezba9000I'm sure its small, I'm just saying that super compressed code doesn't mean its a good thing in some cases.
06:59:18zezba9000It can be so compressed its hard to parse whats going on
07:00:57zezba9000let me finish the conversion so we have something better to compare
07:01:50zezba9000Is the "div" = "/" ??
07:02:06renesacinteger division
07:02:06renesacyes
07:02:10zezba9000k
07:02:15renesac'/' is aways float division
07:02:24zezba9000what?!
07:02:43zezba9000Why is it not the one that doesn't loose resolution?
07:03:04zezba9000**lose
07:03:39zezba9000"var 1.0f / 1.0d" should return a double in my mind
07:03:42renesacyou do have to convert explicitly the operands to float (by float I mean 32 or 64bit float)
07:03:47zezba9000That sounds like what VB .NET does
07:04:02zezba9000You end up getting bad performance
07:04:07renesac'float' in nimrod is usually a 64bit float
07:04:19renesacor a double as called in many languages
07:04:31zezba9000ok ic
07:04:34renesacyou have float32 and float64 to specify
07:04:38renesacthe exact size
07:04:54renesacfloat is the 'fastest float', and is float64 in x86
07:04:59zezba9000but if I do "var i = (float32)1 / (float64)1" is it 64 or 32 bit
07:05:10zezba9000what bit is 'i'
07:05:20renesacI think 64bit
07:05:24Araqfloat64 but it helps to learn the syntax first
07:05:41zezba9000ok cool
07:06:02Araqbut I know, there is no need to learn when you can argue about minor asthetic details instead
07:06:30Araqrenesac: actually the spec changed and 'float' is always 'float64' now
07:06:33zezba9000I understnad what is going on. This is all about the details
07:06:43renesacoh, that change got throught?
07:06:51zezba9000Araq: How come
07:06:52Araqyeah
07:06:57renesacI remember seeing the issue on github
07:07:04zezba9000I like the sound of float being the bit of the build?
07:08:00renesaczezba9000, you can aways alias your own float type, I guess...
07:08:01zezba9000if float was changed to 64bit all the time, it might be useful to have a 'Num' keyword or something idk
07:08:10Araqthere were issues with operator overloading and the fact that math uses 'float' everywhere but wraps C's double functions
07:08:24zezba9000float being CPU agnositc makes so much sense though :)
07:08:26Araq*with overloading
07:08:41Araqyeah we need floatx for performance
07:09:00zezba9000aaa yes floatx is the best name for it
07:09:08zezba9000but then why not keep float at 32bit?
07:09:16zezba9000would make porting so much easier
07:09:35renesacby 'floatx' he meant 'float32' or 'float64'
07:09:48Araqrenesac: no I did not
07:09:53renesacoh
07:09:56zezba9000what rly?
07:10:00zezba9000what did you mean
07:10:03renesacok, I missunderstood
07:10:27Araqtype floatx = when defined(x86): float64 else: float32
07:10:56Araqzezba9000: I wanted to improve the naming of things and "double" is a horrible name
07:11:00zezba9000then how is that not what renesac said?
07:11:14Araqargh
07:11:18Araqcommunication is hard
07:11:20zezba900032bit for x86 and 64bit for x64
07:11:23renesaczezba9000, I though 'x' was placeholder for a number
07:11:24zezba9000yes I know lol
07:11:45renesacI'm going sleep
07:11:51renesactoo late already
07:11:54Araqnowadays I would have picked double and float and half
07:12:03Araqsince that's what IEEE uses
07:12:14*nande quit (Read error: Connection reset by peer)
07:12:14zezba9000o well whether or not you ment it. floatx is a great name for a compile determined type like IntPtr in C# or soemthing
07:12:31AraqI meant it. and thanks. lol
07:12:44zezba9000ya thats whats shader langs use to.
07:13:10renesacAraq, and 'byte, short, int, long'?
07:13:12renesac:P
07:13:14zezba9000or err HLSL uses float16 instead of half
07:13:30renesac(that is D's naming convention, which I like too)
07:13:33zezba9000renesac: I'll post the converted file so you can see it later
07:13:34Araqrenesac: perhaps
07:14:07renesacI would be pro it, if it wasn't already that late
07:14:14zezba9000I like float = dynamic at compile-time. float32, float64, float16, float10 ect
07:14:17Araqwhat we have now is nice, but confusing for beginners
07:14:22renesacwell, now really going
07:14:37Araqbye
07:24:00zezba9000renesac: This is how I would right it if I got everything right: https://gist.github.com/zezba9000/10016041
07:26:33zezba9000anyway i'm getting off here too
07:31:33*BitPuffin joined #nimrod
07:32:58*zezba9000 left #nimrod (#nimrod)
08:08:06*faassen joined #nimrod
08:29:07*io2 joined #nimrod
08:39:37*silven_ is now known as silven
09:30:20*shodan45 quit (Quit: Konversation terminated!)
10:03:53*supporters quit (Remote host closed the connection)
11:02:35BitPuffinping fowl
11:03:56Araqpong BitPuffin
11:13:00BitPuffinAraq: hey fowl
11:19:10*io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist)
11:29:02BitPuffinwas fowl KIA?
11:40:17*delian66 quit (Read error: Operation timed out)
12:11:58*io2 joined #nimrod
12:22:14NimBotAraq/Nimrod devel be48988 Araq [+1 ±2 -0]: fixes #1063
12:25:44*ics joined #nimrod
12:34:38EXetoCok so I forgot to enable dead code elimination and that's why it tried to load every OpenGL proc
12:45:59BitPuffinEXetoC: stOPID
13:05:15*BitPuffin quit (Ping timeout: 255 seconds)
13:14:58*BitPuffin joined #nimrod
13:18:31*darkf quit (Quit: Leaving)
13:46:03EXetoCBitPuffin: yeah maybe, but you are fat and stuff
13:46:12NimBotAraq/Nimrod devel 45817bc Araq [+0 ±1 -0]: make tests green again
13:46:29*faassen quit (Remote host closed the connection)
13:53:45*vendethiel quit (Ping timeout: 255 seconds)
13:54:07*Mat3 joined #nimrod
13:54:21Mat3hi all
13:54:30*vendethiel joined #nimrod
13:57:00*vendethiel quit (Read error: Connection reset by peer)
13:57:13*Guest78262 quit (Ping timeout: 240 seconds)
13:59:01*gabber808 joined #nimrod
13:59:10*Guest78262 joined #nimrod
14:00:35gabber808Hi everyone. I am finding the indentation rule a little stifling. Lets suppose I have a with events loop (sdl), and within that a while loop. Therefore I have two indentations. How should I be managing the indentation? Four single spaces? I have set the tab on my editor to represent two spaces, yet the compiler doesn't seem to like this.
14:01:28Araqyeah use four single spaces
14:01:39Araqmake your editor emit spaces when you press tab
14:01:56Araqif your editor can't do this, get a real one
14:02:55gabber808OK, thanks Araq. BTW, with help from Dom (& your earlier help) I eventually got the SDL working. DOM managed to find all of the 1.2 sdl dll files
14:03:11Araqyeah I know, I read the logs
14:03:42gabber808error: tabulators not allowed.
14:04:01*vendethiel joined #nimrod
14:04:03gabber808Does this mean there is something wrong with my use of tabs
14:04:08Araqyes
14:04:18Araqmake your editor emit spaces when you press tab
14:04:38gabber808do you mean omit?
14:04:59Araqemit as in "emit"
14:05:17Araqin fact, juse use Aporia
14:05:19Araq*just
14:05:43gabber808I am using Jedit. I couldn't seem to compile Aporia
14:06:41Araqhttp://nimrod-code.org/download/gtk.zip
14:06:49Araqhttp://nimrod-code.org/download/aporia.zip
14:06:59Araqold but working build of Aporia
14:07:33gabber808Thanks
14:07:41*vendethiel quit (Remote host closed the connection)
14:08:58gabber808Where should I place the gtk files?
14:09:21Araqunzip both into a common directory
14:10:00Araqbbl
14:10:24gabber808There are 165 files with the same name (when I unzip both into a common directory). Is it ok to overwrite?
14:12:40*vendethiel joined #nimrod
14:15:00renesacgabber808, I think you need to enable 'Soft (emulated with spaces) tabs' in jEdit editing options
14:16:08renesacand go in 'Edit -> Indent -> Tabs to Spaces' to fix what you did so far
14:18:24gabber808Hi renesac. I tried that. Let me try again
14:22:04gabber808I am still getting invalid indendation error. I have "automatic indentation: full" , "tab width: 2" and "indent width: 2" + soft
14:22:08renesacdon't forget to convert the tabs you already typed
14:23:19gabber808yes, I deleted them and retabbed
14:23:33renesacpaste your code somewhere for we to see
14:23:38renesaclike a gist
14:24:24EXetoCare you able to select individual spaces?
14:24:44gabber808Thanks. It is complaining about line 10:
14:24:46gabber808http://pastebin.com/4c1EhqjQ
14:25:16EXetoCcomplaining about what?
14:25:34gabber808invalid indentation
14:26:29EXetoChm, x++?
14:27:28renesacyeah, that is the problem
14:27:38renesacnirmod don't have postfix operators
14:27:44renesac(except [])
14:28:03gabber808I see, thanks both. So it wasn't actually an indentation error, despite it reporting that !
14:28:03renesacyou want x.inc
14:28:08EXetoCyeah, deal with the errors in series
14:28:27renesacor inc(x)
14:28:37renesacor x += 1
14:29:01renesacI made a `++` prefix operator in my bithacks module though
14:29:04EXetoCinc is the most common for ints. "inc x" works too. I prefer that one
14:29:33gabber808or x=x+1
14:29:51renesacyes
14:30:30gabber808well, my animation is nearly working. Just need to find how to clear the sdl surface
14:31:49EXetoC'graphics' can't be used alone?
14:32:08EXetoCI haven't used it so I wouldn't know
14:33:14BitPuffinEXetoC: :'(
14:33:28BitPuffinEXetoC: now that's not very nice ;_;
14:33:39*Demos joined #nimrod
14:34:00gabber808What is graphics exactly? Doesn't it use SDL anyway? Is it a different set of commands?
14:34:23BitPuffingabber808: believe it's a higher level api that uses sdl in the background
14:35:05gabber808We could really do with a bit more documentation on how to use these things
14:36:14BitPuffinit's there somewhere
14:36:26*severholding joined #nimrod
14:40:35gabber808Found it under "other". I'd have thought it would be under graphics !
14:43:44Demosyeah the graphics package could use more docs. There are some tests and examples at the end of graphics.nim though
14:44:03DemosI know directing you to look at the source of the module is not ideal, but that is how it is
14:45:10EXetoCBitPuffin: :p
14:45:44gabber808And here is my first animation if anybody is interested ! ,..
14:45:45gabber808http://pastebin.com/4ny1aLFM
14:46:40Demosgabber808: protip: I bet you can render a cairo memory buffer with the graphics module, that could be good if graphics lacks something you need
14:48:16*severholding quit (K-Lined)
14:48:17gabber808I think graphics/sdl will be fine. The only thing that is holding me back a little is having to compile/debug through the console everytime to find errors.
14:50:53EXetoCthat's a given ;)
14:51:12Demosgabber808: I think nim-lime and zach's vim plugin let you compile
14:51:30DemosI do know that syntastic works if I have nim-lime (not that well, but it catches some errors)
14:51:37Demosnimrod's compile times are wonderful as always
14:51:52EXetoCnim-line?
14:51:55EXetoCit works pretty well imo
14:51:58Demossorry, nim-lime
14:52:18Demosoh no, syntastic
14:52:18EXetoCyou sure? :p
14:52:45Demosand I have not noticed nim-lime's idetools driven completion, but my project has subfolders and that could confuse it
14:53:36EXetoCwhere do I find this ungoogleable thing that is nim-line?
14:53:40EXetoClime
14:56:18gabber808i couldn't get nimlime to work
14:56:32EXetoCnevermind
14:57:48EXetoCI don't know why I quoted "nim-lime", but apparently it matters in this case
15:00:28DemosI usually just seach on github
15:03:33*Guest78262 quit (Ping timeout: 240 seconds)
15:04:14*Guest78262 joined #nimrod
15:12:53*rta quit (Ping timeout: 246 seconds)
15:13:45*Demos quit (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
15:13:47*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
15:13:55*Demos joined #nimrod
15:17:01Mat3is the new version out now ?
15:17:48*Guest78262 is now known as psquid
15:19:18EXetoCMat3: no. it might get released today
15:20:32OrionPKhttps://github.com/Varriount/NimLime
15:25:10dom96hello
15:25:40Demosso last night I was debugging and I un-exported an object field and made two "property" functions that used the getStackTrace() proc. It was epic
15:26:00EXetoCdom96: morning
15:26:21*rta joined #nimrod
15:26:40EXetoCDemos: indeed. I forgot all about it
15:26:44dom96EXetoC: afternoon
15:26:48dom96hello rta
15:26:57DemosEXetoC: about getStackTrace()?
15:27:06EXetoCyeah
15:27:55dom96I really would love to see a version of getStackTrace which doesn't return a string.
15:29:17Mat3EXetoC: Sublime is one of these newer online editors ?
15:30:11EXetoCnope
15:30:26*ics joined #nimrod
15:32:05*Demos quit (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
15:32:09EXetoCit's a native app, first released about 6 years ago apparently
15:32:15*Demos joined #nimrod
15:32:47Mat3hmm, looks like a nice editor, however not open-sourced
15:33:06DemosI use it on windows, although I may switch to vim
15:33:55dom96Mat3: Have you tried Aporia?
15:35:18Mat3no, I can not compile it (and if so, I would miss a language translation)
15:35:49dom96what's the error?
15:36:26dom96oh, you would like the menus etc to be in your native language?
15:37:17Demoswow all the khronos group websites are down
15:39:31*io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist)
15:39:56EXetoCit was not down yesterday but no requests could be completed
15:40:28Mat3dom96: Yes. If I remember correctly, the error was related to the GTK development packages in Ubuntu
15:41:16Mat3have you ported Aporia to GTK 3 ?
15:43:02dom96no, it's still gtk2.
15:43:21*Mat3 is using gEdit for Nimrod related development
15:44:19dom96You should really try to get Aporia working then.
15:44:37dom96Aporia is similar to gedit, but has nicer Nimrod support IMO
15:46:03Mat3hmm, ok - I try to compile it next week (hope to find some free time)
15:46:37Mat3probably I can add some translations
15:48:16Demoshm reading a bit about scala, it seems insane. I hope nimrod never grows that complex
15:48:37dom96what in particular seems insane about it?
15:49:55Demosthere are like 15 different kinds of types (like T, T+, T- T#i (I think that is like nimrod's T.i or type(thing).i not sure), and so on) what looks like two different ways to define functions. The whole path dependent type thing seems un-nessassary
15:58:06*gabber808 quit (Quit: Page closed)
16:00:16Mat3Demos: Reads like a Hindley–Milner like type system
16:01:08*Mat3 founds the implicit logic of type systems general questionable
16:02:14*Demos quit (Ping timeout: 246 seconds)
16:03:50EXetoCtoo many hidden aspects?
16:07:49Mat3who knows
16:14:31*Demos joined #nimrod
16:24:34DemosMat3: but I was under the impression that mixing subtypes into a HindleyMiller causes problems
16:34:07*psquid quit (Ping timeout: 252 seconds)
16:34:14*Mordecai joined #nimrod
16:34:33*Mordecai is now known as Guest27830
16:38:13renesachttp://build.nimrod-lang.org/docs/tut1.html#result-variable <-- this is a bad example
16:38:31renesacnobody writes result = 42
16:38:31renesacreturn
16:38:54renesacthat return is redundant in this case
16:39:26renesacin old versions of nimrod it was needed?
16:41:08renesacthat bad tutorial was the reason I didn't understood 'result' at first, and even though it was useless.
16:41:09EXetoCeither that or someone just forgot to include that variation
16:41:34renesacit also isn't clear that you can't do 'var result = x'
16:42:17renesacI think it is better to include a full function as example
16:43:38*shodan45 joined #nimrod
16:43:45EXetoCwe simply need more volunteers
16:44:37renesacI think the factorial function is a good example
16:45:38renesacI'm editing it
16:46:00renesacI will also add the 'var parameter = parameter' idiom in the next topic
16:46:13dom96I think a string builder is a good example for result.
16:46:34DemosI was all confused because I thought the primary motivation of result was to ensure return values need-not be copied
16:46:47renesacthat I didn't know it was possible until I heard in irc
16:46:53renesacdom96, do you have it written?
16:47:02renesacthat string builder function?
16:47:25dom96No.
16:47:31dom96Should be pretty trivial though.
16:47:45renesacso write it, otherwise I will put the factorial function
16:48:08dom96result = ""; result.add("Foobar"); result.add(myVariable)
16:48:23dom96vs. return "Foobar" & myVariable
16:48:29dom96meh. that's a crappy example
16:48:33dom96nvm
16:48:33renesacyeah..
16:48:46renesacthe cool thing about factorial is that it ends in a for loop
16:48:54*Varriount is awake
16:49:03renesacso you save a line
16:49:39dom96where is Araq? It's release day!
16:49:52VarriountHave the branches been merged yet?
16:50:49dom96No.
16:51:04dom96Varriount: Can you try to figure out why the tester reports 12 more tests in win-x86?
16:53:36Mat3Demos: indeed
16:59:11Varriountdom96: Babel packages
16:59:25dom96ahh
17:00:12*DAddYE joined #nimrod
17:00:14VarriountI don't know why they aren't showing up in the 64 bit version though.
17:02:43*Demos quit (Ping timeout: 252 seconds)
17:07:38Araqdom96: I'm here now
17:10:22*q66 joined #nimrod
17:15:31Araqso Varriount are you ready?
17:15:44VarriountYes.
17:15:47Araq:O
17:15:53Araqwhat's your local time?
17:15:59Varriount1:15 pm
17:16:29Araqok good, well I'm trying to make async IO stable but even if I fail, we'll release tonight
17:20:17*BitPuffin quit (Ping timeout: 246 seconds)
17:27:31*nequitans joined #nimrod
17:27:52*askatasuna joined #nimrod
17:35:10*zezba9000 joined #nimrod
17:37:37*nande joined #nimrod
17:39:24reactormonkAraq, decided on git purge?
17:40:02Araqdid you make an announcement on the forum? sent emails warning the people who have forks?
17:40:06Varriount^ I can send bug reports to all fork owners
17:40:40VarriountBut first, a shower.
17:41:37reactormonkgood, I'll write the announcement.
17:41:46reactormonkbut first, I have to figure out how to deal with patches.
17:42:00Araqalright thanks
17:42:13*bitcrusher joined #nimrod
17:42:26EXetoChow significant is the hasKey+mget overhead on large tables compared to just querying the table once and getting a pointer?
17:42:38EXetoCnot that it'll matter often
17:42:44Araqhi bitcrusher
17:42:56EXetoCI guess it's obvious, assuming that there's no caching going on
17:43:07bitcrusherhello Araq, just checking out the language
17:43:09Araq;-)
17:43:43AraqI still wonder if we should do 0.9.4.0 ...
17:44:02Araq4th version number would simply be honest, I think
17:44:33dom96What software do you know of that uses 4 version numbers?
17:45:00Araqmicrosoft often uses 4 numbers
17:45:34Araqif 0.9.6 breaks some code in comparison to 0.9.4, and it WILL do that
17:45:43Araqthen we have no patch number left
17:46:04EXetoCmajor.minor.revision.cosmetics
17:48:12Araqwe could also drop the leading 0 ...
17:50:17Araqoh well patches go to master, new development to devel
17:50:21reactormonkAraq, pushed a branch purged_master
17:50:34Araqonce 0.9.4 is out, that is
17:50:38EXetoCshould "" != nil work?
17:51:53AraqEXetoC: I think so
17:52:23reactormonkAraq, I suppose devel and master should have the same ancestry?
17:52:44reactormonkor will you discard master and use devel from now on?
17:53:02Araqwe can do that
17:53:16Araqdiscard master, introduce 'stable'
17:53:28Araqer ugh, no
17:53:35EXetoCAraq: ok, will report it. I get "gen.nim(11, 14) Error: internal error: getStr"
17:53:42reactormonkthe question is - will you discard the current data of master?
17:53:52reactormonkor do I have to make sure that devel and master share a common ancestry
17:53:52Araq"git origin master" is an idiom... I think
17:54:05reactormonkit's not about the naming, but the data here
17:54:24Araqthe data of master is irrelevant by now
17:54:36Araqunless I missed some commit that's not in devel
17:54:53reactormonkok
17:55:19reactormonkthere's your purged_devel
17:55:36reactormonknow to find out how to rebase
17:55:40NimBotAraq/Nimrod purged_devel 5a448cd Araq [+0 ±5 -0]: 'bind' default for clean templates
17:55:40NimBotAraq/Nimrod purged_devel c773d60 Araq [+0 ±3 -0]: made some tests green
17:55:40NimBotAraq/Nimrod purged_devel cdcbfa0 Araq [+0 ±1 -0]: attempt to improve line information for '!=' etc. templates
17:55:40NimBotAraq/Nimrod purged_devel cc4b951 Araq [+0 ±11 -0]: compiler bootstraps with new VM
17:55:40NimBot662 more commits.
17:56:00reactormonk.... go figure.
17:56:37dom96could we maybe worry about purging after release?
17:56:59reactormonkdom96, sure, but it makes it easier doing it at the split - at least to my understanding
17:58:51*brson joined #nimrod
18:07:50reactormonka bit more messy than I expected :-/
18:15:04fowl662 commits :D
18:15:16VarriountAraq: Do you want me to start sending out the notifications?
18:15:23fowlhello whoever pinged me
18:15:45AraqVarriount: wait for reactormonk please. he said it's "messy"
18:35:58*BitPuffin joined #nimrod
18:42:26*Varriount_ joined #nimrod
18:42:55Varriount_Ok, I'm currently writing a generic issue message for the rewrite - besides deleting and re-forking the main nimrod repository, what other methods are available to recover from the re-written git history?
18:43:23*Varriount quit (Disconnected by services)
18:43:30*Varriount_ is now known as Varriount
18:43:44reactormonkVarriount, git rebase
18:43:55VarriountAny specific commands?
18:46:22*io2 joined #nimrod
18:51:33VarriountWait, was the purge done while I was disconnected?
18:51:53VarriountAlso, I never noticed that forks lacked issue areas before. :/
18:55:13*BitPuffin quit (Ping timeout: 240 seconds)
18:57:32*q66 quit (Ping timeout: 252 seconds)
19:00:56VarriountAraq: With the absense of an issues page on forks, and emails on only about a quarter of the users who have forked nimrod, I don't think I'll be able to notify them all.
19:06:37EXetoChopefully you can at least enable it explicitly..
19:07:21*Mat3 is now known as Mat3-work
19:07:27EXetoCyeah, you can
19:09:13VarriountDoes nimrod have an official email address or something?
19:09:35dom96Just announce it on the forum.
19:09:50*Matthias247 joined #nimrod
19:09:50*q66 joined #nimrod
19:09:54Varriount-_-'
19:09:59*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
19:13:38VarriountAraq: Is this message ok? -> https://gist.github.com/Varriount/51165a76caa69415cb22
19:24:33renesacwhat about asking github help for this?
19:24:46VarriountHuh?
19:24:58renesacthey have a contact form
19:25:17renesacmaybe they can help rebasing nimrod
19:25:19VarriountThis isn't really help.. it's more like.. communication.
19:25:28renesaclike, how to send a notification to all forks
19:25:47renesacwhat is the perfect git command line for forkers to use after this
19:25:48renesacetc
19:26:14renesacit is their interest also new forks not having to download 300mb of data
19:26:23VarriountWell, at the moment, I'm gathering email addresses and contacts. Feel free to modify that message.
19:26:50Matthias247if you do a git fetch you would get informed anyway that it was a forced update
19:27:04AraqVarriount: I think the text is just fine
19:28:57Matthias247my normal update process is git fetch and then git merge origin/master --ff-only. This would at least give me an error that something happened
19:31:32*Demos joined #nimrod
19:31:40renesacAraq, 0.10 ?
19:32:12VarriountI'm almost done with contact gathering.
19:32:28Araqrenesac: hmm good idea but also ... meh
19:32:39Araqthis way people never know when it ends
19:32:53Varriount0.0000001
19:34:17EXetoCyeah it's inconsistent
19:34:56*q66 quit (Ping timeout: 252 seconds)
19:35:20renesac 2.6.32-431.3.1.el6 ?
19:35:28renesac(a linux version)
19:35:57renesaca - instead of a third dot
19:36:37dom960.9.5-2014.04.07
19:36:54*q66 joined #nimrod
19:36:54dom96I still think the idea of a date is nice.
19:37:07renesacor just release the 1.0 for no reason other than getting out of this . hell, like linux did
19:37:08renesacXD
19:37:17dom96Won't be compatible with babel versions though.
19:37:36renesacdom96, it isn't clear if the date is something additional, or if it is also specifying a more specific version
19:37:55Araqwe'll have master aggregate the bugfixes and devel will be cutting edge
19:38:01renesac*linus
19:38:38renesacAraq, nice
19:38:47dom96nimbuild already provides latest builds
19:39:06Araqand the versioning can stay as it is
19:39:08renesacshould the download page redirect to nimbuild?
19:40:16Demoswow that debate last night went on for another /two hours/
19:40:19dom96The download page will contain a table with a button for each cpu/os combo and it will point to nimbuild. I have some things in NimBuild that I need to modify before that is possible though.
19:40:31Demoswadler's law in action
19:40:51EXetoCDemos: about the syntax?
19:41:07Demoshttp://www.haskell.org/haskellwiki/Wadler%27s_Law
19:41:29dom96We'll probably spend another couple of hours arguing with redditors about syntax once we release.
19:42:14EXetoC /ignore :>
19:42:57Demoswe will also get c++ "programmers" (I suspect these people do little actual programming) bitching about how we rely on a GC and you should NEVER EVER EVER use manual management
19:43:10EXetoCso do you know when the optimal time to announce is?
19:44:51NimBotAraq/Nimrod devel 7780d81 Dominik Picheta [+0 ±1 -0]: Change the expected path in tfailedassert.... 4 more lines
19:44:51NimBotAraq/Nimrod devel f0ea793 Dominik Picheta [+1 ±3 -0]: Merge branch 'devel' of github.com:Araq/Nimrod into devel
19:44:51NimBotAraq/Nimrod devel 0ccea55 Dominik Picheta [+0 ±2 -0]: Disable async macro code output. Added some WSA error codes to winlean.
19:44:59EXetoCI just took that at face value before. It is of course a nonsensical argument
19:45:36DemosEXetoC: took what at face value, the GC hate or the wierd "pointers are bad but wrapping them in a class makes them OK" thing
19:46:22*BitPuffin joined #nimrod
19:46:31EXetoCthe former
19:47:16EXetoCI guess many people use java as a reference
19:47:34Demosyeah same. Apperently I had a prolonged argument with my lisper friend over this... although neither of us remember that argument
19:47:38fowli am shooting myself in the foot: https://gist.github.com/fowlmouth/10002354
19:47:43Demosbut it is a right tool for the right job thing
19:49:03Demoscan you actually draw those JSON trees now?
19:49:12reactormonkVarriount, figuring them out
19:49:31fowlDemos, they get parsed into widgets, but yes
19:49:42Demosgtk widgets?
19:49:52fowlno
19:50:42fowlhttps://gist.github.com/fowlmouth/ff6b7698b76a8cc408ae
19:51:17Varriountreactormonk: Figuring what out?
19:51:57*BitPuffin quit (Ping timeout: 255 seconds)
19:52:04reactormonkVarriount, the correct commands for everyting
19:52:10reactormonkgit clone [email protected]:Araq/Nimrod.git --single-branch -b purged_devel # <- this gives you the new repo
19:52:19DemosI do something similar, except I only have buttons and my storage format is binary (which I think it "A Very Bad Idea")
19:52:35VarriountAraq: As a last resort, do you want me to contact users through the issues pages of any of their own repositories which use nimrod as a langauge?
19:52:47Demosesp since any pointers in your data will cause lots and lots of pain
19:53:35Demosfowl: I think you could set all the procs in your vtbl to {.nimcall.} to save 8bytes per proc (big whoop I know)
19:54:08Varriountdom96: You sure that you don't have any email software setup on on the server? It might look a bit odd for a student to be emailing all these people.
19:54:18Demosand yes I am that nitpicking arsehole
19:55:20dom96Varriount: No, sorry I don't.
19:55:29VarriountThen again, I could always forgo using my personal email, and use the email my college gave me...
19:55:32fowlDemos, thanks
19:55:41VarriountThat might look even more odd though.
19:56:13fowlDemos, im going to open a new repos for this, i write a middle-man connection manager for enet that i like a lot
19:56:42Demosyeah, another idea is to have a `.` that can call methods and do all the relevant casting
19:59:27AraqVarriount: the "official" email address is my personal email address lol
19:59:59Araqbut just use your own, it's fine, you are part of the core team
19:59:59Varriount:/
21:08:30*NimBot joined #nimrod
21:09:20*Varriount|Mobile joined #nimrod
21:09:20*nequitans joined #nimrod
21:09:20*Skrylar joined #nimrod
21:09:20*ics joined #nimrod
21:09:20*bstrie_ joined #nimrod
21:09:20*q66 joined #nimrod
21:09:20*Demos joined #nimrod
21:09:20*Matthias247 joined #nimrod
21:09:20*io2 joined #nimrod
21:09:20*Varriount joined #nimrod
21:09:20*brson joined #nimrod
21:09:20*bitcrusher joined #nimrod
21:09:20*askatasuna joined #nimrod
21:09:20*DAddYE joined #nimrod
21:09:20*shodan45 joined #nimrod
21:09:20*rta joined #nimrod
21:09:20*vendethiel joined #nimrod
21:09:20*isenmann joined #nimrod
21:09:20*OrionPK joined #nimrod
21:09:20*fowl joined #nimrod
21:09:20*comex joined #nimrod
21:09:20*Raynes joined #nimrod
21:09:20*silven joined #nimrod
21:09:20*noam joined #nimrod
21:09:20*zahary1 joined #nimrod
21:09:20*eigenlicht joined #nimrod
21:09:20*runvnc joined #nimrod
21:09:20*renesac joined #nimrod
21:09:20*Amrykid joined #nimrod
21:09:20*Araq joined #nimrod
21:09:20*tumak joined #nimrod
21:09:20*cark joined #nimrod
21:09:20*Zuchto_ joined #nimrod
21:09:20*flyx joined #nimrod
21:09:20*EXetoC joined #nimrod
21:09:20*reloc0 joined #nimrod
21:09:20*rixx joined #nimrod
21:09:20*eximiuswastaken joined #nimrod
21:09:20*oxful joined #nimrod
21:09:20*Trixar_za joined #nimrod
21:09:20*krusipo_ joined #nimrod
21:09:20*Ycros joined #nimrod
21:09:20*musicalchair joined #nimrod
21:09:20*zielmicha_beta joined #nimrod
21:09:20*phI||Ip joined #nimrod
21:09:20*seubert joined #nimrod
21:09:20*mal`` joined #nimrod
21:09:20*dom96 joined #nimrod
21:09:20*Boscop joined #nimrod
21:09:20*reactormonk joined #nimrod
21:09:20*betawaffle joined #nimrod
21:09:20*iNode001 joined #nimrod
21:09:20*JStoker joined #nimrod
21:09:20*Roin_ joined #nimrod
21:09:20*epsylon joined #nimrod
21:23:38Araqso ... what's left to do?
21:25:08*Guest27830 joined #nimrod
21:25:50*BitPuffin joined #nimrod
21:31:40dom96let's release already
21:38:57OrionPKfix osx?
21:39:15AraqOrionPK: what's wrong with osx?
21:39:33OrionPKas of last night my proj wasnt building
21:39:50OrionPKi pasted the error up in here
21:39:57OrionPKlog doesnt go that far back though
21:40:18Araqwell repeat the error message please
21:40:21OrionPKsaw someone fixed selectors, but then another compiletime error happened
21:40:31OrionPKk, when I get home. Im at work and dont have access to my mac atm
21:41:25DemosI would test but I have a chemestry exam...
21:41:29Demosspeaking of which, I gotta go
21:41:31*Demos quit (Remote host closed the connection)
21:44:24OrionPKif someone scrolls up, it's probably one of the last things i said
21:44:55Araqwell async IO is not ready at all in this release
21:45:08Araqwe have lovely random crashes when stress testing things
21:45:55OrionPKah
21:46:28OrionPKidk if im even using asyncio, just using another module that uses asyncio, and not using its asyncio functionality
21:46:41OrionPKa stdlib module
21:46:44Araqoh
21:51:50*shodan45 quit (Quit: Konversation terminated!)
21:52:33*Guest27830 quit (Ping timeout: 255 seconds)
21:53:08*nequitans quit (Ping timeout: 245 seconds)
21:53:19*Guest27830 joined #nimrod
21:57:36Araqping Varriount, Varriount|Mobile
22:00:31Varriount|MobileHm?
22:01:12Varriount|MobileAraq: Yes?
22:02:10AraqI think we should purge the repo today, now but do the release somewhat later
22:02:28Araqit annoys me too much asyncio is *almost* ready
22:02:45Varriount|MobileOk then, purge away
22:03:04Araqalso we didn't test on macosx enough, I think
22:03:08dom96asyncdispatch not asyncio
22:03:33Araqthough zahary1 likely tested everything on mac
22:03:57Araqwell reactormonk didn't write the forum message
22:04:13Araqdid you send the messages around, Varriount|Mobile ?
22:04:52Varriount|MobileI wasn't going to send them till the purge actually occurred
22:05:42Varriount|MobileThe composed email is open on my desktop, unsent.
22:08:54dom96I don't think we can do the purge as long as there are PRs open
22:09:38NimBotAraq/Nimrod devel fcb472d flaviut [+0 ±1 -0]: Add renderRstToJson in docutils
22:09:38NimBotAraq/Nimrod devel 2dd98ee flaviut [+0 ±1 -0]: Modify renderRstToJson to use the json library
22:09:38NimBotAraq/Nimrod devel c473ede Andreas Rumpf [+0 ±1 -0]: Merge pull request #1069 from flaviut/devel... 2 more lines
22:13:18fowlhrm
22:14:19fowlis this normal: https://gist.github.com/fowlmouth/d54a36d05fb1878083fe
22:14:31fowl/tmp/aporia/a26.nim(2, 5) Error: undeclared identifier: 'a28'
22:16:26dom96nope, that's a bug.
22:17:12Araqno it's a feature but the compiler should tell you
22:17:23Araqyou can't forward module names
22:18:06dom96oh, I was thinking of this bug: https://github.com/Araq/Nimrod/issues/1029
22:19:18fowlthats whack >_>
22:27:32SkrylarAraq: if you think my coding style is erratic, look at the ansi c version of the porter stemmer o_o
22:27:38Skrylarcrazy brace soup
22:27:53*io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist)
22:31:07AraqVarriount|Mobile: save your email, dom96 is right I need to merge PRs ...
22:31:13OrionPKaraq here's the error: lib/core/macros.nim(208, 21) Error: for a 'var' type a variable needs to be passed
22:31:31dom96OrionPK: What's your code?
22:31:53dom96or is that just compiling macros.nim?
22:31:56OrionPKsec, im determining the piece thats causing it
22:34:13BitPuffinAraq: tell me something nimrod can do that C++ can't :D
22:34:25BitPuffinI'm trying to win people over to nimrod \o/
22:34:49NimBotAraq/Nimrod devel 7fc5ae9 Araq [+0 ±5 -0]: preparations for easier debugging
22:34:49NimBotAraq/Nimrod devel 231a096 Araq [+0 ±4 -0]: Merge branch 'devel' of https://github.com/Araq/Nimrod into devel
22:35:17BitPuffinso far I've said term rewriting macros
22:35:26AraqBitPuffin: my usual answer: Everything that I do in my emerging langs talk is either very hard or downright impossible in C++
22:36:00dom96BitPuffin: Who are you trying to convince?
22:36:05OrionPKhmm
22:36:08OrionPKI guess it's the template stuff
22:36:29OrionPKi.e. https://github.com/onionhammer/onion-nimrod/tree/master/templates
22:36:47BitPuffinAraq: you mean strangeloop?
22:36:54BitPuffindom96: an old irc buddy
22:36:59fowlsrc/gamestates.nim(136, 29) Warning: Cannot prove that 'evt' is initialized. This will become a compile time error in the future. [ProveInit]
22:37:05fowlhow do you get past this
22:38:06Araqfowl: relax. the future is still away. report a bug if you think it is one.
22:38:26*bitcrusher quit (Write error: Connection reset by peer)
22:38:28AraqBitPuffin: yes
22:38:44*bitcrusher joined #nimrod
22:42:02*mal`` quit (Quit: ERC Version 5.3 (IRC client for Emacs))
22:43:33BitPuffinAraq: hehe, when I explained term rewriting macros with the simple example of rewriting x * 2 to x + x, he said that compilers usually catch that. But then I was like sin(x) + cos(x) = 1, let's see your compiler catch that :D
22:45:51AraqBitPuffin: no no no you're doing it wrong
22:46:16BitPuffinAraq: waii kawai
22:46:19Araqx * 2 -> x+x # does C++ for built-in types but not for your bignum library. That is the difference.
22:46:34BitPuffinah true
22:46:38BitPuffinI should mention that
22:47:42EXetoCoptimizers have a hard time with sin(x) + cos(x)?
22:48:08BitPuffinEXetoC: they probably do
22:48:14EXetoCsin(x) + cos(x) -> fsincos?
22:48:24BitPuffinEXetoC: sin(x) + cos(x) = 1
22:48:43*mal`` joined #nimrod
22:49:34BitPuffinAraq: btw we should add the term rewriting macro for sin(x) + cos(x) in math.nim I think
22:49:39BitPuffinit would gief penis
22:49:47EXetoCno that's not what fsincos does
22:50:36AraqBitPuffin: optimizations are useful when they transform real world code
22:50:52BitPuffinAraq: well it can happen in real code
22:51:05Araqsin(x) + cos(x) is unlikely to occur in real code
22:51:13BitPuffinAraq: btw his answer to the 2*x thing was that you write code so that it is inlined, and therefor it does
22:51:19EXetoC{.error: "silly operation".}
22:51:26BitPuffinAraq: in scientific computing it might
22:52:48BitPuffinand probably more efficiently, hmm probably not
22:55:15Araqinlining doesn't perform x*2 -> x+x, that's just bullshit
22:56:45BitPuffinAraq: well I think he meant that inlining would perform x*2
22:57:11BitPuffinat compile time or something
22:57:12fowlAraq, proveinit always comes up when declaring a TEvent
22:57:23BitPuffinfowl: is the allegro wrapper done? I wanna code some nimrod
22:57:54BitPuffinI have a game that is perfectly sized project that would be awesome in nimrod :)
22:57:58fowlBitPuffin, aside from some audio functions, yes
22:58:11BitPuffinfowl: ah, well then I should at least eb able to start using it
22:59:31fowlBitPuffin, please fix it for windows
23:00:06*Matthias247 quit (Quit: Matthias247)
23:00:46OrionPKok
23:00:50OrionPK node.add newCall("add", ident("result"), newCall("$", ident(identifier)))
23:01:23OrionPKlib/core/macros.nim(335, 21) Error: type mismatch: got (int literal(5), string)
23:01:55OrionPKident in this case is const x = 5
23:02:27OrionPKit expected: system.add(x: var string, y: string)
23:02:39fowldid you import macros
23:02:57OrionPKyes, this code works on main but not devel
23:03:17OrionPKnewCall("$", ident(identifier)) should be translated to $x where x = 5
23:03:43OrionPKcode is up on this repo: https://github.com/onionhammer/onion-nimrod/tree/master/templates
23:04:05AraqOrionPK: please make a proper bug report
23:04:31BitPuffinfowl: but I barely use winblows
23:05:29OrionPKaraq I want to narrow it down further than "this huge codefile doesnt work anymore"
23:05:35OrionPKjust seeing if anyone else had any insight
23:05:46*CARAM joined #nimrod
23:06:06BitPuffinfowl: other than for playing games for let's plays
23:10:51*Guest27830 quit (Ping timeout: 255 seconds)
23:12:39fowlOrionPK, last time i wrote a macro the error line was off by one
23:13:57fowlOrionPK, where is the macro
23:14:05OrionPKin templates.nim
23:14:17*Varriount|Mobile quit (Remote host closed the connection)
23:14:22OrionPKline 251 is pretty much the heart
23:14:25OrionPKcompile time proc
23:16:34*darkf joined #nimrod
23:17:26OrionPKI think it has to do w/ the insertionPoint
23:19:26dom96good night
23:21:09BitPuffindom96: or is it!?!?!?!
23:21:10*Demos joined #nimrod
23:21:11BitPuffinNUNUNUNUUU
23:22:27*Guest27830 joined #nimrod
23:22:31*Guest27830 is now known as psquid
23:22:38*CARAM quit (Remote host closed the connection)
23:22:44Demoswe released yet?
23:23:04*psquid quit (Client Quit)
23:23:25*psquid joined #nimrod
23:24:22EXetoCin a couple of days I think
23:24:25DemosAraq: is x+x even faster than 2*x I can recall benchmarks where they are within the margin of error of each other
23:24:29*nequitans joined #nimrod
23:24:37NimBotAraq/Nimrod devel 7dc8ab8 Araq [+1 ±12 -0]: merged better html links #850
23:24:50AraqDemos: it's only an example
23:25:08BitPuffinDemos: they are pretty much the same on modern CPUs
23:25:17Araqyeah
23:25:33*CARAM joined #nimrod
23:27:47Araqgood night
23:28:15BitPuffinOR IS IT!!==!=!!?!!??!"?!#?"!=)#
23:28:18BitPuffinDUN DUN DUUUUUUUUUN!
23:49:52*CARAM quit (Remote host closed the connection)
23:54:26SkrylarBitPuffin: i thought the trick with twos was to bit shift
23:54:52Skrylari remember at least on the JVM they said that using << instead of multiplying by a power of two was faster, and some of the peephole optimizers do this to jar files
23:55:53*BitPuffin quit (Ping timeout: 240 seconds)
23:57:25Varriountfowl: I'm available to try out the allegro wrapper on windows.
23:58:14*CARAM joined #nimrod