00:45:47 | fowl | i put my project on the internets https://bitbucket.org/fowlmouth/alphazone/src/ |
00:48:39 | * | freezerburnv quit (Quit: freezerburnv) |
00:54:50 | flaviu1 | fowl: I'm not sure what language that's in |
01:00:24 | fowl | its american english |
01:01:59 | flaviu1 | I dunno, I think you went a bit overboard with the DSL |
01:02:38 | EXetoC | ^_^ |
01:06:08 | * | q66 quit (Quit: Leaving) |
01:07:19 | Varriount | Wow, I really like what BitBucket has done with their interface. |
01:07:44 | fowl | flaviu1, which |
01:09:25 | flaviu1 | fowl: Well, I have no idea what `?int`, `<<`, `>>` are |
01:09:56 | fowl | oh |
01:16:15 | * | hoverbear joined #nimrod |
01:16:21 | * | hoverbear quit (Max SendQ exceeded) |
01:16:51 | * | hoverbear joined #nimrod |
01:16:55 | * | hoverbear quit (Max SendQ exceeded) |
01:17:15 | fowl | flaviu1, were you trying to skim it for magic spells or something |
01:17:29 | * | hoverbear joined #nimrod |
01:19:06 | flaviu1 | fowl: I was skimming it to see what's happening. I can't tell whats happening. It might be easier to read if you used longer words and not symbols |
01:19:19 | Varriount | fowl: I think you are easily the most prolific programmer in our community. |
01:19:56 | * | Jesin joined #nimrod |
01:20:20 | fowl | flaviu1, i dunno, ive written a lot of <<s and >>s to change them to words |
01:20:59 | flaviu1 | for f in ./**.nim; sed -i 's/>>/whatever they mean/g'; done |
01:21:04 | flaviu1 | in fish |
01:21:53 | fowl | then i have to write those words from then on |
01:23:21 | fowl | << and >> show dataflow and are recognizable from the great c++ |
01:23:46 | flaviu1 | I say its worth it, the best way to write hard to read code is to overuse operators. |
01:28:24 | Varriount | Plus, by overusing operator overloading you give credence to all those anti-overloading weenies. |
01:30:27 | fowl | ill sleep on it |
01:30:42 | fowl | i think everybody needs to stfu and golf it up |
01:30:56 | fowl | btw ?int is tmaybe[int] |
01:31:23 | fowl | like c#s brilliant int? #=> Option<int> |
01:34:22 | flaviu1 | Sorry, not convinced. Words are better than Symbols. If anything, they're easier for humans to parse |
01:37:57 | * | brson joined #nimrod |
01:41:43 | Varriount | flaviu1: Well, symbols are good, to a certain extent. It's just that their meaning is often multifaceted and ambiguous, and there are not enough readily available. |
01:42:10 | Varriount | (Unicode doesn't count, as keyboards don't have unicode symbols readily available) |
01:43:07 | flaviu1 | I go even further and say that symbols are bad unless they have a very well defined meaning in their problem domain, where their problem domain isn't programming. |
01:43:41 | Varriount | flaviu1: You must not be a big fan of Perl then. |
01:46:53 | flaviu1 | I guess not, for few reasons: $variables are crap, -> is redundant, and semicolons/braces |
01:47:46 | flaviu1 | I don't see problems with symbols, except for ~= regex, which is fairly typical |
01:52:54 | flaviu1 | Sometimes, I even think Java may be right in many ways |
01:53:16 | Varriount | *gasp* |
01:53:36 | flaviu1 | Java has many problems, but over-shorted names is rarely one of them. |
01:53:37 | Varriount | flaviu1! What are you saying! It can't be! |
01:55:26 | flaviu1 | What the programmer wants is different from what he thinks he wants, and even more different from what other programmers want. |
01:55:27 | flaviu1 | When the programmer is forced into doing things one way, the programmer is slightly less happy, but everyone else is much happier with the results. A bit of a trade off |
01:55:44 | flaviu1 | I'm sure there are ways to allow integer overloading without a trade-off |
01:56:08 | flaviu1 | Python's system is interesting, but nowhere near perfect |
01:57:07 | Varriount | flaviu1: http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html |
01:57:31 | flaviu1 | "Java has many problems, but over-shorted names is rarely one of them" |
01:57:58 | Varriount | I know, I just wanted to post that. |
01:58:15 | fowl | flaviu1, if i gave << a name it would have to be "st", how is that any better |
01:58:24 | flaviu1 | what does << mean? |
01:58:31 | fowl | store/write |
01:58:44 | Varriount | fowl: Correction, make a *meaningful* name |
01:58:56 | flaviu1 | ok, so what about `objectToStoreWithin.store(objectToStore)`? |
01:59:17 | flaviu1 | or `outputStream.write(myObject)`? |
02:00:07 | flaviu1 | I'm a bit meh on not using parenthesis, but I don't care too much about that |
02:01:09 | flaviu1 | Araq isn't really the guy you want to be getting naming conventions from, I'd prefer `AbstractSingletonProxyFactoryBean` over `TAbsSingProxFacBn` |
02:01:42 | fowl | i would go crazy if i had to type it that often |
02:02:02 | flaviu1 | Varriount: BTW, java actually sort-of has metaclasses! |
02:02:22 | Varriount | flaviu1: Well, Araq doesn't really do TAbsSingProxFacBn that often. |
02:02:30 | flaviu1 | They use some sort of reflection black magic, but it works. They call them proxies |
02:02:49 | Varriount | We try to shame him out of doing such things, where we can. |
02:03:13 | flaviu1 | fowl: So don't, do wr<Tab> |
02:05:14 | flaviu1 | IMO, a bit more typing takes an insignificant amount more time, and saves others a lot of time. Its your code of course, do things however you want though |
02:05:36 | Varriount | "Code is read more often than it is written" |
02:06:41 | flaviu1 | pretty much my thoughts |
02:07:38 | flaviu1 | On unrelated topics, I've noticed some nice effects with the method order being significant! |
02:08:45 | flaviu1 | You can easily and safely refactor a method that isn't exported and you only need to check the methods below it! |
02:13:25 | flaviu1 | I wonder how plug-and-play modules might be accomplished in Nimrod. I'm not really satisfied with a tuple of function pointers or dynamic dispach. |
02:14:08 | Varriount | flaviu1: What about an object composed of procedure pointers? |
02:14:31 | flaviu1 | Same thing as a tuple, but its called a different name. |
02:14:53 | flaviu1 | I'm not a big fan of Nimrod's tuples, I think they do too much |
02:16:10 | fowl | good night |
02:16:16 | flaviu1 | night |
02:17:10 | flaviu1 | sorry Araq, I know I complain too much about the language |
02:17:41 | Varriount | flaviu1: Don't worry, we all complain about the language. Even Araq does it from time to time. |
02:17:59 | * | brson quit (Quit: leaving) |
02:18:33 | flaviu1 | Well, this isn't the first time I've mentioned tuples. And I still don't have a PR to fix it, so I'm not fully justified in complaining |
02:39:25 | * | springbok joined #nimrod |
02:39:33 | * | Joe_knock quit (Quit: Leaving) |
02:39:36 | * | springbok quit (Changing host) |
02:39:36 | * | springbok joined #nimrod |
02:52:56 | * | hoverbear quit () |
02:57:45 | * | hoverbear joined #nimrod |
03:10:21 | * | BitPuffin quit (Ping timeout: 252 seconds) |
03:14:14 | * | def- joined #nimrod |
03:17:29 | * | def-_ quit (Ping timeout: 252 seconds) |
03:55:42 | * | xenagi quit (Quit: Leaving) |
04:12:52 | * | BitPuffin joined #nimrod |
04:13:43 | * | brson joined #nimrod |
04:14:12 | * | brson quit (Client Quit) |
04:22:11 | * | brson joined #nimrod |
04:27:45 | * | caioariede quit (Ping timeout: 240 seconds) |
04:28:48 | * | caioariede joined #nimrod |
04:57:19 | * | ehaliewicz joined #nimrod |
05:04:15 | * | caioariede quit (Ping timeout: 240 seconds) |
05:39:14 | * | shodan45 quit (Quit: Konversation terminated!) |
05:50:43 | * | flaviu1 quit (Ping timeout: 245 seconds) |
06:06:41 | * | Demos quit (Read error: Connection reset by peer) |
06:19:55 | * | bjz joined #nimrod |
06:19:56 | * | bjz_ quit (Read error: Connection reset by peer) |
06:27:31 | * | hoverbear quit () |
06:29:27 | * | brson quit (Ping timeout: 252 seconds) |
06:29:50 | * | bjz_ joined #nimrod |
06:30:43 | * | bjz quit (Ping timeout: 276 seconds) |
06:31:30 | * | brson joined #nimrod |
06:35:11 | * | bjz_ quit (Ping timeout: 255 seconds) |
06:41:55 | * | brson quit (Ping timeout: 252 seconds) |
06:43:53 | * | brson joined #nimrod |
06:48:56 | * | bjz joined #nimrod |
07:13:46 | NimBot | Araq/Nimrod new_spawn b781737 Araq [+1 ±2 -0]: bugfix: codegen for promises |
07:22:17 | * | kunev joined #nimrod |
07:35:43 | * | OrionPK quit (Ping timeout: 252 seconds) |
08:04:16 | * | zahary quit (Quit: Leaving.) |
08:09:49 | * | phatypus joined #nimrod |
08:10:15 | * | phatypus left #nimrod (#nimrod) |
08:12:34 | * | kunev quit (Ping timeout: 240 seconds) |
08:13:30 | * | kunev joined #nimrod |
08:32:42 | * | io2 joined #nimrod |
09:02:41 | * | springbok quit (Ping timeout: 264 seconds) |
09:20:58 | * | ehaliewicz quit (Ping timeout: 240 seconds) |
09:28:08 | * | brson quit (Quit: leaving) |
10:47:16 | EXetoC | is it possible to selectively load OpenGL extensions? |
10:56:02 | * | lyro joined #nimrod |
11:05:43 | * | silven quit (Ping timeout: 245 seconds) |
11:29:22 | * | springbok joined #nimrod |
11:29:46 | * | springbok is now known as Guest6173 |
11:35:10 | * | saml_ joined #nimrod |
11:48:14 | * | bjz_ joined #nimrod |
11:49:02 | * | kemet joined #nimrod |
11:50:53 | * | kemet quit (Client Quit) |
11:51:46 | * | bjz quit (Ping timeout: 240 seconds) |
12:16:29 | * | untitaker quit (Ping timeout: 264 seconds) |
12:21:11 | * | Guest6173 is now known as springbok |
12:21:25 | * | springbok quit (Changing host) |
12:21:25 | * | springbok joined #nimrod |
12:21:46 | * | untitaker joined #nimrod |
12:51:25 | * | saml_ quit (Ping timeout: 252 seconds) |
12:52:09 | * | eigenlicht quit (Ping timeout: 252 seconds) |
13:42:17 | * | BitPuffin quit (Ping timeout: 264 seconds) |
13:50:57 | * | darkf quit (Quit: Leaving) |
13:52:01 | * | OrionPK joined #nimrod |
14:18:49 | * | PortableEXetoC joined #nimrod |
14:19:51 | * | PortableEXetoC2 joined #nimrod |
14:23:49 | * | PortableEXetoC quit (Ping timeout: 252 seconds) |
14:29:48 | * | flaviu1 joined #nimrod |
14:32:12 | * | caioariede joined #nimrod |
14:56:36 | * | BitPuffin joined #nimrod |
15:02:02 | * | olahol quit (Quit: Lost terminal) |
15:03:55 | * | kunev quit (Quit: leaving) |
15:29:53 | * | caioariede quit (Ping timeout: 245 seconds) |
15:39:36 | * | caioariede joined #nimrod |
15:42:19 | * | Johz joined #nimrod |
15:53:47 | * | PortableEXetoC2 quit (Quit: cake) |
15:54:59 | * | nanda` joined #nimrod |
16:04:40 | * | nanda` quit (Ping timeout: 276 seconds) |
16:11:46 | * | bjz_ quit (Read error: Connection reset by peer) |
16:11:53 | * | bjz joined #nimrod |
16:14:07 | * | hoverbear joined #nimrod |
16:16:22 | * | Johz quit (Quit: Leaving) |
16:17:13 | * | bjz quit (Ping timeout: 252 seconds) |
16:40:01 | * | brson joined #nimrod |
16:51:30 | * | Demos joined #nimrod |
17:03:35 | NimBot | Araq/Nimrod new_spawn fbadbb3 Araq [+0 ±1 -0]: hopefully faster barrier implementation |
17:03:35 | NimBot | Araq/Nimrod new_spawn 7303c32 Araq [+0 ±1 -0]: fixed codegen for barriers |
17:04:53 | dom96 | hi |
17:04:57 | Araq | EXetoC: it already only loads what you use |
17:19:42 | * | q66 joined #nimrod |
17:19:42 | * | q66 quit (Changing host) |
17:19:42 | * | q66 joined #nimrod |
17:29:05 | * | ehaliewicz joined #nimrod |
17:33:22 | * | ehaliewicz quit (Ping timeout: 240 seconds) |
17:42:33 | EXetoC | Araq: yes but at compile time, right? |
17:45:45 | Araq | right |
17:46:05 | * | Jehan_ joined #nimrod |
17:46:50 | * | Jesin quit (Quit: Leaving) |
17:50:29 | * | Johz joined #nimrod |
17:56:08 | EXetoC | it's just a matter of not calling loadExtensions I guess, but that should be good enough in most cases |
18:00:54 | EXetoC | perhaps I need function pointers then |
18:19:36 | Araq | Jehan_: already found some bugs |
18:20:09 | Araq | still crashes on linux though, I think |
18:22:08 | Jehan_ | Araq: Excellent. Not the crashes on Linux, of course. |
18:22:17 | * | brson_ joined #nimrod |
18:22:31 | * | brson quit (Quit: leaving) |
18:23:42 | Araq | I also found out that the barrier that I need is called a "dynamic" barrier ;-) |
18:25:10 | Jehan_ | I still think that sync() is fundamentally too limited. :) |
18:26:02 | Jehan_ | Don't get me wrong, it's a nice convenience feature to have, but I'm not expecting to see it used much in performance-critical code. |
18:26:35 | Araq | "parallel" doesn't use sync() at all |
18:28:33 | Araq | but I guess you mean the *concept* of sync |
18:28:49 | Jehan_ | I was under the impression you wanted a barrier for spawn + sync? |
18:29:57 | Araq | not sure what you mean, "parallel" uses a barrier, but not 'sync' |
18:29:59 | Jehan_ | In general, any place where a lot of threads coordinate their activities is a potential bottleneck. |
18:30:24 | Jehan_ | Araq: Hmm. Then I must have misunderstood you. Or misremembered. |
18:30:29 | * | ehaliewicz joined #nimrod |
18:31:11 | Araq | well check out the tpi test |
18:31:52 | Araq | piU uses spawn + promises, piS uses parallel + spawn |
18:32:04 | Araq | neither use 'sync' |
18:34:09 | Araq | you can trade the barrier against promises which imply more heap allocations |
18:34:33 | Araq | the allocations are still thread local though |
18:35:07 | flaviu1 | Interesting. You can do apparently take the pointer of a label in C, and then call it. |
18:36:15 | Araq | flaviu1: that's a GCC extension |
18:36:26 | flaviu1 | I just saw that a few seconds ago |
18:36:45 | Jehan_ | Araq: Hmm, I thought the parallel statement waited until all threads were done? |
18:37:29 | Araq | Jehan_: only until all threads involved in the 'parallel' statement are done |
18:37:39 | Jehan_ | Yes, that's what I meant. |
18:37:49 | Jehan_ | But same difference. |
18:37:53 | Araq | yes, that's the barrier |
18:38:08 | Araq | this is what OpenMP does too fwiw |
18:38:35 | Jehan_ | Yup, and any kind of parfor statement ever. :) |
18:38:54 | Jehan_ | It's okay if that's all you're doing. But not necessarily efficient. |
18:39:23 | Jehan_ | Consider the case where the computations don't all take the same time. |
18:40:15 | Jehan_ | Which is pretty common especially when you use big integers, iterative computations, or something like that. |
18:40:16 | Araq | again, the cost of your preferred way is a Promise-like return type |
18:40:59 | Jehan_ | Not necessarily my "preferred" way. |
18:41:32 | Jehan_ | But often being able to process results in the order that they are actually finished is pretty important for performance. |
18:41:38 | Jehan_ | Amdahl's law. |
18:44:32 | Araq | well since we provide both you have nothing to complain about :P |
18:44:32 | Jehan_ | There's definitely room for the parfor approach. You want to minimize "time spent to write a program" + "time spent executing the code" often enough. And parfor is simple and easy to understand, so that keeps the first part low. |
18:45:05 | Jehan_ | Araq: Don't misunderstand me, I'm not complaining. Or at least trying not to. :) |
18:45:20 | Araq | actually my parfor also proves the absense of race conditions |
18:46:00 | Araq | and when all your spawn'ed functions are .noSideEffect it's fully deterministic |
18:46:18 | Jehan_ | Yes, you mentioned that, and that's really nice if it works for a fair amount of interesting use cases. |
18:50:07 | Jehan_ | What I was getting at is that most of the time performance is about breaking a computation in reasonably sized jobs and keeping each processor's pipeline of jobs saturated. And yes, that's sadly simplistic. |
18:51:05 | Jehan_ | Though there are interesting aspects when jobs are to reuse and share each other's work through shared memory. |
18:55:46 | * | brson_ quit (Ping timeout: 240 seconds) |
19:01:13 | Araq | Jehan_: another design problem is that Promise is a 'ptr' and unsafe. We can wrap it another 'ref' to make it safe, but I'm not sure the overhead is justified |
19:01:44 | Jehan_ | Araq: Yeah, I saw that. |
19:02:37 | Araq | with even more sing-and-dance we can also make it a 'ref' without the 'ptr' indirection |
19:03:39 | Araq | I mean sing-and-dance between threads |
19:06:48 | dom96 | oh look, a new programming language from Apple; https://developer.apple.com/swift/ |
19:10:41 | fowl | they knowingly took a name that was used already |
19:10:45 | fowl | Looking for the Swift parallel scripting language? Please visit http://swift-lang.org |
19:11:49 | EXetoC | lame |
19:11:52 | Jehan_ | Araq: I haven't looked at it in detail yet, but I suspect it's similar to a general problem I'm working on, which is how to efficiently determine the lifetime of an object that may be referenced from multiple (thread-local or shared) heaps. |
19:12:51 | Jehan_ | fowl: That has happened to more than one programming language. |
19:13:04 | * | brson joined #nimrod |
19:13:04 | Jehan_ | Go and Ruby come to mind immediately. |
19:13:58 | dom96 | I don't think they can do much about it unless they actually own that name legally. |
19:14:51 | Jehan_ | dom96: Yeah, a trademark is about the only effective way to stop it. |
19:15:23 | Jehan_ | On the other hand, too many damn names are already being used by one abandoned language or another. |
19:15:27 | dom96 | Argh. I need iOS 7 to get that iBook. |
19:15:31 | dom96 | Screw that. |
19:17:03 | dom96 | I'd rather wait for the inevitable mass amounts of blog posts discussing how much people love this language. |
19:17:26 | Jehan_ | Araq: As far as it being expensive is concerned: As long as it takes less than 100 clock cycles or so (which is what you can expect the most basic forms of synchronization to take), I wouldn't worry much about it. |
19:17:42 | * | dom96 predicts a "Why Apple's Swift will change how children learn programming" in the next few days |
19:17:56 | dom96 | Followed by a "Why Apple's Swift changes nothing" |
19:18:18 | Jehan_ | dom96: Right now it seems to have a pretty narrow target audience. |
19:18:53 | dom96 | Jehan_: Yeah, right now. Won't be long before people start trying to write web servers in it. |
19:18:58 | dom96 | And then start comparing it to Go. |
19:19:13 | Johz | "Apple's Swift Considered Harmful"? |
19:19:14 | Jehan_ | dom96: Heh. :) |
19:19:39 | Jehan_ | I expect at least one blog post titled "A Modest Proposal" or something along these lines. :) |
19:20:25 | fowl | proposal: 5 year ban on new programming languages |
19:21:19 | EXetoC | fowl: specifically for cocoa? so gay and stuff |
19:22:28 | * | xtagon joined #nimrod |
19:32:47 | EXetoC | lock-in <3 |
19:33:13 | * | Matthias247 joined #nimrod |
19:38:53 | * | caioariede quit (Ping timeout: 252 seconds) |
19:39:47 | * | caioariede joined #nimrod |
19:44:43 | flaviu1 | Well, I've been looking into alternate error mechanisms, and it comes down to Exceptions and Either Monads. Araq's exception stack idea is basically Either, but stored in another area of memory. |
19:44:43 | flaviu1 | Lisp does some cool things with exceptions and allows you to return control back to the thrower after catching. |
19:45:36 | Araq | flaviu1: I disagree. An exception stack is not the Either monad at all |
19:45:40 | Jehan_ | You mean the condition system? |
19:45:56 | dom96 | IMO an Either only makes sense for things like `[]` for PJsonNode |
19:46:04 | Araq | yeah, that's what flaviu1 is talking about |
19:46:16 | Jehan_ | flaviu1: Also, there are other approaches. |
19:46:31 | * | ehaliewicz quit (Ping timeout: 260 seconds) |
19:46:35 | flaviu1 | Jehan_: I'd consider C's error flag a rudimentary Either |
19:46:35 | Araq | also a condition system doesn't work well with in an effect system though I don't remember the details really |
19:46:55 | Araq | *with an effect system |
19:47:29 | Jehan_ | flaviu1: Not what I'm talking about. |
19:47:36 | Jehan_ | flaviu1: E.g. https://www.usenix.org/legacy/event/osdi04/tech/full_papers/candea/candea.pdf |
19:49:03 | Jehan_ | flaviu1: All of Prolog is also pretty much an alternative approach (i.e., where all functions are partial by design). |
19:50:12 | flaviu1 | I don't see microreboots being suitable for all purposes |
19:50:38 | Jehan_ | flaviu1: Neither is any of the existing exception handling mechanisms. |
19:53:54 | flaviu1 | You can coerce lots of things into Either and exceptions, but microreboots are only useful in very specific areas |
19:55:10 | flaviu1 | IDK how prolong does it, but using partial function is a good idea, similar to lisp continuations because control flow automatically flows back into the caller of the partial function |
19:56:11 | flaviu1 | Partial functions seem a lot like a more powerful of Either |
19:56:22 | Jehan_ | Umm, Prolog is a declarative language. Failure of a predicate is just normal control flow. |
19:57:34 | flaviu1 | I know that prolog is fancy and finds a solution that meets your constraints, but I was thinking of explicitly specifying partial functions |
19:58:17 | Jehan_ | What do you mean by that? |
19:58:18 | flaviu1 | I know what I'm calling partial functions is likely different from what prolog says they are |
19:58:23 | dom96 | How are partial functions related to Either? |
19:58:51 | Jehan_ | Well, Prolog calls them predicates, but essentially they're partial functions. |
19:58:59 | flaviu1 | dom96: Let me write some pseudocode |
19:59:12 | Jehan_ | Any predicate can either succeed (and instantiate one or more of its arguments with values in the process) or fail. |
19:59:38 | dom96 | But that reminds me, we need a curry macro in Nimrod. |
20:00:04 | BitPuffin | dom96: indeed |
20:00:14 | Jehan_ | The approach I've settled on myself maps to exceptions in a fairly straightforward way, but works cleanly with preconditions and a few other things. |
20:03:10 | Jehan_ | Essentially, a try expression maps a partial function with result type T into a total function with result type Try[T] (and yes, that's a variant of Either[T,Error], basically). Combined with a rollback mechanism for code that has side effects. |
20:04:48 | Jehan_ | Also have considered calling it Partial[T] instead of Try[T], but not sure if that makes things clearer at all. |
20:07:16 | dom96 | Perhaps I am not familiar with partial functions. |
20:07:24 | dom96 | I'm thinking of partial function application in Haskell. |
20:08:11 | Jehan_ | dom96: In mathematics, a partial function is simply a function that is not defined for all values of its domain. |
20:08:41 | Jehan_ | And in this context, an exception is basically telling the caller that it's undefined for this value. |
20:09:13 | flaviu1 | dom96: https://gist.github.com/flaviut/a89aa20b426018dd0319 |
20:09:32 | Jehan_ | You can also do this by having all functions that may error return Option[T] or something like it. |
20:09:35 | dom96 | Jehan_: I see. Interesting. |
20:09:56 | flaviu1 | dom 1 sec, I made a few mistakes |
20:10:05 | Jehan_ | But that creates a lot of burden for the callers, many of which just want to say: If the function I call is undefined, so am I. |
20:10:21 | dom96 | I think that in Rust an IoError[T] is essentialy an alias to an Option[IoError, T] |
20:10:44 | Jehan_ | You mean Either[IoError, T]? |
20:11:06 | dom96 | I assumed Option is a synonym for Either. |
20:11:11 | Jehan_ | dom96: One nice thing about this approach is that it works extremely well with preconditions. |
20:11:58 | bstrie | dom96: dom96 I think you mean IoResult, not IoError. IoResult is just a typedef for Result<T, IoError> where Result is the Rust version of Haskell's Either |
20:12:19 | dom96 | bstrie: Oh yes. That's it. |
20:12:19 | flaviu1 | dom96: ok, I updated it |
20:12:20 | bstrie | dom96: Option is the Rust equivalent of Haskell's Maybe |
20:12:21 | Jehan_ | dom96: Option[T] is basically a typesafe null pointer, somewhat crudely put. |
20:12:32 | dom96 | bstrie: Silly me heh. |
20:13:08 | dom96 | Jehan_: Yeah. I've used Haskell for a bit quite some time ago so i'm familiar with the concept. |
20:13:08 | flaviu1 | dom96: Option is not a synonym for Either. Option[Something] == Either[Something, void] |
20:13:28 | dom96 | flaviu1: I see. |
20:14:41 | * | brson quit (Ping timeout: 264 seconds) |
20:14:44 | dom96 | flaviu1: In regards to the gist, that would be nice but it would require some modifications to Nimrod stdlib. |
20:14:59 | dom96 | actually, not some but a lot. |
20:15:15 | flaviu1 | Well, obviously. Nimrod would also need to get support for partial functions |
20:15:24 | flaviu1 | And pattern matching |
20:16:17 | Klaufir | what are the rules behind that proc what(s:string) can be later called like this: what"asdfa" |
20:17:11 | flaviu1 | Klaufir: I'm not sure what you're asking, but the manual covers that well. http://build.nimrod-lang.org/docs/manual.html#generalized-raw-string-literals |
20:17:39 | dom96 | I think Klaufir wants to know what kind of proc names are allowed. |
20:17:39 | Klaufir | thanks, thats what i have been looking for |
20:26:34 | dom96 | https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html |
20:26:46 | dom96 | We should copy the pattern matching :P |
20:28:45 | Jehan_ | dom96: Umm … :) |
20:29:06 | dom96 | I know... i'm a hypocrite. |
20:29:45 | * | brson joined #nimrod |
20:29:53 | Jehan_ | I was assuming you were being facetious. |
20:29:53 | * | radsoc joined #nimrod |
20:29:58 | flaviu1 | dom96: Check out Scala pattern matching |
20:30:26 | Jehan_ | And what flaviu1 said. |
20:30:59 | BitPuffin | Araq: you are probably gonna get mad, but it would be cool if you could overload generics. So that I could have type TVector [T, D: static[int]] = ... and after that type TVector[T, B: array[0..TVector.D-1, TVector] or whatever |
20:31:01 | Jehan_ | If Scala could trim its type system a bit and rid itself of its dependency on the JVM, it'd be one of my favorite languages. |
20:31:03 | dom96 | I see. Well, like many I am blinded by the Apple logo. |
20:31:07 | BitPuffin | that is, in order to support non-standard basis |
20:31:34 | flaviu1 | *like many, I |
20:31:39 | BitPuffin | Araq: also a minor problem with the TMatrix[T, R, C, O = false] approach is that I wouldn't want O to be visible to the user |
20:31:56 | Araq | is your name filwit? |
20:32:02 | flaviu1 | Jehan_: Don't forget compilation speed |
20:32:17 | BitPuffin | my name? |
20:32:27 | Jehan_ | flaviu1: Compilation speed with zinc is acceptable these days. |
20:32:36 | Jehan_ | flaviu1: Well, at least for the stuff I'm doing. :) |
20:32:40 | flaviu1 | Although nimrod has the same problems to solve in terms of compilation, they're just called typeclasses |
20:33:17 | dom96 | How would this look in Scala? 'case let x where x.hasSuffix("pepper"):' |
20:33:52 | flaviu1 | dom96: It wouldn't fit in IRC |
20:34:31 | flaviu1 | You'd set up a custom extractor, which necessitates a new singleton object, which is already 5 lines of code |
20:34:46 | dom96 | And yet you still prefer Scala's pattern matching? |
20:36:07 | flaviu1 | But the important lines of code would come down to `def unapply(a: Suffixable): Option[String] = if(a.hasSuffix("pepper")) return Option(a) else return None` |
20:36:29 | dom96 | That's not really pattern matching anymore. |
20:36:48 | flaviu1 | Yeah it is. Thats the boilerplate for the pattern matching |
20:37:18 | dom96 | In that case I go back to my previous question :P |
20:37:30 | flaviu1 | Then you can do `a match{ case PepperSufix(a) => do whatever }` |
20:38:03 | flaviu1 | Where PepperSufix is the name of the singleton object you put the unapply method inside of |
20:38:43 | flaviu1 | Wait, no, its simpler |
20:38:48 | flaviu1 | much much simpler |
20:39:19 | flaviu1 | `a match {case a: Suffixable if a.hasSuffix("pepper") => do stuff }` |
20:40:20 | dom96 | well then it's pretty similar |
20:41:13 | Jehan_ | flaviu1: Yup. Scala largely mirrors ML when it comes to basic matching facilities (and then adds the OO stuff on top). |
20:41:29 | BitPuffin | ML ftw |
20:41:57 | Jehan_ | dom96: Yes, but the syntax is cleaner and match is more powerful in general. |
20:43:17 | Jehan_ | BitPuffin: I've written a fair amount of OCaml in my time. :) |
20:43:46 | dom96 | Fair enough. I unfortunately can't learn much from looking at simple pattern matching examples. |
20:43:48 | Jehan_ | CIL is a very neat tool in particular if you need to massage C code. |
20:44:10 | dom96 | I also don't have a strong preference and in fact I do like Scala's syntax. |
20:44:16 | Jehan_ | And by CIL I don't mean the .NET stuff in this case. |
20:44:32 | dom96 | I tried to create a pattern matching macro and got stuck because of this bug: https://github.com/Araq/Nimrod/issues/1120 |
20:45:52 | Jehan_ | dom96: Pattern matching is nice, but it's not nearly as important for Nimrod as for a functional language (let alone a declarative one). |
20:45:54 | BitPuffin | Jehan_: it's great |
20:46:20 | dom96 | Jehan_: Yeah, but everyone wants functional features nowadays. I think we need them for good adoption. |
20:46:40 | Jehan_ | dom96: For good adoption or for good press? :) |
20:46:48 | fowl | dom96, i hit this before, i just made a filter function |
20:46:59 | dom96 | Jehan_: both |
20:47:03 | fowl | dom96, it checks if its do with no params or stmt list, returns the stmt list |
20:47:16 | BitPuffin | I think it's good to stick to a functional style as long as it is practical |
20:47:16 | dom96 | Jehan_: I think that the latter improves the former :) |
20:47:37 | BitPuffin | but when there is a way that is easier to maintain you should use that |
20:47:43 | Jehan_ | dom96: I like functional languages (see my comments about OCaml above and in general), but I'm generally not in favor of turning a horse into a cow. |
20:48:29 | EXetoC | how about a horse/cow mutant. that'd be awesome |
20:49:01 | Jehan_ | dom96: Deconstructing data via pattern matching is pretty essentially for a lot of functional languages because that's their way to work on partial state, but imperative languages have other tools. |
20:49:35 | dom96 | fowl: That's a nice workaround, will try that once I decide to go back to trying to get this macro to work. |
20:49:50 | flaviu1 | EXetoC: How about a horse/donkey mutant... |
20:49:50 | Jehan_ | dom96: For imperative languages it's a nice convenience feature for some use cases. |
20:49:55 | flaviu1 | Uh, a mule :P |
20:50:06 | Araq | actually the deconstruction solves quite some problems when it comes to memory safety but that wasn't obvious to me when I decided to leave them out |
20:50:10 | fowl | dom96, in the pattern matching, how do you know whether "x" is an enum type (Nothing, Just) or a variable that should be filled with a value? |
20:51:15 | dom96 | fowl: Good question. I haven't thought about that yet so I don't have an answer. |
20:51:41 | Jehan_ | Araq: You can alternatively use objects + inheritance. :) |
20:51:59 | Araq | lol no way, Jehan_ |
20:52:18 | Araq | oh you mean for the safety aspects |
20:52:25 | Araq | yeah |
20:52:34 | Jehan_ | Well, an ML variant type is really only a one-level inheritance hierarchy with a rigid structure. :) |
20:52:56 | flaviu1 | fowl: Scala does it hackashly, uppercase first letter means its a type, lowercase first letter signifies a value |
20:53:28 | Jehan_ | I note that Scala also uses inheritance (case classes) for that. |
20:53:29 | fowl | flaviu1, nimrod cant do it that way |
20:53:53 | flaviu1 | No, it can't, and its a hack, so if it could, it shouldn't |
20:54:09 | fowl | it makes sense, if the language has capitalization rules |
20:54:27 | dom96 | Nimrod /may/ soon do that though. |
20:54:32 | flaviu1 | Scala doesn't, but the capitalization conventions are very entrenched. |
20:54:37 | * | filwit joined #nimrod |
20:55:12 | Jehan_ | flaviu1: Interestingly enough, Sather used capitalization to distinguish between classes and other identifiers, as I recall. |
20:55:28 | flaviu1 | If its enforced, then its good |
20:55:34 | Jehan_ | Sather was another language that was ahead of its time. |
20:56:03 | Jehan_ | Interestingly, it also compiled to C (like Nimrod and both ISE Eiffel and SmartEiffel). |
20:56:55 | flaviu1 | I like the synaptic sugar for operators aspect |
20:57:20 | fowl | ? |
20:57:37 | flaviu1 | Using + binds to .add() |
20:58:06 | flaviu1 | err .plus() |
20:58:27 | Jehan_ | fowl: Each operator had a normal identifier that it was equivalent to. |
20:58:29 | fowl | dom96, i dont think a useful match() is possible without compiletime typeinfo |
20:58:49 | Jehan_ | fowl: And x+y was the same as x.plus(y) as a result. |
20:59:15 | Klaufir | is there somewhere an example of using nimrod channels? |
20:59:26 | Jehan_ | Made operator overloading trivially easy. |
21:00:04 | Jehan_ | Klaufir: Umm, I've written code with channels, but I'm not sure if I have it in a public place somewhere. |
21:02:33 | * | zahary joined #nimrod |
21:02:48 | filwit | just read logs, Swift's syntax looks clean, but screw a non-open dev-lockin. |
21:03:23 | Araq | huh? ofc you can do that in nimrod today |
21:03:43 | BitPuffin | Swift? |
21:04:05 | flaviu1 | BitPuffin: Some language apple came up with to replace objective C |
21:04:05 | filwit | who was that directed too, Araq? |
21:04:14 | BitPuffin | flaviu1: thank god |
21:04:19 | Araq | a macro can easily decide to be case sensitive |
21:04:33 | Araq | the identifiers are not normalized |
21:05:37 | fowl | Araq, i'm in a macro and i want to match the expression x for List(item,next), i can assume the layout is case (somename): discriminant it: T next: List[T] |
21:06:21 | fowl | Araq, how can i build code if i dont know (somename), it, next |
21:06:55 | filwit | Araq: speaking of macros, have you given anymore thought on the best way to support '*' (export) and {.pragmas.} in macro parameters? |
21:06:57 | fowl | i can write a macro logtypeinfo: to record info from type defs.. O_O |
21:08:49 | filwit | Araq: fowl brought up that `class Foo*: ...` would be a post-fix operator, which i forgot wasn't part of Nimrod. I don't think this situation justifies the need for a post-fix (i don't really know the issues with that), but it would be very nice to be able to write that for OOP support |
21:09:15 | Varriount | Ohi filwit |
21:09:21 | filwit | hi Varriount |
21:09:30 | EXetoC | moar ooop! |
21:10:35 | filwit | Araq: i was thinking a special-case macro/template-only {.keyword.} pragma (or whatever it would be called) would work well (where it would allow for * postfix and {.prags.}) |
21:10:51 | Jehan_ | OOP support? Nimrod's OO facilities strike me as being just fine. |
21:11:14 | filwit | Araq: idk if that would be really ugly to implement or not though, it was just my initial idea. |
21:11:15 | Jehan_ | Okay, I'd like to be able to write "class" (or anything, really) instead of "ref object", but that's a pretty small thing. |
21:12:55 | filwit | Jehan_: i'm not talking about built-in OOP in Nimrod.. but OOP through custom macros... and Nimrod's built-in OOP is behind other OOP languages (no multi-inheritance or multi-interfaces). |
21:13:23 | filwit | Jehan_: thing is, Nimrod's OOP is just fine considering we can just construct our own via macros, so it's whatever |
21:13:35 | EXetoC | don't care for MI |
21:14:09 | filwit | Multi-inheritance or Multi-interface? |
21:14:14 | Jehan_ | filwit: The lack of multiple inheritance is greatly mitigated by having multiple dispatch and parametric polymorphism. |
21:14:25 | Matthias247 | hmm, while I don't care for multi-inheritance I would really like interfaces |
21:14:30 | Jehan_ | filwit: multiple interfaces are a crippled form of multiple inheritance. |
21:15:00 | Jehan_ | But one and the same thing, really. |
21:16:22 | BitPuffin | I wouldn't mind either of the MI's |
21:16:25 | Jehan_ | The thing is that Nimrod uses a multi-method approach and thus is arguably closer to Dylan or CLOS than Eiffel, Java, or C++. |
21:16:26 | BitPuffin | they can be useful |
21:16:28 | BitPuffin | nuff said |
21:16:30 | Varriount | Hm. What is "Parametric Polymorphism"? |
21:16:46 | filwit | Again, we can build our own MI in Nimrod |
21:17:25 | Jehan_ | BitPuffin: I like MI inheritance, too, but its absence is less crippling than in other languages. |
21:17:28 | Varriount | filwit: Hows the CSS going? |
21:17:30 | Jehan_ | Varriount: Generics. |
21:17:49 | filwit | Varriount: working on it now + something for my own website |
21:18:31 | Jehan_ | Varriount: People use subtyping polymorphism often where parametric polymorphism is better. Hence what I said about it mitigating the absence of MI. |
21:18:47 | BitPuffin | Jehan_: perhaps |
21:20:04 | * | usr joined #nimrod |
21:20:08 | * | usr left #nimrod (#nimrod) |
21:20:22 | filwit | Jehan_: i don't think the OOP crowd would agree parametric polymorphism is even as good as interfaces in most cases, unless i'm not understanding the term correctly. |
21:21:15 | Jehan_ | filwit: It's something different. My point was that inheritance is often abused where parametric polymorphism would have been the better choice to begin with. |
21:22:29 | filwit | Jehan_, this sounds like a religious argument, and isn't a good way to get folks interested in a language. Even if it's true (which i'm not entirely in agreement with). |
21:23:05 | * | radsoc quit (Ping timeout: 264 seconds) |
21:23:31 | Jehan_ | filwit: Not really religious. It's related to composition vs. inheritance. |
21:24:28 | * | caioariede quit (Ping timeout: 245 seconds) |
21:24:53 | filwit | "don't worry guys, you just have to THINK differently than you always have... then you can actually build stuff" - doesn't matter what you say man, that's a bad advertising position, not matter how you dice it |
21:24:53 | * | tinAndi joined #nimrod |
21:25:53 | filwit | but again, i'm not complaining about this, macro's can build any and all OOP forms in Nimrod, which is much better than other languages can boast |
21:26:01 | fowl | components are obviously the best way to aggregate data and behavior |
21:26:04 | filwit | we just need to build them, and advertising that ability |
21:26:19 | Jehan_ | filwit: I'm not talking about advertising here. I was talking about the language design/software engineering aspects. |
21:26:47 | Jehan_ | Not everyone is here for advocacy. |
21:27:14 | filwit | Jehan_: okay, well that's fine. I disagree somewhat with you, but would have to start giving code examples and stuff which i don't want to get into ATM. |
21:27:19 | * | Johz quit (Ping timeout: 252 seconds) |
21:27:28 | * | Kazimuth joined #nimrod |
21:27:56 | Jehan_ | filwit: Fair enough. |
21:31:48 | * | aboutGod joined #nimrod |
21:35:24 | Araq | flaviu1: I wrote down my reasons of not having pattern matching built into the language in the DrDobbs article |
21:36:09 | * | caioariede joined #nimrod |
21:36:55 | * | aboutGod left #nimrod (#nimrod) |
21:37:01 | Matthias247 | just read the "Swift Tour". Quite impressed. But I'm wondering if this "completly new" or more or a less a new and clean syntax for objective-c |
21:38:56 | * | Joe_knock joined #nimrod |
21:39:53 | filwit | it's better syntax than ObjC (by a long shot) and memory-safe (so 'better' than C/C++ for common folks).. so I would say it's a win-win for Apple devs... but only for them, which is the problem with it. |
21:40:53 | Jehan_ | filwit: I think the target audience is AppStore developers who need a more accessible way to write apps. |
21:41:12 | Araq | both Google and Apple would already use and embrace c# if it weren't from Microsoft ... |
21:41:40 | Matthias247 | Jehan_: I also think so. Objective-C is too complex (or low level) for the majority of app-devs |
21:42:04 | Matthias247 | Araq: maybe also true. Swift seems to take a lot from objective-c |
21:42:08 | Matthias247 | ehm, from C# |
21:42:09 | Jehan_ | Araq: Yeah, Microsoft did burn too many bridges back then. |
21:42:23 | Matthias247 | properties, nullable types, "safe navigation operator", extension methods |
21:42:38 | Jehan_ | Which is unfortunate, because C# is a pretty good language. |
21:43:14 | Jehan_ | Not to mention that the CLR would be a better option than the JVM for many things. |
21:43:49 | Matthias247 | but mono is now gaining some more traction |
21:43:50 | Jehan_ | Matthias247: A lot of this stuff is from other languages originally. |
21:44:22 | Matthias247 | Jehan_: I'm sure. I don't know many of them. But C# made these features popular |
21:44:26 | Jehan_ | Matthias247: Mono still has some issues. Don't get me wrong, I like Mono, I've used Mono, but ... |
21:45:13 | Jehan_ | It's probably still one of the first options I'd consider if I had to write a mobile app. :) |
21:45:45 | filwit | Jehan_: yeah, and for them it's good. I just wouldn't ever use a language I felt was restricting me to a specific, profit-driven platform. |
21:46:06 | Matthias247 | performance of Swift vs. something like C++ or C# would be interesting. Guess they still usw message dispatching and ARC for everything |
21:46:22 | filwit | Jehan_: nothing against profit-driven in that statement, just saying I don't like the idea of being restricted due to business politics. |
21:46:44 | Jehan_ | filwit: Eh, Mono is open source. Xamarin sells mobile platform support (plus the right to link statically). |
21:47:01 | Matthias247 | but it's quite expensive I think |
21:47:22 | Jehan_ | The problem is that like any JIT platform, Mono is non-trivial to continue support for if Xamarin disappeared. |
21:47:27 | Matthias247 | colleague is using Mono/Xamarin as the backend for a cross-plattform tablet-app |
21:47:38 | * | tinAndi quit (Quit: ChatZilla 0.9.90.1 [Firefox 29.0.1/20140506152807]) |
21:47:43 | Matthias247 | he's loving it |
21:48:36 | Jehan_ | In stark contrast with Nimrod. If Araq suddenly gave up programming and decided to study Yoga in India, it could be maintained with comparative ease. |
21:49:03 | Jehan_ | Matthias247: It does cost quite a bit, but if you do this for a living, the value you get is worth it. |
21:49:11 | Matthias247 | maybe MS is now also putting support in Mono after they announcced that asp .net vnext can be run on it |
21:50:25 | Jehan_ | Practical problems with Mono are still speed and occasionally stability. |
21:51:39 | Jehan_ | And stability wouldn't be as much of an issue if debugging a JIT platform weren't such a pain. |
21:53:06 | Joe_knock | Is Mono a language? |
21:53:11 | * | superfunc joined #nimrod |
21:53:33 | Jehan_ | Joe_knock: No, Mono is a portable implementation of the .NET platform, basically. |
21:53:45 | Araq | hmm my "parallel" statement now works on Linux too... |
21:53:55 | Jehan_ | Araq: Congratulations! |
21:53:58 | Araq | that was easy ... |
21:53:59 | superfunc | I have emerged from final examinations with most of my sanity in tact; Hello, world. |
21:54:36 | Matthias247 | no let's see when MS strikes back with M# ;) |
21:54:47 | Araq | Jehan_: thanks but now I have no choice but to review PRs ... |
21:54:53 | Joe_knock | Jehan_: aah okay, that would explain why I've heard about "Mono for linux" |
21:55:22 | Jehan_ | Joe_knock: It's actually pretty impressive what they've accomplished. |
21:56:04 | Joe_knock | Matthias247: Did you see their #F? |
21:56:08 | Jehan_ | Joe_knock: For the longest time, C# + Mono was what I turned to when I needed a compiled language (for at least some resemblance of speed) with batteries included. |
21:56:38 | Matthias247 | Joe_knock: yes, I know F#. But I'm not a big fan of the functional style |
21:57:21 | dom96 | superfunc: lucky, I still got two left. |
21:57:51 | superfunc | Good luck man. I had all four in one day |
21:57:54 | superfunc | It was awful |
21:58:04 | Araq | dom96: tests/parallel/tpi.nim is the port of that Go code that you wanted to see btw |
21:58:58 | dom96 | superfunc: oh damn. I had two today and it was bad enough, 4 must be absolutely terrible. Also thanks, I wish you all the best too, even though you've already done them :) |
21:59:08 | dom96 | Araq: cool |
21:59:20 | superfunc | I'll have plenty more. Starting my PhD program in the fall |
21:59:55 | dom96 | superfunc: Awesome. I'm still in high school lol. |
22:00:07 | Jehan_ | dom96: For some reason, I didn't see the context and thought you were talking about having wisdom teeth pulled. |
22:00:11 | Jehan_ | :) |
22:00:47 | dom96 | Jehan_: hah. Maybe that says something about your worst fears. |
22:00:49 | superfunc | dom96: You're in a great spot dude. I wish I had starting programming that early |
22:01:07 | Jehan_ | dom96: Nah, I had them out years ago. :) |
22:01:08 | Varriount | dom96: We're all rooting for you! |
22:01:33 | Matthias247 | superfunc: the bad thing is he will be terribly bored in university ;) |
22:01:36 | Jehan_ | Varriount: I see what you did there. :) |
22:01:37 | Joe_knock | I always wondered what the 96 meant in dom96. I guess it was "year of birth". |
22:02:05 | superfunc | Matthias247: True that. Hopefully the theory classes will give him some challenge |
22:02:06 | dom96 | Joe_knock: Funnily enough it doesn't mean that. It doesn't mean anything really. My year of birth is 95 though. |
22:02:34 | dom96 | Joe_knock: I can only assume that when I picked out this nick dom95 was taken so I just increased the number, or maybe I didn't remember my year of birth correctly. |
22:02:43 | dom96 | I've been using this nickname since I was about 8 years old. |
22:02:45 | Matthias247 | superfunc: I think so. At least here in germany you won't do much programming in university anyway. Its 99% theoretical stuff |
22:02:46 | Araq | I thought it was something pornographic :P |
22:03:03 | Jehan_ | Matthias247: Depends on the university. |
22:03:09 | dom96 | Matthias247: That is indeed one of my fears. |
22:03:11 | superfunc | Matthias247: The US is kind of split, depending on the uni. |
22:03:22 | Jehan_ | And at the graduate level, what you're specializing in. |
22:03:28 | dom96 | Matthias247: But for now I'm worrying about getting the grades that I need to get in. |
22:03:53 | Matthias247 | Jehan_: true, FHs are better than universitys in that regard |
22:04:05 | superfunc | Matthias247: Mine was very theoretical, but it had a large set of practical electives, mostly because we are in the silicon valley and every kid wants to make the next iOS app. |
22:05:00 | Jehan_ | Matthias247: I didn't say it was better to have more programming. :) |
22:05:04 | Joe_knock | The next big app boom is enterprise apps. |
22:05:26 | flaviu1 | Joe_knock: Isn't it web apps and the cloud? |
22:05:32 | Matthias247 | dom96: are there special high requirements (apart from not to fail)? Here there are not - because they aren't too much people that want to do computer science anyway. Compared to to Medicine and other stuff |
22:06:11 | Joe_knock | flaviu1: Everything is in the cloud already. Maybe "enterprise apps in the enterprise cloud using the enterprise big data analytics software" |
22:06:12 | Jehan_ | Matthias247: The kind of open admission that Germany does is not all that common (internationally). |
22:06:13 | dom96 | Matthias247: It depends on the university but the one I am (hopefully) going to wants 3 Bs at A Level. |
22:06:40 | flaviu1 | dom96: Which two exams did you take today? |
22:06:47 | Matthias247 | superfunc: I have a colleague from the US and often have to to with US developers. And my impression is that they are on average better then german absolvents for practical stuff |
22:06:56 | Joe_knock | Matthias247: You guys prob get more engineer applicants than CS? |
22:07:00 | dom96 | Matthias247: This university is also a bit different in that the requirements are lower if you are doing Maths at A level. If you are not then the grade requirements are ABB IIRC. |
22:07:10 | dom96 | flaviu1: ICT and Biology |
22:07:22 | Jehan_ | Matthias247: Has to do with Germany not really doing the "elite university" thing (the elite stuff is what research institutes in Germany are primarily for). |
22:07:52 | Matthias247 | dom96: sounds achievable. Anyway - good luck :) |
22:08:15 | Jehan_ | Joe_knock: It's more that Germany's economy has an insatiable hunger for STEM graduates. |
22:08:52 | Joe_knock | Jehan_: Does germany import STEM workers too? |
22:08:53 | Matthias247 | Joe_knock: I think it's the other way. Theres more CS than engineering. But MANY CS students quit quite early |
22:09:06 | dom96 | Matthias247: Thanks. :) I'm actually doing 4 subjects so hopefully that gives me a better chance. The interesting thing is that if I get AACC the university has no legal obligation to accept me. |
22:09:17 | dom96 | Which kinda sucks to be honest. |
22:09:29 | Jehan_ | Joe_knock: Some companies have been doing it, though more for vocational training. |
22:09:30 | dom96 | But BBB should be doable. |
22:10:24 | superfunc | dom96: What country do you reside in? |
22:10:35 | Matthias247 | i think in my year there about 100 guys doing electrical engineering, 100 mechanical, and > 200 computer science |
22:10:37 | dom96 | superfunc: UK |
22:10:51 | superfunc | Ah, explains how I got so lost lulz' |
22:10:54 | flaviu1 | dom96: It seems that high school computing classes are a joke |
22:11:25 | Joe_knock | Based on dom96s skills, I'm surprised you even want to study further. |
22:11:29 | dom96 | flaviu1: ICT is a joke, yes. Computing is better, but my school does not offer it. |
22:11:43 | superfunc | flaviu1: I think it depends if they can get a good teacher. My robotics teacher taught me C which really helped get me started |
22:11:47 | dom96 | I asked one of my teachers why and they said "it's too difficult" |
22:11:53 | flaviu1 | dom96: In the US too, you get to learn enough Java to write a couple classes |
22:12:02 | dom96 | Apparently they will start offering it next year though, so I missed out unfortunately. |
22:12:25 | Matthias247 | we had only half a year of pascal ;) |
22:12:47 | Matthias247 | and later on some other useful stuff like prolog and assembly |
22:12:52 | dom96 | flaviu1: In ICT the most complex thing is database normalisation. |
22:13:11 | dom96 | Other than that it's a case of remembering a lot of facts which I deem pretty useless. |
22:13:31 | flaviu1 | I actually don't know much about database normalization, except its important. I thought it was funny you have to learn about input devices |
22:14:06 | dom96 | Yeah, but that's at AS level so I was learning that a year ago. |
22:14:26 | dom96 | Another silly thing is that ICT is 40% coursework which you do in class. |
22:14:48 | Joe_knock | Where I live, they teach something called CAT, which is basically teaching people how to use MS word, powerpoint, excel and a little Access. |
22:15:07 | dom96 | At GCSE level (2 years ago) I coded a game in game maker and got lower marks than people who created the same style of game with slightly different graphics as stated in the teachers instructions. |
22:15:22 | Araq | I consider database normalization an academic exercise ... ;-) just learn to use indexes and profiling tools |
22:15:41 | dom96 | Joe_knock: That's pretty much what ICT is. |
22:15:53 | Matthias247 | Joe_knock: with powerpoint and excel you are prepared for most of the engineering jobs ;) |
22:15:55 | dom96 | The strange thing is that the coursework at A level was much easier than at GCSE level. |
22:16:19 | dom96 | At least I got write some HTML/CSS and fight with the language that game maker uses |
22:16:27 | dom96 | while also working around the non-pro versions limitations |
22:16:34 | Joe_knock | dom96: Aah I think I now figured out where we get most of our ideas from. |
22:16:37 | dom96 | I should get 100% just for being able to do that :P |
22:16:52 | dom96 | Joe_knock: Where do you live? |
22:17:04 | Joe_knock | Matthias247: I thought engineers used better "tools" ? |
22:17:10 | Joe_knock | dom96: South Africa |
22:17:26 | Matthias247 | Joe_knock: they should ;) |
22:17:54 | dom96 | Joe_knock: I think we had another person from there in this channel at some point. |
22:18:00 | dom96 | !seen Trixar_za |
22:18:00 | NimBot | Trixar_za was last seen on Fri May 30 21:21:54 2014 joining #nimrod |
22:18:13 | dom96 | oh wait, he's here. |
22:18:14 | Matthias247 | but I've seen more than enough 100page slidesets and 5kline excel sheets to know they don't always :) |
22:18:49 | Matthias247 | especially japanese guys love excel engineering |
22:19:37 | Joe_knock | dom96: We south africans don't lurk in the farthest corners of the web, like IRC. |
22:22:45 | NimBot | Araq/Nimrod devel 93fa75b Clay Sweetser [+0 ±6 -0]: Fixed #1172 (for real) |
22:22:45 | NimBot | Araq/Nimrod devel 0d65550 Andreas Rumpf [+0 ±6 -0]: Merge pull request #1240 from Varriount/fix-1172... 2 more lines |
22:23:36 | Araq | Klaufir: I commented on your PR |
22:24:21 | NimBot | Araq/Nimrod devel c2b58f3 Reimer Behrends [+0 ±1 -0]: Properly terminate "nimrod i" on end of file.... 5 more lines |
22:24:21 | NimBot | Araq/Nimrod devel 67cef1b Andreas Rumpf [+0 ±1 -0]: Merge pull request #1242 from rbehrends/interactive-eof-fix... 2 more lines |
22:25:06 | Araq | fowl: I'm still waiting for 'hash' for #1174 |
22:25:17 | dom96 | Araq: Have you benchmarked your Pi thing? |
22:25:25 | fowl | Araq, alright |
22:25:36 | flaviu1 | Araq: Have you considered using something else for reference equality? |
22:26:29 | Araq | dom96: no but it's a toy anyway |
22:26:43 | Araq | flaviu1: like what? |
22:26:50 | dom96 | Araq: Still, would be interesting to compare to Go. |
22:26:52 | flaviu1 | I like `eq` from scala |
22:27:26 | Jehan_ | dom96: The individual calculations are too short to be meaningful. |
22:27:59 | dom96 | Jehan_: I see. |
22:28:19 | dom96 | Araq: The current heavy threads will remain right? |
22:28:31 | Araq | right |
22:29:07 | Araq | well actually ... I need to change the API |
22:29:43 | Araq | but I won't anytime soon |
22:30:01 | Araq | I have more pressing stuff to do |
22:31:12 | Araq | Varriount: if m in c.friendModules works too |
22:32:01 | Araq | flaviu1: 'eq' is nice but doesn't play well with nimrod's syntax. unless you consider a.eq(b) perfectly fine |
22:32:18 | flaviu1 | Looks fine to me |
22:32:59 | flaviu1 | you could also do a.`==`(b) |
22:33:06 | Araq | template eq(a, b): expr = system.`==`(a, b) |
22:33:33 | Araq | but then people dislike aliases |
22:33:39 | Araq | oh wait they like them |
22:33:58 | Araq | unless it's "gorge" and "inc" ... |
22:34:09 | flaviu1 | Dislike them if they do the exact same thing, like them if they decrease ambiguity. |
22:35:13 | Jehan_ | Araq: Is there any specific reason why you can't put arbitrary stuff in between backquotes? |
22:35:20 | flaviu1 | Its a language's job to be opinionated, code gets unreadable if it isn't consistant. |
22:35:33 | flaviu1 | Jehan_: You can put arbitrary stuff between backquotes |
22:35:52 | Jehan_ | flaviu1: Huh, I remember trying it (granted, a loong time ago) and it didn't work. |
22:36:03 | flaviu1 | everything except `[`, `{`, `(`, `)`, `}`, `]` are valid identifiers |
22:36:24 | flaviu1 | Jehan_: If the a number came first, there was a bug that caused the cgen to mess up |
22:36:35 | Araq | flaviu1: waiting for your PR to change that |
22:36:55 | Araq | conditions: update the grammar and the manual too. |
22:36:56 | Jehan_ | Hmm, I can't recall what went wrong. Anyway, nevermind me then. :) |
22:37:43 | Jehan_ | I only remember that I was generating code and trying to use it to escape identifiers that may or may not be keywords and something blew up. |
22:38:31 | * | ehaliewicz joined #nimrod |
22:38:55 | flaviu1 | Araq: Sure, I guess I can work on that |
22:39:06 | Araq | flaviu1: I still think consistency is vastly overrated ... also nobody ever talks about its costs |
22:39:19 | flaviu1 | What costs? |
22:40:04 | Araq | the constant battles about styles et al |
22:41:26 | Araq | also making all of your coworkers use the same {} placement is simply barbaric |
22:41:51 | * | caioariede quit (Ping timeout: 252 seconds) |
22:41:55 | flaviu1 | Araq: Automatically format code on checkin and checkout |
22:42:31 | Araq | flaviu1: dunno, I prefer if the editor/IDE simply renders it the way I want |
22:42:38 | fowl | araq: https://github.com/Araq/Nimrod/issues/1241 |
22:42:58 | Jehan_ | Araq: Just execute offenders on a regular basis and varying brace styles will stop being a problem. :) |
22:43:16 | flaviu1 | I think the only way to go is to have the language mandate and enforce a configurable style, and to have the language tooling convert between styles transparently |
22:43:46 | Jehan_ | Which reminds me that Tcl kinda sorta enforced where you put your braces. |
22:43:51 | Jehan_ | At least the opening brace. |
22:44:00 | Araq | flaviu1: and now you know why Nimrod is style insensitive |
22:44:06 | Araq | Jehan_: Go does the same |
22:44:37 | Jehan_ | Araq: Really? It's where I put braces out of habit, hadn't realized Go enforced it. |
22:44:54 | Jehan_ | But my point was that in the case of Tcl it was an accident of "everything is a string". |
22:45:07 | Jehan_ | A brace on the next line simply would not be part of the same command. |
22:45:30 | flaviu1 | Araq: No, my idea is totally different. Have the language literally refuse to compile if you use the wrong style so that the style can be easily be converted to whatever the programmer's preferences are. |
22:45:46 | fowl | Jehan_, its also about the grammar not requiring look-ahead |
22:46:07 | Araq | flaviu1: no, it's really the same idea :P |
22:46:09 | Jehan_ | flaviu1: Honestly, that's not too big of a problem for a translation tool to automate regardless. |
22:46:35 | flaviu1 | So you have one guy who writes braces on the next line and uses snake case. Your tooling enforces that formatting, and then it can convert to camelCase with same line braces easily. |
22:47:20 | flaviu1 | Jehan_: PascalCase -> snake_case: What should HTTPServer be converted to? |
22:47:33 | fowl | server.http |
22:47:36 | Araq | flaviu1: your way has the disadvantage that it makes me write your style until good editors come around |
22:47:43 | Araq | flaviu1: HttpServer |
22:47:53 | fowl | std.nimrod.copyright.araq.server.http |
22:48:34 | Jehan_ | From a practical perspective, I'm a bit torn. |
22:48:36 | flaviu1 | Araq: Well, that's how I'd write it. But some dumbass would write it HTTPServer and cause the tooling to translate it to h_t_t_p_server |
22:48:44 | Araq | that abbrevs are case sensitive is another common misconception ... if they are how come every URL starts with "http" and not HTTP ? |
22:49:02 | Jehan_ | I like consistency within a project, but integrating third-party libraries with a different style can be annoying. |
22:49:17 | Jehan_ | If you have enforced case/style-sensitivity. |
22:49:28 | fowl | sometimes i like to give my shift key a break |
22:49:33 | Varriount | Meep |
22:49:57 | flaviu1 | Jehan_: Let me see if I can write something out that expresses my thinking a bit better |
22:50:35 | Jehan_ | flaviu1: You don't need to convince me. I lack a strong opinion with respect to case/style sensitivity. :) |
22:50:55 | Araq | fowl: this is the worst PR that I've seen in a while |
22:51:01 | * | io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist) |
22:51:21 | Araq | in fact it is no PR |
22:51:32 | Araq | "The fix is around line 122 of fsmonitor.nim" ... |
22:51:48 | Araq | but ok |
22:52:03 | Araq | everybody is allowed to be lazy once in a while |
22:52:37 | fowl | Araq, i want to make sure im not crazy first, why hasnt anybody noticed this before |
22:52:55 | fowl | >_> |
22:53:52 | Varriount | Possibly because fsmonitor hasn't been used. |
22:54:03 | fowl | there are things that use fsmonitor right? btw im using it so i can do touch server-control/quit to shut it down |
22:55:03 | Araq | hmm I don't get it |
22:55:36 | Araq | addr event.name is fine either way? |
22:55:50 | Araq | even if it's a flexible struct member? |
22:56:06 | fowl | yeah |
22:56:18 | fowl | its one of those char [] things at the end of the struct that gcc allows |
22:56:24 | Araq | so what's the bug? |
22:56:50 | fowl | current code is wrong, there was an extra \0 at the end of the name |
22:57:29 | Araq | mev.name = newString(event.len.int) |
22:57:30 | Araq | copyMem(addr(mev.name[0]), addr event.name, event.len.int-1) # what is wrong here? |
22:57:46 | Araq | event.len is lying? |
22:59:12 | Araq | ah |
22:59:24 | Araq | /* Length (including NULs) of name. */ |
22:59:40 | Araq | wtf |
23:00:01 | flaviu1 | Jehan_: This is what I mean: https://gist.github.com/flaviut/8ccfddded8a2eadafda5 |
23:00:08 | fowl | i suspected the length was wrong and including the nul after seeing that but when i checked .len it was something weird like 23 |
23:00:13 | fowl | i'll test it again |
23:01:20 | Araq | dom96: please test and apply fowl's patch |
23:01:34 | flaviu1 | Basically, you choose what style to program in, and your tools enforce what you've chosen in order to allow others to convert from your preferences to their own without issues. |
23:01:37 | dom96 | Araq: I can't, I don't have an operational Linux. |
23:01:49 | flaviu1 | I can test, what do I checkout? |
23:02:42 | Jehan_ | flaviu1: Then, how would you express something that actually has multiple capitals that aren't an acronym? |
23:03:08 | fowl | Jehan_, like, initials? |
23:03:29 | Jehan_ | Like: LUDecomposition. |
23:03:40 | Jehan_ | Should be l_u_decomposition in snake case. |
23:04:48 | Jehan_ | Though the world wouldn't end if it were lu_decomposition. :) |
23:05:03 | Araq | flaviu1: https://github.com/Araq/Nimrod/issues/1241 |
23:05:05 | flaviu1 | Jehan_: Actually, the wikipedia page says "LU decomposition", so I'd say to just use LuDecomposition |
23:05:44 | Jehan_ | flaviu1: Ugh? |
23:06:00 | dom96 | I say we use a mix in this case. LU_Decomposition :P |
23:06:03 | Araq | in retrospect having both upper and lower case letters was a big mistake |
23:06:10 | Jehan_ | flaviu1: Get prepared to have mathematicians shoot you. :) |
23:06:34 | * | vbtt joined #nimrod |
23:06:47 | Jehan_ | Araq: toUpper("ß")? :) |
23:07:32 | Jehan_ | Anyhow, once I find my time travel machine again, I'll make sure to let Gutenberg know. |
23:07:46 | Jehan_ | Nip the problem in the bud and all that. :) |
23:08:07 | Jehan_ | Anyhow, good night. :) |
23:08:12 | * | Jehan_ quit (Quit: Leaving) |
23:08:22 | Araq | me too: bye |
23:09:43 | * | vbtt quit (Client Quit) |
23:10:48 | flaviu1 | I just replaced the appropriate lines with fowl's snippet, it doesn't seem to work |
23:11:12 | flaviu1 | unhandled exception: No such file or directory |
23:11:22 | flaviu1 | Oh, wait |
23:11:23 | flaviu1 | sorry |
23:13:19 | dom96 | I'm away to bed too bye |
23:13:20 | flaviu1 | (kind: MonitorCreate, fullname: testdir/foo, name: foo, wd: 1)\nlast char is 0 false |
23:14:53 | fowl | thats good |
23:15:35 | fowl | (last char is str[str.high], not the trailing \0) |
23:15:53 | * | Matthias247 quit (Read error: Connection reset by peer) |
23:16:04 | flaviu1 | And nothing gets cut off either |
23:16:16 | fowl | flaviu1, can you test it with the original code |
23:16:29 | flaviu1 | I have |
23:16:41 | fowl | that works for you? |
23:16:49 | flaviu1 | Check out the issue page on github |
23:17:06 | flaviu1 | It gets cut off at testdir/foo |
23:17:22 | fowl | oh groovy |
23:18:16 | * | darkf joined #nimrod |
23:20:42 | Varriount | Araq: ping |
23:20:48 | Varriount | Oh, rats |
23:27:55 | * | superfunc quit (Quit: Page closed) |
23:29:21 | * | hoverbear quit () |
23:34:11 | * | saml_ joined #nimrod |
23:39:10 | Varriount | Gah. I very much dislike it when things get more complicated. |
23:59:33 | * | caioariede joined #nimrod |