<<07-03-2013>>

00:15:01*q66 quit (Remote host closed the connection)
00:52:42NimBotAraq/Nimrod cf47ff4 Araq [+0 ±12 -0]: first steps to implement object construction expressions
06:31:49ZorAraq: poke
07:10:12ZorAraq: a couple of things:
07:10:24Zor1) how do you identify non-nimrod stack frames (if at all)?
07:10:34Zor2) can your shadow stack somehow let the debugger mutate locals?
07:11:10*Trix[a]r_za quit (Ping timeout: 260 seconds)
07:14:03*Trix[a]r_za joined #nimrod
08:12:44*gour joined #nimrod
09:44:00*xcombelle joined #nimrod
09:53:12*Araq_ joined #nimrod
10:05:40*Araq_ quit (Quit: ChatZilla 0.9.90 [Firefox 19.0/20130215130331])
13:17:25*q66 joined #nimrod
14:56:58*Trix[a]r_za is now known as Trixar_za
14:58:47*gour quit (Disconnected by services)
14:58:47*gour_ joined #nimrod
15:08:22*gour_ is now known as gour
15:26:19*XAMPP quit (Read error: Connection reset by peer)
16:11:32*Trixar_za quit (Quit: ZNC - http://znc.in)
16:12:32*Trixar_za joined #nimrod
16:31:11*Trixar_za is now known as Trix[a]r_za
18:19:55NimBotAraq/Nimrod 2c1cc72 Araq [+0 ±3 -0]: next steps for object construction expressions
18:19:55NimBotAraq/Nimrod 0833974 Araq [+0 ±2 -0]: next steps for object construction expressions
19:38:20AraqZor: 1) there is no need for that; non-nimrod stack frames are ignored implicitly by the shadow stack linked list structure
19:38:52Araq2) it would be quite easy to implement, yes; but the debugger doesn't have such a feature for now
19:39:55Zorreason for (1) is that the C functions won't show up in stack traces
19:42:05*xcombelle quit (Read error: Connection reset by peer)
19:46:46Araqtrue but you can't do much about it
19:47:17Araqthere is also code for generating a stack trace using Linux specifics
19:47:35Araqbut it's fragile
19:47:51Araqand I haven't tested it for years
19:48:49Zorone thing you could do for C functions is, whenever a non-nimrod function is called, insert a dummy "Nimrod -> External" stack frame, and then an "External -> Nimrod" stack frame when it returns
19:49:01Zor(dummy as in no locals and so on)
19:51:02Araqgood idea but the stack traces are already fine the way they are
19:51:38Araqmore important would be to introduce dummy stack frames for instantiated macros
19:53:53Araqalso note that the stack trace contains line information
19:54:20Araqso it points to a line that contains a call to some external C code
20:01:30*ccssnet quit (Quit: http://atccss.net)
20:04:36*ccssnet joined #nimrod
20:42:47Zorhow do you get line information in there? update the shadow stack as you go? (within the same function)
20:56:03Araqexactly
20:57:30Araq"before every instruction" injections are necessary for breakpoint support anyway
21:04:11*filwit joined #nimrod
21:04:19filwithi folks
21:10:41Araqhey filwit
21:12:34Araqfyi constructors are almost finished
21:12:51Araqthe syntax is TObject(x: 1, y: 2)
21:12:58filwitinteresting.
21:13:22filwitso: var x = TFile("...") ?
21:13:36filwittype of thing?
21:13:40filwitis possible?
21:13:54Araqnot really for TFile as it's opaque
21:14:07filwitwell, i just used that as an example
21:14:10Araqand it's the opposite of what you desire
21:14:37Araqas it's for internal usage only, you should export a constructor proc
21:14:58filwithow do you define a constructor?
21:15:26Araqlike before: proc initT(x, y: int): T = T(x: x, y: y)
21:16:02filwitahhh... so a constructors params are just a init-list?
21:16:18Araqyeah
21:16:21*gradha joined #nimrod
21:16:23filwiti see
21:16:26Araqit's really like tuple construction
21:16:36filwitmakes sense.
21:16:44Araqso no changes to the stdlib, factories continue to work
21:17:00filwityes
21:17:03Araqbut we gain non-nilable types as a side effect
21:17:24Araqand it fixes a loophole in the language wrt case objects
21:17:53filwitwrt?
21:18:13filwitalso, nimrod now supports non-nilable types?
21:18:34gradhawrt == with regards to
21:18:43filwitgradha: thanks
21:18:45Araqthe syntax is there and the compiler catches trivial mistakes already
21:18:45gradhacase objects == object variants (aka kind field)
21:18:50Araqwrt == with respect to
21:19:09gradhatrue, I lost respect a long time ago
21:19:34filwityou lost respect for case-objects?
21:19:47filwiti always thought there where kinda a neat little Nimrod feature
21:19:48gradhaI just generally lost respect
21:20:01filwit(though i with there where simple Unions)
21:20:11gradhavariants are fun, ever thought of nested variants?
21:20:28filwiti see, so you are now not a respectable person.
21:20:58filwitvariants = dynamic type vars?
21:21:09gradhaerr.. sorry, object variants
21:21:09filwitin that case, variants aren't fun
21:21:17gradhaone case object which contains sub-case objects
21:21:32filwitisn't that basically what case-objects are?
21:21:32Araqgradha: I think the grammar disallows that
21:21:56Araqbut you can work around with an explicit type defintion
21:22:27filwiti had a good idea once for a built-in state machine object structure
21:22:41filwitbut it had a lot to with with time-transitions
21:22:57filwitso ultimately i think it would be best to do it in a library
21:23:10filwitbut that's neither here nor there
21:23:49filwitanyone else pissed about "Mir"?
21:23:57gradhamaybe you could make ragel output nimrod
21:24:02gradhawhat's "Mir"?
21:24:21filwitUbuntu's new Display Server
21:24:25filwitnevermind
21:24:36filwitjust save yourself a headache and don't look it up
21:24:40gradhaisn't that like progress?
21:24:49filwitnot when there's Wayland
21:25:20filwitand Mir is far behind... and not compatible.. and started secretly 9 months ago.. without attempt to communicate with Wayland devs
21:25:49Araqfilwit: what do you suggest for reading about graphics algorithms?
21:26:03filwitand all future Ubuntu core apps with be Mir based... which means they wont run on Wayland unless there's a xmir (like xwayland), etc
21:26:18filwitit basically divides the whole Linux ecosystem unless one dies off
21:26:31gradhaso, like every time people want to do something
21:26:35filwitAraq: hmmm... one sec
21:26:38Araqubuntu is dying afaict
21:26:52filwitAraq: well first, what do you want to know about in terms of "graphics"?
21:27:11Araqhmm I dunno :-)
21:28:07gradhaAraq: learn about photon mapping, write a photon mapping renderer software in nimrod, make it work on a toaster
21:28:12filwityes, now every future Linux application will probably need to support both Mir and Wayland... cause neither is probably going away, even if Nvidia/AMD back only one (which is likely)
21:28:41Araqfor instance, why did ecstatica manage to produce ellipsoids and Doom 3 did not?
21:29:03filwitellipsoids where built into the OpenGL/DX pipeline a long time ago
21:29:10filwitbut no one used them in reality
21:29:17filwitand you can recreate them in shaders
21:29:48filwitthe graphics pipeline has become much more programmable in the last few years
21:30:08Araqinteresting and yet I still see polygons
21:30:23filwitwell, that has to do with the hardware
21:30:30Araqfor things that should be *round* ;-)
21:30:44filwityou've heard of DirectX 11 tessellation?
21:30:47gradhatrouble is rarely anything is round
21:30:51filwit(same tech is in OpenGL)
21:31:12filwitthe reason you see polygons still is a memory issue mostlys
21:31:24Araqgradha: nor is it angular
21:31:27filwitand the fact that hardware tessellation isn't fast enough (yet)
21:31:34filwitthere's a cut-off
21:31:43filwitbut things are changing on the memory front
21:31:53filwitfor instance, PS4 has 8Gb shared memory
21:32:07filwitwhich means you could literally have almost all of that for Textures
21:32:21filwitthat's 4x more than todays best cards
21:32:26AraqI don't get it really; of course if you approximate round things with polygons that takes lots of them and so memory is an issue
21:32:39filwityes
21:32:51filwitbut remember about LOD
21:33:04filwitin the background, you don't want to render a million poly model just for a few pixels
21:33:18filwitso you have multiple versions of the model in ram
21:33:20filwitand choose the version
21:33:34filwitHardware tessellation improves that
21:33:42Araqbut my point is: why approximate everything with polygons in the first place?
21:33:52filwityou can dynamically add polygons (no ram needed) and offset them to be more round
21:34:04gradhamaybe polygons are simpler to draw/handle than ellipsoids?
21:34:07Araqecstatica didn't use polygons
21:34:15Araqand it's from 1994
21:34:23gradhait's software too
21:34:27gradhayou had voxels in software
21:34:30filwitAraq: because for the level of detail our cards can handle today, it's the most efficient technique
21:34:48filwitAraq: games from '94 rendered on the CPU
21:34:58ZorAraq: how do you do breakpoints, btw? atomic boolean flag + a lock or something like that?
21:35:28Araqwhy not have voxels, ellipsoids and polygons in the same engine?
21:35:35filwitVoxels uses a ray-tracing algorithms
21:35:52filwitthat's best done on a scalar CPU, not a vector GPU
21:36:16filwitpolygons are rasterized (they all render into a buffer)
21:36:33filwitvoxels, each pixel is traced through a voxel grid
21:36:54filwitand there's a lot of "if voxel, continue or stop" situations
21:37:13filwitwhere as polygons is like "giant list of polys; render them all as fast as possible"
21:37:31AraqZor: before every instruction something like 'debug(currentPosition);' is executed and in 'debug' it's checked whether the current position has been marked as a break point; no threading is involved
21:37:49filwitthe thing is there's a cut-off with detail vs speed
21:38:03filwitpolygons can be textured and made to "fake" high detail
21:38:10ZorAraq: so how do you actually pause execution if the current position is a breakpoint?
21:38:10filwitwith a low amount of polygons
21:38:11AraqI understand that
21:38:18filwitwhere is Voxels can't really do that
21:38:36filwitso in order to get good texture detail in Voxels, you need really fast CPUs
21:38:42AraqZor: it's suprisingly easy when you think about it ;-)
21:38:47filwitand we just haven't reached that point yet
21:38:53filwitbut we're almost there
21:39:05filwitin fact, Voxel rendering is a part of all new game-engines
21:39:10filwitjust not in the way you might think
21:39:27filwitthey use it for real-time global illumination (light bouncing)
21:39:39AraqZor: the debugger may end up calling the console's readline in the 'debug' function
21:39:55ZorI see
21:40:04filwitand they render a really low-res voxel image of the scene, so the shaders can pick up colors from walls witch indirect illumination, etc
21:40:04Zoryou'd need more complex machinery for a remote debugger api though
21:41:54AraqZor: actually all that's necessary is to provide a better system.dbgLineHook() (http://nimrod-code.org/system.html#539)
21:42:12Araqand then let people can write their own debuggers
21:42:41Araqit's much easier to do this in "user space" when you can in fact use the stdlib for sockets etc.
21:43:49Araqthe Nimrod profiler uses this approach
21:44:22Araqit works quite nicely though the timings are always off
21:45:28Araqfilwit: but an engine could easily send the polygons to the GPU and the voxels and ellipsoids to the CPU to process
21:45:57Araqthat's just some low level optimization stuff
21:46:12filwitAraq: no, you have a big limit with the bus-line to/from GPU-CPU
21:46:15gradhagood luck merging the results, like figuring depth for voxels mixed with polygons
21:46:48filwitAraq: the GPU has it's own memory, where all the graphics are (ideally) stored, and that's how you get good performance
21:47:01Araqvoxels + polygons have been tried in "Outcast" and it worked, gradha
21:47:16filwitAraq: on a system like Xbox 360 (and PS4) you have a Shared Memory system, so Voxels becomes a little more realistic
21:47:28Araqfilwit: I know but performance is not my point
21:47:49Araqbut I guess your point is that performance disallows such a "mixed mode" I envision?
21:47:49filwitgradha: actually, getting things like depth, etc from the voxels isn't a challenge at all
21:48:09filwitAraq: have you seen the Atomatage engine?
21:48:18Araqnope
21:48:19filwithttp://www.atomontage.com/
21:48:27filwithe rendering the Voxels on the CPU
21:48:33filwitthen overlays polygons on the GPU
21:48:40gradhafilwit: try that with translucency
21:49:03filwitgradha: translucency is a problem even for modern polygons engines
21:49:27filwitgradha: Deferred Rendering can't really handle translucency (all modern engines use it)
21:50:01filwitso you render all your regular (opaque) stuff deferred, and all translucent stuff afterwards
21:50:36gradhaand trying to merge translucent voxels with translucen polygons is going to be just fun
21:50:49gradhaof course you can restrict one to be solid
21:51:32filwitgradha: yes, there's a challenge with translucency these days, with whatever technique
21:51:32Araqfilwit: I remember that site ;-) so ... when will they add ellipsoids?
21:51:47filwitgradha: that's why a pure, traced, voxel system would be best
21:52:07filwitgradha: you could do true refraction and things that way.
21:52:21filwitgradha: the problem with that is animation... voxels don't animate so well
21:52:47filwitAraq: ellipsoids are possible through shaders
21:53:05filwitAraq: they never really went away, just no one uses them
21:53:05Araqand yet I've never seen one :P
21:53:15Araqyeah but why?
21:53:30filwitbecause defining complex shapes is difficult with them
21:53:43filwitthe best you can get is circles and spheres
21:54:00filwitand usually you're breaking the ZBuffer pipline
21:54:03filwitwhich is slow
21:54:24filwityou have to perform your own depth-tests in the shader
21:54:46filwitand there's a lot of hardware optimization on polygon depth-testing
21:55:22filwitbesides... why do you even want ellipsoides?
21:55:30filwitwhat are you trying to achieve?
21:55:39gradhatits
21:55:44filwit^ LOL
21:56:39filwiti see the appeal then... who wants to render a jagged set of tits.
21:57:21gradhaDOA Volleyball 3000, more curves than you can imagine
21:57:50filwitgod, that "game"
21:58:02filwitwas so retarded... but i bet it made so much money
21:58:42Araqfilwit: nothing concrete really, but it's 2013 and I'm tired of angular objects which are round in the real world
21:59:39gradhaAraq: maybe you lack a decent card/machine? the videos or rendered action I see nowadays are worse because of mpeg arctifacts than visible polygons
21:59:50filwitAraq: it's mostly about the hardware at this point. we've hit a ceiling in all hardware
21:59:57gradhafilwit: talking about money, more than 1M$ in less than 5h http://www.kickstarter.com/projects/inxile/torment-tides-of-numenera
22:00:22filwitAraq: the only way forward is to do what Parrallella is doing (many core CPUs) and then use them for Voxel Raytracing
22:02:14gradhaoh man, that's funny, they are exploring parallella support for python
22:03:45filwitwhat a waist... Python wont do the chip justice
22:03:51gradhawell, indeed that will be challenging, I can understand that from the POV of enterntainment
22:03:51filwit(watching video
22:04:15filwitwhat will be challenging?
22:04:37gradhathe global interpreter lock
22:05:11*filwit is unaware of Phython specifics
22:05:37gradhathe interpreter uses a global lock which prevents two python instructions from running at the same time (in general terms)
22:05:49gradhaso most of python parallelization comes from running separate processes or calling C
22:06:19gradhaat some point during 2.x development they tried to remove the GIL and found that the GILless version ran slower, and didn't scale as well as thought
22:06:37filwiti see
22:06:49filwitso it's about the worst language to try and port o Parrallella?
22:07:00Araqquite
22:07:03gradhayep
22:07:08filwitperfect
22:07:16AraqRuby does the same and it's interpreter was AST based
22:07:31Araqso Ruby 1.8.7 would be even better for that
22:07:34filwitPython is not AST based!?
22:07:40Araqno
22:07:42filwitwut
22:07:44filwithow?
22:07:53Araqit compiles to its own shitty bytecode
22:08:04filwitah, i see
22:08:10Araqthere is an AST involved during compilation of course
22:08:25Araqwell not "of course", actually it's quite easy to do without
22:08:33Araqlike Lua does
22:08:49filwitLua doesnt use an AST for compiling...
22:09:00filwitit has to use something
22:09:38filwiteven spaghetti code functions need some form of data structures to pass around
22:09:45Araqit uses a symbol table and some temporary data structures for codegen
22:10:39Araqjust like the early Pascal and C compilers did
22:10:49Araqa real *one* pass compiler ;-)
22:10:59filwiti see
22:11:17filwitmy compiler is written in Brainfuck
22:11:20filwitjust so you know
22:11:29Araqgood choice
22:11:30filwitcause i'm l33t and hardcore
22:11:33filwitlol
22:11:47filwit(it's really written in C++)
22:12:13Araqvisitor pattern?
22:12:25filwitwhat?
22:12:46Araqdo you use the visitor pattern in your compiler?
22:12:59filwiti don't know what that is...
22:13:04filwitone sec
22:13:05Araqgood
22:13:09Araqno
22:13:13Araqdon't read what it is
22:13:17filwitlol
22:13:20Araqit's crap
22:13:21filwitreading now
22:13:34Araqit's the worst way to design a compiler
22:13:42filwitidk, this is the first time I've tried to write a compiler
22:13:57filwitand it's kinda structure like a 3D modeling program (which i've written in the past)
22:14:10Araqlol
22:14:26filwitbasically, every type/function/var etc maintains dynamic lists to declarations and stuff
22:14:39gradhayou can argue with Araq then if instructions by your compiler are rendered as polygons, voxels or ellipses
22:14:52filwitso if you change something, the structure can instantly react to the changes (designed for IDE tooling support)
22:15:27filwitgradha: lol.. they're voxels, obviously
22:15:58Araqfilwit: you really shouldn't write that in C++
22:16:12Araqbut then you want an LLVM backend ... hm
22:16:57filwitAraq: i was thinking about writting it in D or Nimrod, but I want to support JIT compilation (as well as interpreted and native), and (for some reason) i don't want the runtime component to rely on a GC (especially not D's GC)
22:17:06filwitand yes, LLVM is an issue
22:17:19filwitLLVM has C bindings, but the C++ ones are much better
22:17:38filwitplus, i use a lot of C++11 features
22:17:44filwitso it's not all that bad
22:17:54filwitforeach loops and stuff make the code much more readable
22:18:04filwitand the 'auto' keyword...
22:18:18AraqC++11 still lacks pattern matching though
22:18:25filwiti use STL containers not Boost though...
22:18:30filwitdont' know if that was a good choice
22:19:04Araqand a GC is really NICE for writing a compiler
22:19:15gourAraq: what about pattern matching in nimrod?
22:19:17filwityeah, if I could, i would use something else, but practically speaking, C++ is the best option... until Reign (my language codename) is bootstrappable
22:20:01Araqthe GCC people patched their compiler with an home-brew GC
22:20:27Araqbecause maintainance was a nightmare otherwise
22:20:34filwityes, but again, JIT compiling distribution is my concern there...
22:20:43filwitnow that i think about it
22:20:47filwitthat's not much of a concern
22:20:54filwitbut still, there's also LLVM
22:20:59filwitwhich is designed for C++
22:21:10Araqtrue
22:21:11filwitso i don't have to wrap that into Nimrod/D
22:21:26Araqwe have an LLVM wrapper
22:21:30filwitand then i'd have to use LLVM's C bindings, etc
22:21:35filwitreally?
22:21:40filwiti thought you hated LLVM
22:21:40Araqbut it's a wrapper around the C bindings
22:21:49filwitoh... i see
22:21:52filwiti didn't know that
22:21:53AraqI don't hate it at all
22:22:04Araqit's just more work than emitting C
22:22:11filwiti see
22:22:20Araqand their type API was crap
22:22:30filwitbut ultimately, it (in my opinion) is very important for popularity
22:22:41filwitone thing i think Nimrod should do
22:22:43Araqso crappy that it's easier to produce their textual representation
22:23:08filwitto help it gain popularity, is remove forward-declaration and use LLVM or GCC directly
22:23:21gradhafilwit: why is JIT a concern for you?
22:23:25Araqgour: we already have exhaustiveness checking in case statements and proper pattern matching can easily be implemented via a macro
22:23:37filwitgradha: JIT IMO, is the most logical compilation model
22:24:10filwitgradha: if all programs where JIT, then you could have the benefits of a Gentoo based distro, without all the slow compilation times
22:24:14Araqfilwit: porting it to either LLVM or GCC takes a year
22:24:27Araqand it's a bad decision
22:24:36filwitgradha: i dont' like VMs, but I like JIT
22:24:48Araqbecause people like to use Visual C++ with it or Intel's compiler
22:25:01gradhafilwit: I like forward declarations
22:25:10filwitAraq: well that's a choice you can make, but I think you scare a lot of potential users away from the langauge with "Compiled to C"
22:25:37filwitAraq: of course, this is marketing tactics, not technical aspects
22:25:44Araqfilwit: they are scared by everything else too anyway
22:25:50dom96I know a lot of people for whom "Compiled to C" is a very big feature.
22:25:51gradhawhich reminds me latest LLVM removed requirement of objc forward declaration inside compilation unit
22:25:54filwitAraq: so if there are more pressing concerns, then you have to account for those variables
22:26:25gradhafilwit: compiled to c made me go with nimrod
22:26:26filwitgradha: you may like forward-declaration, but statistically speaking, i doubt the majority of coders do
22:26:40gradhawell, statistically speaking, nimrod is not going anywhere
22:26:54filwitthat's a horrible outlook
22:27:01filwitand is depressing
22:27:10AraqD has no forward declarations; it has lots of related bugs instead
22:27:16gradhathat's why we don't do things statistically
22:27:23filwitAraq: C# does not
22:27:36Araqfilwit: C# has no meta programming to speak of
22:27:40Araqbig difference.
22:27:48filwitAraq: true, but I have solutions to those things
22:27:53dom96C# also has a big company behind it.
22:28:03gradhaand Miguel
22:28:10Araqfilwit: so do I
22:28:11gradhathat's like a company and a hippy
22:28:18filwitdom96: that matters of course, but look what Araq (one guy) has achieved in a 7 years
22:28:24Araqbut as I said, zahary will remove them
22:29:01AraqI fear their removal tbh
22:29:05dom96filwit: Yes, think about what he could accomplish with proper funding.
22:29:23gradhacasino! black jack!
22:29:43filwitdom96: unfortunately, and i say this with the best of intentions, he will never get funding if popularity is not a concern
22:29:58dom96filwit: I agree.
22:30:00Araqomg ... here we go again ...
22:30:20filwitAraq: i will refrain from arguing this point, for the sake of your sanity
22:30:21filwit:P
22:30:32filwiti didn't come on here to debate this, again, anyways
22:30:59gradhamaybe we should ask the guys who funded a succesfull kickstarter game to use nimrod to develop it?
22:31:19filwitwont work
22:31:22gradhathey were crazy enough to use kickstarter, they could try nimrod too!
22:31:50gradhaAraq: how many patents you have on nimrod?
22:31:53dom96maybe we should start a kickstarter for nimrod?!
22:32:25filwitit wont works guys
22:32:33filwitsorry, that's just my opinion of course
22:32:36gradhadom96: the trailer could be a real time capture of the irc channel
22:32:43filwitbut what do i know
22:32:45dom96gradha: with inception music
22:32:50filwityou should try it and see if it works
22:32:51gradhaand voxels
22:32:57gradhaaalib voxels
22:32:57dom96and boobies
22:33:07filwitif anything else, it will help you understand public opinion of Nimrod's design
22:33:35gradhaI think the public opinion of Nimrod is "what? whitespace for identation? sux!"
22:33:57filwitgradha: LOL at the trailer being a caption of the IRC... perfect way to get funding
22:34:17filwitgradha: backed by the Inception soundtrack
22:35:00filwitgradha: i almost didn't try Nimrod because of Python-style indentation, but it had other attractive features
22:35:09dom96Nah, it wouldn't work. We would get sued by Hans Zimmer or whoever composed the Inception OST.
22:35:09filwitgradha: that's really not it's problem, IMO
22:35:28filwitPython style is much better than Lisp or Haskell, or VB
22:35:49dom96filwit: I tried Nimrod because of the Python-style indentation.
22:35:58filwitdom96: the lawsuit would be great for publicity
22:36:00filwit:P
22:36:04Araqfunny most people complain it's not enough like Haskell ...
22:36:28Araqwhich I don't really get tbh
22:36:41Araqif I want Haskell, I know where to find it
22:36:46filwitAraq: that's cause the only people you talk to have made it through the existing documentation
22:36:56filwitthat's nothing against the documentation
22:37:15filwitis just means that you're weeding out people who just turn away for whatever reason
22:38:40gradhaso it's a problem with the documentation or with the language?
22:38:50filwitwith the language
22:39:16gradhayou just haven't seen the documentation I'll write, with unicorns and stuff
22:39:21filwitbut good marketing is like the force... it works on the week minded
22:39:22gradhapeople will forget about the language
22:39:32filwitlol
22:39:36gradhathey will buy the documentation, it will come in novels
22:39:43filwityou and Dom share common interests
22:39:57dom96hah, unicorns ftw.
22:40:06filwit:}
22:40:12gradhaI've been thinking about a little boy with glasses, learning magic on a flying pink unicorn
22:40:21dom96filwit: btw, any new ideas for an Aporia icon?
22:40:31filwitgood storry, add vampires and it will be a best-seller
22:40:52filwitdom96: i haven't really given it much thought
22:40:54gradhaoh, right, vampires, the kind which sparkles in the light, we will get the first language with female coders
22:41:03dom96don't forget the werewolves and shapeshifters.
22:41:06filwiti'm kinda in a pressing situation for work (dead-line wise)
22:41:18dom96filwit: no worries.
22:41:28filwitbut don't worry, i will design it
22:41:59filwitgradha: LOL, sudden influx of girl-coders due to awesome documentation novels
22:42:08dom96holy shit, AoE2 HD: http://www.youtube.com/watch?v=q_MEFt7KrxQ
22:42:14Araqfilwit: if you could vote for a single new feature/ change in the language, what would be it?
22:42:21filwitgradha: then the boys will follow, out of lust, and we'll create a social sub-culture
22:42:27dom96I'm not even sorry about this being off-topic.
22:42:59filwitAraq: i want it to be known that you are starting this
22:43:12filwitAraq: strict encapsulation
22:43:44filwitAraq: which isn't really a "new feature", it's more of a core change
22:44:26filwitAraq: but honestly man, let's not get off on that now
22:44:29gradhadom96: wait a sec, the graphics in the video are the remastered ones?
22:44:39filwitAraq: just skpe with me sometime so we can talk about things
22:45:22filwitdom96: have you seen the PS4 trailers?
22:45:43Araqfilwit: yeah next week, I'm pretty busy the next days
22:46:06dom96gradha: I think the HD basically means "We now support 1920x1080".
22:46:28filwitAraq: sounds good, whenever you want to.
22:46:36dom96gradha: which IMO is good because the game is still awesome, it's just a pain to play on modern operating systems.
22:46:47Araqfilwit: however, Nimrod has encapsulation, just not in the way you think it needs to be done
22:46:54filwitdom96: you ever get Steam running again?
22:46:58gradhadom96: certainly HD version sounds much better than "we recompiled it"
22:47:10filwitAraq: thus the 'strict' part
22:47:37dom96gradha: indeed.
22:47:47filwitAraq: the problem is floating functions, which are compounded by Nimrods ability to define symbol functions
22:48:17Araqfilwit: do you know what "private" in C# actually means btw?
22:48:21dom96filwit: Yeah, I can always start steam. The UI is a messed up though.
22:48:34dom96filwit: As for the PS4 trailer, no I have not seen it?
22:48:38filwitdom96: get it from the official repos already!
22:48:45dom96filwit: I did!
22:48:52filwitdom96: oh
22:48:55filwit:)
22:48:55dom96filwit: That's not the issue.
22:49:02Araqclass A { private int x; public void(A other) { other.x = 4; } }
22:49:27filwitPS4 trailer of Killzone: http://www.youtube.com/watch?v=8ptA6fCNPeg
22:49:28Araqoops ... it changes the 'other' object and not the this object ...
22:49:30filwitapparently that's realtime
22:49:47filwitAraq: what does private in C# mean?
22:50:10Araq"private" is no strict encapsulation either
22:50:11filwitAraq: ps. in my langauge, things are 'readonly' (not C#'s readonly) by default, not private or public
22:50:30Araqfilwit: see my example code
22:50:58filwitAraq: i don't get it....
22:51:10filwitAraq: i don't see anything out of the ordinary
22:51:17Araqit's some visibility thing that doesn't really capture what people have in mind when they say "encapsulation"
22:51:20dom96filwit: Ahh, I saw some of that. I watched the PS4 announcement ;)
22:51:41Araqfilwit: it accesses 'other.x' even though it's private
22:51:57filwitAraq: of course... even C++ does that by default
22:52:03Araqbecause privateness is bound to the class
22:52:11Araqbut that's not what is desired
22:52:20Araqyou want to bind it to an *instance*
22:52:28filwitAraq: i don't think so
22:52:36filwitcause all the code is part of the defining object
22:52:45Araqbecause you're *used* to the status quo!
22:52:56filwitno because it's logical
22:53:00Araqit IS confusing for newbies
22:53:06Araqit's not logical
22:53:11filwitokay, so there could be two level of private
22:53:14Araqit's some weird implementation issue
22:53:14filwitthat's fine with me
22:53:22filwitbut it is useful for some things
22:53:39filwithonestly i like the way C++ does it
22:53:42Araqbecause binding the concept to an instance is undecidable
22:53:49filwitwith friend classes, even if the syntax is dumb
22:53:52filwitit works out well
22:54:54Araqso go back 30 years in time and tell Stroustrup C++ lacks encapsulation
22:55:07Araqbecause "private" doesn't cut it
22:55:15*gour quit (Quit: WeeChat 0.4.0)
22:55:15filwitAraq: it's useful to be able to work with other instance's private variables at times though... but only because they type of object is the same
22:55:38filwitthe classic example is linked lists
22:55:40Araqit's also useful to just get shit done
22:56:02filwitwhat? how is that applicable to the topic?
22:56:25Araqinstead of the endless intellectual masturbation if it should be private, public or protected
22:56:32Araqsorry...
22:57:10AraqI have yet to encounter a single bug that was actually prevented by the OO way of modelling
22:57:13filwityou brought it up...
22:57:42filwitAraq: there are ways of "doing things" in either model
22:57:50filwitit's about what is easier to learn, and read
22:58:21filwitOOP, IMO (and i think if you took a "raise of hands") is easier to conceptualize for most tasks
22:58:40filwitbecause in real-life we think in terms of objects
22:58:46Araqomg
22:58:59Araqplease don't give me this bullshit
22:59:07filwitthe person has a name, and he can do something
22:59:20filwitnot the person has a name, and do something with him
22:59:33filwitwhatever man, you brought it up
22:59:35Araqyeah and when a child grows up you have to change the instance's *class*
22:59:39Araqoh wait
22:59:45AraqOO doesn't support that
22:59:57filwitno....
23:00:11filwitif the person CAN grow up, it's a part of the person's structure
23:00:15filwitPerson.age
23:00:23filwitit's becomes dynamic
23:00:33filwitand you have to account for that in some way
23:00:43filwiti don't see how programming outside of OOP helps solve that
23:01:19filwitplus, i never said OOP couldn't be improved upon
23:01:25filwiti really like Nimrod case-objects
23:01:28Araqoh but it does, because you don't begin to introduce child <: person, adult <: person
23:01:46filwityou never would
23:01:52filwitintroduce those two types
23:01:55Araqlol
23:02:04Araqof course you would
23:02:11Araqthat's the point of OO :P
23:02:35filwitno, the point of OOP is to encapsulate functionality along with the type
23:02:42filwitif the type is dynamic
23:02:50filwityou account for that in the base type
23:03:08filwitif ti's not dynamic (and truely a different type), then you make a new type...
23:03:11filwitthat's the way it works...
23:03:28filwitagain, if there was some extension to that model, i would be all for it
23:03:49filwitbut floating functions is confusing, and forces you to stutter the type pointlessly
23:04:00filwit(i dont' care that they're defined outside the type body)
23:04:06Araqhttp://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf
23:04:13filwiti care that they're not "associated" with the type
23:04:20AraqI'm sure you're aware of that link
23:04:33filwiti'm not actually
23:05:23filwitagain though, i'm not against extending the current OOP paradigm
23:05:40filwitonly that I think it makes more conceptual sense in the broad sense
23:06:12filwiteven if there are corner cases, the benefit of learn-ability in the common case easily pays for them
23:06:24gradhafilwit: I remember more situations in life where I thought "shit, this would be better if it was NOT an object" than "shit, this would be better as an object". IMO OOP puts a constraint you hardly later remove
23:07:08gradhain fact, the first time I saw python I though "sweet! the methods are just functions nested with the first param as the object!", but later realized you can't use them "without" the object
23:07:11filwitgradha: you must not have been using an Langauge with extension functiosn like C#
23:07:22AraqML, Ocaml, Haskell, F#, Go, Rust, Lisp ...
23:07:30gradhalet me look that extension function
23:07:39Araqthey all prefer free functions
23:07:45filwitso?
23:07:58filwiti would argue the same thing to their creators
23:08:16AraqAda, C, ...
23:08:27gradhafilwit: oh, just like objc categories, sure, use them every day, precisely because OOP sucks
23:08:29filwityou want a list of objects-oriented languages? maybe we can compare which ones are most popular for application code...
23:08:50AraqErlang ...
23:09:06gradhafilwit: but aren't extension functions a point against OOP rather than in favor of?
23:09:15Araqgradha: exactly
23:09:47filwitgradha: because, in my design, they cannot be global
23:10:16filwitmeaning, you cannot extend the functionality of an object, beyond what you need to do for local things
23:10:16gradhaso you can add to your object in a lib and people using your lib can't reuse them/access them?
23:10:54filwitwell, you have to understand that in my design, a "Type" is the top-level object (still not 100% on that)
23:11:03filwitthere is not modules
23:11:03gradhahm... so you can access only private variables, not external ones?
23:11:08filwitno
23:11:17filwitthings are still private/public/readonly/etc
23:11:26filwitand you can have free-functions
23:11:35filwitbut those free-functions are file-specific
23:11:46AraqLua, JavaScript, ... all these horrible marketing failures ...
23:11:51filwitthey CANNOT (unless export C) be seen outside the file
23:12:22filwitAraq: all of those language have more situations than OOP alone
23:12:26Araqfilwit: Java in fact does almost enforce the style you desire
23:12:42Araqand yet everybody hates it nowadays
23:12:48gradhafilwit: people in global languages achieve that with mangling, everything is global but methods for a class are "mangled" in a deterministic way so as to discourage external people form using them
23:13:14filwitAraq: more importantly, you're using an "argument from authority" and "argument from popularity" arguments... which i dont' find convincing
23:13:42Araqyou argue with "argument from popularity"
23:13:56filwitgradha: yes i know, and in properly written C code is easy to follow
23:14:09filwitgradha: the problem is, it's very easy to write bad C code
23:14:22Araqit's far easier to write bad C++ code tbh
23:14:35AraqI still like C++ better though
23:14:35filwitAraq: my OOP design is not C++
23:14:59gradhafilwit: it seems that people wishing to extend the functionality of an object only for local needs could just inherit the method, so maybe you foresee the need to extend classes you can't inherhit?
23:15:06filwitthough it does have multiple inheritance (i think) and doesn't have interfaces like D/C#
23:15:30Araqthat's good, I prefer MI too
23:16:11Araq(except that I rarely even use SI)
23:16:14filwitAraq: yes, and interfaces are dumb... just use abstract classes (type Foo : proto)... one simple design which is more powerful
23:16:58Araqfilwit: that's highly controversial, most people find interfaces much cleaner
23:17:11filwitgradha: have you ever worked with OOP? just wondering...
23:17:28filwitgradha: because private vars can't be set in extended types
23:17:37filwitgradha: so i'm not sure what you're getting at
23:17:44Araqno, he hide under a rock for the last 20 years
23:17:57Araqseriously ... I appreciate your work and feedback
23:18:01gradhabut if they are private, how do you know they exist if you have no source?
23:18:10Araqbut this whole "you just don't get OO" is offensive
23:18:15gradhaI mean, there's a contradiction there, it's either private, or it's public
23:18:19filwitAraq: a proto type can just be an interface... if all the functions are marked as proto and dont have bodies
23:18:48filwitAraq: but there are many times you want base functionality in an "interface" type (something that can't be instantiated)
23:19:31Araqfilwit: please read this if you haven't already: http://www.geocities.com/tablizer/oopbad.htm
23:19:49filwitAraq: also i am: a) not saying "you just don't get OOP", and b) how is that any more offensive than "you just don't understand non-OOP" which you are saying to me?
23:20:12AraqI don't agree with everything tablizer says
23:20:29filwitgradha: you have source
23:20:36filwitgradha: you have IDE tools
23:20:38Araqbut seriously his arguments are better than anything I've ever heard from the OO crowd
23:20:53filwitgradha: you have header files for when you don't have source (and for linking), etc
23:21:13gradhasure, but header files don't include implementation details, or do they?
23:21:28filwitAraq: i will read it in a minute
23:21:29gradhaprivates are implementation details, at least in objc you don't "see" them
23:21:35gradhathough you can "feel" them through pointer access
23:21:59filwitgradha: no, header files don't include implementation details
23:22:22gradhain that case, how could you extend a class to modify a private variable you don't "know" exists?
23:22:25filwitgradha: but privates are needed in header files so the compiler know the size of the type
23:22:37gradhawell, maybe in your language
23:22:38filwitgradha: for linking among other thigns
23:22:48filwitno... that's C++
23:22:58gradhayes, I don't use C++
23:23:01filwitand D
23:23:14gradhaat least we've reached the conclusion your concept of private is public as the light of day
23:23:22gradhathat private doesn't float my boat
23:23:28filwitand you can never modify a private variable outside of the class definition
23:23:38gradhaha
23:23:47filwitit's part of the benefit of encapsulation (but Nimrod has it too)
23:23:47gradhaC++ doesn't have pointers?
23:24:02filwityes, you can hack set privates
23:24:11filwitthat is a security detail
23:24:18gradhayou can also take a header file, change all privates to public and use the compiler without problems
23:24:32filwityes.. and get linking errors and stuff
23:24:47gradhaoh, they broke that trick?
23:25:02filwitno it's still possible to do that, depending on the compiler
23:25:14filwitthat has nothing to do with the design
23:25:20filwitand the same thing exist in Nimrod
23:25:33filwitI don't see your argument against OOP in these questions though
23:26:00filwitmodern OOP langauges like D & C# define a "safe code"
23:26:07gradhaI wasn't arguing against OOP, just trying to understand your concept of private
23:26:13filwitwhich can't use Pointers and require bounds-checking
23:26:22gradhaI got confused with the jumps to C# mentions
23:26:23filwitso it's much harder to hack that way
23:26:37filwitoh, okay i see
23:28:16filwitdamn, we always talk about this when i come on here
23:28:20filwitalways
23:28:43gradhadon't worry, Araq is surely watching the ellipsoids from the Killzone video
23:28:47filwitmy presence details us into language philosophy
23:29:13filwitthe Killzone video has ellipsoids!?
23:29:27filwit(jk, i know you where joking)
23:29:48filwitAraq: do you like this kind of music: http://www.youtube.com/watch?v=hCpmzP2UHjs
23:29:49filwit?
23:30:09filwitoh wait, nevermind i think you where here when i posted that before
23:31:26Araqfilwit: I like this kind of music: http://www.youtube.com/watch?v=ji9prBdXV_0
23:32:07filwityeah that's good
23:32:08gradhasounds like rammstein
23:32:10filwitcan't understand it
23:32:15filwitbut sounds cool
23:32:52filwitin HS, this kind of music was my favorite: http://www.youtube.com/watch?v=0o9u2W_iGNY
23:33:19filwitmy brother was always the Electronic fan, an i used to think it was dumb and that no one would like it
23:33:28filwitbut look at it now... lol was i wrong
23:33:34filwitplus, it's grown on me
23:34:05gradhapeople use to say the same about classical music, it's just a fad
23:34:24filwiti also used to really like this emo shit: http://www.youtube.com/watch?v=QTOKnYNI3tU
23:34:35filwitit's actually not that bad still
23:34:48filwitbut i got sick of how depressing all of it is
23:35:09gradhaow, that video is blocked in my country
23:35:15Araqlol same here
23:35:18gradhais it against spanish people?
23:35:24filwitlol, odd...
23:35:27Araqbut then everything is blocked here anyway due to GEMA
23:35:44filwityeah, i've only had a few things blocked and way pissed
23:36:09filwithttp://vimeo.com/39945252
23:36:10gradhanowadays I rarely hear to music if it doesn't come with FullHD and sexy ladies
23:36:11filwitwork?
23:36:24gradhavimeo works
23:36:30filwityeah, but that's cause it's party music
23:36:47filwityou dont' want to listen to depressing music when you're drinking with friends
23:37:28filwiti think that's why kids like electronic music these days
23:37:41filwitit's not all "bitches and hoes", but is still uplifting (some of it)
23:37:51gradhaI like hearing music with lyrics I don't understand (different language), so I give it the meaning I prefer however I feel
23:38:21filwitare you from spain or mexico/south-america?
23:38:24gradhain fact, I remember a song I used to think it was really sad and emo
23:38:41gradhathen I realized I had misunderstood a part of lyrics and it was engouraging
23:38:52gradhaI'm in spain
23:39:16gradhawe speak mexican here, mexicans speak in spanish instead (or so the saying goes in the USA)
23:39:16filwityeah, i don't really mind the downer music
23:39:30filwitbut just like anything, too much is a bad thing
23:39:45filwitlol wut?
23:39:49filwityou speak mexican?
23:39:59filwitwhat does that mean? (joke?)
23:40:24filwityou mean cause 'Mexicans' speak 'Spanish'?
23:40:43gradhawell, if you are from spain and go to the USA, nobody says you speak spanish
23:40:54gradhathey say mexican people speak spanish, you speak... weird
23:40:59filwityes, i met a spanish exchange student awhile ago
23:41:11gradhaso the conclusion is spanish people must be speaking mexican
23:41:16filwitand he liked to listen to Shakira (which was on the radio a lot at the time)
23:41:24filwitand try and understand what she was saying
23:41:35filwitalso, i get the joke :)
23:41:38gradhalol, nobody understands that squirrel
23:41:41filwiti've just never heard it before
23:42:42filwityeah Shekira is like Justin Beihber to me... i just don't care either way
23:43:04filwiti never really got all the JB hate thing, cause i don't really listen to the radio maybe
23:43:17filwiti just never really cared either way
23:43:20gradhahere the joke seems to be that people will understand her lyrics whenever wikileaks releases them, maybe because of poor diction (actually haven't heard hear)
23:43:33Araqcomparing Shakira to JB is blasphemy
23:43:33filwitlol
23:43:45filwituh oh
23:43:46gradhayeah, shakira is hotter
23:44:02filwit^ good point
23:44:58Araqfilwit: it's fine, I don't care about her music either ;-)9
23:46:48filwitdon't germans use grammar like this: "the man walks to the store and talks to the cashier, quickly, softly"
23:46:49filwit?
23:47:08filwitinstead of "the man quickly walks to the store and softly talks to the cashier"
23:47:09gradhaalso "what are you wearing tonight?" ??
23:47:14filwitLOL
23:48:11filwitand by "germans use" i mean "in German (language)"
23:48:22Araqdunno
23:48:31Araqit's hard to tell right now
23:48:33filwitwhat do you mean you don't know
23:48:34filwitlol
23:48:40filwitare you high?
23:48:56AraqI'd have to translate word by word and see if it works that way in german
23:49:22filwitisn't German your first language?
23:49:30Araqit is, but I'm debugging things
23:49:36filwitokay, i see
23:50:12gradhafilwit: fwiw you can use both constructions in spanish
23:50:23filwityou can sorta in english
23:50:31Araq"der mann schnell läuft ..." nope
23:50:36Araqdoesn't work that way
23:50:36filwityou can say "the man walks to the store, quickly"
23:50:46filwitbut you can't chain both adjectives to the end
23:51:13NimBotnimrod-code/Aporia c3a0344 Dominik Picheta [+0 ±1 -0]: Small todo changes.
23:51:19filwitlauft means "quickly"?
23:51:31Araqno it means "walks"
23:51:46filwitschnell means quickly?
23:51:52Araqyes
23:51:53filwitand that's proper?
23:52:05Araqder Mann läuft schnell ... # proper
23:52:27filwitand the second part?
23:52:32Araqbut german is very flexible when it comes to word order
23:52:48Araq"Schnell läuft der Mann" # also possible, albeit uncommon
23:53:06filwitwell that's also valid in english
23:53:11filwit"quickly the man walks"
23:53:31filwitbut i meant the chaining of two things: "the man walks, and talks to the clerk"
23:53:37Araq"quickly walks the man"? :P
23:53:50filwitbut then, in German (so i hear), you can add both adjective to the end and it's valid
23:54:04filwitoh no, you're right
23:54:08filwitthat's not valid in english
23:54:28filwitactually... i've heard people say things like that before and get away with it
23:54:37filwitaka: Yoda
23:54:43filwit:P
23:54:52Araqenglish speaking people often complain the verb comes so late in german sentences
23:55:05Araqbut then that's not quite true
23:55:15Araqoften it moves to the front ;-)
23:55:37Araqand much more often it's split up
23:55:43Araqinto 2 parts
23:56:09gradhahrm... given filwit gaming background I expect him to understand pretty well the pdf Araq posted earlier, it's all about how encapsulation fucks up cache hits and game developers resort to taking obejcts apart for performance
23:56:31gradhait's just like denormalization of tables in SQL for performance
23:56:42filwitgradha: encapsulation is still used a ton in Game Engines
23:56:50filwiti also didn't download that PDF
23:57:00Araqyou should read it
23:57:08filwiti doubt it will be convincing
23:57:18Araqbut it is
23:57:20gradhaI don't need that pdf, I can tell you I've seen it with my own eyes
23:57:24filwitbesides, the point gradha is making is an error
23:57:35gradhawhen I worked with console guys we had this array/linked list of objects
23:57:46gradhaand you had a logic loop going through all of them checking stuff
23:57:50gradhait was really slow
23:58:09gradhaso we "cached" the checks into an array, which fit into the cache of the console, and voila, much faster
23:58:18filwitthe situation is literally the same, weather OOP is in the picture or not
23:58:24gradhabut that leaves part of your object in a separate array for performance
23:58:52filwitgame objects are much different
23:59:11filwityou don't think of a "Character" as a full game object usually
23:59:22filwityou think of the "Mesh" as a game object component
23:59:34filwitbut that has nothing to do with functions being tied to what objects
23:59:40gradhacan't tell you really what game objects are, during a year we redesigned the hierarchy three times IIRC
23:59:46filwiteven in Nimrod, the situation would be tackled the same way