<< 17-03-2014 >>

00:00:07OrionPKWhy doesnt this work; $(value.date.int) & "some other string"
00:00:15renesacbut you could be sitting in a TChair or a PChair...
00:00:17OrionPKconversion from string to int is invalid
00:03:26dom96OrionPK: What type is value.date?
00:03:29OrionPKoh god, nevermind
00:03:35OrionPKthe date is a string, thought it was a TTime
00:09:03Skrylarits more a matter that you're not going to name a module tfoo but you might name it after what it contains, and if the typename is the same as a module name nim gets confused
00:10:50EXetoCSkrylar: so rectangle/Rectangle then, but you need case sensitivity
00:11:31Skrylari would rather have trectangle than case sensitivity
00:11:51Skrylarbut we're not supposed to use T/P's (lol toiletpaper), so i'll probably rename the module to rects
00:12:02runvncso I don't put T in front of the type name right
00:12:14clovisIt's the other way around. Rectangle is the base entity, not the module.
00:12:31EXetoCSkrylar: well we're getting it
00:12:43SkrylarEXetoC: it sounded like araq nixed it last time i checked the thread
00:12:45EXetoCyou can do that if you want but you need to enable case sensitivity
00:12:53runvncyeah just realized that
00:12:55EXetoCuh ok
00:13:06runvncbecause I have a TSession and a session var
00:13:09Skrylarhe mentioned partial case sensitivity was more migraine than it was worth in the last post, but i haven't checked in a few days
00:13:30runvncI think for now I just need to stick with T for practicality sake
00:13:30EXetoCso we're getting full case sensitivity then?
00:13:40runvncpersonally I think it is good that way it is
00:13:46Skrylar^
00:13:59clovisMe too, except scrap the T/P
00:14:03SkrylarHe said there won't be any major syntax changes soon when filwit was poking about moving some symbols around
00:14:18SkrylarI'd imagine case sensitivity is a 'major change' which is another hint that it was scrapped
00:15:02Skrylari'd also imagine it would just be confusing since the existing blog posts already mention the style insensitivity
00:18:39clovisA variable called "rectangle" does a bad job at describing *what* rectangle. It only states the type of the thing.
00:19:06EXetoCclovis: T is necessary with case insensitivity
00:19:07clovisA module describing the type Rectangle is itself not a rectangle
00:19:50SkrylarEXetoC: i've been getting along fine without T/P so far (well, without T.)
00:19:56SkrylarI don't see the hate against P.
00:19:57EXetoCI think the problem was that he didn't enable partial case sensitivity
00:20:03EXetoCso Rectangle == rectangle
00:20:05clovisEXetoC, what I'm trying to say is that case sensitivity isn't the problem. The identifiers naturally have different names
00:20:40clovisOne is Rectangle the other is something more descriptive, like windowFrame
00:21:33SkrylarEXetoC: nope, the problem is that 'rectangle.nim' and 'rectangle the type' have the same identifier
00:21:53Skrylarand nimrod isn't smart enough to figure out what i meant
00:22:15EXetoCoh you actually named it that way. that's not good
00:22:25clovisSkrylar, the type Rectangle has the correct name. The module which itself isn't a rectangle should have another name
00:22:30Skrylarit works in java, D and C# :\
00:22:58dom96indeed, nimrod seems to have more trouble dealing with module names which are the same as types/identifiers than it has dealing with types which are the same as identifiers.
00:23:19dom96I think this finally deserves an issue.
00:23:29dom96Because there have been many cases where people got confused.
00:23:34EXetoCclovis: it's an accurate name
00:23:44Skrylardom96: well, the compiler crashed. thats a pretty confusing issue :)
00:24:02SkrylarI saw Zah's fix and his error message isn't much better; it just says "couldn't instantiate" which doesn't tell you that the symbol name conflicted
00:24:43EXetoCclovis: you could bundle it with similar things and call it something else, but sometimes it doesn't make sense
00:26:07clovisfrom Rectangle import Rectangle is confusing
00:26:19Skrylaryou don't need to from rectangle import rectangle
00:26:37Skrylarthe only thing in skylight.rectangle is the type and methods that operate directly on the type
00:27:56clovisI guess so
00:28:05*Matthias247 quit (Read error: Connection reset by peer)
00:28:36EXetoCclovis: not when the module name is lower case
00:29:01clovisEXetoC, I take it that you want case sensitivity
00:29:27EXetoCno, but you'd say "from rectangle import TRectangle" now, assuming that the conventions are adhered to
00:30:17clovisOr, why not "from RectangleModule import Rectangle"
00:30:18EXetoCs/no/don't really mind either way/
00:30:58EXetoCthat'll get annoying fast
00:31:16clovisI'd refer to the type a lot more often than the module
00:31:31SkrylarI don't use the TFoo convention because its apparently taboo
00:31:33clovisI'd rather have the type be the natural name
00:31:37Skrylareven though I prefer it
00:31:39OrionPKdom96 is there a way to convert a TTimeInfo to a TTime
00:32:53OrionPKnm, found it. TimeInfoToTime
00:32:55clovisWhy waste readability by having extra characters added to the type name when they instead could be added to the less used module name
00:32:59EXetoCSkrylar: everyone has been doing that for ages
00:33:26clovisLegibility is the most important aspect, imho
00:33:39Skrylari don't lose readability from TRectangle
00:33:45fowlSkrylar, https://gist.github.com/fowlmouth/9584728
00:33:49*Skrylar is one of those pascal-y people
00:34:27clovisIt's still a bit of misplaced noise
00:35:06Skrylarfowl: neat.
00:35:37Skrylarfowl: now the second problem is, "is that a good pattern for nimrod?" since the closures are going to end up making the GC keep the objects alive unless you explicitly disconnect
00:36:23EXetoCclovis: "variable names should be more descriptive than that" is too general I think
00:36:30EXetoCso what about collisions?
00:36:31fowlif thats a problem we can gcunref after connecting, but yes ill need tests written
00:37:21Skrylargcunref means when you trigger you'll be calling dead pointers, that's also bad
00:37:41clovisEXetoC, I don't have the answer except I think that it might depend on the context. In the context of dealing with rectangles a particular rectangle should be better described with a more specific name, such as windowFrame
00:37:53SkrylarQt deals with it with some magic in that a QObject's destructor goes through a list of backlinks and performs disconnects, which is invasive but it prevents sig/slots from ever segfaulting
00:38:02Skrylarinstead you get log output that someone just signalled a dead window
00:38:40fowlyea
00:39:06Skrylarmight be possible to do backlinks + unref
00:39:18fowli need to store the object as well as a closure for the function
00:39:34Skrylarafter i fix the rectangle packer i have a todo to look in to event patterns
00:39:59Skrylarsignals and slots are the 'neatest' one but they also require a bit of participation from classes to do really well
00:40:11Skrylarevent pumps are the safest but least pretty to use
00:40:26fowli was hoping to avoid using a supertype but i dont think it will be possible
00:40:42Skrylarshouldn't need a supertype
00:41:14Skrylarshould be able to use templates to make it a simple "plug this on to any S&S object" since you don't need *that* much
00:41:15fowli need to be able to do signal.remove(obj)
00:41:38EXetoCclovis: in some cases it's obvious anyway, and a more descriptive name might collide with some other type. I don't know how common that'd be for large projects
00:41:42clovisfowl, have you looked at libsigc++ ? http://libsigc.sourceforge.net/
00:42:09EXetoCAnyway, I'm sure Araq will respond, so I'll see what he has to say about the status of case sensitivity
00:42:10clovisEXetoC, me neither
00:42:10Skrylartemplate function for "DisconnectSignals" which uses the seq of backrefs on self, sig.remove(blah) could use that
00:42:17Skrylarso there is no supertype, just methods plugged on to the receivers
00:42:18EXetoCand maybe I missed some post. let me check
00:42:34fowlclovis, no i was looking at qt, boost and http://sigslot.sourceforge.net
00:42:38Skrylarfowl: but yeah, i'll poke around with some of the research later for it
00:42:50clovisfowl, it's supposedly the fastest c++ implementation
00:43:00fowlSkrylar, "seq of backrefs on self" this is provided by the base type (qobject)
00:43:36Skrylaryes, but you could do it via templates so people weren't confined to using qobject
00:43:49Skrylarthey could make an arbitrary object "qobject-like"
00:44:00fowla template requires someone to put the right field: type in their object def
00:44:13Skrylarthats a matter of documentation :P
00:44:32Skrylar"btw if you don't want to be a child of X, do these two things"
00:45:03Skrylarits hardly a gobject level of boilerplate
00:45:57EXetoCSkrylar: where did Araq claim that he had changed his mind regarding case sensitivity?
00:46:40EXetoCalso, we haven't even hit 1.0 yet, so major changes are to be expected
00:47:03SkrylarEXetoC: on the forum topic someone asked about it and he said he said partial case sensitivity was more troublesomse than expected
00:47:14Skrylarand in IRC he said there won't be any major changes to syntax for a while
00:48:22EXetoCnot *the* thread apparently
00:48:24clovisEXetoC, what do you think about this: a local variable (e.g. windowFrame) would shadow a type with the same name in the local context/scope. And in doing so avoid collision?
00:48:41EXetoCwell that's not the same thing as forever, but anyway just keep doing things the usual way
00:48:49Skrylari poked firefox but it doesn't have the specific thread up
00:48:57Skrylar:\
00:49:10Skrylaranyhow, now that i can work on that module again i can go back to getting us a neat GUI
00:49:48EXetoCthat win32-only GUI?
00:49:56Skrylarno, the gl one
00:49:57fowloo lots of file changes today
00:50:18EXetoCok
00:58:05EXetoCclovis: that should be fairly bulletproof, but the prefix doesn't really bother me
00:58:15EXetoCand in many cases the type of something can be omitted
01:02:07clovisA related thought: the compiler should, ideally, never be able to mistake a type for a variable and vice versa. Example: let foo:rectangle. Here rectangle can't possibly be a variable, can it?
01:05:14clovisI don't know the syntax enough to say for sure, but I think that the context in which an identifier is used is all that is needed to determine if it is a module, variable or type.
01:05:25*lanior joined #nimrod
01:06:27clovisIf that's the case you could in principle do the following: from rectangle import rectangle ... let rectangle:rectangle = ... without confusing the compiler.
01:07:29clovisOf course, you wouldn't!
01:07:47clovisBut you could safely remove all prefixes
01:09:16clovisHumans understand natural language by context. It seems that nimrod's syntax could, in principle, allow the compiler to do the same regarding identifiers
01:09:30fowlnot really
01:09:38Demosalso, we want tools to be easy to write
01:09:57fowlyou cant tell whether rectangle() is a constructor or a variable with the `()` function defined
01:09:58clovisDemos, reuse the parser
01:10:14clovisfowl, oh.
01:10:15EXetoCyou should really Capitalize either way, case sensitive or not
01:12:58*q66 quit (Quit: Leaving)
01:53:18*clovis quit (Quit: clovis)
02:25:07*brson quit (Quit: leaving)
03:35:09*psquid joined #nimrod
03:38:01*Guest23044 quit (Ping timeout: 240 seconds)
04:07:55*lanior quit (Quit: Page closed)
04:31:34Skrylarmeep
04:33:49fowlSkrylar, gc works fine with this pattern
04:40:45Skrylarfowl: using unref?
04:41:01Skrylarand also with or without the backlinks?
04:43:11fowlno backlinks, im not sure how to do it
04:43:24Skrylaryeah, that will take some thinking
04:45:07*mal`` quit (Ping timeout: 264 seconds)
04:45:22fowli decided to allow 1 argument to a signal
04:45:48fowlthat way i dont need to write 9 overloads, if you need to pass more info pass a tuple/object
04:46:30Skrylarhrm, do we not have that weird trickery that lets you pass a tuple in to function parameters?
04:46:45SkrylarI remember that was added to D, where you could have a template with '...' as a parameter, and then fill it with a tuple
04:47:44fowlyea it works fine https://gist.github.com/fowlmouth/9584728#file-signals-nim-L51
04:49:43Skrylarneat
04:51:20*mal`` joined #nimrod
05:15:25*Skrylar growls at gnuplot
05:15:33Skrylar1px lines are really not helpful
05:42:16fowlhrm
05:42:50fowli was going to add initialization to seq/string on use
05:43:02fowlthe compiler code is scary :/
05:43:32*Demos quit (Read error: Connection reset by peer)
05:51:45Skrylar'tis a scary place
07:05:09*xenagi quit (Remote host closed the connection)
07:05:37*skyfex joined #nimrod
07:21:05*skyfex quit (Quit: Computer has gone to sleep.)
07:22:18*vendethiel quit (Remote host closed the connection)
07:52:23Skrylarfowl: got the rectangle packer working
08:28:53*nolan_d quit (Ping timeout: 240 seconds)
08:39:56*lanior joined #nimrod
08:45:07Skrylaro_o what an idiot... "upgrading" to SSD because his write cycles are too slow when recording video
08:45:33Skrylarjust upgrade to a drive that has an exponentially shortened write lifetime instead of using a RAID, genius
08:51:24*BitPuffin joined #nimrod
08:58:36BitPuffindom96: why play Civ 5 when we can play FreeCiv
09:01:35*noam_ quit (Disconnected by services)
09:02:00*noam__ joined #nimrod
09:06:07*zahary_office quit (Ping timeout: 264 seconds)
09:19:28SkrylarBitPuffin: i don't remember liking freeciv :(
09:19:35Skrylarand freeorion had the starlane sadness from MOO3
09:27:24AraqSkrylar: I'll let the community vote about the --cs:partial thing. We'll remove T/P either way.
09:29:25Araqwith --cs:partial I have to go through the list of Babel packages and tell them to use foo not Foo. It's really annoying.
09:31:52*CarpNet joined #nimrod
09:33:20Araqand what's the point anyway. the people who enjoy fascism are all using Go already...
09:33:31SkrylarI've been coding without T prefixes; I think i considered using R instead of P
09:33:39Skrylarbecause P is technically supposed to be "pointer"
09:34:28Skrylarand.. yeah, I don't see the value in enforcing case sensitivity. I haven't had significant troubles with casing to see why its a big deal
09:34:35*Mat3 joined #nimrod
09:34:49Mat3Good Day
09:34:54Skrylar'morning.
09:35:17laniorIs there any way to enable null pointer dereference checks?
09:36:57Araqlanior: type Foo = ref int not nil
09:37:09Araqbut the stdlib doesn't use it, making it hard to work with
09:37:40Araqwe'll eventually update the stdlib but it will remain annoying for the guys of us who have complex invariants
09:39:05Mat3I want remark that the recent Git version of Nimrod depend on libdl, so compilation need an additional »-t='-ldl'« flag, otherwise ld abort though unresolved references to dlopen, dlclose and dlsym
09:39:42laniorAraq: So there is no magic compiler switch to force nil checks?
09:40:03Mat3(at least on Ubuntu)
09:44:31AraqMat3: yes. why is that a problem?
09:45:01Araqlanior: no, but at least 'not nil' is checked at compile time, not runtime
09:45:08SkrylarAraq: Oh, because it doesn't add the -ldl flags properly there.
09:45:21SkrylarBack when I had linux on this computer I had to add it to get anything compiled.
09:46:06Araqhu?
09:46:36AraqI guess the ubu people decided -ldl needs to be at the end for "correctness"
09:47:16Mat3Araq: It would be nice at least actualising the documentation, otherwise new programmers which want to participate are forced into unneeded troubles
09:47:36AraqMat3: no we will fix it instead
09:48:04Araqbut that doesn't mean I don't enjoy ranting about this
09:48:19Mat3that's ok
09:49:24BitPuffinAraq: doesn't sound like something someone decided, more like, if you need libdl, you should link to it. You can't have the operating system guess what you want to link to, that would be stupid and error prone
09:50:02AraqBitPuffin: we do pass -ldl to gcc
09:50:06Araqsince forever
09:50:30Araqwe don't pass it "properly" though and gcc decided it should be stricter
09:50:37Araqsomething like that
09:50:55BitPuffinI'm not sure what you mean
09:50:59laniorAraq: any plans to add optional runtime check? Nimrod already has bundChecks so missing nilChecks looks a bit inconsistent
09:51:44Araqlanior: since you are the 3rd guy who wants it, I'll put it on my todo
09:52:02laniorAraq: this feature is particularly useful in web server. I dont want to reset all connections instead of serving page 500 to one user
09:52:11AraqI know
09:52:38*CarpNet quit (Remote host closed the connection)
09:55:00*io2 joined #nimrod
09:58:59*EXetoC quit (Ping timeout: 240 seconds)
10:02:10*CarpNet joined #nimrod
10:02:48*io2 quit ()
10:03:22laniorCoroutines are still not available?
10:06:55laniorif not, what is the recommended way to handle parallel requests (i'm talking about web server). Thread pool? Are there any library support to build DB connection pool or balance requests between threads?
10:08:37BitPuffinping zahary
10:08:40BitPuffinonly one zahary this time
10:15:43Mat3lanior: As I know, a decent coroutine implementation is planned
10:17:08Mat3what kind of coroutine concept do you prefer (or which is of most usage for you) ?
10:18:15laniorthere are many of them?
10:19:14Mat3yes, parallel sheduling though process pools of cooperative tasks is one strategy for example
10:19:44laniorits just a different scheduling strategies
10:19:45NimBotdom96/jester master c88b792 Jason Livesay [+0 ±1 -0]: Add ttyl and finished
10:19:45NimBotdom96/jester master fa3a127 Jason Livesay [+0 ±1 -0]: Remove extra comments
10:19:45NimBotdom96/jester master 9f2a1eb Jason Livesay [+0 ±1 -0]: Fix comment
10:19:45NimBotdom96/jester master a60a4ff Jason Livesay [+0 ±1 -0]: finish as function
10:19:45NimBot2 more commits.
10:20:18Mat3that is what I asked for
10:20:22laniorweb workload is primarily IO bound so i am fine with cooperative tasks
10:21:07Mat3good to know, thanks
10:21:19lanior... unless you are using Django)
10:22:52Mat3sorry, I am quite unfamiliar with most aspects of web related programming
10:23:32laniorthis is likely to be a python problem
10:24:11laniordjango relies on metaprogramming tricks to provide nice ways to define ORM models and forms
10:24:21runvncWell, I don't know about parallel exactly, but I am using jester and putting long running requests in a redis queue
10:24:24laniorthey are pretty slow
10:24:28runvncthat way if I get really successful
10:24:34runvncI can even service them on multiple VPSs
10:24:47runvncthen I pull the data off the redis queue when it is done processing
10:24:50runvncand send it with jester
10:24:54runvncits not exactly parallel
10:25:02runvncbut jester is fast
10:25:12runvncand can handle thousands of requests per second that way
10:25:18laniori am not talking about offloading CPU intensive workload to background processes via queue
10:25:25lanioryes jester is fast
10:25:57laniorits definitely not the fastest but its fast enough
10:26:15runvncmy understanding is that message queues are kind of a standard best practice for scaling web servers
10:26:36laniornope its about scaling web applications
10:26:57runvncI had a project last year
10:27:00laniormodern web servers can handle more than 500k requests per second
10:27:04runvncwhich was about scaling web applications
10:27:08runvnclol
10:27:11laniorthe problem is IO
10:27:13runvncwhat are you talking about lanior
10:27:17runvnc"modern web server"
10:27:50lanioranything using appropriate async system API
10:27:58runvncso anyway last year I had a Node.js project, about scaling.. we were taking advantage of the asynchronous IO in node
10:28:36runvncdoesnt matter what kind of tricks you pull with non-blocking io, if you go through the kernel you are not going to get 500,000 requests per second
10:28:48runvncanyway we were taking advantage of async io in node, but we still were building it with a queue
10:28:51runvncout of process
10:28:56runvncand that is what twitter and others do
10:29:15runvncI have seen a few articles about a guy who had 500,000 _connections_ on one node server
10:29:21runvncthats different from requests per second
10:29:44laniori guess that was whats up
10:30:18runvncif you really want to push 100000 requests per second you have to go around the kernel
10:30:23laniormy toy libuv based webserver handles about 80k requests per second on 1 core
10:30:27runvncmost people dont go to the trouble
10:30:51laniorsystem calls are not THAT expensive
10:30:55runvncok thats news to me
10:31:03runvnccan you publish a benchmark of that on a blog somewhere
10:31:07runvncand post to hacker news
10:31:17laniorwait a minute
10:31:18runvncbecause I have not seen numbers like that from 1 core without avoiding the kernel
10:31:21runvncits not a normal thing
10:31:49Mat3exist there a way for redefining an object (I mean no instanciation but object replacement) ?
10:31:52lanioryou cant avoid kernel without using userspace network stack
10:32:08laniorwhich is not what normal people do
10:32:27runvncyeah normal people dont say that 80k requests per second is a normal web server either
10:32:38runvncvery interested to see a benchmark comparing your program with "normal" web servers
10:33:24laniorhttp://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=plaintext
10:35:02laniorand my toy app web server: github.com/lanior/plum
10:35:18laniorit was built using libuv, joyent http parser and boost coroutine libraries
10:35:41laniorjust to learn c++ tricks and web server perfomance limitations
10:36:10laniorbut i am fine with 10-100 RPS
10:36:22Mat3lanior: thanks for the link
10:36:58runvncwhat does the header column mean
10:37:04runvnc256 1024 4096 etc
10:38:38laniorconcurrency requests
10:38:45Mat3however: The statistics show a larger difference between both hardware platforms
10:39:17laniorDedicated server is a better choice
10:40:19runvncI don't know where they are coming up with these numbers
10:40:28runvncI can see maybe 10000 requests per second on node
10:40:37laniorjavascript is slow
10:40:38runvncdont know how they get 80000 never heard a number like that
10:40:59runvncI have not seen numbers like this before
10:41:46laniorwell V9 is faster than CPython but its targetting browsers so it cant apply heavy optimizations like Java VM
10:42:04Skrylar:3
10:42:17SkrylarI still find amusement in that the V-engine is using Smalltalk tech
10:42:31runvncthe nodel.js benchmark is clustered
10:42:43laniorBTW luajit shows better results using the same libuv network library
10:43:39runvncs of Round 7, three Intel Sandy Bridge Core i7-2600K workstations with 8 GB memory each (early 2011 vintage) for the i7 tests; database server equipped with Samsung 840 Pro SSD
10:43:48runvncif they are using 3 servers in clustered mode
10:43:54runvncthen I can buy 80000 requests per second
10:44:01runvncso I think you are confused about what is being tested
10:44:06runvncthose numbers arent for one core
10:44:27laniorthey are for one machine
10:44:40laniorbenchmarks are run from a separate machines
10:45:24runvnchttp://www.techempower.com/benchmarks/#section=environment&hw=i7&test=plaintext&p=ymz1dq-27
10:45:38runvncsays three sandy bridge
10:46:15lanior1 Web Server 1 DB server 1 Test Server AFAIK
10:46:34dom96'morning
10:46:55runvncthe node.js test is clustered
10:46:59runvncand so are the rest of them
10:47:16Skrylarmorning dom96
10:47:23Skrylarlanior: thats because luajit is awesome
10:47:24runvncits not a single core test, doesnt say anyhing like that on the techempower site
10:47:25laniorits clustered on one machine
10:47:29runvncyeah
10:47:34runvncso that is using all of the processors
10:47:36laniorbecause nodejs cant use more than 1 core
10:47:37runvncnot 1 core
10:47:42Mat3morning dom96
10:47:58runvncIt can, it does, it uses all the cores, and that explains the 80k requests per second
10:48:06lanioroh man...
10:48:10runvncsuggesting that those numbers are for one processor is ludicrous
10:48:27runvnclanior I have been coding in Node.js for three years
10:48:39laniorNode.js IS SLOW comparing to those web servers
10:48:40runvncIn clustered mode, node.js will use all of the processors you ask for
10:48:52runvncdid I say it was fast?
10:49:07laniorV8 much slower than c++ or Java
10:49:07runvncI am just saying you don't get 80k requests per second from a "normal" web server on one core
10:49:24laniorwhat is "normal" web server?
10:49:38laniorJava web servers can five you that speed
10:49:59runvncyou seemed to be arguing that a single core, single thread "normal" server should get 80k requests per second
10:50:02runvncwhich is ludicrous
10:50:06runvncanyway its bedtime for me
10:50:08laniorbut i am not talking about doing something useful. Just "Hello world" page
10:50:08runvncgoodnight people
10:50:15runvnceven with hello world
10:50:17*runvnc quit (Quit: Leaving)
10:51:45SkrylarAlright.. today... hrmm.
10:51:49SkrylarEvent dispatch sounds important
10:54:08SkrylarAraq: any opinion on Qt signal/slots?
10:54:08lanior11k RPS using jester
10:54:12Skrylarfowl and I were talking about that earlier
10:54:14laniorhmm
10:54:35laniordoes it use epoll on linux?
10:54:39dom96no
10:54:45dom96not yet
10:54:53*Skrylar also prods dom96 as he was interested in GUIs
10:55:02dom96it also isn't optimised at all
10:55:08laniorand its single threaded?
10:55:16dom96Skrylar: never used Qt so I don't know.
10:55:18dom96lanior: yeah
10:55:48laniorlook like i have to compile my toy webserver to get a good baseline
10:55:56Skrylardom96: maybe i should do a writeup of common event systems; but basically, signal/slots is putting callbacks in a queue
10:56:08laniordom96: any way to bypass blocking on database calls?
10:56:09Skrylarso you have blah.onResized.connect(stuff) # i am now an event
10:56:38dom96lanior: I don't think the current database APIs support that.
10:56:41laniordom96: looks like databases drivers from stdlib doesnt not support async interface
10:57:00laniorbut we can use thread pool
10:57:21laniorthis is basically what python/php webserver does
10:57:24dom96Skrylar: Isn't that what GTK uses too?
10:57:25laniormany processes or threads
10:57:45Skrylardom96: i think gobject/gtk does that, a little clunkier
10:58:03*hgsdgbv joined #nimrod
10:58:06SkrylarDelphi "kind of" does sigslot, though it does a more java-ish version of it.
10:58:12SkrylarJava observers are terrible IMO
10:58:52laniorwithout that database connection will ruin perfomance
10:59:11laniorits a big problem if you have more than 5 QPS
11:00:31hgsdgbvWhich gui lib shall i use? I'm not used to C.
11:00:40laniori can still run multiple processes and do load balancing but that does not sounds good
11:00:50Mat3how I override an object member ?
11:06:33*easy_muffin joined #nimrod
11:06:50laniordom96: did you see easy way to implement balancing requests in jester between worker threads?
11:07:16dom96no sorry
11:07:29laniorhard way?)
11:07:32dom96async API should be done soon and then things will be easy
11:07:34BitPuffindom96: is the new async stuff you did in tfm?
11:07:44dom96BitPuffin: tfm?
11:07:50BitPuffindom96: as in rtfm
11:07:51dom96BitPuffin: oh btw, FreeCiv sucks.
11:08:05BitPuffindom96: oh btw, YOU suck
11:08:09dom96BitPuffin: It's in the stdlib if that's what you're asking.
11:08:23BitPuffindom96: no
11:08:25BitPuffintfm
11:08:31laniordom96: you mean c# like async?
11:08:46dom96yes
11:08:57dom96BitPuffin: It's not in the manual and it won't be.
11:10:35BitPuffindom96: oh so it's a lib thing
11:10:39BitPuffinI thought it was language stuff
11:10:42BitPuffinsince it looked like it
11:10:45BitPuffinguess it's macros
11:10:48laniorlooks like it converts function to promise-based variant
11:11:22AraqMat3: use 'method' to override, but I'd use a proc var instead
11:11:42AraqI want to remove 'method' for nimrod v2 :P
11:12:50Araqhgsdgbv: we only have gtk and iup bindings afaik
11:13:45laniordom96: using it would require wrapping async proc with async macro right?
11:13:59dom96yes
11:14:00hgsdgbvYeah i was looking at gtk2 doc. Btw, why are you removing methods?
11:14:18hgsdgbvOr what will be the alternative?
11:14:26Araqbecause I want the macro system to generate the dispatchers
11:14:36Araqmore flexible and faster on x86
11:14:58laniorbut who uses x86?
11:15:04hgsdgbvMe
11:15:28BitPuffindom96: I was just joking, you're a jolly good fella
11:17:07hgsdgbvBear with me: i want to ¿instantiate? this: PWidget* = ptr TWidget
11:17:09laniordom96: all the way down to the event loop callback?
11:17:19hgsdgbvDo i have to use new(PWidget) or something?
11:18:06dom96lanior: The macro handles the low-level details.
11:18:10Araqlanior: btw the database APIs are mostly designed for convenience. for performance you likely have to use the native APIs
11:19:44laniorAraq: thread blocking API is basically unusable without big thread pool
11:20:55Mat3Araq: thanks
11:24:05Araqlanior: so fix the wrapper to support asynio :P
11:24:43Araqit's not like we're opposed to making the harder stuff possible
11:25:45laniorAraq: having decent ORM seems to be a more important issue
11:26:16laniorAraq: and i'm trying to build one now.
11:26:37Araqactually I want to make a "decent ORM" as a commercial project ...
11:26:38laniorAraq: so far I am impressed with syntax I can get using macro system
11:27:04laniorAraq: commertial ORM wont make language popular
11:27:12Araqbah
11:27:24Araqcommerical anything is bad for popularity
11:28:10Mat3Araq: I have an object type A which hold only state variables (a structure) and and object B with a member of these type C. Now I want to instanciate B and override C. Is this possible ?
11:28:21Mat3^an
11:28:39*EXetoC joined #nimrod
11:29:28Araqwhat is "this type C"?
11:29:33hgsdgbvWith member you mean methid?
11:29:35hgsdgbv*method
11:29:48Araqyou say A is struct-like and B inherits from C
11:29:56Araqtypo?
11:29:56Mat3C is of type A, sorry
11:31:38AraqMat3: just check the tutorial for 'method'
11:32:04AraqI can only repeat the examples here
11:32:50Araqhgsdgbv: in general 'ptr Foo' cames from C, so you can't 'new' it, you need to use the C function to create the object
11:33:14Araqbbl it's lunch time here
11:33:20hgsdgbvThanks, i saw in a example i had to use "gtk_window_new"
11:33:28SkrylarI've not succeeded in getting IUP to build with GCC :(
11:33:36SkrylarUnless they changed it, since IUP uses some archaic windows headers
11:35:18hgsdgbvbtw how can i get a list of args passed to nimrod?
11:40:19*EXetoC quit (Ping timeout: 264 seconds)
11:40:37SkrylarI've not actually tried.
11:41:37hgsdgbvThat's a good thing to know
11:42:07Mat3I get it, thanks
11:42:35laniorhgsdgbv: http://forum.nimrod-lang.org/t/84
11:43:07hgsdgbvAh! thanks!
11:43:29laniorforum really needs build-in search
11:43:40lanioror maybe just google search widget
11:43:44hgsdgbvThat is from 2012, it is still neccessary to import os ?
11:43:52lanioridk
11:43:54laniorprobably
11:44:35laniorwhy asyncio2.nim is located in lib/pure?
11:44:56Skrylarcould always do the forum search as a call out to node.js with lunr
11:45:01Skrylarthat would be heresy though :o
11:48:19hgsdgbvBut a practical one.
11:48:32laniorwe can use ElasticSearch
11:48:37laniorit has simple json api
11:48:52laniorand it is node.js free!
11:49:37*EXetoC joined #nimrod
11:51:14*clovis joined #nimrod
11:51:20hgsdgbv"could not load: libgtk-win32-2.0-0.dll" I suppose i have to download this
11:51:47clovisSounds reasonable
11:51:53SkrylarNimrod doesn't come with the gtk runtime
11:52:35hgsdgbvOh joy
11:52:48SkrylarWx probably would have been a better library for us to have than GTK, but oh well
11:53:02EXetoCyes. it doesn't come with any of the C components
11:53:48hgsdgbvMaybe ... in a future?
11:54:04Mat3well just copy the required DLL to your system directory :->
11:54:12Skrylaro_o
11:54:23Skrylarthe gtk installers put it in your path you know
11:54:28Skrylarno need to shove random things in system
11:55:59Mat3I know, but its more fun to accumulate them in the global system directory
11:56:02hgsdgbvWhat if i want to distribute a binary that uses gtk2, there is an "easy" (looks with escepticism) way to distribute the dlls?
11:56:38laniorput them in the dir with executable file
11:57:16hgsdgbvThanks, that sounds easy.
11:57:18laniorthis should work in most cases
11:58:24laniorhow tightly nimrod is bound to C standard library?
11:58:36hgsdgbvHumm the installer tutorial says nothing about installers that let you choose the path, besides manual action.
11:59:20*EXetoC quit (Ping timeout: 246 seconds)
12:00:36Skrylarno, its the GTK for windows installer
12:00:55Skrylarthe usual way that GTK programs do it on windows is to tell you to run the GTK installer, or they include one, but its a large runtime
12:01:06SkrylarGTK is sort of a sub-optimal toolkit on Windows tbh :(
12:01:32clovisGTK is suboptimal anywhere
12:01:39hgsdgbvlol
12:01:43hgsdgbvDo i have a choice?
12:02:06laniorGTK looks so terrible on windows
12:02:23laniorQT feels slightly better
12:02:48SkrylarQts not really usable from nimrod with any sanity
12:03:15Skrylarwhatwith the whole MOC setup
12:03:55laniorbut its usable from python
12:04:58hgsdgbvHow many years have nimrod been developed?
12:04:58clovisHow feasible is it to use Qt Quick / Qml with nimrod?
12:05:07hgsdgbv*in development
12:06:42Skrylarclovis: well the biggest problem with using Qt has to do with making sure the MOC macros are in the right places
12:07:09SkrylarUnless you find a way around it (@lanior)
12:07:35BitPuffinwell it looks like zahary did something but I'm still getting an error
12:07:46BitPuffinproc `*`*[T; R, N, C: static[int]](a: TMatrix[T, R, N], b: TMatrix[T, N, C]): TMatrix[T, R, C] {.noSideEffect.} =
12:07:53BitPuffinmatrix.nim(121, 49) Error: type expected
12:07:57clovisSkrylar, I see.
12:09:30clovishgsdgbv, at least 3 years
12:09:54clovisindicated by first github commit
12:13:45clovisOh. "Copyright (c) 2004-2014 Andreas Rumpf"
12:15:44clovisFirst github import was Jun 22, 2008
12:16:04clovis5 years, 8 months, 25 days
12:20:38*lanior quit (Ping timeout: 245 seconds)
12:23:29*lanior joined #nimrod
12:23:41clovisSomeone who is interested in GUI development and Qt could look into how PyQt5 is implemented. If Python can use Qt (bypassing the MOC and the object model of C++) then should Nimrod.
12:24:35lanioror you can use it via python binding
12:24:54clovisPerhaps
12:25:17hgsdgbvAnd i used to hate swing
12:25:23laniorbtw who knows state of python bindings?
12:25:46clovis"The latest iteration of PyQt is v5.2. It fully supports Qt 5.2.0"
12:25:47laniori saw discussions about fluent property access syntax for pyobjects
12:26:10SkrylarI'm working on a GUI system, albeit its not a qt interface
12:26:17Skrylarwe were talking earlier about adapting signals/slots to nimrod
12:26:38laniorSkrylar: custom drawn?
12:26:47clovisSkrylar, nice. Signals/slots is a good foundation
12:26:52Skrylaryeah, GL-backed
12:27:05SkrylarI was considering a WinAPI or Cairo variant a few times
12:27:32laniorwhats about users without OpenGL support?
12:27:34Skrylarthere's a lot of GUI that is agnostic to how it gets drawn, so its not hard to separate out the draw code to the rest of it all and have multiple versions
12:27:38clovisWinAPI - is it Windows only?
12:27:47Skrylaryes, winapi is windows native
12:27:56clovisI meant your library
12:28:12Skrylarno, any winapi code i put in is isolated
12:28:39laniorfirefox even uses opengl to directx translator on windows because WinXP supports only OpenGL 1.1 out of box
12:29:00Skrylari've been working on foundation code so far (glyph caching, texture atlases, rectangle management) so the platform stuff hasn't been reached yet
12:29:03BitPuffinthe python qt binding probably exists because holy shit does python have a userbase
12:29:12BitPuffinit's not like it isn't possible in nimrod
12:29:15BitPuffinit's just a big task
12:29:35laniorand I guess you use modern OpenGL pipeline, so thats could become a problem
12:29:54Skrylarat the moment there is zero platform code, so i don't use any gl pipeline
12:30:01Skrylari had planned on hiding the gl pipeline under a support lib
12:30:14BitPuffinlanior: what, it does support more than 1.1, as long as you have drivers
12:30:18BitPuffinyou talkin cray cray
12:30:26Skrylarhe said 'out of box'
12:30:29laniorBitPuffin: but many people doesnt have it
12:30:30BitPuffinwell yeah
12:30:33BitPuffinbut if you don't have drivers
12:30:40BitPuffinthen you don't really have d3d either amirite?
12:30:51SkrylarI planned on doing a simple graphics layer like most game engines do; mostly involving shoving VBOs together
12:30:52laniorwe are talking abound 2d UI
12:31:35clovisBuild upon sdl2?
12:31:38laniorSkrylar: you can just use existent 2d drawing library
12:31:41laniorlike skia
12:31:53Skrylarisn't skia 1) chrome's pet rasterizer and 2) C++
12:32:04BitPuffinSkrylar: to me it seems like d3d even requires MORE setup than opengl
12:32:16SkrylarAFAICT you can't set nimrod to only partially support C++, if any one C++ lib gets in then you *have* to use it for the whole project
12:32:23BitPuffinconsidering every time you run a fucking game it's like, hey, I need to set up directx ;D
12:32:58BitPuffinSkrylar: that is correct
12:33:04SkrylarI'm not hugely worried about people being unable to run an OpenGL program; mostly because the apps that I plan to use it with don't target computers that have been unpatched since 2001
12:33:08BitPuffinhowever there is no reason we couldn't work our way out of that one
12:33:16BitPuffinjust that it's something that hasn't been done yet
12:33:27SkrylarThough the design I plan on using allows someone else to change the graphics code, so if they want to use Not GL, they can do so
12:33:42SkrylarI mean, 90% of a GUI is *not* the drawing
12:33:59Skrylarits dealing with text layouts, control layouts, usability triggers
12:33:59BitPuffinexactly: where the hood at
12:34:21BitPuffinbah, who needs em
12:34:30clovisThe part that is ugly with gtk :|
12:34:35SkrylarI would be happy to have a Cairo+Pango backend, if it wasn't for Pango having the worst dependency in the world
12:34:50laniorbut you wont get "native" user experience
12:35:16Skrylarso make a winapi backend? or ask windows to draw the controls?
12:35:20SkrylarQt just.. asks windows.. to draw it
12:35:21BitPuffinSkrylar: what's the dep?
12:35:34SkrylarThere's an API for asking the theme system in windows to rasterize components for you
12:35:38lanioryes it uses theme api
12:35:50laniorbut its not about drawing but about user interaction
12:36:02Skrylarthen those people can use the win32 backend instead of the GL backend?
12:36:06laniorlike scroll behavior on mac
12:37:00Skrylarmy design is not hugely different from a 2D scene graph; theres some helpers for doing layout control, and probably helpers so people don't do button.onClicked(..) crap but instead centralize action code
12:37:26clovisYou had better go 4D from the start
12:37:41Skrylarwhat good is a time dimension going to do? :)
12:37:47clovis;)
12:38:20Skrylar(fwiw, i was going to name one of the programs using it 'Tesseract' because it was a multidimensional outliner, thought the name would be appropriate)
12:38:38BitPuffinisn't tesseract that fork of sauerbraten?
12:38:41BitPuffin2
12:39:33Skrylari didn't know there was one
12:39:44Skrylari stole it from a minecraft mod who stole it from a 4D mathematical object
12:40:19clovisSkrylar, perhaps the only public API could be the cetralised one?
12:41:51Skrylarclovis: maybe, though i don't want people to complain that it gives them no control
12:42:09Skrylari still have to iron out the design docs for it all
12:42:44Skrylarbut I ultimately want people loading their GUIs from data files and only interacting with the GUI through a series of actions, because it ensures buttons/menu items have consistent labels as well as makes undo/redo/recording user actions much simpler
12:42:47clovisDeclare Button. Declare Action. Connect Button to Action. Connect Action to Program
12:42:55Skrylaryep
12:43:04SkrylarQt half-supports this, but I want it to support it more
12:44:28Skrylari need to benchmark resizing anchors against unified coordinates
12:44:58SkrylarCEGUI does this thing where each coordinate point has a relative to parent and absolute point, which makes it super easy to put a box "at the top left, always 25% of the parent width"
12:46:03*hgsdgbv quit (Ping timeout: 245 seconds)
12:46:08clovisClosures that are run automatically on resize
12:46:56SkrylarTraditional GUIs have anchors/fill rules; I'm thinking about benchmarking the complexity and time for both and seeing which one is best. The good thing with unified is that they basically replace both anchors *and* fill rules entirely within the coordinates, so there is no longer a concept of "i fill this dimension" but rather its coordinates naturally specify that they do so
12:47:16Skrylarbut this requires a multiply+add for every coordinate
12:47:48Skrylarparent.x*relative+absolute
12:47:56clovisSkrylar, you also have to deal with constraints like maximum and minimum size
12:49:13Skrylarclovis: i know, one step at a time
12:49:37SkrylarI want to do this right, because it feels like most GUI libs suck pretty badly
12:49:45clovisPerhaps this is all one big constrain-satisfaction problem
12:50:45clovisAll the declarations are constraints like obj A must be 25% of obj B. Obj B must be at most 30% of obj C...
12:51:27clovisThere are mathematical models and algorithms that deal specifically with generalised, linear constraint satisfaction problems
12:51:37Skrylarwell with cegui's unified coordinates, if i tell a widget that its 30% of the width, i do so by telling it to be (0,0) (0,0) (0.33,0) (1,0)
12:51:47SkrylarIt will always be 33% the width of the parent, regardless of size
12:52:22clovisBut what if it has a constraint to be at least 200px
12:52:28*EXetoC joined #nimrod
12:52:30clovis`Then what do you do?
12:52:48*akghf joined #nimrod
12:52:55SkrylarI would probably suggest that the GUI be designed more like CSS4+ flexboxes, so that if the width is violated it changes to stacked tabs
12:53:20SkrylarUsers get annoyed when they can't make their windows the size they want, because it decided it won't obey
12:53:44SkrylarI say its probably better that the application cope in a meaningful way, because its the job of a computer to obey
12:54:08Skrylarsuch as reorienting the buttons in the window, changing from a grail-style layout to stacked tabs, using icons instead of text if its really small
12:54:46clovisThat requires conditionals, if-statements?
12:55:08Skrylaryes, you'd have to check the constraints on component resize
12:55:08clovisE.g: if x<200px then use layout-B
12:55:20Skrylarhowever you can hide most of this with precooked layout widgets, i think
12:56:44SkrylarI suppose as a last resort, you could make it so that generic widget contains enforce minimum sizes by making scrollbars appear
12:56:56Skrylarso if you have a data entry forum that just really can't degrade further, it scrolls instead
12:57:07clovisYeah, usually
12:57:28Skrylarwhat i hate is when i see programs that decide to have a minimum width and will not let me shrink them, for no apparently good reason even
12:57:49clovisAnother neat thing - which I have not actually seen - would be to rescale a surface (gl rescale the pixels)
12:57:56akghfHow do i get a pointer from whatever?
12:57:59clovisto shrink a surface
12:58:22EXetoCakghf: addr
12:58:31akghfNice, thanks
12:58:32EXetoCin whichever context it makes sense
12:59:04Skrylarclovis: thats a thing that a GL interface would probably be better at than a CPU one
12:59:19Skrylarsince you can fiddle around with scale cheaper
12:59:39Skrylara big reason that i want GL is 1) for game GUIs and 2) because CPU-based diagram software tends to laaaaag
12:59:42clovisSkrylar, suppose the widget has a min with of 200px and you resize it to 100px. Perhaps the GPU could do it for you in real time
13:00:06Skrylarclovis: i'll put in a note for that
13:00:08EXetoCyeah just update the coords
13:00:28EXetoCin some situations at least
13:00:49Skrylarone thing that i take inspiration from is "what does a pro gui actually *need*?"
13:00:52clovisEXetoC, yeah you might want to get the global mouse coordinates translated
13:01:10Skrylarbecause a lot of GUI toolkits feel like they stop after they give you 30% of what a massive program does
13:01:34Skrylarlike how many DON'T have a text editing component?
13:01:39Skrylardespite the amount of programs that need them
13:01:47clovisRight
13:02:00EXetoCnot that I have used many widget toolkits, but MyGUI is pretty nice
13:02:15SkrylarI forget what problem I had with that toolkit
13:02:22SkrylarI think I had weirdly low performance in some of the demos
13:02:30clovisThe thing I hate the most about text editing is when the blinking cursor becomes invisible while you move it with the cursor keys
13:03:01Skrylarbut yeah. i need to figure out how to deal with backlinks tomorrow, since fowl wrote a simple signal/slot module
13:03:22akghfI wrote the following sentence: let args = [0..(paramCount - 1), string] and i receive "type mismatch, got (proc(): int, int literal(1))"
13:03:27Skrylarcomparing the merits of an anchor/constraint system to just using unified coords is also a todo item; CEGUI did an interesting thing there
13:03:51akghfIs because i did not use () on paramCount ?
13:03:59EXetoCyes
13:04:04clovisMy advice for you would be to view GUI lay out from a general constraint satisfaction perspective.
13:04:30akghfHumm, it always happens or just inside array definition?
13:04:37EXetoCalways
13:04:49EXetoCakghf: the property syntax can only be used when the proc takes at least one arg
13:04:59EXetoCx.val
13:05:34Skrylarclovis: i've been looking at it as a simple draw tree system that just obeys; IMO time spent dealing with GUI code is wasted time
13:05:45akghfaaaah, that explains a lot. Si, if there does not exist a paramCount(arg1), you cant use that syntax?
13:05:47EXetoCwhere val might be defined as "proc val(x: Type)"
13:05:49Skrylarit should just do what you want it to (e.g. show the interface) instead of require 500 special knobs
13:06:10akghf*so
13:06:18EXetoCakghf: exactly. it's a reasonable limitation
13:06:21Araqhi akghf welcome
13:06:25akghfThanks again EXetoC.
13:06:35akghfHello there Araq.
13:06:44AraqSkrylar: interesting. I thought about an opengl ui toolkit too.
13:06:58clovisSkrylar, perhaps I got the wrong impression. You're perhaps writing a library at a lower level - closer to the hardware
13:07:08Araqthen I tried to make a sweet lazarus interface and failed :P
13:08:02Araqshould have listened to the guy years ago who told me to build nim on top of FPC ...
13:08:15SkrylarFPC is pretty nice
13:08:26Skrylarclovis: its an indeterminate level for the time being; as i mentioned earlier, still in design docs
13:08:30clovisWhat䳠FPX?
13:08:36clovisFPC?
13:08:45SkrylarI'm working on low-level stuff while assembling concepts and weighing decisions
13:08:49Araqit's still reasonably easy to build the UI with lazarus and link nimrod to it
13:09:05Araqthe repo even had an example but somehow we lost it
13:09:20EXetoCAraq: did you say before that you wanted to change the convention from TType to Type, while keeping case insensitivity?
13:09:37Araqthat's what I said, yes
13:10:02Skrylarmeasuring simplicity is going to be a nightmare
13:10:15Skrylari'm not sure how to compare two modules to see which one that does the same job is "simpler"
13:10:31AraqSkrylar: than ask me :P
13:10:35Araq*then
13:11:10akghfHow do i resolv the error: type mismatch: got (typedesc[string]) but expected 'TSlice[int]' in "let args = [0..(paramCount() - 1), string]"
13:11:30Araqclovis: FPC = Freepascal compiler, Lazarus = delphi like environment
13:11:45Araqproduces a native UI on macosx, linux, windows
13:11:48akghfwow, works even on gba
13:11:56clovisInteresting
13:12:02Araqwith a decent UI builder
13:12:05EXetoCAraq: won't this increase the occurrence of symbol shadowing?
13:12:38AraqEXetoC: looks like we more disambiguation rules anyway for module vs. other symbol
13:13:00Skrylaryep. I was an FPC+Lazarus derp for a while
13:13:12SkrylarI don't like Lazarus though.. the IDE is nice, but the LCL is a pain
13:13:26SkrylarIts just a clone of Borland, so all the annoying crap is still annoying and writing custom widgets is unfun
13:13:55clovisIt sounds likely that the name of a module would be the same as that of its defining type, in many cases.
13:14:13Araqactually the convention is to add an 's' to the module name
13:14:20Araqtables, sets, etc.
13:14:28clovisThat's quite good
13:14:39clovisHad not thought about that
13:14:42Araqrectangles vs rectangle
13:14:48Araqsolves the problem
13:15:44EXetoCAraq: how will foo() for example be disambiguated?
13:16:02Araqhow can foo() be a module name?
13:16:08EXetoCwhat about types?
13:16:29EXetoCtype constructors for example, vs call operators
13:16:58Araqthese simply shouldn't have the same name createFoo, newFoo, allocFoo vs Foo
13:17:12Araqlike it is today
13:17:17clovisI think there are languages where the ctors do not share the name of the type
13:17:36*noam__ is now known as noam
13:19:50clovisAs long as a global identifier's name is shadowed by a local declaration I'm happy. E.g. Global type WindowFrame is shadowed by: local var windowFrame:Rectangle = ...
13:19:53EXetoCakghf: the error is on another line, right? 'args' ends up being a typedesc
13:20:11EXetoCakghf: you might want : rather than =
13:20:15clovisThis way you can drop the T from TRectangle and TWindowFrame
13:20:46EXetoCbut that's an array with a runtime size. does that work?
13:20:59EXetoCI guess we'll find out soon
13:21:02akghfI want to iterate over the params and insert them into the array.
13:21:10Araqclovis: I think what you mean already is implemented but it's inherently complex to this properly thanks to macros
13:21:27clovisOh
13:21:27EXetoCakghf: just replace the = with a :
13:21:35akghfi'll try.
13:22:03Araqvar s = newSeq[string](paramCount())
13:22:19Araqfor i in 0 .. < paramCount(): s[i] = paramStr(i)
13:22:31AraqI don't think you can use a shortcut for that
13:23:07EXetoCmaybe when we get that lambda macro
13:23:23Araqyou may want to use the parseopt2 module which everybody dislikes instead
13:23:35Araqwhich makes you write string cases and so it sucks
13:24:10Araqmuch better would be a table[string, closure] instead.
13:24:52Araqthis way you can have the same syntax but slightly slower code which adheres to the nonsensical "switch statements are bad" rule
13:26:56*Araq wonders if he is hard to follow
13:27:55akghfNice. I did it with seqs, thanks. Now, i have to pass a pointer to gtk's init method
13:28:17akghfaddr did not do the work
13:28:32EXetoCAraq: nonsensical indeed..
13:28:42EXetoCtable[string, string] would be more reasonable
13:29:55EXetoChttps://github.com/docopt/docopt
13:30:51EXetoCor maybe values that are variants
13:43:07akghfhow can i get a "pointer" from an object? using addr gives me "ptr seq", not "pointer"
13:43:29*Mat3 quit (Ping timeout: 255 seconds)
13:43:42OrionPKis thre a way to quit an iterator early?
13:43:47EXetoCakghf: it won't matter in many cases currently, but you can just cast it to a pointer
13:43:49OrionPKreturn / yield break
13:44:03EXetoCreturn?
13:44:21OrionPK"return not allowed here"
13:44:28EXetoCoh
13:44:32akghfit is because the compiler is complaining. How can i cast it? with Pointer(addr whatever) ?
13:44:53EXetoCakghf: actually, try x.addr.pointer
13:45:10EXetoCand if that fails, try cast[pointer](typedPtr)
13:45:16Araqthat's a type *conversion* though
13:45:20EXetoCOrionPK: just break then I guess
13:45:29akghfThanks EXetoC again, you are most helpful
13:45:31Araqcasting looks like cast[pointer](addr x)
13:45:39clovisyield exits from the iterator, break from the loop.
13:45:41OrionPKinvalid control flow: break
13:45:47Araqbut surely a type conversion works here
13:46:02clovisOrionPK, break from the loop not the iterator
13:46:29AraqOrionPK: there is no alternative to a nested 'if', I think
13:46:32OrionPKyeah.. basically that's my only option I guess. a "yield break" would be nice
13:47:38clovisI don't think it's the iterators responsibility
13:48:09OrionPKiterators can have logic too
13:48:27clovisThey should be able to be reused elsewhere
13:48:28EXetoCit's always the responsibility of the iterator to determine the *max amount* of values to yield
13:48:49BitPuffinAraq: will we ever get rid of the inconsistency between named params and constructors?
13:48:51EXetoCand then the actual user can break earlier if necessary
13:48:59clovisThey shouldn't need to know how the calling loop is implemented. Perhaps there is more code in the loop that must be executed
13:49:07akghfHow can i get an address from an integer?
13:49:09OrionPKEXetoC yes but based on logic during iteration, there might be fewer of something
13:49:10akghfOr create one
13:49:14OrionPKso breaking early is necessary
13:49:17BitPuffinakghf: addr theint?
13:49:40akghfthat gives me "expression has no address"
13:49:52BitPuffinwait
13:50:02BitPuffinare you trying to get the addr of 1 + 3 for example
13:50:04BitPuffinor a variable
13:50:16akghfFrom a var
13:50:17EXetoCakghf: do you really need that? if so, then make sure that the integer is a var. 'let' won't allow you to take the address of it
13:50:25akghfaa, ok
13:50:26akghfi used let
13:50:53BitPuffinEXetoC: wasn't there a time where it did let you get address of a let?
13:51:02EXetoCOrionPK: I think I implied that. I'm just saying that both the iterator and the caller can break whenever
13:51:11BitPuffinor wait
13:51:16Araqakghf: the gtk module has 'nimrod_init' that you should call to setup the command line for gtk
13:51:21BitPuffinit's that you are allowed to change what's the value of a pointer
13:51:23OrionPKright.. but the iterator cant unless it's got an inner loop
13:51:24Araqno need to do it yourself
13:51:30BitPuffinso if you have let foo = PBar()
13:51:39BitPuffinyou could do foo[] = ...
13:52:06Araqand you need to use toCStringArray anyway otherwise
13:52:09clovisIn my opinion. The iterator should not be able to control when and how the loop is exited. It's not its responsibility. The calling loop might have to do other operations during the current iteration before exiting.
13:52:12akghfMy god, at last i see a fucking window.
13:52:50BitPuffinAraq: are we ever gonna have a recursive let? which would force immutability even if you dereference or access an array or something whatever? :P
13:53:02*BitPuffin coughs at dom
13:53:07EXetoCclovis: you're breaking implicitly anyway, whenever the iterator is done
13:54:00clovisEXetoC, suppose you're using an iterator defined in a library. How could the library author possibly know all the use cases?
13:54:32clovisAll the iterator can say is: hey, i'm done here. Then it's up to the loop to decide what to do
13:54:33AraqBitPuffin: we'll get something better instead. A 'discard' pragma that checks the implementation is only allowed to consist of a single 'discard' statement
13:54:54EXetoCclovis: I didn't imply that it should know anything about the caller
13:55:13clovisEXetoC, then I must have misunderstood you.
13:55:24BitPuffinAraq: is that even related?
13:55:37BitPuffinI think you are joking
13:55:42BitPuffinit's always hard to tell with you
13:55:49BitPuffindom96: I was coughing at you
13:55:51BitPuffinpay attention damn it
13:55:59AraqI'm joking, yeah
13:56:00BitPuffindom96: write an article about the async stuff, naoooo
13:56:18BitPuffinAraq: :)
13:56:23AraqBitPuffin: we'll get write-effect tracking which amounts to the same
13:56:53BitPuffinAraq: will this help out with the way that C interferes?
13:57:05Araqwhat?
13:58:04BitPuffinAraq: ie like when you mark a proc with noSideEffect, and you call a C function which you know in your heart causes no side effects to your program so you still want the proc to be considered noSideEffects by other procs that are marked with noSideEffect?
13:58:48clovisI've never know anything this profound in my heart
13:58:55BitPuffinlike a {.noMrCompilerYouDoNotNeedToCheckForSideEffectsBecauseYouWillThinkThatThereAreButThereReallyAreNotAnyIPromisePleaseBabyDoNotHurtMe.} pragma
13:59:33BitPuffinguess it's not entirely related
13:59:54BitPuffinI guess what you mean is that with the write tracking let will actually enforce immutability because it tracks if something writes to it?
14:01:23clovisThat's a nice pragma, though
14:01:48BitPuffinwell I guess while I wait for zahary to rise from the dead and my colleague to write some code so that I can deploy it I'll rtfm
14:01:55BitPuffintfgfm
14:02:02BitPuffintfgm*
14:02:11EXetoCclovis: the iterator always controls when the loop is exited, and so 'break' inside the iterator wouldn't make a difference. besides, break is nothing more than a shorter/faster way of exiting from a loop
14:02:40EXetoCA loop is probably the most common way of implementing an iterator, but it could be anything really. 5 yields in a row for example
14:03:14EXetoCdid I misunderstood *you*?
14:04:23clovisEXetoC, I see the iterator as a function to be called by the loop. Therefore the loop has the final say. Perhaps it has to do something else before exiting?
14:05:56EXetoCall break inside the iterator would do is possibly result in fewer values yielded. that doesn't change anything in this regard.
14:06:13clovisRight
14:06:26EXetoCand I don't know why you'd want to do something just before an iterator exits, but there's currently no way to know if you are at the end anyway
14:07:45clovisI think you're right. I didn't think it through clearly enough
14:12:53dom96BitPuffin: Weren't you supposed to have a blog done like months ago? :P
14:12:54EXetoCI'll be experimenting with a library-based alternative to 'iterator' soon, similar to D's ranges, which means you'll be able to query the state
14:13:21EXetoCdom96: did you try the lambda macro recently? :>
14:14:11EXetoChopefully we can have it ready for 0.9.4
14:14:41clovisEXetoC, lazy evaluation also?
14:14:44*Varriount joined #nimrod
14:15:02dom96EXetoC: no but zahary fixed that bug so I will try it ASAP
14:15:35AraqVarriount is back! :-)
14:16:01AraqVarriount: you're on the criticial path now. are you happy?
14:16:46SkrylarHrm. I saw the HN discussion about Nimrod getting AFD'd on wikipedia
14:16:49EXetoCdom96: yay
14:16:53SkrylarJust looked at the Buzz page again
14:17:07Skrylarthey have a list of "buzz clones" that are all unfinished except for one
14:17:24BitPuffindom96: shh
14:17:25Skrylarthey sure do a great job curating those non-notable projects don't they -_-
14:17:26VarriountAraq: Sorry, I've been taking a break, playing some games, etc.
14:17:36BitPuffindom96: well I can't fucking finish the blog because of this mac os x bug with redirect
14:17:39BitPuffinso that's my excuse
14:17:48*darkf quit (Quit: Leaving)
14:18:02BitPuffinand how am I supposed to be able to write an article about YOUR async stuff ;D
14:18:18dom96You're not. You're suppose to write an article about Nimrod.
14:18:27dom96Skrylar: buzz page?
14:18:41BitPuffinwell yeah when zahary fixes the bugs that are currently holding linagl back from it's new release I will
14:18:45BitPuffinand it's not far off
14:18:47BitPuffinthe code is there
14:18:50AraqVarriount: please add that nimbuild feature. I depend on it
14:18:51BitPuffinjust not the compiler :P
14:19:47EXetoCclovis: they are lazy by definition I think
14:21:48EXetoCclovis: you can pass it around however you like, and the range will be exhausted only after popping a certain amount of times, and that can be hidden using some foreach macro
14:21:56VarriountAraq: Testing bootstrapping you mean?
14:22:10*Demos joined #nimrod
14:24:42Araqno the "still failing tests" features
14:25:10EXetoCI can't remember what I was going to call it though. I don't think range is a good name, and it's occupied already
14:25:34Skrylardom96: the wikipedia entry for jeskola buzz
14:25:39Skrylarits an old tracker
14:26:07Skrylarbut they have out-links to a lot of abandoned code :|
14:27:27AraqEXetoC: closure iterators already provide what you seek (you can pass them around)
14:27:31*psquid quit (Ping timeout: 264 seconds)
14:27:57*psquid joined #nimrod
14:28:01Araqbut a "cursor" might be a good name, perhaps?
14:28:19Araqthat's what a c++ iterator is anyway
14:28:32Araqa D-styled range is a cursor_pair
14:29:16*Skrylar might write a tracker in nimrod someday :/ i hate the 'pattern command' thing where you have to type in hexcodes as though this was 1960 and you were punching raw binary code on to paper <_<
14:32:12EXetoCyeah ok
14:33:18BitPuffinhey right now int / int gives back an int right?
14:34:05EXetoCAraq: I like the idea of having a library implementation though. I think I said this before, but it will at the very least be a nice way to demonstrate the UDTC feature
14:34:15EXetoCwith sensible error messages and all
14:34:19*vendethiel joined #nimrod
14:34:24EXetoCBitPuffin: it works?
14:34:44BitPuffinEXetoC: what are you talking about?
14:34:52EXetoCBitPuffin: yeah it does, but it gives you a float
14:34:56EXetoCagain, see system.nim :)
14:35:06BitPuffinwell yeah I didn't feel like looking it up
14:35:16BitPuffinI didn't know that int / int made float
14:35:38EXetoCproc `div` *(x, y: int): int {.magic: "DivI", noSideEffect.}
14:35:40BitPuffinso we don't have a way to divide and get back int? or maybe that's the div keyword or something like that fuck I don't remember
14:35:57Demosdoes int / int at least do the correct conversion to float?
14:36:09AraqSkrylar: what do you mean with "pattern command"?
14:36:15BitPuffinDemos: no Araq decided to opt for the incorrect conversion
14:36:21EXetoCI got used to it, but then I found it annoying when attempting to write a generic interface
14:36:40BitPuffinEXetoC: I was thinking we could have / and /.
14:36:42Araqno? 0 / 2 produces 0.5
14:36:53Araqhow is that the incorrect conversion?
14:37:04BitPuffinAraq: I was being sarcastic :)
14:37:08AraqI mean 1 / 2 of course
14:37:16BitPuffinyeah I was like what
14:37:20BitPuffinwow such correct
14:37:35Demoshehe well I figured maybe the bitpattern was just interpreted as a float. hey it could happen :D
14:37:36BitPuffin0 / 2 = 0.5 - Araq 17 March, 2014
14:37:54VarriountAraq: Are you sure that you don't' just want to add some javascript table sorting to the test results page, so that you can see all the failing tests that way?
14:37:58EXetoCDemos: brilliant
14:38:09EXetoCyou know Araq. he ain't stupid :p
14:38:31AraqVarriount: yes. I don't want to look at nimbuild's website
14:38:44Araqbecause that is yet another tab in my browser
14:39:12Araq#nimbuild is a tab in my irc client. much better ;-)
14:39:46BitPuffinhe ain't? :o :O but I wanted to use a stupid person's programming language
14:39:53BitPuffinAraq: any recommendations?
14:39:53VarriountAraq: Wait, so how exactly do you want these "still failing tests" results displayed?
14:40:25BitPuffinVarriount: on silver plate with condoms next to it
14:40:31Araqdump it into the gist and then get rid of the gist and make nimbot tell us in #nimbuild
14:41:07BitPuffinso in other words, add the data and delete it? much accomplished by the sounds of it
14:41:41Araqdom96 is going to hate me for this ...
14:41:53Araqbut I really dislike the gist generation part
14:42:05AraqI click on the link just to see that nothing changed
14:42:31BitPuffinwhy are we generating gists?
14:42:35Araqthat's bad, nimbot should dump the list of changes into #nimbuild
14:42:37BitPuffinmake jizz, not gist
14:42:52dom96No. NimBot should give a summary.
14:42:55BitPuffinno but what are we making gists for
14:43:02dom96Not spam the damn channel/
14:43:12Araqdom96: it's not spamming at all
14:43:16BitPuffincan't it just generate a summary based on a timeline you ask for
14:43:23VarriountOr we should just have a proper test results page, with filters, searches, etc.
14:43:29Araqit's 0-3 lines of changes, on average
14:43:41BitPuffinso if you go to build.nimrod-lang.org/summary/from/0/to/100/ it will list the changes?
14:44:02BitPuffinpretty sure git can already give you what you need there
14:44:10AraqBitPuffin: join #nimbuild and then you might be qualified to comment
14:48:17AraqVarriount: a proper test results page is fine, but not essential
14:56:56Araqbbl
15:05:05akghfhttp://www.pvv.ntnu.no/~steinl/vitser/evolution.html
15:05:07Skrylardo you ever have one of those moments where something seems really crippled and you're like "well that can't be nearly as good as something else, its obviously just gimpy" and then realize its actually meant to be used with something else that makes it actually considerablly powerful <_<
15:06:25BitPuffingosh darn it the new white chapel song is pretty catchy
15:06:29BitPuffinwhitechapel*
15:09:47DemosSkrylar: you have not used UNIX much then have you...
15:10:03*Demos remembers replaceing most of a matlab heavy workflow with gnuplot and awk
15:10:39Skrylari used gnuplot earlier today
15:11:09Demosit is pretty awesome, and not actually that much harder to use than excel, esp when you need slightly complex graphs
15:11:37Skrylari still don't know how to do proper I/O in nimrod, so i augmented the hashtable code with debugEcho and a tag name, dumped with > blah.log, used vims v/LOAD>/d to delete all lines that don't have "LOAD>" in them and spent 40 minutes getting gnuplot to obey
15:12:27Skrylar60% load before the hash table decides it is full is still very plebian though :(
15:15:03Demos60% sounds reasonable for some situations
15:25:41*Endy joined #nimrod
15:28:58*lanior quit (Ping timeout: 245 seconds)
15:31:21Skrylarhrm. apparently i have seemingly unreasonable requirements
15:31:49Skrylari was looking in to varying-length tracks, and there's only one tracker that actually does it
15:40:11SkrylarDemos: maybe, though i saw people reporting 80-90% with a 4-key cuckoo
15:40:31Skrylarmine might do better when i figure out how to do the arranging portions
15:40:44DemosSkrylar: yeah, it is a tradeoff. Some hashtables let you tune the load factor
15:40:59EXetoCBitPuffin: PHP?
15:59:49*clovis quit (Quit: HydraIRC -> http://www.hydrairc.com <- \o/)
16:04:11*Demos quit (Ping timeout: 252 seconds)
16:07:15*Ransel joined #nimrod
16:07:36RanselHow do I echo a string without a newline at the end?
16:08:54dom96stdout.write
16:10:52*Demos joined #nimrod
16:16:30RanselThank you, dom96!
16:17:09dom96np
16:20:13*akghf quit (Ping timeout: 245 seconds)
16:22:59*gfdbgd joined #nimrod
16:29:36*easy_muffin quit ()
16:30:51dom96hi gfdbgd
16:31:17gfdbgdHi there dom96
16:36:49*Varriount quit (Ping timeout: 240 seconds)
16:40:35*Varriount joined #nimrod
16:40:48gfdbgdHow can i tell nimrod to load dlls from a specific path?
16:41:11BitPuffinEXetoC: what?
16:41:16VarriountSorry about that. I probably shouldn't have asked microsoft paint to resize a 4000x4000 pixel image by 500%
16:47:07Demosgfdbgd: I think nimrod loads dlls according to the normal shared library search path rules on your platform. You can use all the normal linker options after using --dynlibOoverride:libname, you may be able to use rpath even with nimrod's dlopen based loading
16:47:21Demoswindows tends to be a bit more primitive wrt dll load paths
16:50:11gfdbgdThanks, does nimrod support sdl 1 or 2 ?
16:51:08Demosnot sure. if you want SDL2 it should not be too hard to wrap
16:51:17Demosor maybe it is already wrapped, I dun know
16:51:26dom96it is already wrapped
16:55:43*Demos quit (Ping timeout: 264 seconds)
16:59:52*gfdbgd quit (Quit: Page closed)
17:02:57*DAddYE joined #nimrod
17:12:28Varriountdom96: Which parts of nimbuild post stuff to github?
17:15:04dom96you mean post to gist?
17:15:07dom96website.nim
17:39:32*BitPuffin quit (Ping timeout: 246 seconds)
17:45:55*q66 joined #nimrod
17:54:11*q66 quit (Ping timeout: 252 seconds)
17:56:04*q66 joined #nimrod
18:11:45*jbe joined #nimrod
18:12:14*BitPuffin joined #nimrod
18:25:22*Matthias247 joined #nimrod
18:36:40*brson joined #nimrod
18:36:54*brson quit (Client Quit)
18:37:02*brson joined #nimrod
18:50:05*zielmicha joined #nimrod
18:50:46fowllol http://gizmodo.com/5980842/there-is-blatant-racist-and-sexist-language-in-github-code
18:51:29fowlnimrod repository is clear i just checked it
18:52:28EXetoCqd
18:52:33EXetoCxd
18:54:10Varriountdom96: Ping
18:54:26dom96yea?
18:55:10Varriountdom96: Is there any feasable way for me to check my additions to the nimbuild code?
18:55:16Varriount(website.nim)
18:57:09Araqhey DAddYE is back :-)
18:58:18dom96Varriount: Not really. You would have to setup everything manually.
18:58:27dom96Well.
18:58:30dom96Just redis actually.
18:58:35dom96Since you got builders setup anyway
18:59:18AraqVarriount: just PR it and let dom96 do the work. His server, his work. :P
18:59:48dom96I thought that the reason Varriount was doing this was because I didn't have time myself to do it?
19:01:13VarriountIf nothing else, it gives me an opportunity to look at the rest of the code.
19:01:46dom96Please don't refactor everything though.
19:03:44Araqdom96: yeah
19:03:59Araqthat's still the reason
19:04:03*Mat3 joined #nimrod
19:04:10Araqbut obviously he can't deploy on his own
19:04:30Araqand thanks to static typing he doesn't need to test anything anyway *cough*
19:06:14fowlAraq, i wanted to add initialization for seq/string to add/len, is adding if(seqvar == 0) initialize(); to the generated c acceptable
19:07:03Araqfowl: in principle yes
19:07:15Araqmake a PR and I'll review it, obviously
19:14:16AraqBitPuffin: join the VNUG
19:15:24Mat3Araq: I tested some integer vector routines against SSE equivalents. The SSE code suffers from the inpossibility of direct scalar accesses (need at least an expensive shuffling instruction) whereby for integer registers this is no problem (RAX <-> EAX: lower half). Because of these and despite the fact that most SSE instructions have longer latencies and/or can only be combined with integer instructions (dependent on the architecture) I thin
19:15:24Mat3k that approach is advantageous for integer and fixpoint SIMD processing
19:18:48*Mat3 thinks Intel's SIMD extension is basical ill designed compared to alternative approaches like Altivec
19:19:26AraqMat3: I think the point is also to free the integer units so they are available for other things
19:19:48Araqso using SIMD can still be advantageous
19:20:05Araqeven if not faster in comparison
19:20:38Mat3hmm, good point
19:20:41*io2 joined #nimrod
19:21:44Mat3hi io2
19:21:59io2hi Mat3 :)
19:30:16Mat3if I think about it: x86 CPU's are out-of-order and hold some ~128 shadow registers, we would only need only one direct register assignement so why not reuse the same one for all operations?
19:30:40*Mat3 is now known as Mat3-testing
19:31:57*Mat3-testing is now known as Mat3
19:32:47Mat3 two, fixed register allocations are sufficient
19:37:54Mat3I do not know if this would be problematic for C related code optimization however
19:38:06Mat3^optimizations
19:38:27Araqwhat's the problem again? personal dislike of compiler specific intrisitics?
19:39:06Mat3hold the library compiler independent
19:40:15BitPuffinAraq: woa okay
19:40:35*silven quit (Remote host closed the connection)
19:40:56BitPuffinAraq: ah, it was a trap
19:41:18AraqMat3: there are only 4 compilers left, 1 (intel) being a niche, it's not hard to have 4 different 'importc' pragmas, but a bit tedious
19:41:37AraqBitPuffin: nope, sorry my TS-client keeps crashing
19:42:35BitPuffinAraq: how lame :/
19:42:41BitPuffinthat's why we should use mumble instead :P
19:44:10Mat3Araq: That is a x86 centric agumentation. The GCC SIMD library is not usable for other CPU architectures
19:44:29Mat3(as I know)
19:45:19BitPuffinAraq: well tell me if you get it working
19:47:29AraqMat3: ok but if you're concerned with SIMD on ARM, only 2 compilers are left and the intristics are compatible, I think (gcc and clang)
19:49:21Mat3Araq: Supported platforms are: x86 (MMX,SSE,SSE2), Freescale (Altivec) and only *one* ARM architecture (Cortex-A, NEON)
19:49:38Araqwell your "lets use integer registers instead they are just as fast" argument is x86 centric too
19:49:52Araqso you lost me
19:50:21EXetoCdom96: have you completed the macro and blogged about it yet?
19:52:24Mat3Araq: my point was, that this is a processor independent approach which work without adaption for not so uncommon CPU architectures like SH, MIPS (loongson!) and last but not least all recent ARM architectures above MCU's with somewhat 4 kB ram
19:52:37renesacAraq, for ARM there is also the proprietary ARM compiler, that is pretty much in the same position as ICC on x86
19:53:45Matthias247SH is near death
19:53:57Matthias247since renesas is also using ARM now
19:54:32flyxso I just tried to bootstrap nimrod from github master. koch boot fails with „compiler/semtypes.nim(207, 32) Error: invalid indentation“
19:55:11Araqflyx: interesting
19:55:14flyxI opened the file and looked for the error, but I don't see any error there
19:55:55Araqwhich OS?
19:56:10flyxOSX 10.9
19:56:37Araqbootstrap with --gc:markAndSweep please
19:57:25flyxsame error
19:57:43Araqwell which iteration fails?
19:58:13flyxwait, at which step should I add this parameter?
19:58:26fowl let intType = getSysType tyInt
19:58:48fowlflyx, try replacing that line with let intType = getSysType(tyInt)
19:58:57Araqah fowl thank you
19:59:14fowli wonder why it doesnt error for me though
19:59:17Araqthe old compiler doesn't support the command syntax here
19:59:18Mat3Matthias247: I dont think so (military)
19:59:32AraqI wonder why our testers do not complain about this
19:59:46Matthias247Mat3: yeah, we also have some flying around in Automotive
19:59:52flyxnow I get „compiler/semexprs.nim(924, 36) Error: ')' expected“
20:00:12Matthias247Mat3: but these are areas were anyway nobody would use Nimrod in the next 10 years
20:00:12Araqfowl: you're not up to date, command syntax can now be used in more contexts
20:00:49fowlflyx, else: (internalAssert(typ.kind == tyCompositeTypeClass); typ.sons[1])
20:01:33flyxah, I get the pattern
20:01:58fowlAraq, usually the compiler doesnt use any new features like this though
20:02:37Araqfowl: zahary enjoys the new stuff too much :P
20:02:45flyxokay, now it succeeded. however it gives „[Warning] executables are still not equal“
20:03:15fowlAraq, that means the csources need to be updated?
20:03:52Araqno, he should fix the compiler instead to not use these bleeding edge features
20:04:32fowldoes this mean i can do `discard f x` now?
20:04:40Araqtry it
20:04:46BitPuffinAraq: do you have the latest version?
20:04:50Araqyou should be able to do that
20:05:04fowlsweet
20:05:43EXetoCBitPuffin: I think he's on 0.9.2 still
20:06:02BitPuffinEXetoC: was referring to TS but ok
20:06:19Mat3Matthias247: Well, if we can buy some cheap ARM boards like Raspberri Pi, have a (even cheaper) PIC32 (MIPS3) board [duinomite], some 5-10 AVR based platforms, the firebee (Freescale) and even 2 Propeller based ones, I can envision some demand for an SH board too
20:07:16Araqrenesac: ok, but does the syntax of the commercial arm compiler's intrisitics differ?
20:07:36Araqbtw I'll write that as intr from now on
20:07:38renesacI have no idea
20:07:44Araqabbrevs ftw
20:07:53Matthias247Mat3: AVR and the PI are mostly popular due to wide availability, easy tools, existing code and good tutorials for beginners. All that doesn't apply to SH afaik
20:07:59renesacstill, SIMD instructions exists for a reason
20:08:13Matthias247Mat3: even ARM Cortex-M has a hard stand
20:10:56*skyfex joined #nimrod
20:11:56Mat3yes that is true, however, my point is Nimrod as system language should be attractive for hackers and the maker society - these are people who will even misuse DSP's as CPU
20:13:22AraqMat3: enough of this. make an emulatedSimd.nim module and it will be added
20:13:42Mat3ok
20:17:17BitPuffindom96: where the hell did you poke me even
20:17:53BitPuffindom96: but you are not even in ts
20:17:53RanselUhm, I get an error when trying to do "src\babel1.exe install". Something with that there's no floppy disk inserted, and that I should insert one in \Device\Harddisk\DR4.
20:20:31BitPuffinAraq: get yo ass in the VNUG, dom96 is there too now
20:20:47EXetoCRansel: :E
20:21:17Araqhi Ransel welcome
20:21:20EXetoCyeah a floppy disk is now required. sorry
20:21:40EXetoCjoking of course. odd error
20:23:36RanselYeah. :/
20:24:20AraqRansel: babel1.exe? not babel.exe?
20:25:00RanselAraq: Yeah, it's on the installation instructions for Windows. "This is required because Windows will lock the process which is being run."
20:26:42BitPuffinEXetoC: do you have CS:GO?
20:27:38AraqRansel: try to run it in an admin shell
20:28:43RanselAraq: Same error :/
20:31:23Araqwell I don't think you even need to *install* babel
20:31:41Araqtry to install some other package with babel and see if that works
20:38:04RanselI still get the same error.
20:38:21RanselSame if I run it without any arguments.
20:40:20Araqdeactivate your anti virus software and check again
20:40:31BitPuffinhaha
20:40:33BitPuffinsuch a windows problem
20:40:42Araqalso check that you're not trying to run a 64bit application on a 32 bit OS
20:42:45*Varriount is going to the VNUG
20:42:53RanselI have no AV installed and I am running a 64-bit OS.
20:48:28*clovis joined #nimrod
20:49:09AraqRansel: how did you compile babel?
20:50:05RanselAraq: "nimrod c src\babel" as the installation instructions say. https://github.com/nimrod-code/babel#windows
20:51:08Araqtry nimrod c -d:release src\babel
20:52:40Varriount(nimrod c -d:release .\src\babel.nim") && (copy .\src\babel.exe .\)
20:53:37*Endy quit (Ping timeout: 240 seconds)
20:54:07RanselStill get the error.
20:54:22VarriountRansel: What exactly is the error?
20:54:34RanselBut I forgot the console error (I am extremely sorry), but that is "Auto configuration failed
20:54:34Ransel6436:error:02001015:system library:fopen:Is a directory:.\crypto\bio\bss_file.c:
20:54:35Ransel126:fopen('g:/phpbuild/apps_install/openssl.cnf','rb')
20:54:35Ransel6436:error:2006D002:BIO routines:BIO_new_file:system lib:.\crypto\bio\bss_file.c
20:54:35Ransel:131:
20:54:35Ransel6436:error:0E078002:configuration file routines:DEF_LOAD:system lib:.\crypto\con
20:54:36Ranself\conf_def.c:199:"
20:55:06VarriountEr. Is this a windows machine?
20:55:09RanselApparently it's looking for a file in g:\
20:55:14RanselVarriount: Yes
20:55:23fowlflyx, does it work now?
20:55:28Trixar_zaShouldn't it be openssl.conf?
20:55:51EXetoCBitPuffin: Like I said, I only use Linux so I can't play it yet
20:55:57VarriountRansel: So this a gcc/c compiler error?
20:56:20RanselI don't know?
21:00:13VarriountRansel: According to stackoverflow, you need to set your OPENSSL_CONF environment variable to a proper config
21:02:05VarriountRansel: try "(nimrod c -d:release -u:ssl -u:openssl .\src\babel.nim")"
21:07:56VarriountRansel: http://stackoverflow.com/questions/4106035/what-does-this-openssl-error-mean
21:08:48RanselIt works! :D
21:09:12RanselThank you very much!
21:11:08flyxfowl: yes, after I altered the two lines it compiled
21:11:25VarriountRansel: There is a downside - the parameters I gave disable SSL functionality in the modules used by babel.
21:11:50Varriount(-u undefines a symbol)
21:11:51fowlflyx, good stuff
21:37:10Varriountdom96, Araq: Sent the PR for the 'still failing tests' feature.
21:39:10Araqyaaaay
21:39:45EXetoCweeee
21:41:19BitPuffinEXetoC: ah right
21:47:00VarriountAlso, I found out my git frontend has a "send pull request" feature.
21:47:18*skyfex quit (Quit: Computer has gone to sleep.)
21:47:54*skyfex joined #nimrod
21:48:31EXetoCBitPuffin: I'll buy it if you enable remote access to some windows machine. the added latency might even things up a little
21:50:11*nolan_d joined #nimrod
21:56:14EXetoCBitPuffin: dude, you gotta write more code
21:56:48EXetoCaudio-centric code in particular, so that I'll bother to write that high level interface
21:57:00EXetoCand maybe some mongo code as well
22:01:44dom96Varriount: Honestly, that will spam the channel.
22:01:52dom96You won't be able to tell what's what.
22:02:06Varriountdom96: I cooked to Araq's order.
22:02:35Araqand I made a statistic about it
22:03:14dom96I'll give you a statistic:
22:03:34dom96There are currently 96 tests failing.
22:03:51dom96You want to send 96 lines of text to #nimbuild?
22:03:53dom96For each platform
22:03:57dom96for each commit built?
22:04:29Araqhmm now thats a good point
22:05:03AraqI only considered the annoying "nothing changed" gists
22:05:24Araqbut indeed these are not empty anymore when we always list what still fails
22:05:35AraqVarriount: I'm sorry but dom96 is right
22:07:59VarriountAraq: Well, to be fair, I anticipated this change, which is why I moved the "still failing" reports into the gist as well.
22:08:16Mat3ciao
22:08:19*Mat3 quit (Quit: Verlassend)
22:08:22VarriountI only have to delete some lines. 3 lines, to be precise. :D
22:08:25dom96The only new data that NimBot should announce is the number of "Now failing" tests.
22:10:11dom96Also i'm not sure I like your code formatting change.
22:11:10Varriountdom96, Araq: PR updated.
22:11:33VarriountNow, I go eat.
22:25:07*Ransel quit (Ping timeout: 264 seconds)
22:25:25*Demos joined #nimrod
22:28:31BitPuffinEXetoC: I want to, blame zahary
22:29:19BitPuffinno but
22:29:21BitPuffinbugz
22:29:40BitPuffinEXetoC: you mean for PA?
22:30:03BitPuffinEXetoC: I will be writing my own abstraction on top of PA for this project, since it will possibly be ported to console etc
22:32:05zaharyha! why am I for blame?
22:33:36zaharyBitPuffin: have you tried my weekend fixes already?
22:44:54BitPuffinzahary: yes! They dun diddely work
22:44:57BitPuffinwell maybe some of them worked
22:44:59BitPuffinbut something doesn't
22:45:44BitPuffinmatrix.nim(121, 49) Error: type expected
22:45:45EXetoCBitPuffin: well if you want to deal with untyped pointers directly
22:46:04BitPuffinproc `*`*[T; R, N, C: static[int]](a: TMatrix[T, R, N], b: TMatrix[T, N, C]): TMatrix[T, R, C] {.noSideEffect.} =
22:48:29zaharywell, post bugs please, don't just complain on IRC
22:48:46BitPuffinzahary: just really hard to know what's already known
22:48:48BitPuffinbut yeah
22:48:53BitPuffinokay I'll post it as an issue
22:52:25VarriountHi demos
22:52:29BitPuffinhttps://github.com/Araq/Nimrod/issues/1013
22:52:36BitPuffinzahary: are you proud dad? ;-;
22:53:03Demoshi Varriount
22:58:49*clovis quit (Quit: clovis)
22:59:38BitPuffinno but zahary it's thanks to the work you do on generic that I can almost code ;D
23:01:59zaharyis this the last issue so far? if you comment (or don't use) that proc are there other problems?
23:02:01BitPuffinEXetoC: I guess technically I can work on audio stuff while I wait for the last bugs
23:02:07BitPuffingood question sir
23:02:35BitPuffinman I wish we had block comments
23:03:31Araqdiscard """
23:03:33EXetoC'when False'? 'discard """ """'?
23:03:37Araq verbose block comment"""
23:04:29BitPuffinodd
23:04:38BitPuffinnot sure which line causes this tbh
23:04:40EXetoCvisual editing in vim?
23:04:40BitPuffinector.nim(7, 42) Error: ordinal type expected
23:04:54BitPuffinzahary: that's when running matrix.nim, feels like I've seen it before
23:05:51zaharyI'm currently implementing a swizzle example and I think I stumbled on this one
23:05:51BitPuffinmy hunch is that It's because like a generic variable is passed to a TVector type and it goes like hey, yo, you didn't say that it's a static int, so I'm gonna say it wasn't an ordinal type for shitzels
23:08:02EXetoCBitPuffin: program-specific audio code?
23:08:43EXetoCor the lib
23:09:25BitPuffinEXetoC: for the engine
23:10:00BitPuffinzahary: very annoying that it doesn't show the line it happens on :/
23:10:57zaharythis is an internal error
23:11:28zaharygotta go, see you tomorrow
23:11:42Demoszahary, I got an internal error when I tried to use `.` overloading to write a swizzle implementation
23:11:46DemosI gotta go as well though
23:14:09*darkf joined #nimrod
23:14:22BitPuffinzahary: Yeah I know but you still wanna know which line causes the internal error lol
23:14:29BitPuffinsee you :) have a good one
23:28:11*xenagi joined #nimrod
23:30:57*jbe quit (Quit: Leaving)
23:33:23*zielmicha quit (Quit: Connection closed for inactivity)
23:35:58*Demos_ joined #nimrod
23:38:17Demos_hmm I am having issues with type Vector[N: static[int]; T; O: Options] = TMatrix[N, 1, T, O], it says "can not instanciate TMatrix"
23:38:26Demos_Similar issue BitPuffin?
23:44:26*io2 quit ()
23:44:27BitPuffinDemos_: I am not allowed to disclose open source secrets to competitors sorry
23:44:37Demos_hehe
23:44:43BitPuffinno but I don't think so :o
23:46:06*skyfex quit (Quit: Computer has gone to sleep.)
23:46:42*skyfex joined #nimrod
23:46:59Demos_well I will use your library if it meets my needs (Column major data storage, no extra data in fixed size matrices/vectors)
23:48:26Demos_hm it may be, my test case error'd with the same message as #1013
23:49:39Demos_also who was it who was really into note-takeing apps?
23:52:19*seubert quit (Ping timeout: 264 seconds)
23:53:10Demos_right now I have a pretty sketch set of linear algebra functions that just take a specific sized vector, and I use the good ol copy-n-paste generics. GOOD ENOUGH FOR C GOOD ENOUGH FOR ME :D