2013-03-16 00:45 OMFG. OMFG. https://twitter.com/Sysadm_Borat/status/312705773333524480/photo/1 "for loops are for pussies" 2013-03-16 00:48 hellekin: I dunno why, but asian embedded really, really frequently features such code 2013-03-16 00:48 it's not even funny 2013-03-16 00:50 whitequark: really? Wow. That's scary. 2013-03-16 00:50 When "don't fix it if it works" doesn't apply, for reason that newbies could start contaminating their code with stupidity. 2013-03-16 00:52 hellekin: yeah. from a 1.5-second delay for boot led from nops 2013-03-16 00:52 to literally such unrolled shell loops I've been shown just days ago by a fellow dev 2013-03-16 00:53 I'd say it's scary for another reason 2013-03-16 00:53 networked embedded is generally very security-sensitive. and I don't want people writing such code anywhere near anything sensitive. 2013-03-16 00:55 true 2013-03-16 00:55 I've never learned coding formally, but I would never even think of doing such horrible code 2013-03-16 00:56 I'm pretty sure it requires a mouse, because people who knows how to copy-paste with the keyboard cannot be that lazy and stupid. Or can they? 2013-03-16 00:56 s/knows/know/ 2013-03-16 00:56 hellekin meant: "I'm pretty sure it requires a mouse, because people who know how to copy-paste with the keyboard cannot be that lazy and stupid. Or can they?" 2013-03-16 00:58 sure, acn 2013-03-16 00:58 can 2013-03-16 00:59 people use *fancy* editors for that. 2013-03-16 00:59 I don't wanna know... 2013-03-16 01:07 it's even longer to type than the real thing. You gotta be braindead to write such "code" 2013-03-16 01:07 ah. skip it. There's enough shit in this world 2013-03-16 01:10 wolfspraul has quit [Quit: leaving] 2013-03-16 01:19 apelete has quit [Ping timeout: 252 seconds] 2013-03-16 01:34 qi-bot has quit [Ping timeout: 245 seconds] 2013-03-16 01:47 wpwrak: qi-bot is dead 2013-03-16 01:53 megha has quit [Quit: WeeChat 0.4.0] 2013-03-16 02:51 LunaVorax has joined #qi-hardware 2013-03-16 03:20 LunaVorax has quit [Remote host closed the connection] 2013-03-16 04:03 DocScrutinizer05 has quit [Disconnected by services] 2013-03-16 04:03 DocScrutinizer05 has joined #qi-hardware 2013-03-16 04:25 guanucoluis has quit [Quit: Leaving.] 2013-03-16 04:25 guanucoluis has joined #qi-hardware 2013-03-16 05:17 dandon_ has joined #qi-hardware 2013-03-16 05:18 dandon has quit [Ping timeout: 245 seconds] 2013-03-16 05:18 dandon_ is now known as dandon 2013-03-16 05:37 gbraad has joined #qi-hardware 2013-03-16 05:37 gbraad has quit [Changing host] 2013-03-16 05:37 gbraad has joined #qi-hardware 2013-03-16 05:38 jekhor has joined #qi-hardware 2013-03-16 05:52 jekhor has quit [Ping timeout: 245 seconds] 2013-03-16 05:52 jekhor has joined #qi-hardware 2013-03-16 06:22 guanucoluis has quit [Ping timeout: 245 seconds] 2013-03-16 06:39 gbraad has quit [Ping timeout: 264 seconds] 2013-03-16 06:39 gbraad has joined #qi-hardware 2013-03-16 06:47 fire has joined #qi-hardware 2013-03-16 07:05 lol 2013-03-16 07:21 porchao has quit [Read error: Connection reset by peer] 2013-03-16 07:22 porchao has joined #qi-hardware 2013-03-16 07:27 porchao has quit [Read error: Connection reset by peer] 2013-03-16 07:28 porchao has joined #qi-hardware 2013-03-16 08:20 viric: offrss downloads an image many times when this image is referred to several times in the same feed (might be the case for a country flag, which might appear in all items of a feed) 2013-03-16 08:24 viric: since i got rather many feeds (though i managed to clean up down to 45), it would be great to have an indication of status update against every feed. Since chances are high that some will fail with curl or mrss error (this is the case here) 2013-03-16 08:37 jekhor has quit [Ping timeout: 260 seconds] 2013-03-16 08:41 viric: one of my use cases was to parse a web site that doesn't have rss and then expose the xml file to google reader. Since now it runs locally, i'd like to point curl to a local file 2013-03-16 08:42 so i use file:/// as a feed url, but get Error downloading url file:///some/path/file.xml: http status 0 2013-03-16 08:43 viric: it also seems that curl handles 301 errors strangely 2013-03-16 08:43 i.e. it doesn't follow redirects 2013-03-16 08:43 for example, http://www.cyanogenmod.com/category/blog/feed 2013-03-16 08:46 heh.. you are placing the recent post to the bottom of the page 2013-03-16 08:46 wej has quit [Ping timeout: 248 seconds] 2013-03-16 08:47 it has disadvantage that the control buttons on the top of the page are not visible 2013-03-16 08:47 wej has joined #qi-hardware 2013-03-16 08:48 and i would argue if placing new items to the bottom is more logical than placing them on top :) 2013-03-16 08:49 well, google sorts from newest to oldest, but you can change it on the fly 2013-03-16 09:29 Calyp has joined #qi-hardware 2013-03-16 09:45 :) 2013-03-16 09:46 dennis has joined #qi-hardware 2013-03-16 09:47 apelete has joined #qi-hardware 2013-03-16 09:48 kyak: ok, I'll spend some time in it today :) 2013-03-16 09:50 wej has quit [Ping timeout: 245 seconds] 2013-03-16 10:16 viric: thank you! 2013-03-16 10:16 kyak: I don't think offrss downloads an image multiple times. Do you have a test? 2013-03-16 10:18 http://www.tvsubtitles.net/rssen.xml here :) 2013-03-16 10:18 ok 2013-03-16 10:19 i tried hacking around the "response != 200" to add response code 0 (which curl seems to return for files) - but i only got to segfaults so far :) 2013-03-16 10:20 viric: it's probably best to forget about handling 301 response code for now. It is better to fix the url manually anyway 2013-03-16 10:21 I guess it'll be a curl flag simply 2013-03-16 10:21 for command line usage, that would be just a flag.. not sure how it's done in curl lib 2013-03-16 10:22 CURLOPT_FOLLOWLOCATION 2013-03-16 10:23 any example of redirect? 2013-03-16 10:23 hm, i do "fossil undo", but "fossil diff" still shows the difference.. how can i checkout the latest version of a file? 2013-03-16 10:24 fossil revert file 2013-03-16 10:24 ah you gave an example 2013-03-16 10:24 http://www.cyanogenmod.com/category/blog/feed 2013-03-16 10:24 the example for 301 2013-03-16 10:25 ok, redirects fixed 2013-03-16 10:25 now I see en.gif downloaded multiple times. umh 2013-03-16 10:26 fossil revert, thanks 2013-03-16 10:29 sorry, I didn't push the redirect change. I set autosync now :) 2013-03-16 10:31 kilae has joined #qi-hardware 2013-03-16 10:32 now for the images, done... 2013-03-16 10:34 viric: i confirm, both work. Great, thanks! 2013-03-16 10:43 viric: btw, i updated the opml2offrss script and attached it to the ticket.. Since all my feeds are converted now, i don't think i'll be doing any changes to the script anymore. Unless another user pops up and finds a bug 2013-03-16 10:43 perfect 2013-03-16 10:44 kyak: I added *noimages* 2013-03-16 10:47 viric: going to check it in a few.. 2013-03-16 10:47 viric: i'm looking at html source 2013-03-16 10:47 ok 2013-03-16 10:47 looks a bit strange 2013-03-16 10:47 you have three html forms on top 2013-03-16 10:48 i suppose, one for "show read", another for "remote images", the third for "single page" 2013-03-16 10:49 but, all of these three forms contain input types for other forms... 2013-03-16 10:49 I'm not very good at html 2013-03-16 10:50 ok, lemme try to fix this 2013-03-16 10:51 i guess one form would do it 2013-03-16 10:51 will check the *noimages* first 2013-03-16 10:51 unclouded has quit [Ping timeout: 245 seconds] 2013-03-16 10:53 yep, it just works! thanks! 2013-03-16 10:59 I've to leave for a while. I'll check the file:// later. :) 2013-03-16 11:14 rz2k has joined #qi-hardware 2013-03-16 11:24 qi-bot has joined #qi-hardware 2013-03-16 12:27 viric has quit [Quit: reiniciem] 2013-03-16 12:38 viric has joined #qi-hardware 2013-03-16 12:45 baba has joined #qi-hardware 2013-03-16 12:46 fire has quit [Ping timeout: 245 seconds] 2013-03-16 12:46 jekhor has joined #qi-hardware 2013-03-16 13:16 wej has joined #qi-hardware 2013-03-16 13:19 rz2k has quit [] 2013-03-16 13:19 wolfspraul has joined #qi-hardware 2013-03-16 13:21 wej has quit [Ping timeout: 248 seconds] 2013-03-16 13:27 wej has joined #qi-hardware 2013-03-16 13:37 pcercuei has joined #qi-hardware 2013-03-16 13:47 pcercuei has quit [Read error: Connection reset by peer] 2013-03-16 14:08 pcercuei has joined #qi-hardware 2013-03-16 14:12 pcercuei has quit [Client Quit] 2013-03-16 14:12 pcercuei has joined #qi-hardware 2013-03-16 14:18 rz2k has joined #qi-hardware 2013-03-16 14:29 jekhor has quit [Ping timeout: 240 seconds] 2013-03-16 14:52 pcercuei has quit [Ping timeout: 264 seconds] 2013-03-16 14:53 gbraad has quit [Ping timeout: 252 seconds] 2013-03-16 14:56 wej has quit [Ping timeout: 245 seconds] 2013-03-16 15:02 pcercuei has joined #qi-hardware 2013-03-16 15:18 dlan^ has quit [Remote host closed the connection] 2013-03-16 15:18 dennis has quit [Remote host closed the connection] 2013-03-16 15:35 guanucoluis has joined #qi-hardware 2013-03-16 16:20 LunaVorax has joined #qi-hardware 2013-03-16 16:55 LunaVorax has quit [Ping timeout: 260 seconds] 2013-03-16 17:08 LunaVorax has joined #qi-hardware 2013-03-16 17:19 wej has joined #qi-hardware 2013-03-16 17:26 pcercuei has joined #qi-hardware 2013-03-16 17:32 viric: it's more clear now for me why you have to create the complete query every time 2013-03-16 17:33 i.e. even if i change one parameter, i send all the others in the form as well 2013-03-16 17:33 it is also clear now why C is not something one should use to handle WEB :) 2013-03-16 17:34 the problem is, you don't have persistent storage.. You fork every time for new request, and children don't have any knowledge about the client's state 2013-03-16 17:35 that is why, the client has to send the complete state every time: "show read", "single page", "local image" and so on.. 2013-03-16 17:36 ..and it took me hell of a lot of time to realize why "extern" variable is reset to 0 every time 2013-03-16 17:36 because of fork, of course 2013-03-16 17:40 my compiler can now infer types for and compile fib()! 2013-03-16 17:40 https://gist.github.com/whitequark/2d1d44ed5d97ddc9c933 2013-03-16 17:42 viric: there is something called a "Persistent CGI", which is probably worth having a look into.. 2013-03-16 17:42 whitequark: nice 2013-03-16 17:43 larsc: actually you don't see the majority of the interesting things there :D 2013-03-16 17:43 i.e. how it handles the ruby object system 2013-03-16 17:44 next on the roadmap are proper machine ints (currently it's a single, degenerate ptr-sized type), and lambdas 2013-03-16 17:44 the cycle in `main' should look like `10.times { trace fib(10) }' 2013-03-16 17:45 but compile to exact same code, because why not? 2013-03-16 17:45 wpwrak has quit [Ping timeout: 252 seconds] 2013-03-16 17:46 whitequark: compiler for what? 2013-03-16 17:46 pcercuei: http://whitequark.org/blog/2012/12/06/a-language-for-embedded-developers/ 2013-03-16 17:46 10.times ? so you can do like Integer n = 5; n.times { ... }? 2013-03-16 17:46 LunaVorax has quit [Ping timeout: 260 seconds] 2013-03-16 17:47 larsc: why "Integer n = 5"? just n = 5; n.times { ... } 2013-03-16 17:47 and yes I can 2013-03-16 17:48 the compiler features both local type inference by bidirectional dataflow analysis on static single information form and interprocedural type inference via cartesian product algorithm 2013-03-16 17:49 how does the algorithem work? I'm currently working on something very similar for migen 2013-03-16 17:49 larsc: which one? 2013-03-16 17:49 type inference 2013-03-16 17:49 well there are two: local and interprocedural :) 2013-03-16 17:49 start with local 2013-03-16 17:50 it's a distant derivative of Hindley-Milner 2013-03-16 17:50 my IR is in SSA/SSI form, which can be thought of a purely functional language (SSA is isomorphic to CPS, used in functional compilers) 2013-03-16 17:51 so HM works perfectly on the SSA values 2013-03-16 17:51 type unification in canonical HM corresponds to SSA phi nodes 2013-03-16 17:51 the current migen algorithem, if you even can all it that, is dead stupid. just tries to derive the type 'for' each signal in a loop until each signal has one 2013-03-16 17:51 larsc: HM is not significantly more clever 2013-03-16 17:51 but it can handle conflicts 2013-03-16 17:52 like e.g. if foo; 1; else "2"; end 2013-03-16 17:52 the HM-derived resulting type would be Integer|String 2013-03-16 17:53 what I do in these cases is restrict the resulting unions so that runtime perf would be manageable 2013-03-16 17:53 TrueClass|FalseClass is reduced to Boolean (internal, not ruby type) 2013-03-16 17:53 Base|Derived is reduced to Base 2013-03-16 17:53 UnrelatedA|UnrelatedB is reduced to Object, well, because everything inherits from Object 2013-03-16 17:54 makes sense 2013-03-16 17:54 also NilClass|Whatever is reduced to nullable 2013-03-16 17:54 and that's mostly all 2013-03-16 17:54 otherwise you would end up with union types which would require essentially dynamic dispatch 2013-03-16 17:54 and perf will go nowhere 2013-03-16 17:54 also I handle types for mutable local bindings in a very similar fashion 2013-03-16 17:55 mutable local bindings? 2013-03-16 17:55 aka "variables" :) 2013-03-16 17:55 ah, ok 2013-03-16 17:55 the kink with local variables is that they're mutable and HM is purely functional 2013-03-16 17:56 loop { a = 1; a = "2" if rand > 0.5; p a } 2013-03-16 17:56 kyak: I fork in offrss because I don't want memory leaks 2013-03-16 17:56 larsc: now there's also upwards DFA, which handles closures 2013-03-16 17:57 see, the type of a closure is derived from its usage, as opposed to definition 2013-03-16 17:57 kyak: and it's a matter of taste, when to fork. 2013-03-16 17:57 larsc: def loop(&block); while true; block.call(); end; end 2013-03-16 17:57 kyak: I fork at the very start, because it's like CGI. I don't think I need much persistent storage. Does it run slow for you? 2013-03-16 17:58 larsc: as you can see this method has a well-defined type of `block', but downwards DFA could not infer it... 2013-03-16 17:59 larsc: the other clever thing one could do with bidi-DFA is latent predicates 2013-03-16 17:59 larsc: for example this: def foo(bar); if bar.is_a?(Integer); bar + 1; else nil; end; end 2013-03-16 17:59 larsc: without #is_a?(Integer), the method could not typecheck if I pass a String there 2013-03-16 18:00 *would 2013-03-16 18:00 i see 2013-03-16 18:00 viric: nah, it's not slow at all. I just don't like the way you have to construct the complete query (i.e. configuration) every time 2013-03-16 18:00 larsc: it's like pattern matching from haskell, but with none of the monads :D 2013-03-16 18:01 viric: it looks redundant in C code, and you have to think about the complete configuration all the time 2013-03-16 18:01 larsc: now, interprocedural inference is even simpler. imagine that every function, initially, has a polytype where each argument is assigned its own type variable 2013-03-16 18:01 viric: why am i even talking about - i'd like to have "mark all as read" button, and the design is such that it can't be easily extended 2013-03-16 18:01 kyak: I could use a cookie. But I never learnt cookies 2013-03-16 18:01 larsc: forall(a,b) Integer#+(a self, b other) 2013-03-16 18:02 larsc: note how self doesn't have a monotype either. this is because you can inherit from Integer, and in the derived class self would not have the type Integer 2013-03-16 18:02 pcercuei has quit [Ping timeout: 245 seconds] 2013-03-16 18:02 kyak: yes, web without cookies is harder. :) Maybe they'd really simplify all 2013-03-16 18:03 larsc: now, if you encounter a call, say, (Fixnum < Integer) Integer#+(Fixnum 1, Fixnum 2), you specialize the method for that particular call site. 2013-03-16 18:03 kyak: but then the state is not per browser window, but per browser. 2013-03-16 18:03 whitequark: what does #+ do? 2013-03-16 18:03 larsc: addition 2013-03-16 18:03 1 + 2 2013-03-16 18:03 pcercuei has joined #qi-hardware 2013-03-16 18:03 # is just a separator between class name and method name. 2013-03-16 18:03 and the hash means that it's a method of the type... ok 2013-03-16 18:04 larsc: so, now instead of a method which can accept anything you have a method which only accepts Fixnums 2013-03-16 18:04 so you can eliminate a ton of redundancy. type checks, range checks (sometimes), etc. you can do inlining. it's awesome actually 2013-03-16 18:04 you can do partial specialization. say if you don't know what the second argument is, you infer forall(a) Integer#+(Fixnum 1, a var) 2013-03-16 18:04 LunaVorax has joined #qi-hardware 2013-03-16 18:05 you still can eliminate half of the redundancy and maybe inline the method 2013-03-16 18:05 and the algorithm is closed over composition, that is, you can specialize the methods over and over again if you know more and more about your code 2013-03-16 18:05 viric: i'll try to implement that button, and we'll see how it goes. If it turns into a monster, perhaps it's a good sign to rewrite server.c :) 2013-03-16 18:06 larsc: what's even more interesting is what happens when you get to parametric types. you can do restrictions on type variables! 2013-03-16 18:06 say we have a generic List 2013-03-16 18:06 forall(a) List#append(List self, a elem) 2013-03-16 18:07 kyak: ok :) think of a cookies model if you want 2013-03-16 18:07 larsc: this method can be specialized for any element type, but only ones which match the type of the list 2013-03-16 18:07 what actually happens is that 2013-03-16 18:07 you speculate that you can specialize this method for List, so you basically replace a with Integer 2013-03-16 18:08 then, if the result, being substituted at the original callsite, still typechecks, this means we're good 2013-03-16 18:08 otherwise someone screwed up :) 2013-03-16 18:08 so what does forall do? 2013-03-16 18:08 is it a predicate? 2013-03-16 18:09 ∀ 2013-03-16 18:09 hah, I actually have this on my compose key 2013-03-16 18:09 yes. 2013-03-16 18:09 it does not figure in the language syntax itself, of course (neither does `#'); I'm using this because it's common notation 2013-03-16 18:10 viric: i just want to make it completely clear. For example, when i click the yet-to-be-implemented "mark all as read" button, i need to send not just the state of this button, but also all the other states - like "show read", "local images" etc. Otherwise, the state of the client (my web browser session) would become inconsistent. For example, clicking this button would reset the "local images" button state 2013-03-16 18:10 you can think of it as a type constructor, if that's simpler. λ→a.List→a→List 2013-03-16 18:11 yea 2013-03-16 18:11 kyak: I think you are not very used to web programming :) 2013-03-16 18:11 larsc: ok. so. when you already have types dependent on terms, you can add types dependent on values! 2013-03-16 18:11 kyak: or are you? 2013-03-16 18:12 for example forall(Integer a) MachineInt 2013-03-16 18:12 you see where it goes :) 2013-03-16 18:12 no 2013-03-16 18:12 ok 2013-03-16 18:12 kyak: I mean... one think would be to have a persistent storage based on some id, that identifies the browser windows. But that's not very common I think; Most people use cookies, and cookies are per browser and not per window. 2013-03-16 18:12 larsc: MachineInt is a generic class, but it does not accept a type as its parameter, but a value (constant number) 2013-03-16 18:12 kyak: giving weird results if you have multiple windows on the same served pages. 2013-03-16 18:13 larsc: the intended result is that we can get to manipulate this number both in the type system, as if it were a type, and, say, typecheck machine int addition: 2013-03-16 18:13 kyak: but persistent storage would allow to pass only an id instead of all. But whether it's hard to send an id or send all, is a matter of good programming. Of course I wrote offrss with some kind of 'minimal effort for what I need'. I'll see if I can improve what you want. :) 2013-03-16 18:13 larsc: forall(Integer a) MachineInt#+(MachineInt self, MachineInt other) 2013-03-16 18:13 viric: i have no idea why you start talking about browser windows. I'm only talking about one window, or one tab now 2013-03-16 18:14 kyak: yes, but multiple tabs has to work too 2013-03-16 18:14 (at least, I want it to work) 2013-03-16 18:14 :) 2013-03-16 18:14 well, I'm sorry but I've to leave now. Tomorrow more! 2013-03-16 18:14 hm 2013-03-16 18:14 kyak: I quite finished a recent project that took my time, and I can get into it 2013-03-16 18:14 larsc: *and* also as a value. for example: class MachineInt; def <<(Integer bits); raise ArgumentError if bits > @@width; ...; end; end 2013-03-16 18:15 пока! 2013-03-16 18:15 пока :) 2013-03-16 18:15 larsc: (@@width would be a Ruby syntax to extract the value from the corresponding type parameter) 2013-03-16 18:15 ok 2013-03-16 18:15 larsc: so, as you can see, we take here a type, governed and enforced by type system rules, and compare it with a user-provided value! 2013-03-16 18:16 (in order to prohibit shifts too wide to handle, or whatever) 2013-03-16 18:16 now, the most interesting part of this everything is how it works with Ruby metaprogramming 2013-03-16 18:17 and the answer, it works so well that C++ programmers will die from envy :) 2013-03-16 18:17 hehe 2013-03-16 18:17 a Ruby class is a type; a Ruby class is also a value; the type system can represent and work with both classes and plain old data 2013-03-16 18:18 and you can directly manipulate everything of this with just Ruby code 2013-03-16 18:18 so, if you need a friggin' compile-time loop, you go and write `while' there. no weird template magic attached 2013-03-16 18:18 if you need to define a method derived from some other runtime property, here you are 2013-03-16 18:18 dynamically generate constant? ok 2013-03-16 18:19 so we have a language which is as fast as C++, strictly more powerful and way easier to write in :D 2013-03-16 18:21 also if you're going to do something similar, please note that type variables are only a property of, and attached to, and have sense in the context of functions. 2013-03-16 18:21 and I guess you'll be able to attract ruby programmers 2013-03-16 18:21 larsc: that is the point. Ruby, Python, JS, *and* C++ (because some of them do have sense) 2013-03-16 18:23 the main reasons I chose Ruby as the base for the language are: 1) it is quite well-known 2) sensible, Smalltalk-derived OO model, unlike Java/C++ 3) easy and mostly quite logical metaprogramming 2013-03-16 18:23 3) is a total clusterfuck in python 2013-03-16 18:23 tried that today 2013-03-16 18:23 that didn't stop someone from writing a thing similar to mine called Starkiller as a phd project 2013-03-16 18:24 it is however too academic to be usable 2013-03-16 18:24 WAY too academic. 2013-03-16 18:25 ruby's syntax is sometimes really meh (seriously, \C-? in the core of the language?!), but I can fix that 2013-03-16 18:25 ruby's stdlib is sometimes (quite rarely) weird, but that's simple and I will fix that 2013-03-16 18:26 whoever wrote Encoding support was high on something evil 2013-03-16 18:26 oh some other features I have for free in ruby: 2013-03-16 18:27 - interpolations. if you write stuff like "this is a long format string: #{foo.to_s}" then what happens? the first part of the long format string is stored in the .rodata; result of foo.to_s is calculated; these two are combined into a rope. 2013-03-16 18:27 ... which is an implementation detail completely transparent to user code, because user code iterates strings with #each 2013-03-16 18:27 so you can have *very* efficient iteration which is also flash-friendly 2013-03-16 18:28 but also means that strings are a core feature of the language 2013-03-16 18:28 they are indeed 2013-03-16 18:28 even more; in Foundry, UTF-8 is a core feature of the language. (Unless you disable it, but I advise strongly against.) 2013-03-16 18:30 it stores data in UTF-8 to save space and iterates it as UTF-16 or UTF-32 (machine words are 32-bit anyway). corner cases such as surrogate pairs are already handled. 2013-03-16 18:30 I guess one advantage when you are dealing with hdl languages is that all objects are instantiated at synthesis time, so you don't have to deal with unions 2013-03-16 18:30 larsc: indeed 2013-03-16 18:30 HDL is much more declarative than Foundry 2013-03-16 18:30 it's *completely* declarative D: 2013-03-16 18:30 *:D 2013-03-16 18:30 although it could come in handy knowing which types are compatible, so you can do time multiplexed sharing of blocks 2013-03-16 18:30 yea 2013-03-16 18:31 larsc: one thing I was also thinking about is deeply integrating regexps within compiler 2013-03-16 18:31 so that during compilation it would generate the optimal state machine 2013-03-16 18:31 uh 2013-03-16 18:31 yea, precompling the regex may make sense 2013-03-16 18:31 you could then trivially parse URIs or HTTP or whatnot; flex is essentially a regexp -> state machine generator either. 2013-03-16 18:32 it can simply invoke ragel and then link the result, as I'm ABI-compatible with C 2013-03-16 18:32 and LLVM's LTO means that it won't generate cruft on the boundary 2013-03-16 18:32 isn't there this google lib for efficent regexes? 2013-03-16 18:32 larsc: hm, not sure 2013-03-16 18:33 ruby uses oniguruma. a ruby parser in oniguruma is 2x slower than ruby parser in flex+bison 2013-03-16 18:33 which I guess means that oniguruma is a hell of a fast library 2013-03-16 18:34 re2 2013-03-16 18:35 a nfa based regex implementation 2013-03-16 18:35 yea I see 2013-03-16 18:36 I wonder if I can disembowel it and generate LLVM or C from the result 2013-03-16 18:37 http://lwn.net/Articles/378440/ 2013-03-16 18:41 actually, ragel can simply emit ruby code, which I can compile 2013-03-16 18:41 no need in anything extra... 2013-03-16 18:44 bbl 2013-03-16 18:54 jekhor has joined #qi-hardware 2013-03-16 18:57 pcercuei has quit [Ping timeout: 260 seconds] 2013-03-16 20:08 emeb has joined #qi-hardware 2013-03-16 20:12 emeb has left #qi-hardware [#qi-hardware] 2013-03-16 20:45 megha has joined #qi-hardware 2013-03-16 20:45 baba has quit [Ping timeout: 240 seconds] 2013-03-16 21:15 jekhor has quit [Ping timeout: 256 seconds] 2013-03-16 21:48 Calyp has quit [Ping timeout: 245 seconds] 2013-03-16 21:54 Calyp has joined #qi-hardware 2013-03-16 21:54 LunaVorax has quit [Read error: Connection reset by peer] 2013-03-16 21:55 guanucoluis has quit [Ping timeout: 245 seconds] 2013-03-16 22:06 wej has quit [Ping timeout: 248 seconds] 2013-03-16 22:10 unclouded has joined #qi-hardware 2013-03-16 22:43 apelete has quit [Ping timeout: 245 seconds] 2013-03-16 22:56 kilae has quit [Quit: ChatZilla 0.9.90 [Firefox 19.0.2/20130307023931]] 2013-03-16 23:04 jekhor has joined #qi-hardware 2013-03-16 23:11 paul_boddie has joined #qi-hardware 2013-03-16 23:11 whitequark: You mentioned Starkiller, but did you look at Shedskin? 2013-03-16 23:13 methril has joined #qi-hardware 2013-03-16 23:16 * paul_boddie knows that whitequark always checks the logs. 2013-03-16 23:16 paul_boddie has left #qi-hardware ["Kopete 0.10 : http://kopete.kde.org"] 2013-03-16 23:17 pcercuei has joined #qi-hardware 2013-03-16 23:41 wej has joined #qi-hardware 2013-03-16 23:59 LunaVorax has joined #qi-hardware