00:00:17 | dom96 | Varriount: Isn't that a bug? |
00:00:45 | NimBot | Araq/Nimrod devel 5f7ac15 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds posix.timegm(), brother of posix.mktime(). |
00:00:45 | NimBot | Araq/Nimrod devel 3857496 Andreas Rumpf [+0 ±1 -0]: Merge pull request #927 from gradha/pr_adds_posix_timegm... 2 more lines |
00:01:22 | * | Matthias247 quit (Read error: Connection reset by peer) |
00:07:12 | Araq | Kelet: marshal uses nimrod's typeinfo stuff. It is reasonably easy to adapt marshal to produce a binary reader/writer |
00:07:21 | Araq | (welcome btw) |
00:08:57 | filwit | http://forum.nimrod-lang.org/t/386 |
00:09:21 | filwit | ^ okay folks, made a forum post about a new syntax idea i had last night |
00:10:55 | filwit | i think it address everyone's concern (just about) and has a (theoretically) realistic path implementation (changes can be done in steps, and things like {} sytle is more of an extension once certain symbols are rearranged) |
00:11:06 | filwit | path too** |
00:11:11 | filwit | to** |
00:11:35 | fowl | var mySet = @{ A, B, C } |
00:11:41 | fowl | what is {a,b,c} then? |
00:11:52 | filwit | please read the whole post |
00:12:08 | fowl | yeah |
00:12:16 | fowl | it appears you want it to be a statement list |
00:12:17 | filwit | {} would be reporposed for white-space insignificant "body" |
00:12:50 | fowl | you know @ is a unary function on openarray that creates seqs right |
00:13:22 | filwit | fowl: didn't know that actually |
00:14:19 | * | q66 quit (Quit: Leaving) |
00:14:25 | filwit | fowl: but i'm sure that problem could be addressed, or perhaps a better syntax for set/seq could be found (though i think the @[]/@{} is just fine) |
00:15:38 | fowl | {} is also used for dictionary |
00:15:42 | EXetoC | why should it look more like seq construction rather than array construction? |
00:15:43 | renesac | filwit, not having the program behave like it looks like (it's indentation) is bad in my opinion |
00:16:08 | fowl | @{"hello":"there"} == @[ ["hello","there"] ] |
00:16:12 | renesac | and one could use #{ and #} for redundancy in defining blocks |
00:16:18 | renesac | for e-mails, etc |
00:16:25 | renesac | no need to repurpose {} |
00:16:49 | filwit | renesac: the point of use {} for brackets is purely for popularity |
00:17:02 | renesac | it will lose popularity among python users |
00:17:03 | renesac | :P |
00:17:03 | filwit | renesac: and honestly, set's don't really need them |
00:17:14 | renesac | not only sets are defined by them |
00:17:17 | fowl | this is true |
00:17:19 | renesac | there are {} |
00:17:22 | renesac | *{:} |
00:17:25 | renesac | tables |
00:17:26 | fowl | i think it would be better to just use set(x,y,z) |
00:17:39 | filwit | fowl: i agree actually |
00:17:48 | Araq | there is also a{i} |
00:18:00 | Araq | (similar to a[i] ) |
00:18:07 | fowl | filwit, i dislike your proc pragma change, if you want it to be more like types, it should be proc foo* {.pragma.} (args) |
00:18:40 | filwit | fowl: i'm not against that actually, though I'm not sure i like it better |
00:18:42 | Araq | filwit: also you can already do: type Foo = object {.pragmas.} |
00:18:54 | fowl | and swapping around : and = in the proc def will break tons of code, a better idea would be to make proc declarations the same as do() ie proc foo*(x:int) -> string: |
00:19:11 | filwit | Araq: i'm not sure what you're comparing that {.pragmas.} too |
00:19:44 | filwit | fowl: how would that break any less code? and this isn't like a "we need it NOW" kind of thing |
00:19:50 | Araq | it comes late then, similar to how it's done for procs |
00:20:25 | Araq | but I'm sleeping anyway, bye |
00:20:28 | filwit | Araq: i know you can do that, but isn't that fundamentally different? |
00:20:29 | fowl | filwit, because when the proc hits the "=" in the definition, it knows it needs a body, you allow "= returnType : body" |
00:20:36 | filwit | Araq: okay, will talk later |
00:21:08 | filwit | fowl: we're talking about parser changes man. '=' would now mean 'is type' and ':' would invoke the body |
00:21:38 | fowl | to me it looks like proc () = float: foo is a void function calling a template float with body code foo |
00:21:54 | fowl | and thats what i expect others who know nimrod to read that as |
00:22:04 | renesac | fowl, a template in this case would need 'do' |
00:22:29 | renesac | because some other ambiguity |
00:23:08 | filwit | one thing is that ':' really should be use for "start body" because of everything else that uses it if/else/custom-macros etc |
00:23:24 | fowl | yea |
00:23:32 | renesac | on the other hand, ':' is also used to specify type |
00:23:42 | renesac | I'm not sure what is more consistent |
00:23:46 | fowl | but now we have do -> ty : body, proc = ty: body, proc : ty = body, |
00:24:27 | renesac | yeah, it would be good to unify 'do' and normal procs |
00:24:31 | filwit | fowl: the last would be removed |
00:24:54 | filwit | fowl: and the first is only to pass things around and probably could have a better solution? |
00:25:24 | Araq | I hate to say it, but if we remove ':' for types things might get easier: proc foo(a, b int) int: body |
00:25:26 | EXetoC | death to excessive use of brackets - optional or not |
00:25:30 | dom96 | filwit: I don't think allowing users to choose between brackets/indentation will result in a popularity increase. |
00:25:59 | renesac | ^ |
00:26:02 | fowl | filwit, remove the last option and you've rendered 100% of nimrod code uncompilable |
00:26:19 | Araq | but I think these go-like declarations really look ugly |
00:26:32 | filwit | dom96: completely disagree really. it might not "make a splash" but based on complaints i've heard it would help adoption |
00:26:45 | filwit | Araq: they could be on multiple lines |
00:26:56 | filwit | Araq: eve the ':' could be on a new line |
00:26:56 | Araq | filwit: that's awful |
00:27:04 | filwit | Araq: it's choice |
00:27:12 | EXetoC | everything is being criticized all the time... |
00:27:13 | renesac | filwit, it would just split the language, and make people read those ugly code |
00:27:34 | Araq | I'm sleeping anyway |
00:27:35 | dom96 | filwit: You want to increase consistency right? Well, this would make things less consistent. |
00:27:37 | filwit | renesacs: kinda like how case-sensitivity doesn't do? |
00:27:38 | filwit | :P |
00:28:13 | filwit | dom96: i want to increase consistent with symbol usage. I always liked Nimrod's "you choose" attitude |
00:28:24 | renesac | well, most languages don't really force some case standard |
00:28:39 | filwit | yes, the lib-writers doo |
00:28:45 | renesac | and with case-insensivity you can call the way you want |
00:28:56 | EXetoC | you still need prefixes |
00:28:58 | filwit | which means you have to do: SDL_CreateWindow(getNameFrom(something_else_entirely())) |
00:29:12 | filwit | but that's nicer in Nimrod because there's choice |
00:29:29 | dom96 | I don't get why you want to change the syntax of type definitions though. |
00:29:40 | filwit | this is basically the same idea, only with statment structure |
00:29:49 | dom96 | I can understand why you may want: proc x(y: int) -> int: though. |
00:29:55 | filwit | dom96: i don't, types are pretty much left how they are |
00:30:15 | filwit | dom96: i even question needing to enfore ':' use at the end of the post |
00:30:52 | fowl | type Foo: bar: int |
00:30:52 | fowl | <- what is this |
00:31:05 | dom96 | filwit: I think the : is required in if statements at least. |
00:31:11 | filwit | Araq: i actually agree that removing the ':' might make things easier for procs |
00:31:36 | filwit | dom96: yeah i agree mostly, which is why i was promoting enforcing it :P |
00:31:44 | dom96 | writing proc x = int doesn't make sense to me though. |
00:32:02 | dom96 | "procedure x equals type int"? |
00:32:08 | renesac | still makes a severe compatibility break |
00:32:24 | renesac | dom96, I agree, -> is much better, and already used in 'do' |
00:32:45 | filwit | dom96, renesac: no what Araq said was better.. just remove ':' altogether |
00:32:51 | filwit | proc x int |
00:32:55 | filwit | proc x int: ... |
00:33:02 | filwit | proc x int |
00:33:03 | filwit | .. |
00:33:04 | fowl | filwit, the only change listen here that i can agree wiht is allowing : in type defs ie type A : object |
00:33:05 | filwit | ? |
00:33:26 | fowl | listend* |
00:33:27 | renesac | filwit, he didn't really said, it was better, he said ' I hate to say it' |
00:33:29 | renesac | XD |
00:33:29 | fowl | listed |
00:33:38 | renesac | but yeah, it is an option |
00:33:47 | EXetoC | renesac: though it's feasible to automate migrations for grammars that are parseable by normal human beings |
00:34:08 | dom96 | I wonder if he was kidding. |
00:34:19 | dom96 | because that looks absurd to me |
00:34:20 | filwit | i don't think so, just pointing something out |
00:34:24 | filwit | lol |
00:34:43 | renesac | anyway, I'm oposed to identation insensitity, and I don't see that much gain for such a big change |
00:34:44 | filwit | we had talked about the merits of ':' in the past for var declarations |
00:34:55 | renesac | actually, it is pure bikeshedding |
00:35:34 | filwit | renesac: i don't see for what reason you are apposed to case-insensitivity |
00:35:52 | filwit | renesac: plus this is of course a bikeshedding issue.. but one that gets brought up a lot |
00:36:07 | fowl | i wish someone would write a c-like syntax |
00:36:08 | renesac | we just need a good FAQ entry on that |
00:36:11 | renesac | I may provide this |
00:36:31 | filwit | renesac: this isn't a "let get started guys" proposal, but a "future directions to make Nimrod inviting and consistent" proposal |
00:37:09 | renesac | brackets aren't inviting for me... else I would be using/trying D or Rust |
00:37:12 | filwit | renesac: do you just "not like" the idea or others using brackets? I don't really find that a valid complaint |
00:37:30 | filwit | the whole point of this is that many feel the exact oposite |
00:37:38 | filwit | opposite* |
00:39:06 | dom96 | https://gist.github.com/dom96/959f27018ea3247a4498 |
00:39:18 | dom96 | To me it's perfectly consistent. |
00:39:31 | dom96 | The comments are how I would read the code in my mind. |
00:39:47 | EXetoC | Chances are I'll be reading such code written by others, and that's why it matters |
00:39:54 | renesac | from __future__ import braces |
00:40:22 | filwit | EXetoC: the same rules of case-inconsistency apply to this |
00:41:16 | filwit | dom96: it's not consistent. because Bar's reclist just follows the 'object' part |
00:41:39 | filwit | dom96: only you have to have a \n to invoke that, since not even [,] work for objects (only tuples) |
00:41:46 | dom96 | 'object' starts a new section |
00:41:53 | filwit | i know |
00:41:53 | dom96 | similar to the way 'type' does |
00:41:57 | filwit | i know.. |
00:42:05 | dom96 | So it is consistent. |
00:42:27 | dom96 | It's only slightly different because it comes after an '=' |
00:42:30 | filwit | only it's a completely different sort of symbol. 'type' is a keyword, 'object' is not |
00:42:39 | dom96 | object is a keyword |
00:42:48 | renesac | 'if' only has a ':' because it needs that when you do it in one line |
00:42:53 | filwit | it doesn't matter, it's not used the same, dom96 |
00:42:57 | fowl | filwit, are yous ure object[a:int] doesnt work? i know tuples work both ways now |
00:43:02 | renesac | let, type, object don't need ':' for one-liners |
00:43:26 | renesac | so they don't have it either when you do in multiple lines |
00:43:30 | dom96 | let, var, const, type, object, tuple -- all consistent. |
00:43:31 | filwit | yes, in that i agree.. i've agreed many times that the ':' could probably be optional |
00:43:46 | dom96 | oh, tuple and object are good examples of consistency |
00:44:05 | filwit | type Foo = object[a, b: int] # doesn't work still right? |
00:44:13 | dom96 | Why should it? |
00:44:32 | dom96 | What's the difference between that and s/object/tuple/ ? |
00:44:36 | EXetoC | filwit: well, I don't feel too strongly about that |
00:44:56 | filwit | dom96: i'm not following you |
00:45:13 | dom96 | My point is that you may as well just use a tuple in that case anyway. |
00:45:16 | EXetoC | dom96: the construction and the significance of the names |
00:45:40 | filwit | dom96: that has no relevance on weather or not the syntax is consistent |
00:46:45 | dom96 | filwit: Alright. Fair enough. I suppose consistency doesn't necessarily matter if there is another way of doing the same thing. |
00:47:39 | filwit | dom96: i don't even fully understand the difference between object/tuple in Nimrod, beyond exposure semantics |
00:48:06 | dom96 | Well AFAIK. With object you can inherit from different objects |
00:48:17 | dom96 | With tuples you can access them by index |
00:48:19 | fowl | object can have invariants and use the when stmt inside them |
00:48:30 | dom96 | yeah, that too. |
00:48:35 | dom96 | tuples are much simpler |
00:48:44 | dom96 | which is why it makes sense to define them using that syntax |
00:48:55 | dom96 | and why it makes sense to define objects with that long syntax |
00:49:18 | filwit | okay that makes sense |
00:49:19 | dom96 | But in the name of consistency we can ignore that I guess. |
00:49:42 | * | darkf joined #nimrod |
00:49:59 | renesac | filwit, changing subject, you should make a tutorial on how to use intrinsics in nimrod |
00:50:13 | renesac | do you have some wrapper already made? |
00:50:37 | EXetoC | what's that? compiler pragmas? |
00:50:48 | filwit | renesac: yeah, it's somewhat primitive atm. But one sec |
00:50:51 | EXetoC | nvm. wrapper? |
00:51:11 | EXetoC | unless that was an unrelated question |
00:51:14 | filwit | EXetoC: he means simd stuff |
00:51:35 | EXetoC | ok I didn't know about that |
00:52:43 | renesac | yeah, <intrins.h> and friends |
00:53:04 | dom96 | filwit: But seriously. Please stop worrying about these things. Just accept the way things are for now and work on more important things, like making the docs nicer, that should give us a better popularity boost than some consistency adjustments. |
00:53:08 | filwit | renesac: here's a basic lib with a Vec4: https://gist.github.com/PhilipWitte/9316566 |
00:53:29 | filwit | renesac: just wrap more of xmmintrin.h to get more functions |
00:54:40 | renesac | cool |
00:55:24 | filwit | dom96: i'm not "worrying" about them at all anymore. I had an idea last night about it and posted to Araq personally before posting here. He suggested making the forum post and talking about it with you all. I will being making a parser which works like this on my own if you folks really don't like it (to experiment), but that will be far away from now. |
00:59:22 | dom96 | filwit: I will take a more thorough look at your proposal tomorrow because it is quite late here and I am very tired. But for now I will stick to what I said, I think the language is perfectly consistent and I still don't understand why you think otherwise. |
01:04:16 | filwit | dom96: can you do "type X = var\n " ? no.. there's only one place in the compiler where a body directly follows a keyword and gets assigned to a unique symbol. However, there's many places where a stmt body is passed to something, and even if/proc work differently here. It's true that proc is somewhat consistent with how 'var' works, but then, these are sorta fundamentally different beasts. Definiting a proc is more like definging a type than a var really. |
01:06:33 | dom96 | I disagree. Definining a proc is exactly like defining a var. |
01:06:50 | dom96 | var x: int = 5 |
01:06:56 | dom96 | proc x: int = 5 |
01:07:11 | renesac | filwit, the '=' use in procs is consistent with variable declaration: |
01:07:12 | renesac | https://gist.github.com/ReneSac/02076a8ed3cfc4d559c3 |
01:07:34 | filwit | which is why i always wanted to make types like this: "type Foo: Bar = <body>" |
01:08:15 | filwit | but then this is completely inconsistent with if/else/macros and I started to see how type wasn't the problem |
01:08:41 | filwit | ultimately, it would be nice if all "body's of executing code" followed a consistent symbol.. ':' |
01:09:34 | filwit | and then, you could apply the same to types as well to be consistent, which also opens the door to allow optional {} style, which wins all arguments in terms of adoption (honestly, why NOT do it if you have the option?) |
01:09:42 | dom96 | Sometimes you just have to accept that not everything can be consistent. Because the two things are different enough that they just cannot be. |
01:10:46 | * | ddl_smurf joined #nimrod |
01:10:55 | filwit | sorry, but i don't accept arguments of complacency :P i'm not saying this is "so important Nimrod will never get uber-popular without it".. i'm saying "i think there's a better way, here's why" |
01:11:26 | dom96 | Araq was going to implement the {} and begin/end style |
01:11:30 | dom96 | using filters |
01:11:31 | renesac | filwit, this is also about convenient line-breaking |
01:11:53 | dom96 | I'm not sure why he changed his mind. |
01:11:54 | renesac | 'let x: int = 1 + \n 2' is also permited |
01:12:09 | renesac | '=' isn't special case |
01:12:31 | dom96 | Yeah, that's true. |
01:12:54 | filwit | renesac: yet, but this fundamentally feels different than 'object\n <recList>' |
01:13:09 | filwit | and in the case of types, the ':' doesn't apply |
01:13:23 | dom96 | The problem I can see with allowing {} is that you may get code which doesn't care about indentation which will happen, and then you are confused if you are used to the indentation style. |
01:13:39 | dom96 | You scroll up and down "ugh, this code uses braces" |
01:14:02 | renesac | besides haskell, I don't know any language that allows both styles |
01:14:05 | dom96 | Araq's original plan was to allow the IDE to render the Nimrod AST whichever way you preferred. |
01:14:20 | dom96 | Which would solve that problem. |
01:14:23 | renesac | neither side seems open to add support for other block definition style |
01:14:39 | filwit | dom96: that is a valid concern. but I'm not sure how much that will happen in practice. Usually people will just chose one or the other, and you could also have compiler-option to enforce specific ones if you really wanted |
01:15:05 | dom96 | I'm talking about other people's code here./ |
01:15:12 | dom96 | Not my own code which uses different styles. |
01:15:23 | dom96 | Say I want to fix some bugs in other people's code. |
01:15:37 | renesac | I'm more ok if {} is used only for redundancy, w/o letting people disregard proper identation |
01:15:48 | EXetoC | I want consistency without having to rely on tools |
01:15:56 | filwit | dom96: IDE rendering is a good point too.. |
01:16:00 | renesac | but even then, I don't think this cruft is necessary in the language |
01:16:20 | dom96 | filwit: However, there is no reason not to get the IDE to translate to the indentation style |
01:16:35 | dom96 | You can still get this feature, even if the language doesn't support {} |
01:16:52 | renesac | and for redundancy, one could easily implement '#{' '#}' w/o breaking any backwards compatibility |
01:16:53 | filwit | that's very true |
01:17:15 | filwit | renesac: it's not for redundancy. that would be pointless |
01:17:43 | renesac | so for what? |
01:18:01 | renesac | most of the arguments against identation for defining blocks that I hear are: |
01:18:05 | filwit | i meant, no one is arguing for {} as just a redundant wrapper for code |
01:18:08 | renesac | they are lost in e-mails and blog comments |
01:18:27 | renesac | the IDE might use them to re-ident code cop |
01:18:31 | renesac | ied from somewhere else |
01:18:46 | renesac | to make block start and finish more visible |
01:18:58 | renesac | all of those are served by redundancy |
01:19:05 | renesac | actually, ask for that |
01:20:08 | filwit | well i don't mind the object definition so much when it's like this: |
01:20:10 | filwit | type Foo = |
01:20:13 | filwit | ref object |
01:20:16 | filwit | a, b: int |
01:20:28 | filwit | because it's clear what is happening |
01:20:33 | filwit | but still, i think: |
01:20:37 | filwit | type Foo: ref object = |
01:20:40 | dom96 | The advantage of the type *section* |
01:20:42 | filwit | is best |
01:20:44 | dom96 | is that you can write 'type' once |
01:20:51 | dom96 | and define multiple types |
01:20:53 | renesac | think of 'object' like a unary operator, but that can receive a block of code |
01:20:58 | filwit | i don't see how this effects that, dom96 |
01:21:01 | dom96 | Which is the same advantage that let/var etc has |
01:21:07 | renesac | yeah, it is kinda inconsistent, but is convenient |
01:21:20 | dom96 | Well, I find it on the same line ugly :P |
01:21:21 | fowl | renesac, how is that at all true |
01:21:44 | renesac | maybe it was a bad analogy.. |
01:21:50 | fowl | lol |
01:22:02 | renesac | as it isn't a operator, is part of the syntax that can't be emulated, it seems |
01:22:18 | fowl | i meant the receiving a block of code part |
01:22:48 | renesac | the fields definition can span multiple lines |
01:22:54 | renesac | I would call that a block, even w/o the ':' |
01:23:36 | EXetoC | bacon |
01:23:42 | dom96 | It's not a block per se |
01:23:55 | filwit | yes there are only two places where something consumes a non-comma-separated "body".. that's 'types' and procs |
01:23:56 | dom96 | But I should really sleep |
01:24:03 | dom96 | Good night guys |
01:24:07 | filwit | later |
01:24:26 | fowl | in c the stuff inside struct {} is code |
01:24:30 | filwit | sorry, not only two places, if/else/etc do it too |
01:24:30 | renesac | filwit, and template and macro definitions |
01:24:36 | renesac | and that |
01:24:54 | filwit | fowl, renesac: i agree with dom96 actually, {} should just be an IDE thing |
01:25:02 | fowl | its not a "body" at all, its called ident defs |
01:25:02 | filwit | it just makes the most sense |
01:25:28 | fowl | you can also find ident defs in var decls and function parameters |
01:25:42 | renesac | fowl, right, I was really imprecise, it was only an analogy, but didn't help |
01:25:51 | filwit | fowl: i know it's not a StmtBody (it's a RecList), but it's still not comma-separated |
01:26:15 | filwit | fowl: so it "feels" like a "body of code" especially since it can have 'when' statements and 'case' too |
01:27:46 | filwit | i think this is best solution, honestly.. |
01:27:51 | filwit | type Foo Bar: <body> |
01:27:58 | filwit | proc foo int: <body> |
01:28:20 | filwit | var foo: int = 0 # '=' is assignment and unique to var/let/const |
01:28:48 | filwit | then have {} be IDE feature if it's really wanted, etc |
01:29:28 | filwit | or i guess you could do.. |
01:29:34 | filwit | var foo int: 234 |
01:29:45 | filwit | for complete consistency, but whatever |
01:30:37 | renesac | actually, dont the (;) syntax already enables C/java like blocks of code? |
01:30:58 | filwit | renesac: not really, it's just for combining lines |
01:31:18 | renesac | what would't work? |
01:31:38 | filwit | doesn't change how white-space is used |
01:31:51 | filwit | it just allows.. var a = 10; echo a |
01:36:36 | renesac | ok, it seems that I can't nest (:) |
01:36:48 | renesac | * (;) |
01:37:32 | renesac | and yes, identation rules still are followed |
01:41:31 | Varriount | filwit: I don't mind others using brackets and semicolons, as long as *I* don't have to. |
01:42:01 | Varriount | (I'm reading logs while taking a break from frantic essay writing) |
01:42:52 | filwit | Varriount: dom96's points about this where valid. It could cause people to mix-match braces and cause bugs because they're expecting one and get the other. Plus, IDE rendering solves all concerns about Brackets or styling in general |
01:43:08 | BitPuffi1 | Araq: wtf, pow _alias_?? So un-nimrodic |
01:43:27 | filwit | he's alseep |
01:43:31 | filwit | asleep* |
01:43:45 | BitPuffi1 | yeah |
01:44:32 | Varriount | filwit: I am open to the idea about adding @ to set literals ('open' meaning I'm neither for, nor against the idea) |
01:46:37 | filwit | Varriount: no point really, that was only to free up {} for curly-brace style.. but I (think) i agree with dom96 that issue is better addressed with IDE rendering |
01:47:26 | EXetoC | I think that was the original proposal |
01:47:29 | filwit | Varriount: my main reason for that wasn't that I wanted curly-braces, it was that there's a lot of people that do. But this issue is a "meh, once we have a good IDE no one will complain" thing i think. |
01:47:36 | Varriount | filwit: Hm. Then can you edit your post to reflect your new thoughts? |
01:47:45 | filwit | EXetoC: yeah, Araq originally planned on having both styles |
01:47:53 | renesac | filwit, maybe I should't be saying it, but in 10+ years of python I don't remember any IDE that renders python with braces |
01:48:05 | renesac | well, there is the issue of {} having another meaning, like nimrod |
01:48:05 | filwit | Varrioiunt: i'be been thinking about deleting it entirely |
01:49:30 | filwit | renesac: yes it's true that, in terms of {} effecting adoption, it might still be a good idea to add to the language.. but somehow i doubt it since this is ALL just future speculation anyways |
01:49:46 | renesac | it ends up being a non-issue once the person has to use a language |
01:49:48 | filwit | renesac: might as well spend time writing the IDE rather than adding changing the language |
01:51:01 | renesac | and yeah, you might make Araq's syntax-agnostic IDE dream true |
01:51:02 | filwit | renesac: well my idea wasn't even initially about {} braces.. i just realized that if the code worked like that it would be very easy to market to C#/Java/JS/C++ folks because it looks like a great blend of elements and is consistent that way |
01:52:02 | Varriount | Nimrod will never be palatable to Java people. It's not constrained enough nor OO enough. |
01:52:19 | EXetoC | yeah can't discriminate against narrow-minded people :-) |
01:52:35 | renesac | yeah, and it don't have semi-colons at the end of every line |
01:52:35 | filwit | Varriount: that's not true once we have OOP macros |
01:53:03 | renesac | well, I'm going to write that FAQ entry latter, please remind me |
01:53:17 | filwit | Varriount: which is part of the main drive to these things.. write now i'm making my own OOP macros.. a lot of my code looks like this: "part Foo: var x: int; ..." |
01:53:55 | filwit | Varriount: see, the body follows the ':' symbol, unlike procs |
01:54:25 | filwit | Varriount: and the "body" of types is also different, but in an entirely different way |
01:54:47 | renesac | 'part' is supposed to produce a proc, or is opening a new block? |
01:55:16 | renesac | like a macro or block statement, that also uses ':' , so it is consistent? |
01:55:26 | * | r0b2 joined #nimrod |
01:55:42 | filwit | it's produces a type, and edits the incoming procs (adds a 'this' param, handles special pragmas, etc).. it also injects code based on an editor-generated json file ;) |
01:55:56 | renesac | hum, right |
01:56:40 | filwit | 'part' stands for 'application part' because most of "what" a part actually is is defined in the editor |
01:58:02 | filwit | this is much of the reason all this is considered non-important to me actually.. see, I really like C#/Java OOP idioms, at least in defining things |
01:58:04 | Varriount | filwit: Is this also related to your game engine? |
01:58:43 | renesac | seems good (I already saw your prototype image), but I'm afraid of your sense of style |
01:58:47 | renesac | ^^' |
01:58:47 | filwit | Varriount: yes |
01:59:38 | Varriount | renesac: It occurs to me that a lot of objections programmers make against trying new languages are very similar to the objections that 6 year olds make against trying new food. |
02:00:16 | filwit | Varriount: only because there's a lot of time it takes to switch languages |
02:00:34 | filwit | Varriount: which removes some of the wit from your jest, good sir |
02:01:16 | renesac | well, one of the reasons I decided to try nimrod over rust was the python like syntax |
02:01:45 | renesac | and because it seemed a little more stable |
02:01:55 | filwit | renesac: yes, and much like your attraction to style, others are attracted to C-like style and OOP. Now lets compare markets... |
02:01:55 | Varriount | filwit: But it does not remove the fact that programmers will still completely reject things out of hand. |
02:02:10 | Varriount | filwit: Also http://www.marco.org/2012/06/29/php-addiction |
02:02:29 | filwit | renesac: the point is, doing things for demonstrable benefit, even if it's only nit-picking, is the _direction_ we should take |
02:03:15 | filwit | Varriount: this is why it's important to have attractive features to "the most" people if your goal is to gain in popularity |
02:03:22 | renesac | I don't really think style is the main thing holding back nimrod |
02:03:39 | filwit | renesac: oh, deer-god, neither do I |
02:03:44 | filwit | dear** god |
02:03:53 | filwit | not.. a deer god.. you know what i mean.. |
02:03:53 | renesac | I also programmed in D for a time, and still program in C, even if I don't like this syntax |
02:03:58 | renesac | lol |
02:04:27 | renesac | and people jumped in python, ruby, etc, even w/o the braces |
02:05:20 | filwit | i don't really mind syntax oddities that much, but when things are inconsistent, it makes it harder to _learn_ and that's what I care about (because a) i need scripts easy-to-learn-as-possible, and b) adoption potentially means funding) |
02:05:51 | renesac | nimrod syntax is different from it's main contenders (D, rust, c++11, etc) |
02:06:03 | renesac | yeah, I agree about not liking inconsistencies |
02:07:24 | renesac | and wanting a simple and small language, that is still succinct and powerful, but that is a though balance |
02:10:51 | fowl | filwit, hows your game engine thing coming |
02:10:56 | Demos | I found nimrod quite easy to get into, I dont know it as well as I know c++ but still. And I had no experience with anything that had a non-c-ish syntax |
02:11:18 | filwit | i deleted my forum post, but i posted a git of it as a backup: https://gist.github.com/PhilipWitte/9317301 |
02:11:31 | filwit | in case anyone still wants to leave a comment, do so there |
02:12:25 | filwit | fowl: it's coming along, i still have some major piece to finish. I want to release code when it can rendering imported models (at least) from Blender and the editor can-drop things onto a Stage |
02:13:34 | filwit | fowl: i'm still working on the Blender exported and much of the rendering pipeline, plus i would also like it to animate from Blender, and I haven't even started on that yet (though it shouldn't take more than a couple of solid moths). |
02:14:35 | filwit | fowl: for the last little while i've been setting up how the editor talks to the scripts macro (including trying to fix bugs in my way), and now things are going pretty smoothly there |
02:15:43 | filwit | fowl: i'm thinking at first I may try and make a GUI system or Art program as a way to build-up on of the core features (since the GUI will be built just like game-object prefabs) |
02:15:45 | fowl | what do you use for importing assets |
02:15:54 | filwit | json |
02:15:56 | filwit | atm |
02:16:02 | filwit | will be binary eventually |
02:16:02 | fowl | i mean importing models |
02:16:10 | filwit | my own file format |
02:16:17 | filwit | still under dev |
02:16:23 | fowl | why your own |
02:16:27 | filwit | it's just a python blender script |
02:16:39 | filwit | cause the other's have bugs and don't support everything |
02:16:41 | fowl | use assimp it can handle most formets |
02:17:43 | filwit | FBX isn't supported perfectly on BLender due to licensing issues (they write their own), though i hear this is getting better. Collada doesn't support some basic things either, so just to be safe I'm making my own so i can grab any data i need. |
02:17:54 | filwit | fowl: assimp? |
02:17:58 | filwit | let me look into it |
02:19:12 | filwit | Last time i checked, Collada blender exports didn't support multiple UV laters, and FBX-SDK is iffy with open-source software |
02:19:24 | filwit | but i only really heard that about FBX and didn't look into it |
02:19:31 | * | xenagi joined #nimrod |
02:19:35 | filwit | still, writing and model exporter really isn't hard |
02:19:57 | Demos | I would not use Collada, I have heard horror stories |
02:20:11 | filwit | UV layers** |
02:20:36 | fowl | filwit, http://assimp.sourceforge.net/main_features_formats.html |
02:21:10 | filwit | Oh AC3D, how i miss you.. |
02:21:42 | filwit | fowl: so does assimp convert .blend files to .dae files correctly? |
02:22:10 | filwit | fowl: cause it's possible i could just use openCollada, but I don't really trust that based on past experience |
02:22:12 | fowl | i dont know |
02:22:40 | fowl | its well-tested though, been around forever, and i have a wrapper for it :p |
02:23:05 | filwit | fowl: okay i'll look into it more then |
02:29:55 | filwit | fowl: this looks promissing.. dunno how i've never heard of this before |
02:30:03 | filwit | promising* |
02:31:12 | filwit | fowl: looks like it support opening up .blend files directly and reading their bone-data, and supports multiple UVs and stuff.. nice. thanks for the tip. this could save me some time |
02:31:33 | filwit | fowl: especially if you already have a wrapper for it :D |
02:31:37 | fowl | for sure |
02:32:22 | filwit | how completely would you say your wrapper is? |
02:32:52 | filwit | (i'm about to try it, just asking |
02:34:23 | fowl | i thought it was complete, looking at it now it only has 5 functions.. i'll check it again |
02:34:37 | fowl | i have an example usage in fowltek/musings/nim3d |
02:34:43 | filwit | k |
02:35:37 | Varriount | filwit: I do agree that colons for type blocks and other block-like constructs should be acceptable (possibly optional) |
02:39:10 | * | amitp joined #nimrod |
02:40:05 | Varriount | filwit: How do you plan for your engine to cover 2d stuff? |
02:40:14 | filwit | Varriount: i think you're mostly right about programmers not wanting to learn new languages, but this is exactly why i think these inconsistencies are important for adoption. The easier things for the most people to learn, but less friction your going to have in building a fanbase |
02:40:16 | renesac | Varriount, why? |
02:40:21 | fowl | Varriount, 2d is peasant dimension |
02:40:54 | Varriount | renesac: fits in with other block statements (block, if, when, etc) |
02:41:11 | renesac | I already explained that things that have colons when introducing blocks, also have colons when typed in a single line |
02:41:12 | filwit | Varriount: with 2D transform constructs rendering in an orthographic camera |
02:41:20 | renesac | type, var, etc, don't follow this rule |
02:41:59 | fowl | we need a lispy syntax anyways |
02:42:25 | fowl | (let (s "hello")) (echo s) |
02:42:26 | renesac | of course, the ':' is a bit redundant when you have blocks defined by identation after them |
02:42:28 | filwit | renesac: so possibly the best solution is to allow all ':' be optional |
02:42:35 | Varriount | Here's a crazy idea that might make for a neat macro - use type declaration syntax to create proc types |
02:42:56 | renesac | I'm not sure if it is the best, as a bit of redundancy sometimes help |
02:43:10 | renesac | that is why python kept the ':' after 'if' |
02:43:12 | renesac | and etc |
02:43:21 | filwit | Varriount: that's kinda my attempt with the unify : thing.. |
02:43:25 | renesac | there is a guido blog post about that |
02:44:05 | filwit | renesac: i personally think my above code (type T object: BODY) is the best so far |
02:45:26 | filwit | renesac: but here you have to enforce the use of ':', mainly because of procs |
02:46:45 | Varriount | https://gist.github.com/Varriount/9317670 |
02:46:46 | renesac | you remove the '=' and put a ':'? |
02:47:22 | filwit | Varriount: what's even the point of the 'type' if everything's gunna be under it accept global vars :P |
02:48:11 | filwit | renesac: it's exactly like my earlier proposed solution only it removes the '=' alltogether (was brought up by Araq) |
02:48:19 | Varriount | filwit: I dunno. But it's not like that syntax is all that different from the alternative |
02:49:03 | filwit | oh wait, dur guys.. this is way the best syntax.. you don't even need {.pragma.} brackets anymore |
02:49:07 | filwit | just... |
02:49:11 | filwit | type Foo |
02:49:14 | filwit | final |
02:49:17 | filwit | object: |
02:49:21 | filwit | a, b: int |
02:49:32 | filwit | or.. |
02:49:36 | renesac | too many lines and indentation |
02:49:39 | filwit | type Foo final object: .. |
02:49:57 | filwit | renesac: all the returns are optional |
02:50:14 | filwit | renesac: just goes till it hits the _required_ : |
02:50:15 | renesac | there you also added a block w/o : |
02:50:32 | renesac | after 'Foo' |
02:50:52 | Varriount | filwit: Updated the gist. |
02:51:18 | Varriount | Maybe we should just have a community Gist to put random syntactical musings on. |
02:51:23 | filwit | renesac: not a block.. just all whitespace is ignored before the : and only symbols are considered |
02:51:38 | filwit | Varriount, on sec |
02:51:45 | renesac | blocks w/o ':' are already allowed when it don't cause ambiguity... |
02:52:03 | renesac | and that is what you are trying to remove with that syntax.. |
02:52:21 | renesac | *when it don't causes ambiguity in one line |
02:52:38 | Varriount | *doesn't cause ambiguity |
02:52:44 | Varriount | :3 |
02:52:48 | * | ddl_smurf quit (Quit: ddl_smurf) |
02:52:50 | renesac | ^^" |
02:53:27 | renesac | I often forget to use " doesn't " , sorry |
02:53:46 | Varriount | renesac: I'm just nitpickin' for fun |
02:53:57 | filwit | renesac: no i'm trying to make thing consistent and simpler ultimately. If forcing the : mean we can remove the {. .} syntax altogether, i thinks it's a valid exchange in the name of consistency, especially when it also unifies the type/proc/if/else/custom-macro/ets |
02:55:05 | * | amitp left #nimrod (#nimrod) |
02:55:18 | Varriount | filwit: One thing you need to keep in mind is how much stress the compiler and it's associated parts would have to pick up, handling these syntactic changes. |
02:56:05 | filwit | Varriount: i was never considering doing this in the short term |
02:56:40 | filwit | Varriount: the syntax works as-is, and there's more important things to fix for adoption than syntax. |
02:56:56 | filwit | Varriount: i'm just trying to influence the future mate :) |
02:57:04 | Skrylar | does anyone happen to have an opinion on TDM-GCC or MinGW |
02:57:09 | Varriount | filwit: I know. |
02:57:20 | Varriount | Skrylar: Aren't they the same? |
02:57:23 | renesac | 'type Foo final, noinit ref object of something:' is difficult to parse visually, IMHO |
02:57:26 | renesac | w/o separators |
02:57:26 | filwit | Skrylar: what about them? |
02:57:35 | Skrylar | Varriount: TDM-GCC used to actually support win64 where mingw didn't |
02:58:02 | Varriount | Skrylar: http://mingw-w64.sourceforge.net/ |
02:58:04 | renesac | and araq don't like this go style type declarations |
02:58:53 | Varriount | renesac: I can't say I blame Araq, Go type declarations make my eyes water. I'm sure I'd get used to it if I used Go often however... |
02:58:59 | filwit | renesac: not when there's color coding, which is easy to setup to distinguish when there's consistent rules |
02:59:18 | fowl | lol |
02:59:40 | renesac | and pragmas also use ':' |
02:59:47 | filwit | renesac: you can highlight the first word after 'proc' as bright red (like github) and then each word until : like and attribute |
03:00:03 | fowl | unsigned int x = 0; x -= 1; // x is now 4294967295 |
03:00:04 | fowl | c is silly |
03:00:29 | filwit | integer math is sill |
03:00:31 | filwit | silly |
03:00:39 | renesac | fowl, it's how your hardware works |
03:00:57 | Varriount | filwit: If there is one thing I think detracts from nimrod, it's the unsigned int stuff. |
03:00:58 | filwit | fowl: nevermind i thought you where saying something else |
03:01:40 | filwit | Varriount: there's good argument for that though, so that should stay |
03:02:00 | Varriount | I know that Araq doesn't like it (and personally, I don't see the need for it unless interfacing with C stuff) but I've seen many people stumble over it. |
03:02:12 | Skrylar | yay integer math |
03:02:17 | Varriount | filwit: I'm not saying it should be removed, quite the opposite. |
03:02:20 | Skrylar | i was learning how to do fixed-precision math earlier this week |
03:03:27 | Skrylar | filwit: i have not actually seen very many good arguments for why unsigned is bad; when i asked earlier, i was given references to how C++ handled it poorly but not how unsigned is the devil |
03:04:00 | Skrylar | I think Araq's mentioning subtraction with length values was one of the only concrete reasons, because blah.len()-5 could cause integer wrapping... but using a signed type doesn't actually eliminate the threat of wrapping, it just delays it to a further edge case |
03:04:33 | fowl | ah the unsigned stuff happens in nimrod too |
03:04:43 | renesac | well, it is said to be used unnecessarily everywhere when people want positive stuff |
03:04:55 | Varriount | Skrylar: Mainly because it's used by many for the sake of representing positive/natural numbers, which causes people to miss the fact that it wraps |
03:05:11 | filwit | Skrylar: i've heard it can have a negative impact on performance if people are constantly casting from uint->int, but i'm not entirely sure though. Probably shouldn't say 'demostrable' without knowing myself.. but araq always seemed to make good arguments about it. Just can't remember them. |
03:05:13 | Skrylar | Varriount: that just sounds like an education problem to me :/ |
03:05:32 | fowl | Skrylar, nimrod's `..` iterator guards against that though, iterating from 0 .. -1 will not run |
03:06:01 | Skrylar | casting between floats and ints is bad for performance too, but you don't see people banning floats |
03:06:08 | renesac | Skrylar, I'm not sure if there exists such an edge case, as MAX_INT < abs(MIN_INT) |
03:06:17 | * | almo140 joined #nimrod |
03:06:19 | renesac | so a single subtraction will still be negative |
03:06:41 | Skrylar | what does a 'negative length' actually mean? |
03:06:52 | renesac | an error |
03:06:52 | Skrylar | i usually tended to use unsigned when a negative value makes no actual sense |
03:07:17 | Skrylar | especially if a language has try/catch/raise, then i doubly don't use magic return numbers |
03:07:19 | filwit | Skrylar: you don't normally cast from float to int, unless you really have too. but might use uint more? possibly.. |
03:07:30 | Demos | compilers are allowed to assume that signed arithmatic does not overflow, not so with unsigned. You usually do not want mod2 arithmatic |
03:07:45 | filwit | Skrylar: yes, i have the same habit with unit in other languages |
03:07:46 | renesac | Skrylar, that is exactly what Araq is against |
03:07:55 | fowl | well.. if you have the code "for x in 0 .. len(something)-5" and len returned unsigned and it wrapped you would have a bad time, since len returns a signed int the index can go negative and keep the loop from running |
03:08:13 | renesac | uint should be used when you are not really doing normal arithmetic with the numbers |
03:08:16 | Skrylar | renesac: using exceptions or magic return codes? |
03:08:24 | renesac | no |
03:08:30 | renesac | [00:06:52] <Skrylar> i usually tended to use unsigned when a negative value makes no actual sense |
03:08:31 | Demos | uint is for when you want bits, not numbers |
03:08:32 | filwit | Skrylar: but Nimrod does have uint, I wouldn't even mind having all uint stuff in 'unsigned' module either really |
03:08:40 | fowl | ^ Demos |
03:08:58 | Skrylar | i still use it that way, because it makes more sense to me :\ |
03:09:21 | renesac | well, nimrod has 'Natural' and 'Positive' types |
03:09:34 | renesac | just int ranges |
03:09:36 | Skrylar | at that point you should just rename the type to bits |
03:09:37 | Skrylar | :P |
03:09:39 | Demos | you never need the "extra numbers", if the biggest signed type is too small you probably need a Arbitrary-precision lib anyway |
03:09:57 | renesac | Skrylar, nimrod has a type called 'byte' as alias to 'uint8' |
03:10:05 | Skrylar | Demos: disagree; netcode uses uints, as do hardware interfaces and the like |
03:10:17 | Demos | well that is bytes right? |
03:10:37 | Demos | or if you might have like 1s complement numbers or something |
03:10:38 | Skrylar | Demos: "nobody needs the extra numbers" is a statement born out of the "i have 12gb ram so what is wasting a few bytes" mentality |
03:10:49 | Skrylar | stuff like MIDI channels *do* want the extra numbers |
03:10:50 | filwit | bbl folks |
03:11:11 | renesac | Demos, the 'extra bit' is very valuable when you have 8 bits per value |
03:11:52 | Demos | well this is an exception, and they exist. But defaulting to a signed type is a good idea |
03:12:04 | renesac | and even with 32 bits, it is still a useful difference between 2GB and 4GB w/o doubling the space you are using to store the number |
03:12:11 | Skrylar | i agree and accept that there are problems from implicit and careless conversion between signed/unsigned, but i don't agree that unsigned is 'evil' |
03:12:20 | Demos | and if you know you are storing gazillions of these things than go banannas with uint64s or whatever |
03:12:26 | Skrylar | but as i said a week ago, implicit conversion issues are not unique to uints either |
03:12:45 | Skrylar | see TCL which calls it the "shimmering" problem where strings/ints get typecast back and forth |
03:13:22 | renesac | a typecast from int to uint should have no performance impact |
03:13:34 | fowl | Skrylar, but tcl is gross and everything is a string |
03:13:45 | renesac | it should be only a thing to keep the compiler type system happy and blissfully ignorant |
03:14:00 | Skrylar | renesac: there was a link posted here in the log (i don't have it on hand; just did a reinstall) that went in to detail about how C++'s idea of implicit conversion from uint to int causes hidden issues |
03:14:37 | fowl | its in the wiki |
03:14:49 | renesac | well, implicit conversion is bad in many cases |
03:14:52 | Skrylar | though i'm guessing the int/uint problem is similar to the gc/nogc problem; in that there are people who absolutely need real-time code and they will always disagree with GCs |
03:15:00 | renesac | but is safe in a few ones |
03:15:36 | renesac | I wanted nimrod to support those few ones |
03:15:42 | renesac | like uint8 to int |
03:15:53 | Skrylar | you can jank it by writing your own converter |
03:16:09 | renesac | I may try that |
03:16:16 | Skrylar | and as a bonus the converter is scoped, so you can import it selectively without exposing it to external code |
03:16:26 | renesac | I tried to fix it in sigmach.nim |
03:16:33 | Skrylar | I use this in my UTF code a few times, because a codepoint is a uint32 |
03:16:55 | Skrylar | (NB: a utf codepoint *is* actually specced as an unsigned 32-bit value; there is no 'negative codepoint' in 6.2) |
03:16:58 | renesac | but then there was ambiguity between a proc(x:int64) and proc(x:uint64) when given a uint8 |
03:17:38 | Skrylar | all though i use a distinct uint32, which allows me to shield a codepoint from regular math so people don't do stupid things unintentionally |
03:18:04 | Skrylar | "a + b" means nothing to a unicode codepoint afterall :) |
03:18:06 | renesac | I have to try if using a converter has the same problem |
03:18:23 | renesac | Skrylar, yeah, I'm also using a distinct uint32 for my bignum module |
03:18:45 | renesac | for many reasons |
03:18:54 | Skrylar | i like distinct types as a concept |
03:19:07 | renesac | if I get intrinsics working, I may upgrade it to uint64 |
03:19:08 | Skrylar | they work especially well when you're dealing with opaque pointers |
03:19:22 | renesac | and no change in the code that depends on it |
03:19:38 | Skrylar | i do however wish that two distinct pointers didn't cause generic code to get expanded twice |
03:19:56 | Skrylar | e.g. a generic linked list will compile a separate implementation for each distinct pointer even if the C code for both is identical |
03:20:04 | renesac | hum |
03:20:30 | renesac | yeah, this is a problem with the current compiler |
03:20:46 | renesac | hopefully it will be optimized in a not too far future |
03:20:56 | renesac | at least it isn't a inherent language problem |
03:21:57 | renesac | and for hashing, rngs, etc you also want unsigned ints |
03:22:13 | renesac | and with compression, you are dealing with bytes, not numbers, etc |
03:22:13 | Skrylar | I don't think they're going away |
03:22:17 | renesac | yeah |
03:22:19 | Skrylar | they're just shoved in a separate module |
03:23:12 | renesac | not just that, but the compiler still has poor support for them |
03:23:32 | renesac | https://github.com/Araq/Nimrod/issues/936 |
03:24:25 | Skrylar | renesac: Araq mentioned a solution for problems like that in the IRC a while back |
03:24:35 | renesac | (yeah, I know how to work around of all them) |
03:24:38 | Skrylar | it had to do with making a converter for the lit(T) type IIRC |
03:24:56 | renesac | yeah, I did it in my bigint module |
03:25:01 | Skrylar | i think mostly, the unsigned module just needs to get polished up |
03:25:42 | Skrylar | time to wait for gcc to install \o/ |
03:25:50 | renesac | and error messages should point begginers to import the unsigned module |
03:27:48 | Skrylar | probably some spooky message that says to only do that if they really need unsigned types |
03:32:47 | * | xenagi quit (Quit: Leaving) |
03:36:50 | Varriount | renesac: Intrinsics? |
03:38:07 | Varriount | Skrylar: "Warning: Unecessary use of the unsigned module will cause you to be eaten by a grue." |
03:41:11 | Demos | Varriount, that "quote" reminds me of http://eigen.pri.ee/shooter/ |
03:43:33 | Varriount | Demos: Do you think it's sppoky enough? |
03:43:42 | Demos | yes |
03:46:18 | Varriount | Demos: I hate being assigned a 2 1/2 page paper on the weekend, when it's due on Monday |
03:46:45 | Demos | yeah last semester I had programming assignments due on sunday |
03:47:01 | renesac | Varriount, I would need 128bit multiplication |
03:47:55 | renesac | https://gist.github.com/PhilipWitte/9316566 <-- this should be useful as a start point |
03:47:58 | renesac | for me |
04:05:04 | * | BitPuffi1 quit (Quit: WeeChat 0.4.3) |
04:10:37 | Varriount | renesac: The problem with 128 bit ints is that out of all the compilers I know, only GCC running on a 64 bit platform has them. |
04:12:24 | Varriount | Or rather, natively supports them. |
04:15:57 | renesac | yeah... I will see that and other issues |
04:19:23 | * | shodan45 quit (Quit: Konversation terminated!) |
04:40:44 | * | brson joined #nimrod |
05:00:51 | * | rob3 joined #nimrod |
05:02:42 | * | r0b2 quit (Ping timeout: 252 seconds) |
05:02:45 | Varriount | Damn. I got a 70% on my latest Calculus test. |
05:03:25 | Skrylar | is that a good or bad 'damn' |
05:03:44 | Skrylar | (sidenote: i kind of like how foobar2000 does its layout editing. more programs should work this way.) |
05:05:56 | Varriount | Skrylar: A bad one. I studied hard on that test. |
05:06:44 | Varriount | And what's what's worse is that now I'm going to be haunted by that grade for the rest of the day/night. :/ |
05:07:25 | * | brson quit (Quit: leaving) |
05:15:48 | Skrylar | I studied math earlier and then Anki told me to stop |
05:23:20 | * | brson joined #nimrod |
05:23:39 | Varriount | Skrylar: Anki? |
05:25:11 | Skrylar | Varriount: the flash card program? |
05:26:39 | Skrylar | it does this thing where if you go over a limit of cards per day in a subject it tells you to stop, because there's research that shows studying too hard is unhelpful |
05:26:51 | Skrylar | you can bypass it but meh |
05:30:21 | * | BitPuffin joined #nimrod |
05:44:59 | fowl | Varriount, where are you located |
05:49:04 | Varriount | fowl: In the US |
05:49:26 | Varriount | fowl: Do you want me to be more specific? |
05:54:31 | Skrylar | ugh |
05:54:51 | Skrylar | I hate when people bug me about helping them set up cash shop crap for web games |
05:55:18 | Varriount | Cash shop? |
05:55:33 | Skrylar | "only 0.99$ for cosmetic things on your avatar!" |
05:55:43 | Varriount | Oh. Eeew |
05:56:21 | Skrylar | this one guy I know *knows* that I hate cash shops in games, and yet he keeps bothering me about running a server that subsists on selling 1$ cosmetic crap because "oh well people might buy stuff even if they don't stay very long" |
05:56:37 | Varriount | "We're programmers, not robots. Amazingly enough, we *do* have standards" |
05:56:59 | Skrylar | I'm one of those dinosoars that would rather publish a cheap monthly thing than 'free' to play crap |
05:59:51 | Skrylar | I disagree with Joel that SaaS is better; there's usually something you can do to improve a program even when you have everything and the kitchen sink; sometimes that improvement is just moving things to make them more usable or maybe waste less memory |
06:00:10 | Varriount | Joel? |
06:00:14 | Varriount | Skrylar: Well to be fair, most successful MMORPG's are free to play, and require a monthly subscription for premium play |
06:00:17 | Skrylar | the "joel on software" blog |
06:00:34 | Skrylar | ex-microsoft guy |
06:00:44 | fowl | Varriount, just wondering because its about midnight in the midwest |
06:00:46 | Skrylar | Varriount: depends on your definition of 'success' |
06:01:08 | Skrylar | I forget who did MapleStory, NXsomething |
06:01:13 | Varriount | fowl: Yep. I live in the midwest. I'm burning the midnight oil, getting a stupid essay done. |
06:01:26 | Varriount | Er, mideast actually |
06:01:37 | Varriount | VA, to be precise. |
06:01:42 | Skrylar | IMO 'free to play' is basically newb-lube for bad game designers; can't make a good game? lower the standards! |
06:01:44 | fowl | mideast? there is no mideast, only east, midwest and west |
06:02:13 | fowl | Skrylar, the best model is everybody can play free but paying gives you VIP status |
06:02:30 | Skrylar | you mean like FunCom sort of does it now? |
06:03:16 | Skrylar | I don't mind the FunCom method for anarchy online personally; to a lesser extent I don't mind the way they do DLC/Subs in DCUO, all though in all cases I abhor stupid things like charging real money for respecs |
06:03:25 | Varriount | Like RuneScape and Dofus? (The only two online rpg games I've played) |
06:03:37 | Skrylar | Runescapes wasn't bad |
06:03:52 | Skrylar | the worst is when you have 'f'2p, subscription, AND still cash shop the VIPs |
06:05:31 | fowl | vip status means when you want to join a full server some free-player gets booted |
06:05:53 | Skrylar | well DC Univers Online does this thing where they release new content as DLC you can buy, or if you have a sub you just get to go there |
06:06:00 | fowl | oh and they get 50% off the cash items |
06:06:01 | fowl | :p |
06:06:18 | Skrylar | all though they also do that stupid lockbox crap |
06:06:27 | fowl | whats that |
06:06:39 | Skrylar | you know the MANNco crates from valve? |
06:06:54 | Varriount | Skrylar, fowl: After Dofus, I realized that RPG games take up too much of my time, time better spent reading and programming. |
06:07:00 | Skrylar | its basically a ripoff where you get loot in the form of a cash shop box that says "sorry you don't actually get loot, pay real world money to unlock this and get something from the drop table" |
06:07:16 | Skrylar | more often than not its craploot too |
06:07:45 | Skrylar | Varriount: MMOs yeah. I like some offline RPGs still |
06:08:11 | Skrylar | MMOs are one of those weird genres where you can innovate nothing and still get game of the year every year o_O |
06:08:38 | Skrylar | "and this year, we made 50$ DLC which adds two dungeons and pandas!" |
06:09:13 | Skrylar | Sadly you can't make a sandbox MMO or else the Something Awful forums and /b/tards come in and ruin it |
06:10:15 | fowl | the pool has aids |
06:12:37 | Skrylar | lol habbo hotel |
06:12:54 | Skrylar | naaah that was funny at least :) |
06:13:07 | Skrylar | the first time anyway |
06:14:46 | Varriount | Skrylar: I like RPG's that have a good story. Then again, almost the only games I do like are ones that have good stories. |
06:15:06 | Varriount | Probably comes of reading too many books. |
06:16:28 | * | isenmann joined #nimrod |
06:16:47 | Skrylar | i always thought rpgs were sad to develop because you can't enjoy them as the developer |
06:16:55 | Skrylar | you already know everything about the story |
06:18:41 | Varriount | Hm. Well, you could probably enjoy them in the same way an author enjoys people reading a book he/she has written. |
06:22:24 | Skrylar | tonight will be the first time i actually use nimrod on windows |
06:22:30 | Skrylar | i had just been using putty to a linux box this whole time |
06:22:44 | Skrylar | also I'm curious |
06:23:04 | Skrylar | Why do the instructions say to checkout csources? Why is that not just a git-submodule |
06:23:46 | Skrylar | oh. the instructions now say to use --depth 1. maybe thats why :derp: |
06:24:47 | Varriount | Skrylar: Technically, you don't have to use csources, except if running on a previously unbooted platform |
06:25:05 | Skrylar | Varriount: technically, i need to prod araq with toothpics |
06:25:20 | Skrylar | "unknown operating system: mingw32_nt-6.1" |
06:25:45 | Varriount | Skrylar: That's odd, I use Mingw, and it works for me. |
06:25:52 | Varriount | (Yes, I'm on windows) |
06:32:03 | Skrylar | Oh good. Trying out this open source notekeeping thingy and it locked up. |
06:32:23 | Skrylar | The best thing you want out of programs you trust to store copious notes is that they lock up in the first ten minutes of use *nodnods* |
06:32:43 | Varriount | Skrylar: What is the software? |
06:32:56 | Skrylar | mindraider |
06:33:17 | Skrylar | i was giving it another try because semantic web software sounds like a cool idea |
06:34:09 | fowl | Skrylar, git submodules are difficult to maintain |
06:34:10 | Varriount | Looks like more trouble than it's worth for everyday stuff. Might be useful for projects though. |
06:34:34 | Skrylar | Varriount: more trouble than its worth period. lol |
06:34:55 | Skrylar | apparently i managed to create a corrupt node that locks up the program, and there's no "delete" option |
06:35:02 | * | Demos quit (Read error: Connection reset by peer) |
06:36:10 | Skrylar | Varriount: personalbrain had a neat idea where its basically a concept map stuffed in a database, so you can click'n'drag to make a new topic and it shows how they are related |
06:36:22 | * | almo140 left #nimrod (#nimrod) |
06:36:38 | Skrylar | which is kind of a neat idea, since you could just click through the web from one thing to the next... but 200$ for a subscription license is "no" |
06:38:54 | Varriount | Skrylar: I'll never understand why software licenses are so high (for individual users at least) |
06:39:23 | Varriount | I can see 200$ being a reasonable price for say, a business, possibly. |
06:39:30 | Skrylar | Varriount: not very many people tend to buy information management tools, and they tend to require a lot of special stuff |
06:39:49 | Skrylar | for instance the outliner i want to make requires a lot of custom code :/ |
06:39:57 | Skrylar | unless i janked it on to libcef i guess |
06:40:30 | Varriount | Skrylar: Heh, I've tried creating a nimrod wrapper for libcef. Don't know if it works though |
06:41:00 | Varriount | One of these days I should have another go at it. |
06:44:44 | Skrylar | i've lost a bit of steam for GUI stuff as of late; i really just want to start doing work that shows a difference |
06:44:54 | Skrylar | writing infrastructure code for six months gets absurdly tedious |
06:45:50 | Varriount | Skrylar: GUI stuff doesn't show a difference? |
06:46:00 | Skrylar | Varriount: haven't gotten to do any of it in a while |
06:46:16 | Skrylar | the ncurses stuff I worked on blocked on the gap buffer code, which blocked on the skutf git |
06:46:32 | Varriount | Skrylar: SDL2? |
06:46:48 | Skrylar | you still need font layout code and unicode-safe text buffers |
06:46:56 | Skrylar | SDL just gives you a place to render on |
06:48:22 | Skrylar | IUP or Wx are decent targets for wrapping, though those don't really solve many of my troubles lol |
06:48:39 | Varriount | Skrylar: If it makes you feel any better, your skutf stuff will probably help with a nimrod implementaion of diff-match-patch |
06:48:56 | Skrylar | i need to poke araq about merging that |
06:56:59 | * | nequitans_ joined #nimrod |
06:57:26 | nequitans_ | Hi all, I wrote a 'consider nimrod' blog post: http://geetduggal.wordpress.com/2014/03/03/consider-nimrod/ I'd appreciate if you notice any inaccuracies/corrections |
06:58:36 | * | Skrylar puts on glasses |
07:00:50 | Skrylar | I'm not sure Julia was really ever intended for low-level coding |
07:02:15 | Skrylar | i am horrified that you have used string concatenation in a call to shell calls (but you did say it was just a shell script replacement) |
07:03:12 | Skrylar | nequitans: might want to be more specific about how the iterators work |
07:03:26 | Skrylar | " Nimrod uses a uniform call syntax that implies these two calls are equivalent:" |
07:03:44 | Skrylar | which then shows the iterators, which have a different syntax (maybe i'm being nitpicky) |
07:07:38 | nequitans_ | Skrylar, so maybe I shouldn't use iterators as an example of the uniform call syntax? |
07:08:51 | Varriount | nequitans_: Spelling error, "after a nearly three weeks" |
07:09:36 | nequitans_ | Varriount, thankx |
07:09:44 | fowl | nequitans, in the TGroup example you do not need to importc each field (unless they have a different name than the nimrod name) |
07:10:05 | nequitans_ | (I'm making corrections as you give them) |
07:10:16 | Varriount | nequitans_: No problem. I'm still looking. |
07:10:55 | fowl | nequitans, matrixToGroup(openarray) seems like a weird example for importc |
07:11:05 | nequitans_ | fowl, thanks -- changed |
07:11:55 | Skrylar | nequitans_: i wouldn't use iterators as a demonstration of uniform call syntax because while the code is correct, iterators aren't really the same thing as calls |
07:12:03 | nequitans_ | fowl, lol, yea, actually i'm finding a maximum density subgraph of a matrix using network flows iteratively, |
07:12:06 | Skrylar | the syntax to invoke them is the same, but they're kind of a fancy inline |
07:12:51 | fowl | nequitans, i mean because it has openarray |
07:13:03 | Skrylar | Varriount: got it working using the bat file; odd that nimrod doesn't work inside msys though |
07:13:25 | Varriount | Skrylar: You mean the msys shell? |
07:13:45 | Skrylar | Varriount: yep, i couldn't run the bootstrapped nimrod because it crashed with a 'cant create process' error |
07:13:58 | Skrylar | wait |
07:14:14 | Skrylar | how did the mingw installer install msys without actually setting the directories for anything oO |
07:14:30 | Varriount | Skrylar: Be sure to post bug reports. |
07:14:44 | Skrylar | Varriount: that was stupidity in the msys installer |
07:16:24 | Varriount | Skrylar: What I did to install msys with mingw64 was to first install mingw64, install msys in a separate directory, copy msys over to the mingw dir, and then adjust the PATH variable |
07:16:35 | nequitans_ | fowl, what's the issue with the openarray? |
07:16:42 | Skrylar | i just installed the 32-bit version, Varriount |
07:16:50 | Skrylar | I don't really need 64-bit builds for the time being |
07:17:18 | Varriount | Skrylar: Well, if you need help setting up a dual build, I'm available |
07:17:27 | Skrylar | alright |
07:17:29 | fowl | nequitans, because of the way it expands to (T*, int) |
07:17:54 | Skrylar | pet peeve: koch mentions gnu readline |
07:18:04 | Skrylar | someone ought to add libeditline :) |
07:18:09 | Skrylar | the BSD-equivalent |
07:18:13 | Varriount | nequitans: Calls are actually pass by reference or pass by copy (it's determined by the nimrod compiler) |
07:18:32 | fowl | nequitans, that can be useful when a c library uses that pattern to pass arrays around, but its not explained in your article (nor should it be) i just think its confusng. i would use printf or something like that as an example |
07:18:47 | Varriount | You force one or the other by using a ref type, a pass by reference pragma, or a pass by copy pragma |
07:19:06 | Varriount | At least, that's what I've been told. |
07:19:15 | nequitans_ | Varriount, I see -- so how does the compiler determine which one to use then? |
07:19:25 | Varriount | nequitans: No idea. |
07:19:36 | nequitans_ | kk |
07:19:44 | Varriount | nequitans: Again, I might be wrong. |
07:19:47 | fowl | nequitans, the rule is something like if this type is bigger than 8 bytes pass by reference |
07:20:33 | nequitans_ | but in my example the integer passed as a var is modified, does that mean it's more than 8 bytes? |
07:21:36 | Varriount | nequitans_: "offers the programmer type classes" needs to have a ' - ' after it, or possibly a comma |
07:21:45 | fowl | nequitans, by using 'var int' you enforce pass-by-reference |
07:21:49 | nequitans_ | i think i might get rid of the link to C example |
07:21:55 | nequitans_ | fowl, I see |
07:22:59 | fowl | since you write about 'traits' so much you should throw in some stuff about typeclasses |
07:23:14 | fowl | oh nm i see that part now |
07:24:06 | nequitans_ | fowl, ah, yea, i'm curious as to your thoughts on that -- this relationship to traits has just been brewing in my mind the last few days and I'm not sure I'm quite solid on it, but i def have experienced them causing library design difficulties in a language like scala |
07:25:27 | Varriount | nequitans_: You mention Rob Patro showing you nimrod - is there a specific link to that? |
07:26:24 | nequitans_ | Varriount, he and I just had in person discussions |
07:26:40 | Varriount | Varriount: Ah. |
07:26:52 | Varriount | *nequitans_ |
07:27:06 | Varriount | Sorry, it's 2:30 in the morning. |
07:27:42 | nequitans_ | lol |
07:27:45 | nequitans_ | you're in my time zone :) |
07:27:50 | nequitans_ | (i'm in pittsburgh) |
07:28:58 | Varriount | Virginia. |
07:28:58 | nequitans_ | fowl, so for the openarray example (i removed it from the current draft of the post), is there a better more idiomatic way to do that link to C? |
07:30:10 | fowl | nequitans, actually that is a pretty awesome idea for interfacing with C, i just dont think its a great example |
07:32:02 | nequitans_ | i see -- yea, i was ambivalent about putting it as an example, but it also took me some time to figure it out through trial and error so i thought i'd post it. but i agree, it's a little confusing and i don't like putting the array[0...1000000] b/c it's more of an idiosyncrasy that would cause confusion |
07:32:16 | fowl | in my wrappers i leave the function as (T*, int) but honestly that is cumbersome, this would make passing array/seq to these functions easier than calling them with (array[0].addr, array.len) |
07:32:18 | nequitans_ | i ended up removing it |
07:33:13 | nequitans_ | so what do you guys think about my brief comparison with other langs? |
07:33:52 | Varriount | nequitans_: Pretty good. Could use more examples (typeclasses) but I'm probably just nitpicking. |
07:34:11 | nequitans_ | Varriount, noted. |
07:34:30 | Varriount | By examples, I mean, not of just nimrod, but of other langs |
07:34:40 | nequitans_ | I see |
07:35:41 | fowl | jesus.. chromium is dominating my memory |
07:38:08 | Varriount | fowl: It's a web browser, what do you expect? |
07:39:03 | fowl | maybe it realizes "hey im using all this guys memory and swap maybe i should back off a bit" |
07:39:15 | Varriount | fowl: How many tabs do you have open? |
07:39:22 | fowl | hundreds :( |
07:39:35 | Varriount | fowl: Install the toomanytabs extension. |
07:39:51 | Varriount | Either that, or go to a support group for tab abusers |
07:40:04 | Varriount | "Tabaholics Anonymous" |
07:41:05 | fowl | ha |
07:41:14 | nequitans_ | i bet fowl has a memory map in his brain for how to get to a specific tab instantly. yet the computer can't handle the tabbage! |
07:41:25 | fowl | i do |
07:41:36 | fowl | i keep the tabs grouped nicely and all |
07:41:54 | nequitans_ | i've been using pinned tabs a lot recently |
07:42:04 | Varriount | Anyone here actually read how swap memory works? It's quite interesting. |
07:42:41 | Varriount | I've read how it's done in Windows, I don't know how linux does it though. |
07:42:45 | fowl | Varriount, 6000 years ago god gave us linux, i havent questioned it since |
07:43:17 | Varriount | fowl: That's the thing. I've found many books about the internals of windows. Not so many about the internals of linux. |
07:44:00 | fowl | because you can access the code |
07:44:09 | fowl | and read it yourself :p |
07:44:27 | Varriount | fowl: Shame on you. You know how much effort it takes to both read *and* understand code. |
07:46:13 | fowl | i opened chromium again, i have three tabs open. there are 40 chromium processes open now with memory usage ranging from 3.7% to 0.8% |
07:46:44 | Varriount | fowl: How many extensions do you have installed? |
07:48:29 | fowl | 5 |
07:49:03 | * | brson quit (Ping timeout: 244 seconds) |
07:50:21 | Varriount | fowl: Maybe they are zombie processes? |
07:50:26 | nequitans_ | thanks for your input on the post! i made the mods and i'll try to add some more examples as time passes. i'm considering it a 'living' document :-P |
07:50:46 | fowl | Varriount, no i checked after i closed it, they were all closed |
07:50:47 | * | brson joined #nimrod |
07:50:59 | fowl | no prob nequitans |
07:52:57 | Varriount | nequitans_: Yeah, it's great. |
07:53:35 | Varriount | nequitans_: Don't forget to post it on reddit when you feel that it's ready |
07:53:52 | Varriount | Oh, an hacker news |
07:55:05 | Varriount | fowl: I only have a single chrome process open per tab, and per extension. |
07:55:32 | Varriount | Well, plus the 1-3 others that make up the core stuff. |
07:55:40 | fowl | you're using chrome or chromium |
07:55:47 | Varriount | Oh. Chrome. |
07:56:16 | fowl | oh i have 2 gigs of updates to install. nice |
07:56:28 | Varriount | fowl: Nom nom |
07:57:41 | Varriount | fowl: It could be worse, at least it ain't Visual Studio |
07:57:58 | fowl | tr00 |
08:01:57 | nequitans_ | Varriount, thanks -- will do |
08:02:02 | nequitans_ | Speaking of chrome |
08:02:12 | nequitans_ | I've been using this little tiny Chromebook 11 for a while now |
08:02:24 | nequitans_ | as an 'additional computer' |
08:04:20 | nequitans_ | aside from better performance (which you can't ask for too much for a $270 comp), I would really like chrome desktop apps to allow me to adjust the font size. e.g I'm using CIRC right now and i'm in this tiny font |
08:06:38 | * | zielmicha quit (Quit: Connection closed for inactivity) |
08:14:50 | Varriount | nequitans_: So is there anything you feel that Nimrod could improve upon, without drastically altering the language? |
08:16:36 | Varriount | nequitans_: Also, I think I read your "pypy vs shedskin vs ..." a while back, it was pretty good. |
08:18:11 | nequitans_ | Varriount, lol, that was a big what i call 'fungus' -- i was trying to get some really simple code for a class project to run fast in python and then a sleepless night of tests :-P |
08:18:34 | nequitans_ | re: Nimrod improvements |
08:19:02 | nequitans_ | it's not a really big issue |
08:19:04 | nequitans_ | but |
08:19:42 | nequitans_ | if the pass by ref/pass by val issue could be made more clear. i.e. it helps me to know as programmer that when i'm passing in a matrix class it's just really a pointer to it rather than a copy |
08:20:24 | nequitans_ | btw |
08:20:44 | Varriount | Yeah. That's a documentation issue that should really be made more clear. You don't want to pass a huge struct and end up doubling memory. |
08:20:57 | fowl | there is a pragma for that |
08:21:18 | fowl | Varriount, why do people think this happens? |
08:21:37 | Varriount | fowl: Because C/C++ |
08:21:53 | nequitans_ | i also noticed that i had to import modules at the root level that i never actually included, but included in some subordinate module and now it oddly requires to be included in the root module |
08:21:56 | fowl | nimrod has its own semantics |
08:22:00 | Varriount | fowl: I think he's talking about the behavior when no pragma/var/ref is forcibly used. |
08:22:11 | nequitans_ | (maybe this is part of the design, but it took be by surprise) |
08:22:26 | fowl | nequitans, ah that is fixed now |
08:22:52 | nequitans_ | fowl, cheers |
08:22:58 | fowl | nequitans, that is because when a generic is instantiated your module might not have access to the module that generic needs, this is what the export stmt is for |
08:23:56 | fowl | so if you have this problem still, complain to the librarymaster to fix it |
08:25:34 | fowl | Varriount, since parameters are const by default, everything can be pass-by-ref and still be secure that the parameter wont be modified |
08:26:16 | nequitans_ | fowl, ic |
08:26:17 | * | brson quit (Quit: leaving) |
08:26:34 | Varriount | fowl: That fact should still be made clear somewhere |
08:27:16 | Varriount | Also, if that fact is so, why do we have modules with ref versions of every type? |
08:27:39 | Varriount | See: The original asyncio module |
08:27:55 | fowl | Varriount, do you know what ref is? |
08:28:05 | fowl | its a managed pointer (garbage collected) |
08:28:08 | Varriount | fowl: It's a traced reference. |
08:28:14 | fowl | "ref" is nothing to do with pass by reference |
08:29:19 | Varriount | fowl: I thought that a ref was analogous to a pointer in other languages. |
08:30:47 | fowl | i guess so |
08:30:50 | fowl | this is #nimrod though |
08:30:58 | fowl | this. is. #nimrod! |
08:31:04 | * | fowl kicks Varriount into the pit |
08:31:18 | fowl | good night |
08:32:02 | Varriount | Good night. When can I get out of the pit? |
08:34:45 | Varriount | nequitans_: "When C came about, preprocessors were a good idea. Then again, so was paper tape readers and pet rocks. " |
08:37:03 | nequitans_ | Varriount, lol, i remember this from some internets post a while back, tho i forgot what it was about |
08:37:17 | nequitans_ | something with Jav |
08:37:18 | nequitans_ | *a |
08:37:26 | Varriount | nequitans: "Why I am not a Java Programmer" |
08:37:50 | Varriount | I've read the article before, but it always manages to put a smile on my face. |
08:38:16 | nequitans_ | lol, yea, that's it |
08:38:37 | Varriount | I know its arguments aren't 100% substantial, but... it's such fun to read. |
08:39:43 | Varriount | I've used Java before and still do, but it's has always felt entirely too restrictive, like a nuerotic, OCD businessman |
08:39:54 | Varriount | *it has |
08:42:02 | nequitans_ | Yea, I think that in that respect Scala esp. brought a fresher air to the JVM world. When I first started coding in Scala for a while, I wondered: will Java catch up to this or will a language like Scala just take over? |
08:43:27 | Varriount | nequitans_: I haven't tried Scala yet. I've had the manual/guide on my reading list for a while. |
08:44:08 | Varriount | I'd like to think that I'm more open to learning new programming languages than most programmers. If nothing else, I read the manuals/tutorials |
08:44:27 | nequitans_ | It's a pretty solid language, but I've def run into efficiency issues. In some cases, it ran on par if not *faster* than my C code. But in other cases (esp with many threads on multicore machines, it was prohibitively slow) |
08:45:08 | Varriount | nequitans_: Such is the problem with JIT compiling, especially when the one for the JVM was designed for Java specifically. |
08:46:30 | Varriount | nequitans_: I've always wondered why you can't JIT compile (or rather, optimize) assembly code, eg, C/C++/Any other statically compiled language |
08:47:30 | Varriount | Is it because assembly is just too low-level to be optimized at run-time? |
08:47:56 | nequitans_ | Varriount, yea, I think it's a good quality of a computer scientist to be able to pick up on a language's strengths and weaknesses and be able to use it effectively. I used to be on the DSL train: a good computer programmer/scientist adapts/develops DSLs for all sorts of useful tasks and can live in that world. Now I think that a single language could possibly allow the user to express the DSLs they want efficiently -- that's w |
08:48:12 | nequitans_ | re: JIT assembly, that's an interesting idea |
08:56:18 | Varriount | nequitans_: Ah, here's a paper that explores the subject. I don't know if it's the same paper that I once saw, but it's related -> http://groups.csail.mit.edu/commit/papers/03/RIO-adaptive-CGO03.pdf |
09:00:39 | nequitans_ | Varriount, interesting |
09:12:49 | * | nequitans_ quit (Ping timeout: 240 seconds) |
09:20:00 | profmakx | srsly |
09:20:03 | profmakx | do they write those in word? |
09:20:21 | Varriount | profmakx: What, the papers? |
09:20:32 | profmakx | yeh |
09:20:45 | Varriount | Who knows. |
09:20:52 | * | profmakx was forced to hand in a proposal in word. cost me more than a day getting it into decent shape |
09:21:28 | Varriount | profmakx, nequitans_: Any idea what "Notes potential avenues for additional research analysis" means in the context of an essay which analyzes another essay? |
09:22:59 | profmakx | Varriount it means "blah" |
09:23:13 | profmakx | vacuous phrase. people in research love those for some reason |
09:24:26 | Varriount | profmakx: Tell that to my composition professor. |
09:24:54 | profmakx | Varriount what is "composition"? |
09:25:43 | profmakx | Varriount it probably means that it mentions research directions somewhere. I am surprised that people still get away with these overly vague formulations |
09:25:45 | Varriount | profmakx: Language, english, writing. |
09:26:18 | Varriount | profmakx: The class is intended to teach effective skills for essay analysis and writing. |
09:28:21 | Varriount | profmakx: Here's the rubric for this particular essay, if you're interested -> https://docs.google.com/document/d/1SyvhE4kGKfh9Eo-F_anyPEwVuRVpbBN-NvMeyoQnQck/edit?usp=sharing |
09:28:44 | Varriount | I've highlighted the things in green that I'm sure my essay has done properly. |
09:31:07 | profmakx | I probably suck at writing :P |
09:31:38 | Varriount | profmakx: Of the few skills I have, writing and reading are my best. |
09:31:49 | Varriount | Also, Google says that you're an anonymous giraffe. |
09:33:06 | profmakx | I have no idea what that even is |
09:33:12 | profmakx | oh |
09:33:27 | profmakx | you mean on the doc? |
09:34:32 | * | CarpNet joined #nimrod |
09:36:01 | Varriount | profmakx: Yes |
09:36:07 | Varriount | Hi cark |
09:36:12 | Varriount | Er, CarpNet |
09:37:15 | CarpNet | hello |
09:42:56 | Skrylar | bonus |
09:43:07 | Skrylar | utf tests didn't mysteriously fail just because i built them on windows |
09:49:03 | Varriount | Skrylar: :O |
09:49:38 | Varriount | Hm.. |
09:49:51 | * | Varriount is now known as MagiKarpNet |
09:49:57 | MagiKarpNet | :D |
09:50:30 | * | MagiKarpNet is now known as Varriount |
10:01:33 | * | io2 joined #nimrod |
10:01:40 | Varriount | oo, this is interesting -> https://github.com/xnko/libapi |
10:07:58 | Skrylar | heh. coroutines are pretty neat |
10:08:22 | profmakx | Skrylar do you think? |
10:08:42 | Skrylar | profmakx: i was acknowledging Varriount's link :) |
10:09:07 | Skrylar | I'm not sure why GCs are considered "must have next gen" but first class coroutines which are as old as assembly still get completely ignored |
10:09:29 | Skrylar | even though there have been benchmarks showing they're way better than how most people derp about IO |
10:11:01 | * | ponce__ left #nimrod (#nimrod) |
10:12:05 | Varriount | Skrylar: The only problem is that most implementations I've seen have to guess about how much memory to allocate for the stack |
10:13:03 | Varriount | I was wondering, when nimrod gets coroutines, if it could at least somewhat accurately guess the stack size (you know, being a compiler and all) |
10:14:00 | * | odc joined #nimrod |
10:14:34 | * | odc left #nimrod (#nimrod) |
10:20:47 | Skrylar | Varriount: probably, since it knows how much space the function needs for scratch |
10:20:58 | Skrylar | its kind of like how GCs work better when the compiler has some idea where to put the safe points, lol |
10:21:27 | Varriount | Safe points? |
10:21:38 | Skrylar | all though i wonder if thats the kind of thing macros should be able to do; seems like they should be able to read the AST for the function and check that kind of detail |
10:21:45 | Skrylar | though i don't think macros get access to resolved type details :/ |
10:22:11 | * | faassen joined #nimrod |
10:22:25 | Skrylar | (before i went to rust and then to nimrod, i was working on a compiler that was basically just the Io scripting language with a code emitter out the back; so i'm a big fan of the microkernel+macros-for-everything model) |
10:22:39 | Varriount | Hi faassen |
10:22:52 | Varriount | Skrylar: Have you seen the compiler internals? |
10:22:59 | Skrylar | not for nimrod |
10:23:10 | Varriount | Skrylar: Most of the compiler is a macro, essentially |
10:23:16 | Skrylar | i live in enough of a small hell just fixing up this unicrap |
10:23:39 | Varriount | Skrylar: The methods you would use for a macro are pretty much the same methods the compiler would use. |
10:23:55 | Varriount | The compiler just has access to a lot more information |
10:24:08 | Skrylar | yeah that was pretty much the model i was going for |
10:24:20 | Skrylar | well, i had some smartass things to go along with it that i never got to |
10:24:53 | Varriount | Skrylar: Although, I doubt anyone will ever create a macro as obtuse as the lambda lifting compiler code. |
10:25:09 | Skrylar | i was going to have it so you could access a meta object in the object tree, which would let you put lisp-style declaims on things like methods so the slow-interpreter would ignore them but a JIT would be able to use them effectively |
10:25:35 | Skrylar | things like "don't use full message passing mechanics on this function, it doesn't need it" |
10:26:04 | Skrylar | (Io can do crazy things like look at who just called a method and then modify the caller object even though you didn't ask for that) |
10:28:01 | Varriount | Skrylar: Yeah, I've heard interesting stories about Io and the other smalltalk-like languages |
10:28:41 | Skrylar | i love that language |
10:28:53 | Skrylar | Io is basically Lisp with the parenthesis shoved over one token |
10:29:42 | Skrylar | they also have things like a binary message is just anything from this set of characters, so you can use +===---===+ as an operator if you feel pathological |
10:29:45 | Skrylar | IIRC |
10:31:08 | Varriount | Skrylar: What time zone are you in? |
10:31:13 | Skrylar | CST |
10:32:15 | Varriount | So.. I'm not the only one up in the wee hours |
10:32:32 | Skrylar | nerp |
10:36:10 | Skrylar | i must be a weirdo because i hate presets |
10:36:21 | Varriount | Presets to what? |
10:36:26 | Skrylar | presets in general |
10:36:40 | Skrylar | they felt like adding a bunch of preset views to MLO which I guess is good for newbies |
10:36:50 | Varriount | Skrylar: MLO? |
10:36:53 | Skrylar | but i almost never actually use the "tasks completed by project" preset |
10:37:05 | Skrylar | Varriount: http://mylifeorganized.net/ |
10:37:22 | Skrylar | in music stuff people actually SELL presets too |
10:38:07 | Varriount | Skrylar: I think the aversion to presets is somewhat stereotypical of programmers - I mean, look at linux |
10:38:25 | Skrylar | I like the concept, I just don't tend to use them |
10:38:51 | Skrylar | older versions of mlo didn't have any and i think a lot of people were scared of the filter screen |
10:39:02 | Skrylar | you can ask it to do all sorts of arbitrary filing for you |
10:39:16 | Varriount | Skrylar: My way of organizing things is to use the sticky notes program built into windows, google keep, and google calender |
10:40:05 | Skrylar | i seem to end up with crippling amounts of TODOs when i start tracking them with anything |
10:40:34 | Varriount | Skrylar: Same |
10:40:40 | Skrylar | what i like with MLO and on the mac i used omnifocus for it |
10:40:56 | Skrylar | you can put everything in the outline view and have this scary huge list |
10:41:05 | Skrylar | then go to a filter view that only shows "things that are open RIGHT NOW" |
10:41:32 | Skrylar | so if i set something to depend on araq being awake, and i tell it when that usually is, it won't show those |
10:41:43 | Varriount | Hah. |
10:42:07 | Varriount | You have Araq's sleep schedule? |
10:42:12 | Skrylar | no |
10:42:23 | Skrylar | i thought about putting that in if i end up doing too much stdlib work though |
10:44:38 | * | ddl_smurf joined #nimrod |
10:45:31 | Varriount | Whenever I see ddl_smurf's username, I think "Dance-Dance Revolution Smurk" (yes, I know it's an L, not an R) |
10:45:38 | Varriount | *Smurf |
10:48:04 | ddl_smurf | (sorry) |
10:48:18 | Varriount | ddl_smurf: Sorry for what? |
10:49:04 | Skrylar | bleh. string slicing is a module thats going to have to be written isn't it |
10:49:22 | Varriount | Skrylar: You should already be able to slice strings |
10:49:45 | ddl_smurf | sorry you think of ddr |
10:50:16 | Skrylar | Varriount: well i wrote this painful code to do line wrapping but instead of returning copies of strings it just gave the start/end indices |
10:51:37 | Varriount | Skrylar: And..? |
10:52:41 | Skrylar | i didn't see a lot of stdlib code that dealt with indices |
10:52:51 | Skrylar | most of the string routines i saw returned copies of tiny strings |
10:55:19 | Varriount | Skrylar: True.. But modifying those procedures to return indices is probably not that hard. |
11:01:08 | Skrylar | i have noticed in my local nimroding that i have started getting too many 'skblah' folders |
11:01:30 | Skrylar | i should probably just rename it all under one library named 'skylights' instead of trying to keep this crap separate |
11:06:17 | Varriount | Skrylar: Does it all concern a single thing? |
11:12:08 | Skrylar | Varriount: no, its just various things i need |
11:12:59 | Skrylar | but a gap buffer deals with text, so i put it in skText; but text needs unicode, so it references skutf, but then if a gap buffer wants to use bitfields for efficiency i have to put it somewhere else |
11:13:18 | Skrylar | which means i get a dozen small modules and end up having to use a meta-folder with git submodules to do anything |
11:13:31 | Varriount | Skrylar: I could have sworn that nimrod had a bitfields module |
11:13:39 | Skrylar | that was an example |
11:13:53 | Skrylar | i was entertaining the idea of using an integer where the high bit was used as a dirty flag |
11:14:48 | Skrylar | since a gap position of -X makes no sense, it would store the value of a signed int and use the extra bit to see if the value changed; so it would only lazily move the gap |
11:15:11 | Skrylar | which would entail making a module to avoid spaghetti code, which has to go somewhere |
11:27:57 | Varriount | Araq: I modified the testament/babel-integration pull request so that the babel package tests aren't run when 'all' is specified. |
11:53:40 | * | BitPuffin quit (Ping timeout: 252 seconds) |
12:15:48 | Skrylar | Varriount: http://i.imgur.com/7B41peV.jpg sometimes i think i don't use my time very wisely :/ |
12:18:21 | Varriount | Skrylar: *shrug* I like planning things. What software is that? |
12:19:03 | Skrylar | yEd |
12:19:46 | Skrylar | I got interested in it again because someone was asking about articy:draft alternatives on reddit and someone linked to this article where an indie made an RPG using yEd and some custom XML parsing |
12:20:05 | Skrylar | basically made his own tool that ate yEd output and turned it in to dialog script |
12:20:40 | Varriount | Interesting. |
12:20:42 | Skrylar | all though it also has a pretty nice automatic layout button for flowcharts which is pretty sweet |
12:21:05 | Skrylar | yay suspiciously useful freeware. lol |
12:30:45 | Skrylar | i wonder why gvim on windows installs with these assinine default settings |
12:31:03 | Skrylar | "your backspace key is going to have this really retarded restriction where it doesn't work half the time :D" |
12:38:55 | * | BitPuffin joined #nimrod |
12:40:10 | Varriount | Skrylar: I don't suppose there's a "beginners guide to vim"? |
12:40:31 | Varriount | Or do I just have to plunge in head first, and hope I don't drown? |
12:42:53 | EXetoC | I never read any guides, but I did start off with vimtutor the second time around, and that helped |
12:46:28 | EXetoC | http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html |
12:51:02 | Skrylar | i don't remember how i learned vim, all though i barely know much of it |
12:51:21 | Skrylar | there's also vimcasts which is good |
13:00:57 | Skrylar | as boring as making flowcharts and mindmaps can get, it sure does make the actual coding process really simple |
13:05:30 | BitPuffin | ping Araq |
13:05:47 | Araq | png |
13:06:06 | BitPuffin | Araq: why are we adding an alias for python programmers |
13:06:39 | Araq | er ... what? |
13:07:01 | BitPuffin | Araq: Yeah of pow |
13:07:05 | BitPuffin | Araq: saw that on githerb |
13:07:16 | Skrylar | lol githerb |
13:07:58 | Araq | well I dunno about python but nimrod had ^ for pointer deref and got x[] instead so ^ becomes available |
13:08:25 | BitPuffin | Araq: well then why are we not going with ^ |
13:08:37 | Araq | well but we are |
13:08:41 | BitPuffin | I am referring to https://github.com/Araq/Nimrod/pull/878 |
13:08:56 | BitPuffin | Araq: okay well then why alias it. Considering it is what you were bashing linagl for :P |
13:09:31 | BitPuffin | granted it's not merged |
13:09:38 | Araq | yes I got your point |
13:09:39 | BitPuffin | but I don't see any discouraging |
13:09:52 | Araq | I didn't really look at this PR tbh ... |
13:10:14 | Araq | I just assumed it implements ^ and perhaps deprecates 'pow' |
13:10:29 | BitPuffin | well I didn't llook at the code lol |
13:10:36 | BitPuffin | but it doesn't sound like it by the title |
13:10:49 | BitPuffin | oh |
13:10:50 | BitPuffin | lol |
13:10:52 | BitPuffin | it adds ** |
13:10:57 | BitPuffin | you knwo how you do x ** y |
13:11:00 | BitPuffin | in python for pow |
13:11:05 | Araq | also aliases are fine now when they are not introduced by BitPuffin ... |
13:11:29 | BitPuffin | Araq: lol, fuck off :D |
13:11:31 | Araq | because you added 'toString' and that is a different alias |
13:11:45 | Araq | toString is from Java hell |
13:11:51 | BitPuffin | well no you bashed a bunch of the other aliases too |
13:11:53 | Araq | ;-) |
13:12:16 | BitPuffin | and I don't see why we'd need an alias for python nerbs, since we can have ^ |
13:12:18 | BitPuffin | which makes sense |
13:12:30 | BitPuffin | think ruby might use ** too iirc |
13:12:44 | Araq | well more seriously, we should decide about an "alias policy" |
13:13:15 | * | Varriount throws an idea into the pot |
13:13:16 | BitPuffin | agreed |
13:13:34 | Araq | I don't mind to introduce -d:pythonlike and -d:rubylike to lessen the pain for scripters |
13:13:39 | Varriount | Why not have a single file per language which implements aliases for that language? |
13:13:48 | Araq | Varriount: or that, yes |
13:14:00 | BitPuffin | what Varriount said sounds a lot better |
13:14:12 | BitPuffin | because having a bunch of conditional compilation is gonna bloat up the code imo |
13:15:41 | Varriount | The downside to the alias file solution is that it can't override nimrod's own stuff. |
13:16:02 | BitPuffin | Varriount: hmm, you mean stuff that is in system right? |
13:16:15 | Varriount | BitPuffin: As well as the rest of the stdlib |
13:16:34 | BitPuffin | for seriousness I don't really think that a python/rubyfier should be in the main repo |
13:16:40 | BitPuffin | better as a babel pkg |
13:16:46 | Varriount | BitPuffin: Personally, alias files should be a seperate pack- |
13:16:54 | Varriount | Yeah, what you said. |
13:16:58 | BitPuffin | since I don't think we actually want to encourage people writing python in nimrod |
13:17:05 | BitPuffin | Varriount: hah! :D |
13:19:42 | Varriount | Such things, like programming styles, should realy be confined to the use of personal scripts and so-on |
13:21:46 | Varriount | Araq: Did you get my message about the testament/babel-integration update? |
13:22:47 | Araq | Varriount: sure, will merge it later |
13:23:10 | Varriount | Ok, just wanted to make sure. |
13:23:53 | Araq | "- On the VLIW architecture (below HD7700) there is no GOTO instruction. Only Loop, If/Else and exit." |
13:24:17 | Varriount | Wat |
13:24:28 | Varriount | Is that a Graphics card? |
13:24:35 | BitPuffin | sounds like AMD |
13:24:44 | BitPuffin | or wait |
13:24:48 | BitPuffin | maybe a new intel thing? |
13:25:05 | BitPuffin | or old I guess |
13:25:08 | BitPuffin | I dunno xD |
13:28:39 | Varriount | BitPuffin: http://devgurus.amd.com/thread/167192 |
13:28:54 | Varriount | That's where Araq got it from. |
13:29:16 | Araq | hey .. |
13:29:29 | Araq | but yes |
13:30:34 | * | rndbit quit (Ping timeout: 245 seconds) |
13:31:39 | BitPuffin | Araq: you just got scroogled |
13:32:28 | Skrylar | Araq: i have to nap now, but later i'll need to poke you about symbol names in the skutf repo on github |
13:32:48 | BitPuffin | I'm gonna use nimrod to write a mumble bot eventually hehe |
13:32:51 | Skrylar | i'll want to make sure everything has acceptable names before shoving it in stdlib |
13:32:59 | * | rndbit joined #nimrod |
13:33:01 | Araq | Skrylar: excellent |
13:33:06 | filwit | fowl: where did you say your assimp example was again? |
13:33:25 | BitPuffin | filwit: probably in fowltek repo? |
13:33:35 | filwit | BitPuffin: been looking for it |
13:33:38 | BitPuffin | filwit: are you spanking the imp's ass? |
13:33:46 | Skrylar | Araq: https://github.com/Skrylar/skUtf if you want to browse through it in the interim; there's obviously a few parts that are going to get thrown out because they already exist, though the test cases are still handy |
13:33:46 | filwit | trying too.. ? |
13:33:49 | filwit | lol |
13:34:34 | BitPuffin | https://github.com/fowlmouth/nimlibs/blob/master/fowltek/assimp.nim |
13:34:40 | BitPuffin | da banding |
13:34:55 | filwit | yeah i know, he said there was an example of it somewhere |
13:35:02 | BitPuffin | https://github.com/fowlmouth/nimlibs/blob/master/fowltek/musings/nim3d/lib/models.nim |
13:35:05 | BitPuffin | imports assimp |
13:35:27 | filwit | ah, thought i looked through musings, thanks that's probably it |
13:36:04 | BitPuffin | and https://github.com/fowlmouth/nimlibs/blob/master/fowltek/musings/nim3d/examples/testmodel.nim |
13:38:01 | * | darkf quit (Ping timeout: 265 seconds) |
13:39:21 | BitPuffin | Araq: btw did this get fixed? https://github.com/Araq/Nimrod/issues/941 |
13:39:47 | Araq | BitPuffin: it is still open for a reason |
13:40:55 | Varriount | Araq: You mentioned that there were important things that I could do, besides implementing stat()? |
13:41:28 | Araq | indeed. bug #941 is creepy |
13:43:04 | Araq | BitPuffin: just got an idea of how to hunt down this bug, but it may take a while |
13:44:44 | * | ddl_smurf quit (Quit: ddl_smurf) |
13:48:54 | Varriount | Araq, BitPuffin: Works for me using a nimrod built using latest devel |
13:51:42 | Araq | yes it's macosx specific and hence might be a corruption |
13:52:04 | BitPuffin | Varriount: yeah it's a mac thing |
13:52:15 | BitPuffin | Araq: oh, what is it? |
13:52:40 | Araq | some node gets recycled too early, but that's just an educated guess |
13:52:58 | Araq | the node then gets re-used and the compiler produces weird stuff |
13:53:42 | Araq | with decent watchpoint support not hard to track down |
13:54:14 | Araq | but nimrod supports watchpoints via software emulation ... and GDB's watchpoints are broken beyond repair |
13:57:34 | Varriount | Araq: How are GDB's watchpoints broken? |
14:00:47 | Araq | Varriount: sorry, will tell you later |
14:03:29 | * | reloc0 quit (Ping timeout: 245 seconds) |
14:03:45 | * | reloc0 joined #nimrod |
14:04:51 | * | ddl_smurf joined #nimrod |
14:09:07 | Araq | BitPuffin: system/gc.nim in 'growObj' there is a call to 'dealloc'. Disable that line, bootstrap again and try to compile your snippet please |
14:16:48 | * | nequitans_ joined #nimrod |
14:22:46 | Varriount | Hi again nequitans_ |
14:23:07 | nequitans_ | hello Varriount! |
14:24:15 | Araq | Varriount the tester needs to produce more JSON ... not only the differences between 2 commits |
14:24:22 | Araq | if you want, you can work on that |
14:29:53 | Varriount | Araq: Can you be a bit more specific? |
14:30:13 | Varriount | Do you mean, the differences between multiple commits? |
14:30:28 | Varriount | Or the date that the tests were made? |
14:30:43 | Araq | currently it produces the diff between the latest commit and the commit before that |
14:32:41 | * | awestroke joined #nimrod |
14:33:22 | Varriount | Hi awestroke |
14:35:31 | awestroke | Varriount: hello! |
14:43:06 | Araq | Varriount: or you could fix the remaining lambda lifting bugs ... ;-) |
14:46:16 | * | zielmicha joined #nimrod |
14:52:18 | * | nequitans_ quit (Ping timeout: 240 seconds) |
15:27:45 | BitPuffin | Araq: ok will do it later |
15:42:01 | * | Varriount|Mobile joined #nimrod |
15:44:33 | * | r0b4 joined #nimrod |
15:45:59 | * | rob3 quit (Ping timeout: 240 seconds) |
16:16:11 | dom96 | helooo |
16:33:07 | dom96 | nequitans: Thank you for that great articles :) |
16:33:10 | dom96 | *article |
16:35:13 | skyfex | nequitans |
16:37:36 | skyfex | Huh, this IRC client has a weird bug where if you use paste in the search field it pastes into the message field and focuses it |
16:37:50 | skyfex | Should've used irssi i suppose ;) |
16:41:42 | dom96 | I wish Nimrod would at least be mentioned here: http://blog.fourthbit.com/2014/03/01/the-best-programming-language-or-how-to-stop-worrying-and-love-the-code |
16:43:58 | filwit | hey dom96 |
16:44:04 | dom96 | hi filwit |
16:45:07 | BitPuffin | yoyo dom96 |
16:45:39 | * | OrionPK joined #nimrod |
16:51:03 | dom96 | BitPuffin: Still playing tha dotas? |
16:51:13 | dom96 | Why do I even ask. Of course you are. |
16:51:15 | dom96 | :P |
16:54:01 | * | BitPuffin quit (Ping timeout: 240 seconds) |
17:08:12 | * | faassen left #nimrod (#nimrod) |
17:10:24 | * | zahary1 quit (Read error: Operation timed out) |
17:10:34 | * | zahary1 joined #nimrod |
17:23:19 | * | Demos joined #nimrod |
17:27:44 | * | Matthias247 joined #nimrod |
17:28:28 | * | brson joined #nimrod |
17:29:42 | * | xtagon joined #nimrod |
17:46:34 | * | DAddYE joined #nimrod |
17:47:53 | * | BitPuffin joined #nimrod |
17:50:36 | * | zahary1 quit (Ping timeout: 264 seconds) |
17:51:23 | * | zahary1 joined #nimrod |
18:17:23 | * | carum joined #nimrod |
18:26:21 | * | q66 joined #nimrod |
18:29:07 | * | meguli joined #nimrod |
18:42:22 | dom96 | hi meguli |
18:43:02 | fowl | filwit, did you find the example |
18:44:58 | * | carum quit (Remote host closed the connection) |
18:46:08 | meguli | hi everyone |
18:46:13 | meguli | just checking the language |
18:48:41 | EXetoC | hello |
18:48:47 | EXetoC | examine it. embrace it. write awesome code |
18:54:59 | * | vendethiel joined #nimrod |
19:02:19 | * | meguli quit (Quit: Page closed) |
19:37:13 | nequitans | dom96, hello and np. it's a pretty awesome language! |
19:48:23 | dom96 | Araq: Read it so that we can reddit it. :) |
19:48:29 | * | filwit quit (Ping timeout: 269 seconds) |
20:02:12 | * | OrionPK quit (Ping timeout: 244 seconds) |
20:03:30 | * | brson quit (Quit: leaving) |
20:07:04 | * | brson joined #nimrod |
20:09:43 | Demos | How do people feel about code completion coming up while writing comments? |
20:10:05 | dom96 | That would be annoying. |
20:10:21 | Matthias247 | Can be helpful when you add examples |
20:11:05 | Matthias247 | but ideally it would only come up in code sections of comment blocks :) |
20:11:56 | Demos | right now it comes up ANYWHERE if you hit '.', and anywhere if you hit ctrl-space. I think turning off '.' in comments is a good idea, I like having access to it |
20:12:31 | Demos | I am also having path related problems, I could not get idetools to work if the project file was different from the file I ran my query on |
20:19:07 | * | Duck_ joined #nimrod |
20:24:16 | * | Duck_ left #nimrod (#nimrod) |
20:25:45 | * | Duck_ joined #nimrod |
20:26:04 | * | Endy joined #nimrod |
20:26:08 | Araq | hi Duck_ welcome |
20:26:16 | Duck_ | good evening |
20:42:11 | * | Varriount-Mobile joined #nimrod |
20:42:54 | Araq | hey nequitans I'm reading your article right now :-) |
20:43:55 | * | Varriount_ joined #nimrod |
20:45:37 | * | Varriount quit (Ping timeout: 240 seconds) |
20:46:07 | * | Varriount|Mobile quit (Ping timeout: 244 seconds) |
20:47:40 | * | Varriount-Mobile quit (Ping timeout: 244 seconds) |
20:48:22 | Demos | that matrix example not that great... ideally we would use fixed length arrays for a matrix. |
20:49:23 | Araq | Demos: that depends |
20:49:41 | Demos | well yeah, if you want a dyanmic matrix you need dynamic memroy |
20:49:45 | Demos | *memory |
20:50:01 | Araq | I keep arguing that a single matrix type simply doesn't cut it, generic or not |
20:50:07 | Demos | and it is quite hard to do fixed length matrices like we want without static[T] |
20:50:11 | Demos | really? |
20:50:32 | Araq | a 4x4 matrix is inherently different from a NxN matrix |
20:50:44 | Araq | for like every imaginable algorithm |
20:50:55 | Demos | right, you need to specialize |
20:51:39 | Demos | then there are various sorts of sparse matrices |
20:51:53 | * | carum joined #nimrod |
20:52:18 | Demos | the definitions of most algorithms are the same for 4x4 matrices as they are for NxN ones |
20:52:28 | Demos | assuming that the operations makes sense on any square matrix |
20:52:43 | * | carum quit (Remote host closed the connection) |
20:58:46 | Discoloda | nimrod has something else going for it compared to rust, its taking me over 3 hours to compile it |
21:00:13 | * | Duck_ quit (Ping timeout: 245 seconds) |
21:00:21 | Araq | "Nimrod also supports multiple dispatch which allows dynamic binding to variables." er ... no |
21:00:40 | Araq | it allows dynamic binding of methods |
21:03:14 | Matthias247 | Discoloda: for compiling rust or nimrod? |
21:03:30 | EXetoC | Rust ofc :> |
21:03:48 | EXetoC | it's an implementation issue, but then again there are no alternatives |
21:04:39 | EXetoC | I tried to compile it with 1GB of RAM. It was slow :> |
21:05:27 | Matthias247 | yeah, rust takes a while. Especially when you have to build llvm. But I think it's about 45min here |
21:05:28 | Discoloda | compiling librustc took 2 hours 47 seconds, for stage 0, now its doing it again for stage 1 :/ |
21:05:40 | Matthias247 | and Nimrod is < 5min |
21:06:51 | Matthias247 | it will build llvm only once, so the further stages will be faster. But 3 hours still sounds slow |
21:07:11 | Matthias247 | notebook? |
21:07:36 | Discoloda | im on a small VPN, 512MB of ram, 2GB of swap file |
21:08:15 | Matthias247 | ah ok, that are quite limited resources :) |
21:08:29 | Discoloda | yeah |
21:08:57 | Matthias247 | I'm glad I bought 16gb ram when it was cheap :) |
21:09:07 | dom96 | Don't they have nightly builds of the compiler? |
21:09:33 | Matthias247 | depends on the platform |
21:10:02 | Discoloda | i wish i bought more ram for my gaming computer when it was cheaper |
21:10:57 | dom96 | I wish the RAM I bought would work. |
21:11:29 | Matthias247 | at work we now have a workstation with 128gb - don't know what to do to utilize that :) |
21:12:01 | * | Endy quit (Ping timeout: 240 seconds) |
21:12:13 | Discoloda | make a ramdisk and play some games with zero load time |
21:12:34 | EXetoC | put all the files on it |
21:12:46 | Matthias247 | guess the GPU is too shitty for gaming :) |
21:13:03 | * | carum joined #nimrod |
21:15:39 | Demos | I have seen matlab use amounts of ram that would make you run for cover |
21:16:01 | Matthias247 | oh yeah |
21:16:46 | Discoloda | you dont need super pretty graphics to enjoy zero load time |
21:16:59 | Matthias247 | I did signal processing simulations with Matlab in an internship were I exceeded 4Gb (was much back then), all constantly swapped and the simulation took a whole weekend... |
21:17:43 | Matthias247 | probably the same thing would now run with julia in 2 hours |
21:17:49 | Demos | yeah the workstation I had was equipped with 64gb |
21:17:53 | Demos | and matlab was swapping |
21:18:58 | * | carum quit (Read error: Connection reset by peer) |
21:19:18 | * | carum joined #nimrod |
21:20:04 | EXetoC | :E |
21:20:12 | Matthias247 | but currently I'm doing no more signal processing. Mostly compiling stuff. But even compiling a whole Linux system is pretty much CPU and I/O limited and not on RAM |
21:20:34 | EXetoC | Demos: did you analyze the universe? |
21:21:03 | Demos | data from RNA sequenceing |
21:21:06 | Demos | asstons of data |
21:21:22 | Demos | and matlab is pathetic |
21:22:09 | Matthias247 | we did analyzing RF transmission channels. That's also tons of data |
21:24:00 | * | brson_ joined #nimrod |
21:24:04 | * | brson_ quit (Client Quit) |
21:25:22 | * | brson quit (Read error: Operation timed out) |
21:39:55 | Demos | hey fowl: How good is your assimp wrapper? |
21:40:50 | Demos | for some reason it does not specify {.dynlib.} and does not seem to import all the relevant functions |
21:44:28 | EXetoC | cdecl and dynlib are pushed/popped |
21:48:30 | Demos | ah, missed that |
21:48:37 | Demos | it looks pretty good |
21:48:55 | Demos | aside from not wrapping aiReleaseImport |
21:52:06 | * | carum quit (Remote host closed the connection) |
21:52:42 | * | carum joined #nimrod |
21:57:48 | * | carum quit (Ping timeout: 264 seconds) |
22:12:52 | Matthias247 | I think I finally succeeded in parsing IPv6 addresses... |
22:17:18 | Araq | ping Skrylar |
22:18:39 | Araq | nequitans: you should mention that the multithreading you're using is low level and soon there will available be a much better one |
22:19:30 | Araq | ping Varriount_ |
22:34:22 | * | Varriount_ is now known as Varriount |
22:34:27 | Varriount | Araq: Yes? |
22:34:53 | Araq | I want you to split the babel handling |
22:35:13 | Araq | the packages under nimrod-code should be tested with 'all', the others should not |
22:36:24 | Varriount | Araq: How would one specify to test "the others"? |
22:38:24 | Araq | "official" vs "addon" perhaps |
22:39:10 | Varriount | Araq: I mean, on the command line |
22:39:30 | Varriount | Would it be two seperate categories? |
22:39:40 | Araq | yes |
22:53:44 | Varriount | Araq: testament/babel-integration PR updated. |
22:55:26 | Araq | hmm that was quick |
22:55:37 | Araq | now I need to review it |
22:55:53 | Araq | did you test it? |
22:56:55 | Varriount | Araq: Yes. |
22:58:22 | Varriount | Araq: I already had some functionality to filter packages, I just extended it a bit. |
23:03:50 | Matthias247 | Araq, dom96: Any objections against adding an IP Address structure to the standard library? https://gist.github.com/Matthias247/9336472 |
23:05:49 | Araq | Matthias247: use sets, c in {'0'..'9'} |
23:05:53 | Varriount | Matthias247: IIRC, object's with case members are unions underneath, so you might want to make those array members refs |
23:06:33 | Matthias247 | Varriount: that is the expected behavior :) |
23:07:14 | Matthias247 | Araq: for style or does it really make a difference? |
23:07:31 | Araq | for style |
23:08:11 | Matthias247 | I would expect the set to be slower, because it sounds like you have to compare against object instead of only comparing two numbers |
23:10:12 | * | io2 quit () |
23:10:22 | Varriount | Sets are bit vectors. Also, micro-optimization is an unnecessary evil here. |
23:11:46 | dom96 | Matthias247: I like it. Add it to the new net module. Will need something to convert into a form that can be used by connect/bind though. |
23:13:02 | Matthias247 | dom96: yeah, the socket procs should all take an IPAddress instead of the current string as a parameter ;) |
23:13:12 | dom96 | I agree with Araq though, you should also use case statements instead of those if statements for parsing |
23:13:38 | * | DAddYE quit (Read error: Connection reset by peer) |
23:13:54 | * | DAddYE joined #nimrod |
23:14:22 | dom96 | Matthias247: What if I want to specify a domain then? :P |
23:14:24 | Araq | Matthias247: the compiler optimizes away the set construction etc. it ends up producing the same code in your case |
23:14:37 | Matthias247 | dom96: then you use DNS :) |
23:14:54 | dom96 | Matthias247: Connect/bind currently handles that automatically |
23:14:57 | Matthias247 | Araq: ok, then I'll trust you and change it :) |
23:15:03 | Araq | in other cases the set is translated to a lookup table and is faster than a bunch of comparisons |
23:15:59 | Matthias247 | dom96: you basically want an overload. One proc that directly takes an address and another one that takes a string and does DNS if necessary |
23:17:27 | dom96 | Sure. That will work. |
23:19:20 | dom96 | Is there a use case for parsing an IP and then modifying the resulting TIpAddress? |
23:19:31 | Skrylar | Sure |
23:19:38 | Skrylar | If you're pinging a range of IPs you might want to inc() to the next one |
23:21:32 | dom96 | oh right |
23:22:01 | Matthias247 | I'm also not sure if i should make the inner address fields private and provide gettter methods for it |
23:22:32 | Matthias247 | would prevent setting an imcompatible family |
23:22:54 | Skrylar | True. This would also be done for you by using a variant object |
23:23:05 | Skrylar | At least locking address objects to the right family type |
23:24:00 | Araq | Varriount: just fyi your iterator is an inline iterator and you have 3 yields in it --> code bloat |
23:24:01 | Matthias247 | Yes, that's what I have and what it is doing |
23:24:18 | Matthias247 | but in the other way you can throw a user-defined conversion error |
23:24:30 | Araq | but I don't care enough, so ... |
23:24:40 | Matthias247 | that doesn't work: return (c in {'0'..'9'}) or (c in {'a'..'f'}) or (c in {'A'..'F'}) |
23:24:42 | NimBot | Araq/Nimrod devel 9f81e48 Clay Sweetser [+0 ±2 -0]: Integrated 'babel' with testament |
23:24:42 | NimBot | Araq/Nimrod devel 5876e62 Clay Sweetser [+0 ±1 -0]: Removed babel package tests from those run when 'all' is specified. |
23:24:42 | NimBot | Araq/Nimrod devel 7267635 Clay Sweetser [+0 ±1 -0]: Allowed specification of what babel packages to install via new categories - 'babel-core', 'babel-extra', and 'babel-all' |
23:24:42 | NimBot | Araq/Nimrod devel 1b80d31 Andreas Rumpf [+0 ±2 -0]: Merge pull request #970 from Varriount/testament/babel-integration... 2 more lines |
23:24:46 | Skrylar | Araq: i have an iterator with 6+ yields in a row in it |
23:24:56 | Skrylar | Admittedly it was one of those few times a goto ladder would have been more efficient :P |
23:25:44 | Araq | Matthias247: what do you mean? compiler bug? |
23:26:10 | dom96 | Matthias247: You should use: case address_str[i]: of {'0' .. '9'}, {'a' .. 'f'} ...: # isXDigit |
23:26:12 | Araq | also it's c in {'0'..'9', 'a'..'f', 'A'..'F'} |
23:26:14 | Matthias247 | Araq: it also accepts 'z' and other chars |
23:26:52 | Araq | report it |
23:27:05 | Araq | (if it's not your fault of course :P ) |
23:27:19 | Matthias247 | c in {'0'..'9', 'a'..'f', 'A'..'F'} -> same |
23:27:27 | Matthias247 | so I'll report it |
23:27:33 | Matthias247 | and use the other method |
23:28:52 | Matthias247 | oh, mine also accepts it |
23:28:58 | Matthias247 | seems to be my fault ;) |
23:29:06 | Araq | well the compiler uses things like these and it works so yeah |
23:29:22 | Araq | would be surprised if there is a bug left for that |
23:29:46 | Matthias247 | think I have refactored the stupid IPv6 parsing method too often :) |
23:31:10 | Skrylar | i. hate. parsing. |
23:31:24 | Matthias247 | ok, works now |
23:31:48 | dom96 | I used to hate parsing, but then Araq enlightened me. |
23:31:58 | Skrylar | PEGs? |
23:32:16 | dom96 | while loop + case statement ftw |
23:32:18 | Skrylar | For me it was parsec; I can actually get a parser combinator to obey. |
23:32:34 | dom96 | parseutils is nice too |
23:33:04 | dom96 | Similar to Haskell's parser combinator. |
23:34:12 | Varriount | My best experience with binary stream parsing (custom protocols) was using a python library called "construct" |
23:34:30 | Skrylar | time to bother zah... vim-nimrod on windows still tries to open /tmp/nimrod.log |
23:34:44 | Matthias247 | if protocols are designed in a useful manner you don't need to parse them ;) |
23:34:53 | Varriount | Matthias247: Says you. |
23:34:57 | Skrylar | actually binary protocols aren't bad; i wrote a msgpack-v5 parser in rust a while back |
23:35:26 | Matthias247 | yeah, they are in most cases much easier than text protocols |
23:35:38 | Skrylar | once you know how to do the bit fiddling |
23:35:43 | * | zahary quit (Quit: Leaving.) |
23:35:49 | Matthias247 | yup |
23:35:57 | Skrylar | msgpack uses unsigneds :> |
23:36:14 | dom96 | Skrylar: Now write one for Nimrod. |
23:36:15 | Skrylar | well, has both. it only uses signed ints for negatives; but its a line-protocol so it doesn't matter |
23:36:22 | Skrylar | dom96: el oh el |
23:36:37 | Matthias247 | had an intern last year that did addr[0] + addr[1] + addr[2] + addr[3] to decode 32bit values ;) |
23:36:55 | Skrylar | dom96: i might at some point. |
23:37:09 | Skrylar | I found out that like nobody supports the latest msgpack... after writing code that supported the extension fields |
23:37:39 | Varriount | dom96: Why does NimBot no longer announce commits? |
23:37:46 | Matthias247 | I'm doing something like messagepack (but much more advanced) at work. But unfortunatly can't make it OSS :( |
23:37:56 | dom96 | Varriount: It did like 10 minutes ago. |
23:38:09 | Varriount | Oh, nevermind. |
23:38:41 | dom96 | Varriount: If you just pushed and it doesn't announce it then keep in mind that GitHub may not always instantly send the data to NimBuild. |
23:39:09 | Skrylar | i donno.. msgpack is pretty good nowadays |
23:39:21 | Skrylar | only tools i might want for it would be a msgpack<->json transcoder |
23:39:39 | Skrylar | (inb4 pandoc clone for xml/jason/yaml markups) |
23:39:53 | dom96 | I think i've only worked with binary protocols once |
23:40:21 | Matthias247 | serialization is one thing. The other one is building a good RPC library around it. With good performance and kinds of error handling |
23:40:24 | dom96 | I am a master at parsing the IRC protocol though |
23:40:38 | Skrylar | isn't the IRC protocol something designed to be handled with strtok ;p |
23:41:06 | dom96 | Sure. It's pretty easy to parse. |
23:41:33 | * | Skrylar glares at vim unhappily... I use the help function for 'backspace' and it says nothing about how to fix it on windows. I use Google, THERE IS A HELP TOPIC TAGGED BACKSPACE. -_- |
23:41:33 | dom96 | But as with any procotol there are some complications. |
23:41:39 | dom96 | *protocol |
23:41:45 | Skrylar | dom96: like unicrap \o/ |
23:42:27 | dom96 | Can't say I ever had problems with Unicode. |
23:42:48 | Skrylar | I guess an IRCbot wouldn't |
23:43:02 | Skrylar | Its no fun if you're writing a text editor though |
23:43:42 | NimBot | Araq/Nimrod devel 7c7ed1c Varriount [+0 ±1 -0]: Fix categories.nim |
23:43:48 | * | carum joined #nimrod |
23:44:03 | dom96 | Can't recall any major problems that I had with unicode when writing Aporia either. |
23:44:14 | EXetoC | Skrylar: backspace in all modes? |
23:44:36 | Varriount | dom96: GTK probably handled it all for you. |
23:45:31 | Varriount | Skrylar: Have you ever managed to get GTK built on Windows (without Cygwin)? |
23:45:50 | dom96 | Varriount: Yeah, definitely. |
23:46:02 | Skrylar | Varriount: i do not touch gtk :S |
23:46:08 | Skrylar | gobject is sadness |
23:46:22 | Varriount | Skrylar: Good. Your sanity is intact then. |
23:46:37 | Varriount | GTK = Circular Dependancies |
23:46:45 | Skrylar | i concur with GTK handling his unicode problems |
23:46:52 | Skrylar | doesn't he use gtksourceedit? |
23:47:00 | Varriount | Yes |
23:47:07 | dom96 | GtkSourceView. He does. |
23:47:23 | Skrylar | Y'know.. I.. Never really liked Scintilla-ish things |
23:47:36 | Skrylar | I don't know why because the text component works really well, it just feels like nobody uses it to its full potential |
23:48:00 | dom96 | My sanity is unfortunately not intact. |
23:48:13 | dom96 | Gtk may handle unicode well, can't say it handles much else well. |
23:48:37 | Skrylar | Y'know I was actually considering building my morph gui over cairo as of late |
23:48:40 | dom96 | And GIMPNet/gtk+ rarely helps :( |
23:48:52 | Skrylar | I think you can static link to MPL1.1 |
23:49:26 | dom96 | I am still considering writing a GUI on top of OpenGL. |
23:49:59 | Skrylar | GL is kind of like working on a ship in a bottle. |
23:49:59 | dom96 | Maybe we should work on a GUI together. |
23:50:06 | Discoloda | dom96: i support that |
23:50:07 | EXetoC | how about cairo? |
23:50:27 | Skrylar | EXetoC: cairo is nice but you still need to plug a font layout engine over it |
23:50:46 | Skrylar | Which you can admittedly do with Pango on linux, and probably hook Windows' native glyph support there |
23:50:57 | Skrylar | I need to recheck if MPL1.1 allows static linking |
23:51:12 | Skrylar | I'm somewhat allergic to unnecessary LGPL dependencies :S |
23:51:14 | EXetoC | right |
23:51:16 | dom96 | Are there no other font layout engines? |
23:51:25 | Skrylar | I think there are a few lesser known ones |
23:51:36 | Skrylar | All though if the OS has one there's not a huge downside to using it |
23:51:38 | Matthias247 | Ok, I've set up a PR for the net module |
23:51:39 | Skrylar | Lowers your footprint |
23:51:40 | Discoloda | freetype isnt hard to use |
23:51:46 | Skrylar | Discoloda: not a layout engine :) |
23:51:56 | Discoloda | ah |
23:51:59 | Araq | good night |
23:52:08 | Skrylar | Freetype is a rasterizer. |
23:52:14 | Skrylar | It doesn't position the diacritic marks for you |
23:53:00 | Skrylar | EXetoC: yeah. on windows the backspace mode for gvim doesn't delete past where you start editing |
23:53:28 | Skrylar | and using :help backspace doesn't take you to the documentation on how to fix, even though there is a help topic for *backspace* *bs* which does tell you :| |
23:54:15 | EXetoC | ok |
23:54:26 | dom96 | Skrylar: I have a brilliant solution for you: delete vim, install sublime or something other than vim. |
23:54:37 | Skrylar | dom96: lololol |
23:54:39 | Matthias247 | hehe |
23:54:46 | EXetoC | Skrylar: doesn't position them how? |
23:54:59 | Skrylar | EXetoC: if i press insert, then backspace, it beeps at me |
23:55:11 | EXetoC | (FT) |
23:55:13 | Skrylar | "NO YOU SAID INSERT YOU CANT DELETE BEFORE THE INSERT POINT" "this is not 1990 and you are not vi) |
23:55:43 | Skrylar | on linux they usually turn off the pedantic options but for some reason gVim on windows has them on by default :B |
23:56:04 | Skrylar | fixed |
23:56:05 | Discoloda | vim on windows has retarded defaults |
23:56:14 | dom96 | Anyway. Good night. |
23:56:19 | Skrylar | dom96: so what you are saying is we need to jump on the SublimeText cloning bandwagon in nimrod |
23:56:20 | Skrylar | g'night |
23:56:38 | dom96 | Skrylar: Yep. |
23:57:05 | dom96 | Skrylar: Sublime uses some custom toolkit which uses OpenGL right? |
23:57:11 | Skrylar | his own stuff, yeah |
23:57:25 | Skrylar | Sublime 1 was neat, then he removed the toolbars :( |
23:57:54 | dom96 | I really can't bring myself to pay for it, or to use the "free" version. |
23:58:04 | Skrylar | well, i won't buy the upgrade to 3 |
23:58:06 | dom96 | Especially after spending so much time on Aporia. |
23:58:11 | Skrylar | he hasn't done anything i care about to the new version |
23:59:03 | Skrylar | Could always do that weird business model Ardour does |
23:59:05 | Matthias247 | the plugin api is a little better. When when everyone tries to stay compatible with v2 it won't help |
23:59:12 | dom96 | I think a Delphi/WinForms-like toolkit with an IDE which includes a GUI designer would be awesome for Nimrod. |
23:59:22 | Skrylar | i was working on something like that |
23:59:26 | Skrylar | Well, not so much winforms as morphic |
23:59:26 | Matthias247 | and it respects the DPI settings |