01:21:06 | * | DAddYE quit (Remote host closed the connection) |
01:45:22 | * | q66 quit (Quit: Leaving) |
01:47:00 | * | Associat0r quit (Quit: Associat0r) |
01:51:48 | * | BitPuffin quit (Ping timeout: 256 seconds) |
02:00:53 | * | OrionPK quit (Quit: Leaving) |
02:52:35 | * | EXetoC quit (Quit: WeeChat 0.4.1) |
04:20:37 | * | DAddYE joined #nimrod |
04:52:40 | * | xilo quit (Ping timeout: 264 seconds) |
05:35:02 | * | Associat0r joined #nimrod |
05:35:02 | * | Associat0r quit (Changing host) |
05:35:02 | * | Associat0r joined #nimrod |
06:33:46 | * | DAddYE quit (Ping timeout: 246 seconds) |
06:35:01 | * | DAddYE joined #nimrod |
06:52:45 | * | Associat0r quit (Quit: Associat0r) |
07:25:10 | * | Araq_ joined #nimrod |
08:18:25 | * | Associat0r joined #nimrod |
08:18:25 | * | Associat0r quit (Changing host) |
08:18:25 | * | Associat0r joined #nimrod |
08:22:08 | * | DAddYE_ joined #nimrod |
08:22:09 | * | DAddYE quit (Read error: Connection reset by peer) |
08:52:22 | * | q66 joined #nimrod |
09:16:50 | * | DAddYE_ quit (Remote host closed the connection) |
09:39:24 | * | Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 22.0/20130618035212]) |
09:55:23 | * | BitPuffin joined #nimrod |
10:10:49 | BitPuffin | Man the AUR package for nimrod-git really should use the --depth option.. Such a huge download |
10:23:40 | * | asterite1 joined #nimrod |
10:24:17 | * | asterite1 left #nimrod (#nimrod) |
10:30:24 | dom96 | BitPuffin: Would you be able to sacrifice a whole weekend for it? |
10:30:36 | dom96 | because it's really a 48 hour competition. |
10:30:50 | BitPuffin | dom96: I know what ludum dare is :) |
10:30:52 | dom96 | You have to get the game done in 48 hours. |
10:30:56 | BitPuffin | I've been in their irc for like two years |
10:31:06 | dom96 | ahh col |
10:31:08 | dom96 | *cool |
10:31:10 | BitPuffin | which weekend is it? |
10:31:44 | dom96 | 23rd-26th |
10:32:04 | BitPuffin | Hmm |
10:32:07 | BitPuffin | I don't know really |
10:32:14 | BitPuffin | Not sure if I have the time |
10:32:30 | dom96 | awww |
10:32:34 | BitPuffin | I'll probably do one eventually |
10:32:46 | dom96 | I will probably only have time for this one. |
10:32:49 | BitPuffin | and I'll advertise that the games I'm currently writing are written in nimrod so |
10:32:55 | BitPuffin | it will probably generate more buzz :) |
10:33:04 | dom96 | hehe, cool. |
10:33:24 | dom96 | I wonder where fowl is, maybe he'd do it. |
10:34:45 | BitPuffin | Hmm maybe |
10:34:49 | BitPuffin | I'll still think about it though |
10:35:02 | BitPuffin | too bad there's no allegro 5 binding yet |
10:35:06 | dom96 | alright |
10:35:07 | BitPuffin | and I don't have time to make one :) |
10:35:15 | dom96 | The last time I did I used sfml. |
10:35:22 | dom96 | *I did it |
10:36:11 | dom96 | my art really sucked :P |
10:36:43 | BitPuffin | yeah I saw that you participated :P |
10:38:58 | BitPuffin | didn't check the art though or what it was! |
10:38:59 | BitPuffin | gotta go! |
10:40:54 | * | BitPuffin quit (Read error: Operation timed out) |
10:40:56 | dom96 | see ya |
11:01:39 | * | Araq_ joined #nimrod |
11:02:31 | dom96 | hey Araq_ |
11:02:43 | Araq_ | hi dom96 |
11:12:33 | dom96 | My async stuff is now fully automatic, it can connect to itself! :p |
11:13:00 | dom96 | I'm excited about getting epoll to work :D |
11:13:50 | Araq_ | yay |
11:13:57 | Araq_ | yeah getting rid of select is overdue |
11:14:08 | Araq_ | even though we beat ROR even with select iirc |
12:04:31 | * | Trix[a]r_za is now known as Trixar_za |
12:08:34 | * | Trixar_za twitches |
12:08:55 | Trixar_za | Ruby on rails gives me nightmares |
12:42:31 | dom96 | ugh, this is crap. |
12:42:38 | dom96 | I can't use Nimrod for Pandacodium. |
12:42:57 | Araq_ | dom96: why not= |
12:42:59 | Araq_ | ? |
12:43:06 | dom96 | "2. The team's project must be written in one (or more) of the following languages: Javascript, Python, Ruby or PHP." |
12:43:21 | dom96 | Is that rule stupid or what? |
12:43:32 | Araq_ | translate to JS then |
12:43:41 | dom96 | meh |
13:22:27 | * | xilo joined #nimrod |
13:32:56 | * | Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 22.0/20130618035212]) |
14:03:16 | * | EXetoC joined #nimrod |
14:06:58 | EXetoC | hola amigos |
14:21:47 | dom96 | bonjour monsieur |
14:27:30 | * | xilo quit (Ping timeout: 264 seconds) |
14:41:15 | * | nihathrael quit (Ping timeout: 245 seconds) |
14:41:34 | * | nihathrael joined #nimrod |
14:45:22 | * | Sergio965 joined #nimrod |
15:08:32 | * | Mat2 joined #nimrod |
15:08:34 | Mat2 | hi |
15:08:53 | dom96 | hello |
15:09:01 | Mat2 | hi dom96 |
15:09:04 | dom96 | What do you guys think of this? http://www.kickstarter.com/projects/noflo/noflo-development-environment |
15:12:22 | Mat2 | fine, I have seen similar software before - as I know quite common for game generators in the 80'es |
15:12:38 | Mat2 | ^80's |
15:12:44 | dom96 | I like the look of their IDE. But I guess it's not ready for the public yet. All I see in the docs is instructions on how to write these graphs using some text language, which totally defeats the purpose. |
15:14:42 | Mat2 | hmm, makes no sense |
15:17:07 | Mat2 | so I agree |
15:17:13 | dom96 | if they reach their goal I will cry |
15:21:13 | dom96 | btw for anyone that doesn't look at the forum much: http://forum.nimrod-code.org/t/191 |
15:25:43 | * | BitPuffin joined #nimrod |
15:26:50 | Mat2 | enforcing style is a good thing in my opinion |
15:32:11 | * | Trixar_za is now known as Trix[a]r_za |
15:33:35 | * | Amrykid quit (Excess Flood) |
15:34:06 | * | Amrykid joined #nimrod |
15:35:06 | Sergio965 | Nimrod looks like an underscored variable language. |
15:37:03 | EXetoC | what? |
15:37:24 | Sergio965 | I don't think enforcing a style is a good idea. |
15:37:47 | dom96 | why? |
15:37:48 | Sergio965 | But I think case sensitivity is needed. |
15:37:56 | Sergio965 | Because different people write code in different styles. |
15:38:15 | Associat0r | underscore is bad |
15:38:22 | Sergio965 | Why should the language decide if I can do "var i_like_bread" or "var iLikeBread"? |
15:38:24 | Sergio965 | Associat0r: ? |
15:38:25 | dom96 | yeah, I feared that would be some people's reaction :\ |
15:38:57 | Sergio965 | I don't like that Nimrod conflates all casing patterns, though. |
15:39:12 | Sergio965 | iLikeBread != i_like_bread != iLIKEBREAD. |
15:39:13 | dom96 | so you don't like style insensitivity either? |
15:39:25 | Sergio965 | Nope. |
15:39:29 | apotheon | I'm with gradha on that. |
15:39:29 | Sergio965 | It makes no sense. |
15:39:55 | dom96 | Sergio965: Would you prefer enforced style of style insensitivity? |
15:40:04 | Sergio965 | I would prefer neither. |
15:40:18 | Sergio965 | Why either? |
15:40:24 | * | Trix[a]r_za is now known as Trixar_za |
15:40:28 | Sergio965 | I can't think of one successful language that enforces either. |
15:40:32 | Sergio965 | Or, rather, uses either. |
15:40:49 | Sergio965 | (Besides things like Capitals for classes in Java, but I'm okay with enforcing capitals for types) |
15:41:16 | Sergio965 | Just not for variables. |
15:41:19 | apotheon | This whole "everything must be a particular way" focus strikes me as a weird sort of fetishistic pursuit of orthodoxy rather than focus on developing a great implementation of a good language and letting the growing community sort it out. |
15:41:43 | Sergio965 | "fetishistic pursuit of orthodoxy" is rather extravagant. This is not heresy. |
15:41:43 | apotheon | . . . and it reminds me of Go and Python. |
15:41:58 | apotheon | Sergio965: I'm kinda agreeing with you, so I'm not sure why you said that. |
15:42:05 | Associat0r | that's the point of a language to enforce certain things |
15:42:22 | apotheon | Associat0r: The point of a programming language (at least when I'm picking one to use) is what it enables. |
15:42:24 | Sergio965 | apotheon: We can agree on an end-goal and yet reach it in many different ways. |
15:42:29 | apotheon | . . . not whose orthodoxy it tries to enforce. |
15:42:44 | Sergio965 | Anyways, I need to grab lunch. This is an interesting discussion though. |
15:42:54 | apotheon | Sergio965: I have no idea what you're trying to argue against when you disagree with me while I'm basically agreeing with you. |
15:43:11 | Associat0r | it enables readibility and order in this case |
15:43:19 | Associat0r | consistency |
15:43:21 | apotheon | . . . |
15:43:30 | apotheon | the One True Readability |
15:43:33 | apotheon | Okay. |
15:43:38 | Mat2 | as I learned here yesterday, humans need order |
15:43:38 | dom96 | Araq's plan to enforce style is on the other side of the extreme. What we have now gives the programmer ultimate control, but people don't like that... if we go to the other side then we are essentially scaring away programmers anyway just as we are right now... |
15:44:18 | apotheon | It makes a certain amount of sense to me to . . . |
15:44:26 | apotheon | 1. reserve first-letter capitals for specific purposes |
15:44:40 | apotheon | 2. require first-letter lower-case for everything else |
15:45:01 | apotheon | 3. ridicule people who use all-caps outside of contexts where compatibility with other languages demands it |
15:45:14 | apotheon | Apart from that, this whole effort seems pointless and contentious. |
15:46:31 | Associat0r | OCaml and F# enforce that Data constructors start with UpperCase for example |
15:46:43 | dom96 | As does Haskell. |
15:47:10 | Associat0r | Lisp's use dashes between words |
15:47:19 | Mat2 | It is totally irrelevant what style is prescribed as long as one is prescribed |
15:47:46 | dom96 | I think it would be interesting to start a poll on HN. I am guessing everyone would vote for "case sensitive with no enforced style" though. |
15:47:46 | Associat0r | it is very relevant what style is prescribed |
15:48:06 | apotheon | Communities develop standards. People who violate them just for personal taste get their code shunned. I don't see a need to define a community by enforcing standards before people using it in general get a chance to define those standards based on community composition. |
15:48:42 | apotheon | It seems, as I said, like a fetishistic focus on orthodoxy, and shifts attention from the important stuff at this early stage to bikeshedding. Like I said, I'm with gradha. |
15:48:51 | Associat0r | sometimes you need a dictator |
15:49:02 | Associat0r | many times infact wrt language design |
15:49:24 | Mat2 | I disagree, preferences in style are just habituations |
15:49:27 | apotheon | . . . and yet, that's not a compelling argument. |
15:49:32 | apotheon | (re: Associat0r . . .) |
15:49:45 | apotheon | "Sometimes, you need freedom." See how well that works? |
15:49:49 | apotheon | It convinces nobody of anything. |
15:49:55 | EXetoC | I think having to type underscores all the time for example is a big deal |
15:51:37 | apotheon | Mat2: In communities that develop their own styles, stylistic standards tend to emerge that suit the syntactic needs of the language, to some degree. It's not "just habituation". It provides cues to the coder and code reader about the semantic payload of the source by way of variances in stylistic features in a line of code. |
15:52:18 | apotheon | That's one reason that "one true style" across different languages is an *awful* idea. |
15:52:52 | dom96 | I have never had a problem with style insensitivity in Nimrod. But the issue is not minor, I think we have lost many users because of this language characteristic. Some people won't even try the language because of it. |
15:53:30 | apotheon | Using dashes as word separators in tokens would be a terrible idea in C even if the - character wasn't used for arithmetic, but it's a great idea in Common Lisp for readability and ease of typing. |
15:54:05 | apotheon | dom96: Case insensitivity itself (as in BASIC and SQL) is a terrible idea. I agree with that. |
15:54:58 | dom96 | apotheon: Why do you think that? |
15:55:37 | apotheon | It encourages shouting, for one thing. |
15:56:01 | Mat2 | apotheon: The semantics of a language is logically a poor choice for assessing the efficiency of an algorithm because the processor architecture has no semantic meaning in the context of the runtime characteristics. |
15:56:23 | Associat0r | it also enciurages underscores |
15:56:31 | dom96 | apotheon: shouting? |
15:56:34 | apotheon | It also leads to people inconsistently representing a particular token across the sources of a project. |
15:56:39 | apotheon | SHOUTING |
15:57:03 | dom96 | You mean using ALLCAPS? |
15:57:12 | EXetoC | YEP |
15:57:22 | apotheon | Mat2: What does that have to do with anything I said? |
15:57:28 | apotheon | EXACTLY |
15:57:33 | apotheon | SHOUTING |
15:58:49 | dom96 | Why are inconsistent tokens a problem? |
15:58:59 | apotheon | If I name something "datum", and call it "Datum" somewhere else, and "DATUM" in a third place, that's a hanging offense, because it makes it difficult to keep track of where "datum" is being used no matter what programming language I'm using. |
15:59:32 | Mat2 | aoptheon: Statistics show no significance of different styles both in terms of readability. I also disagree that semantic payload of the source depends of style to some degree |
15:59:53 | apotheon | Mat2: 1. Statistics can be made to show anything. |
16:00:01 | apotheon | Mat2: 2. You got that backward, so it's no surprise you disagree. |
16:00:19 | Mat2 | fine, so your own argument shows nothing ? |
16:00:57 | Mat2 | ah ok, it was a wrong translation, sorry |
16:01:01 | apotheon | I can only assume you didn't understand my argument at all if that's what you think, but I have no idea what part of it you misunderstood, because your responses seem to have absolutely no connection to what I said other than the fact you initiated your replies with "apotheon:". |
16:01:30 | dom96 | apotheon: what? Presumably if I wanted to check where a variable is being used in a case sensitive language I would simply search for it. Why can't I do that in a case insensitive language? |
16:02:11 | Mat2 | apotheon: I have disabled automatical translation and now your statement makes sense to me |
16:02:18 | EXetoC | you can, assuming that the style is the same everywhere |
16:02:45 | apotheon | dom96: Does your need to know that a particular variable is being used only ever come up in a context-free manner that is served by text searches? Don't you ever want to be able to read code and understand it clearly, rather than just wondering where a particular variable is being used in total? |
16:03:02 | dom96 | I'm sure all editors support case insensitive searching. |
16:03:03 | * | xilo joined #nimrod |
16:03:43 | EXetoC | nm, was thinking of style insensitivity |
16:04:44 | apotheon | I mean, sure, you can count how many times a variable appears in your sources that way, and you can see where a change to a variable's value in one place might affect things in other places that way, but text searches don't tell you that a particular variable you've seen before appeared in a surprising place when you're just reading the code in that place and not expecting to see it there (for |
16:04:50 | apotheon | instance). |
16:04:58 | dom96 | apotheon: I can read variable names with varying case easily. Foo is the same as foo to me. I know that my Foo variable which is defined on line 1 is being used on line 5 where I see a 'foo' in my source code. |
16:05:48 | apotheon | If you're not specifically looking for it, it'll jump out at most programmers more clearly if it uses a consistent capitalization style. Maybe you're different from most programmers, though. |
16:05:59 | apotheon | For all I know, your brain may be mostly case-insensitive. |
16:06:22 | dom96 | I think it's a case of habit. |
16:06:35 | apotheon | "case" of habit -- funny |
16:06:45 | * | BitPuffin quit (Ping timeout: 264 seconds) |
16:06:54 | dom96 | hrm? |
16:07:16 | * | dom96 must be missing the humour |
16:08:10 | apotheon | The F and f characters are distinct characters. Seeing them as the same letter is a matter of training, rather than of basic nature -- and, by training, we are prone to seeing them as conveying difference in meaning anyway (beginning of sentence meaning, or noun meaning in German, or proper noun meaning in English, et cetera), not as being *exactly* the same with no difference in usage, so in |
16:08:16 | apotheon | many ways it just reinforces that natural recognition of them as distinct characters. |
16:08:46 | apotheon | dom96: We were talking about case sensitivity, which refers to whether a letter was capitalized or not, and you referred to something being a case of habit, as in an instance. |
16:09:01 | apotheon | It's punny. |
16:09:05 | dom96 | I see. |
16:09:16 | apotheon | . . . unless you didn't mean to use "case" to mean "instance". |
16:09:54 | Mat2 | stlye is related to readability. For some languages it's also related to semantic but in both cases I do not see any arguments for prefering a specific style because at last it's the algorithm what's important - not its formulation |
16:10:01 | Associat0r | apotheon: the point isn't to make variables the most readable, but instead to make the structure of code more apparant |
16:10:21 | apotheon | Associat0r: I think I made that argument already. |
16:10:29 | Associat0r | underscores are just noise |
16:10:30 | dom96 | apotheon: I did. |
16:10:45 | Associat0r | http://www.reddit.com/r/programming/comments/1iyp6v/is_there_a_really_an_empirical_difference_between/ |
16:10:51 | apotheon | Associat0r: They can serve as cues for understanding the structure of the code. |
16:10:53 | Associat0r | also wastes space |
16:11:10 | Associat0r | apotheon: no they don't it makes variables not stand out on their own |
16:11:13 | apotheon | . . . unless the space used helps with clarity. |
16:11:22 | apotheon | Associat0r: So you say. |
16:11:33 | apotheon | Associat0r: Great argument. "I say this. Accept it or die." |
16:11:43 | Associat0r | spaces between variables help yes |
16:11:49 | apotheon | . . . or whatever consequence you imagine applies. Maybe it means I'm dumb, instead of meaning I die. |
16:12:04 | Associat0r | but spaces or underscores within variables hurt |
16:12:11 | * | DAddYE joined #nimrod |
16:12:11 | apotheon | Whatever it is, I find it a wholly unconvincing argument to have you just repeat your position. |
16:12:36 | Associat0r | apotheon: everything is explained in that thread |
16:12:49 | Mat2 | readability is a subjective class. For a chinese readability can be very different to what people in europe will call readable ! |
16:13:10 | apotheon | Well, I'm done with what I was doing here (where I'm sitting, that is -- not the IRC channel). I need to get on with my day. I think I'll just declare myself the "winner" by virtue of the fact that I actually explain my reasoning, while most others just repeat their positions with no support. |
16:13:23 | Associat0r | "CamelCase, on the other hand, lumps all the identifiers together such that it's clear where an ident ends, and where punctuation and whitespace begin. It makes for a much faster read, which helps tremendously when consuming a new API, or learning someone else's code." |
16:13:35 | dom96 | Perhaps we should just quote our variables just like our strings to allow spaces in their names :P |
16:14:07 | Associat0r | dom96: we do that in F# for unit tests |
16:14:48 | dom96 | I would imagine that no one would use such a language though. |
16:15:11 | Associat0r | I wouldn't use it for normal code |
16:17:42 | dom96 | Perhaps Nimrod's problem is not that it is Style insensitive, perhaps the problem is that Google/Mozilla is not behind it. If we get rid of SI, will people start to use Nimrod, or will they find another small issue which they will use as an excuse not to use the language. |
16:18:29 | Associat0r | dom96: that's the problem yes |
16:19:34 | dom96 | It would be sad to go through such a big change only to not gain anything and in fact, lose so much. The users that we have now are all used to SI now, I know I am... |
16:20:53 | Associat0r | I never saw style insensitivity as an excuse to not learn a language |
16:21:21 | Mat2 | with that I can agree |
16:21:57 | EXetoC | I'm only a little annoyed by how the types are name as a result |
16:22:05 | EXetoC | *named |
16:24:11 | dom96 | Associat0r: I fear that the people in this IRC channel may be the people who share your view. And the rest simply stopped reading after they figured out that Nimrod is style insensitive. |
16:28:12 | * | DAddYE quit (Remote host closed the connection) |
16:28:43 | Associat0r | dom96: I really don't think so, which other mainstream lang enforces style? |
16:28:44 | * | DAddYE joined #nimrod |
16:29:04 | dom96 | Associat0r: None that I know of. |
16:29:22 | dom96 | Haskell comes closest, it enforces types to start with an uppercase letter. |
16:29:37 | dom96 | Which I think is pretty elegant. |
16:29:39 | Associat0r | but it's not mainstream |
16:30:13 | dom96 | hrm, what do you define as 'mainstream'? |
16:30:42 | Associat0r | mainstream as in the top 10 of langs used |
16:30:47 | Associat0r | or maybe top 5 |
16:31:19 | Associat0r | anyway popular langs the regular joe knows about |
16:32:30 | dom96 | yeah, there are none. |
16:33:02 | * | DAddYE quit (Ping timeout: 240 seconds) |
16:33:14 | Associat0r | it's seriously a non-issue, those people who complained will find other issues for why not to adopt the lang |
16:33:18 | Associat0r | that |
16:33:31 | Associat0r | 's not to say style enforcement is a bad thing |
16:33:44 | vegai | Associat0r: go does some style enforcing |
16:33:52 | vegai | as does python, I would say |
16:33:56 | Associat0r | but it's not mainstream yet |
16:34:20 | dom96 | What style enforcing does Python do? |
16:34:20 | vegai | oh, you were talking of identifier names. Ok, so python doesn't do that really |
16:34:29 | Associat0r | also does the Go compiler really reject other styles or is it a separate tool? |
16:34:29 | vegai | I was thinking of indentation, but nevermind |
16:34:31 | dom96 | ahh. |
16:34:44 | Associat0r | also Python doesn't enforce style I use camelCase there without problems |
16:34:57 | vegai | Associat0r: it uses capital letters to define private/public of various things |
16:35:17 | vegai | ...but it's debatable whether that is really style enforcing either |
16:36:02 | EXetoC | the PEP 8 hitmen do, though :> |
16:38:51 | Associat0r | for people to adopt your lang there should be some big company behind it or has todo something with Javascript and the web |
16:40:29 | * | Araq0 joined #nimrod |
16:41:56 | dom96 | perhaps some company will notice nimrod and buy Araq's creation. |
16:42:44 | EXetoC | c(:) |
16:52:18 | * | Araq0 quit (Quit: Bye) |
16:54:31 | * | DAddYE joined #nimrod |
17:01:11 | * | rubino123 joined #nimrod |
17:06:11 | Associat0r | dom96: o I also forgot, if it's on the JVM it's chances are higher too |
17:06:42 | dom96 | over my dead body :P |
17:07:32 | * | Trixar_za is now known as Trix[a]r_za |
17:08:39 | * | Mat2 found an easy way compiling efficient code for iAtom |
17:16:01 | * | Trix[a]r_za is now known as Trixar_za |
17:16:41 | Mat2 | these CPU is well (and restrictive) designed I must say |
17:40:55 | apotheon | What big companies were behind Perl, PHP, Python, and Ruby when they saw their early mass adoptions? |
17:41:32 | dom96 | How did those languages succeed then? |
17:42:02 | apotheon | Perl was something that didn't exist at the time, and it struck a chord. |
17:42:35 | apotheon | Python was in many ways seen as a reaction to Perl, and people who had grown sick and tired of certain aspects of Perl but still needed something to fill that niche adopted it. |
17:42:44 | apotheon | PHP was actually an offshoot of Perl, initially. |
17:42:50 | apotheon | Ruby had a "killer app". |
17:44:03 | apotheon | I don't really think that Nimrod should be aiming to be the next C++ or Java or whatever, anyway. I think it should be aiming to be something more like the next Scheme or Haskell, but specifically targeted at C users. That's how it'll succeed. You don't have to be top-ten to succeed, after all. |
17:44:37 | apotheon | Once you're getting a solid community behind it, then maybe think about figuring out how to hit the next stratum. |
17:45:13 | apotheon | Languages that go straight from sea level to Mars tend to suck. Look at the examples: C++, Java, C#, Visual Basic . . . |
17:45:18 | dom96 | Yes, I would be happy if Nimrod was as popular as Haskell. |
17:45:37 | dom96 | But we're not growing fast enough for that. |
17:46:19 | EXetoC | there are so many new-ish languages that people find interesting |
17:46:57 | apotheon | Things that can be achieved, without some outside agency, that can help to boost its popularity to that level should be considered. A book, some "killer app" kinda things, and a rich library ecosystem with a good library distribution system, are all good examples of that sort of thing. |
17:48:08 | Mat2 | how about using nimrod for an effective operating-system with some applications most people want use ? |
17:48:15 | apotheon | If you can also figure out which programmers out there are most likely to appreciate what Nimrod has to offer, you might target them, as well -- and, in the process, try to avoid offending them or disenfranchising them with language design decisions that aren't really germane to the important benefits of Nimrod per se. |
17:48:42 | apotheon | Writing an operating system is a *huge* project, and then you've just shifted the popularity problem from the language to the OS. |
17:49:00 | Mat2 | exactly ! |
17:49:13 | apotheon | I think it's much, much harder to make an OS popular than a programming language. |
17:49:20 | EXetoC | huge indeed. wouldn't be of any practical use obviously, but I'm sure people would be impressed |
17:50:02 | apotheon | If you can, say, duplicate the MINIX 3 kernel in all its important particulars, using Nimrod, that'd be an interesting curiosity, but I'm not sure it would do much for Nimrod's popularity in the long run. |
17:50:07 | Mat2 | you don't need a huge os in my opinion - an effective would be enough |
17:50:17 | apotheon | It doesn't have to be a huge OS to be a huge project. |
17:50:28 | apotheon | I'm kinda assuming you'd want the OS to be something someone could actually use . . . |
17:50:31 | dom96 | I've tried doing the same thing as https://github.com/charliesome/rustboot |
17:50:44 | dom96 | You can see the difference in popularity. |
17:50:51 | dom96 | https://github.com/dom96/nimkernel |
17:50:57 | apotheon | . . . and siphoning that much creativity and effort away from Nimrod itself to feed the OS project is probably not cost-effective strategy. |
17:50:59 | Mat2 | apotheon: yes |
17:51:10 | EXetoC | effective? :p |
17:51:16 | dom96 | Even though my version does even more... |
17:51:28 | dom96 | People in the reddit thread failed to notice that it's even written in Nimrod. |
17:51:55 | Mat2 | ok, that speak of the people in the reddit thread |
17:51:58 | apotheon | The upshot is that I think building an OS as a marketing strategy when you're an independent project is a losing proposition. |
17:52:22 | Mat2 | probably you're right |
17:52:32 | Mat2 | but it can be worth the try |
17:53:11 | apotheon | I think I'm going to put off doing anything much with Nimrod, by the way, until I see how this style enforcement thing hashes out. I just don't have the time to screw around with something that might be completely invalid and, ultimately, painful to use in six months. |
17:53:22 | Mat2 | and I think most programmers are more impressed from 'huge' projects (has nothing to do with rationality, only psychology) |
17:53:38 | EXetoC | sure |
17:53:39 | apotheon | Mat2: Pick a "huge" project that isn't actually a huge project, then. |
17:54:10 | Mat2 | well I do already |
17:54:12 | apotheon | How pure is Nimrod's self-hosting at this point, by the way? |
17:54:22 | EXetoC | I'm fine with maybe marketing with that in mind, as long as design decisions aren't :> |
17:54:53 | EXetoC | ok that was a badly composed sentence |
17:55:01 | apotheon | Yeah, I had no idea what you were saying. |
17:55:25 | apotheon | dom96: Do you know the answer to my question? |
17:55:47 | dom96 | 100% pure? |
17:55:52 | dom96 | It's written completely in Nimrod. |
17:55:59 | apotheon | In general, I think that programming language geeks who like compiled languages won't take a language seriously if it's not substantially self-hosting. |
17:56:04 | apotheon | dom96: Cool beans. |
17:56:48 | EXetoC | good thing it is then |
17:57:09 | dom96 | The compiler is indeed a "huge" project. |
17:57:28 | apotheon | That should be highlighted as a brag point, then. |
17:58:10 | apotheon | As for me . . . I'll take a language seriously if I like the language itself, if the licensing isn't contentious, and if it accomplishes stuff I want to be able to do. Bonus points if it obsolesces something awful. |
17:58:30 | dom96 | apotheon: I wish you would just do something with Nimrod. You said that you would on the condition that we would change to a copyfree license, and we did. Where are these projects of yours? |
17:59:13 | apotheon | dom96: I said that thinking Nimrod was basically a defined language with just some minor stuff needing to be ironed out. This style enforcement thing is a huge change, conceptually, though. |
18:00:42 | apotheon | dom96: Also . . . I spent four weeks with a (temporary) full-time job which left me drained and uncreative whenever I wasn't working, so I haven't done *any* coding for the last month or so. I'm finally starting to get my life back on track, and was starting to show my face in here again with an eye toward writing a browser-agnostic bookmarking tool when I found out that in six months it might |
18:00:48 | apotheon | be invalid code because of this style enforcement thing. |
18:02:00 | Mat2 | try the code-translation tool Araq mentioned in the forum |
18:02:08 | apotheon | An image manager tool is another one in the queue, as is an SMTP client. |
18:02:15 | dom96 | Well that sucks. I don't think Araq will just change things on a whim though, he will provide a transition path. |
18:02:22 | dom96 | Yeah, what Mat2 said. |
18:02:55 | apotheon | Mat2: I don't want to just translate my code into a style I'm going to find painful to use. At that point, I'd just abandon the project and see if anyone else liked it enough to pick it up -- and I'm not sure that won't be the case right now. |
18:03:16 | apotheon | I'd rather write code in a language I know will still be palatable in six months. |
18:03:38 | * | BitPuffin joined #nimrod |
18:03:46 | EXetoC | several people have opposed the static enforcing though, so we'll see what happens |
18:04:16 | apotheon | "we'll see what happens" is exactly my strategy with Nimrod right now |
18:05:23 | apotheon | Oh, by the way, I have a great idea for a crazy "huge" project to build Nimrod popularity -- and I think it's a much easier niche to break into than OSes. |
18:05:33 | dom96 | oh? |
18:05:56 | apotheon | Make a fast, well-designed browser rendering engine that is substantially toolkit-agnostic. |
18:06:08 | Mat2 | good idea |
18:06:21 | dom96 | So exactly what mozilla is doing using rust? :P |
18:06:26 | Mat2 | but how is that easier than os development ? |
18:06:35 | apotheon | I think it'd be much quicker to get the thing up to speed as a working, useful project. The only major downside is maintenance going forward, because of the changing standards for the web. |
18:06:37 | dom96 | yeah, what Mat2 said. |
18:06:55 | EXetoC | dom96: not much |
18:07:04 | apotheon | dom96: Servo? Meh. It's basically just a Mozilla project on the side, kinda like Microsoft's "Singularity" kernel for the OS market. |
18:07:20 | dom96 | EXetoC: ? |
18:07:29 | Mat2 | Singularity is a ggod example I have in mind |
18:07:33 | apotheon | dom96: Either it'll go nowhere, or it'll just be the new Mozilla kernel. A Nimrod rendering engine would be new/original/independent/different. |
18:07:37 | Mat2 | ^good |
18:07:50 | EXetoC | s/^/* :p |
18:08:13 | EXetoC | hm, maybe I need to escape it |
18:08:26 | apotheon | Also . . . give the rendering engine a copyfree license so I can get the Copyfree Initiative to pimp it. |
18:08:46 | apotheon | s/ggod/good/ |
18:08:49 | apotheon | (problem solved) |
18:09:10 | apotheon | At present, the only copyfree licensed rendering engine is the one used by w3m, which is pretty sad. |
18:09:25 | apotheon | Servo had some potential for that, but then the developers went stupid. |
18:09:49 | dom96 | It would be pretty hard to break into the rendering engine "market". |
18:09:50 | EXetoC | oh |
18:10:00 | * | BitPuffin quit (Ping timeout: 245 seconds) |
18:10:10 | apotheon | dom96: Not as hard as you think, I think. |
18:10:21 | dom96 | Far better to go after something which has a potential for earning you lots of money. |
18:10:35 | apotheon | dom96: Mozilla explicitly rejects rendering engine portability right now. We're basically down to WebKit-only for independent browser projects these days. |
18:11:25 | apotheon | dom96: The browser market *desperately* needs a rendering engine that is designed for reuse in different browsers other than WebKit, especially given the stupidities of WebKit design. |
18:12:07 | apotheon | dom96: In fact, if you give it an API accessible from other languages such as C and Go, I'm pretty sure the xombrero project would consider jumping from WebKit to the Nimrod rendering engine, if it meets the criteria I described above. |
18:12:57 | apotheon | Also . . . things like feature bounties and consulting have the potential to earn you a lot of money if you create a rendering engine that catches on at all. |
18:13:40 | dom96 | It does sound like a fun project heh |
18:14:09 | apotheon | If the Nimrod language itself hashes out to something I like, I'd love to pitch in some effort on some of the rendering engine project scutwork. |
18:14:22 | apotheon | (. . . as a way to learn the language, among other reasons.) |
18:14:43 | dom96 | Well I most likely won't be starting such a project. |
18:15:34 | dom96 | But would contribute if someone else creates it. |
18:16:42 | apotheon | It might make sense to have a page with a list of project ideas, where the rendering engine thing could be listed. For each thing listed, indicate reasons it would be a good idea in its own right, reasons it would be good to do it with Nimrod, and reasons it would be good for Nimrod to do it. |
18:17:30 | apotheon | Even if you don't want to start the project, you can help encourage others to do so. |
18:17:35 | apotheon | dom96: What projects are you working on? |
18:18:06 | dom96 | I'm currently working on an async macro which replicates C#'s await functionality. |
18:18:47 | apotheon | Hm. Is there anything you're working on, in Nimrod, that would be more conceptually accessible to people who won't necessarily code in Nimrod? |
18:18:51 | dom96 | And of course I have Aporia, Nimbuild, Nimforum, jester, babel, my gameboy emulator, and a lot of other projects ideas pending. |
18:19:08 | apotheon | Oh, right, you make all the cool stuff, I guess. |
18:19:36 | vegai | 21:09 < apotheon> Servo had some potential for that, but then the developers went stupid. |
18:19:41 | vegai | what does this refer to? |
18:19:52 | apotheon | licensing |
18:19:57 | vegai | aah. |
18:20:12 | apotheon | Amazingly, I remembered the context of that comment right away. |
18:20:36 | dom96 | apotheon: I have plans to make Aporia language-agnostic and a competitor to Sublime text. |
18:20:56 | apotheon | . . . and copyfree? |
18:21:02 | dom96 | perhaps |
18:21:13 | apotheon | (not that it's likely to matter much to me on a personal level; I'll probably keep using vi) |
18:21:26 | apotheon | (it'd be nice to be able to add it to the copyfree list of software, though) |
18:23:10 | dom96 | Sadly, I only have one month of summer holidays left. It's nice to see some of the new people helping me with my projects, but I would love to see more. |
18:24:17 | apotheon | I'm actually at a kind of turning point in technology selection for copyfree.org back end. I need to decide what tools (including language) I'll use for the major rewrite I'm planning. |
18:24:27 | apotheon | I'm guessing I'll end up using Ruby, at this point. |
18:24:40 | dom96 | :\ |
18:26:04 | apotheon | It's just bad timing, I guess. Nimrod's not in a state of language stability where I can reasonably choose it. |
18:26:29 | apotheon | I might go with Go. I doubt I actually need any of the benefits Nimrod provides over Go for that project. |
18:27:37 | apotheon | dom96: Is there any chance I could convince you to drop the advertising clause from babel's license?" |
18:27:40 | apotheon | s/"// |
18:28:01 | Araq | apotheon: lol |
18:28:28 | Araq | the enforced style and the old SI are really the same design |
18:28:31 | apotheon | Of Aporia, Nimbuild, Nimforum, jester, and babel, only Aporia and babel are currently ineligible for inclusion in the copyfree software list right now. |
18:28:48 | Mat2 | hi Araq |
18:28:52 | apotheon | Araq: Okay . . . |
18:29:01 | Araq | however ... I failed to make this clear |
18:29:08 | Araq | utterly failed |
18:29:26 | dom96 | Araq: You're still kind of failing, as I am a bit confused. |
18:30:21 | Araq | look, it's 2013 and your tool should really be able to render the code like you wish |
18:30:34 | Araq | this is what SI is all about |
18:30:40 | dom96 | apotheon: argh. I like my advertising clause. It helps me sleep at night. Maybe if you decide to use Nimrod instead of Go my thoughts will turn in your favour :P |
18:31:14 | apotheon | Araq: What exactly does SI stand for? |
18:31:19 | Araq | however the SI also lead to the T/P prefixes which cost us 80% of all potential users I'm afraid ... |
18:31:29 | Araq | SI = style insensitivity |
18:31:31 | apotheon | dom96: We'll see how style enforcement turns out. |
18:31:52 | dom96 | However, I was planning on using a similar advertising clause for Aporia. |
18:31:57 | apotheon | Araq: Prefixes that are reminiscent of Hungarian notation really annoy a lot of programmers. |
18:32:04 | Araq | so ... the new design is a weird compromise that the first char is CS |
18:32:18 | dom96 | Because I like the name Aporia, and I don't want people to use it :P |
18:32:33 | Araq | so that 'var parser: Parser' is valid (well it is now I already but that works due to special scoping rules) |
18:32:47 | apotheon | dom96: This is what I mean by "advertising clause" . . . |
18:32:48 | apotheon | 3. All advertising materials mentioning features or use of this software |
18:32:48 | apotheon | must display the following acknowledgement: |
18:32:48 | apotheon | This product includes software developed by Dominik Picheta. |
18:33:06 | dom96 | I see. |
18:33:09 | apotheon | dom96: I don't see how that stops people from using the name of the software. You're talking about a poor man's trademark, basically. |
18:33:16 | apotheon | (re: Aporia) |
18:33:26 | dom96 | Yep. I was talking about 4. |
18:33:47 | apotheon | Clause 4 doesn't disqualify a license for copyfree compliance. |
18:34:15 | dom96 | But you're right. Clause 4 means nothing unless I get a proper trademark. |
18:34:19 | apotheon | . . . so, while I find it a little silly personally, go ahead and keep it if you like it that much. |
18:34:47 | dom96 | Although doesn't it still have an effect if someone wants to fork my software and keep the 'babel' name? |
18:34:54 | dom96 | in that they can't do that. |
18:34:58 | apotheon | Clause 4 doesn't mean nothing without a trademark (and trademarks are actually evil, as enforced by law). It is effective in cases where people are using your source code. |
18:35:02 | apotheon | (in theory, anyway) |
18:35:08 | apotheon | (the courts have the final say) |
18:35:42 | Araq | however ... people have some irrational fear that I sometimes write this_that and then later thisThat and make it harder to read |
18:36:04 | Araq | which is complete backwards |
18:36:09 | Araq | *completely |
18:36:11 | apotheon | Araq: What exactly is under consideration for the Nimrod language, regarding style enforcement, then? |
18:36:40 | Araq | on the contrary, having both this_that and thisThat and they mean *different* things is what's really confusing |
18:37:06 | Araq | if they mean the same, it's can automatically be transformed back into consistency |
18:37:18 | apotheon | Araq: Is there a clear explanation of the whole shebang somewhere that I can read? |
18:37:29 | Araq | unfortunately not ... |
18:37:44 | dom96 | what about that forum thread I linked? |
18:37:58 | apotheon | dom96: link again, please |
18:38:01 | apotheon | if you have it handy |
18:38:06 | dom96 | http://forum.nimrod-code.org/t/191 |
18:38:15 | Mat2 | I found it very instructive |
18:38:55 | apotheon | dom96: I'll read it again (less skimming, this time) and maybe run my interpretation of it past Araq to see if I know what I'm talking about. |
18:40:37 | apotheon | Araq: Okay . . . is it the case that you're not talking about making the actual language implementation enforce style, but will instead just provide a prettifier for those who want to enforce a particular style? |
18:41:06 | Araq | apotheon: not quite |
18:41:13 | apotheon | Please clarify, then. |
18:41:31 | Araq | people argued somewhat convincingly that a unified style helps them read code on github |
18:41:56 | Araq | and so this enforced style is for code that you have to read when you're not in your IDE/editor |
18:42:30 | apotheon | Is it a code display prettifier that doesn't actually touch the underlying code in its stored form, then? |
18:42:44 | * | apotheon is confused. |
18:43:43 | apotheon | "Yes, apotheon -- you are obviously confused, and easily so." |
18:44:12 | Araq | the display prettifier currently makes everything the same style for github, but it's also good for rendering the identifiers as you like |
18:44:15 | apotheon | I'm starting to feel like the dumb kid in class because I'm still not sure exactly what Araq is trying to say. |
18:44:53 | Araq | so ... it's actually pretty simple: all code is stored the same way, but can be viewed as prefered if you happen to have a proper editor plugin |
18:45:06 | apotheon | Will the compiler reject anything for style violations like use of underscores in variable, constant, or method names, or for use capitalization in the wrong place (or lack of capitalization where it should be)? |
18:45:59 | apotheon | Does "proper editor plugin" support stuff like vi? |
18:46:04 | Araq | my plan was to make that optional via pragmas, apotheon |
18:46:17 | apotheon | Opt-in, or opt-out? |
18:46:28 | Araq | the default being turned ON |
18:46:42 | Araq | but now I think the default should be turned OFF :P |
18:47:00 | apotheon | "use strict" |
18:47:02 | Araq | since I got so much heavy resistance ;-) |
18:47:02 | apotheon | (har) |
18:47:49 | apotheon | What about the "plugin" thing? Is this something that requires A) your editor to have a tractable plugin architecture for this and B) someone to have written the plugin specifically for that editor, so that people with plaintext editors are SOL? |
18:48:18 | Araq | apotheon: we already have a VIM plugin and the compiler is written with these things in mind |
18:48:23 | apotheon | s/for that editor/for that editor's plugin architecture/ |
18:48:33 | Araq | the compiler supports a sockets API for querying |
18:48:41 | apotheon | Araq: Is there anything that would work with, say, nvi? |
18:48:51 | Araq | no idea what nvi is |
18:49:03 | apotheon | It's a more old-school vi implementation. |
18:49:14 | Araq | *shrug* |
18:49:23 | apotheon | Basically, to work with nvi, it'd probably need some kind of editor-agnostic filter that sits between the editor and the file, I think. |
18:49:38 | Araq | if you want to live in the 70ies, why even bother with a new programming language? |
18:49:43 | apotheon | So . . . I guess the answer is A) yes and B) yes. |
18:50:25 | apotheon | Araq: The key isn't so much nvi as it is "Will this require me to choose from a list of 'approved' or specifically supported editors?" |
18:50:41 | apotheon | I just think nvi serves as an effective litmus for that. |
18:51:12 | EXetoC | surely you can do without a plugin then |
18:51:25 | apotheon | . . . especially considering that something that works like nvi will be pretty much everywhere except most MS Windows systems, while something from the approved/supported list is unlikely to be there unless someone specifically put it there. |
18:51:50 | Araq | "except most MS Windows systems" exludes many machines so |
18:51:51 | apotheon | EXetoC: You could do without a plugin, anyway. I'm just trying to figure out how broadly The Plan will actually apply. |
18:51:57 | apotheon | Araq: not my point |
18:52:16 | apotheon | If you'd stop getting defensive about it, this conversation might be a lot smoother. |
18:53:33 | EXetoC | feel free to merge my branch any time. 4-line diff :> |
18:53:57 | Araq | apotheon: also we have a chicken and egg problem: why declare the language stable when we have few users anyway? |
18:54:27 | apotheon | I'm not saying you should declare the language stable. You probably shouldn't if there are big changes you still want to make. |
18:55:10 | apotheon | The more stable it is, the more likely people are to want to start using it, of course, so you shouldn't break it from time to time just because you don't have a lot of users -- but if you have good reasons to break things while settling on a final design, you should do it. |
18:55:44 | Araq | fair enough |
18:55:55 | apotheon | For me, personally -- not for the project, or for everyone in the world, or whatever, just for me -- it doesn't make sense to use Nimrod for the projects I have in mind if I'm not sure I won't decide I don't like the language in six months. That's all I was saying about that. |
18:56:40 | apotheon | So . . . to summarize . . . |
18:58:00 | apotheon | My impression is that the language will not assign semantic import to things like capital letters or underscores by default (most likely), but there will be a default style enforcement scheme that can be turned on with a pragma, and there are plans to offer editor display style filter plugins for the editors you guys commonly use. |
18:58:05 | apotheon | Is that about the size of it? |
18:59:07 | apotheon | Araq: . . . and I'm not sure what this means for type signature prefixes, at this point. |
19:00:33 | Araq | apotheon: well capital letters are meaningful but only for the first character which allows us to get rid of the type signature prefixes |
19:00:45 | Araq | that's the plan anyway |
19:01:01 | apotheon | Araq: For what purposes are initial capitals meaningful? |
19:01:07 | apotheon | (according to The Plan) |
19:01:16 | Araq | to distinguish types from non-types |
19:01:25 | apotheon | Is it types that get caps? |
19:01:29 | Araq | yeah |
19:01:47 | apotheon | Integer would be a type, and integer would be a variable or whatever -- right? |
19:01:52 | Araq | right |
19:02:25 | apotheon | If all it takes to get rid of the type signature prefixes is capitals being mandatory and reserved for types, I think that change is pure win. |
19:02:44 | apotheon | I don't know if there's a better way to do that, but in absence of a better way, I think that's a fantastic plan. |
19:02:53 | Araq | wow thanks |
19:02:57 | apotheon | . . . specifically in terms of not annoying programmers in general. |
19:03:59 | apotheon | I prefer it that way myself, too, but it's not such a big change that it'd aggravate me too much if you didn't make that change, assuming the prefixes would themselves only be used for types. I think there's a huge, very pervasive bias against such prefixes, though. |
19:04:22 | Araq | apotheon: I agree |
19:04:26 | apotheon | The way people bitch about the NS prefixes in ObjC, for instance, is pretty astonishing. |
19:04:41 | Araq | however currently every common type is spelt like 'int' in Nimrod |
19:04:47 | apotheon | ah |
19:04:52 | Araq | so we need this transition tool |
19:05:08 | EXetoC | and the underscores? people are concerned with grepability, though I think it's a minor issue in practice, because most people adhere to the official style, right? |
19:05:37 | Araq | EXetoC: the underscores are no problem for nimgrep and even for grep (_)? is easy enough to do |
19:05:49 | apotheon | I might say that (if it doesn't clash with something else) something like :int would work, too, except the anti-Perl orthodoxy is rabid about "sigils", which could severely damage the language's acceptance rate amongst key demographics like the Pythonistas. |
19:05:50 | Araq | and indeed the official style doesn't use them |
19:06:33 | apotheon | Okay, sounds good to me. |
19:06:54 | EXetoC | didn't know it dealt with that |
19:07:05 | EXetoC | makes sense |
19:07:47 | apotheon | Y'know, one reason I dislike style enforcement in a language is the simple fact that it stops pathological subcommunities that habitually write shitty code from identifying themselves as clearly as would be ideal. Consider GNU style for C code -- one of the clearest indicators I've ever seen that the subcommunity in question is incompetent to write good code. |
19:08:16 | Araq | apotheon: you're highly biased about this one though ;-) |
19:08:50 | apotheon | Seriously -- have you ever tried to read GNU code, even after prettifying it so it uses a more tractable style (say, KNF)? |
19:08:54 | apotheon | It's fucking *awful*. |
19:09:28 | EXetoC | because of the indented braces? yeah, wth :> |
19:09:45 | apotheon | If the GNU guys wrote good code, I'd be sad that their code was locked up in awful licensing. Because they write bad code, I can be happy that people will be inspired to reimplement the same stuff in other styles *and* with other licenses at the same time. |
19:10:16 | apotheon | The fugliness of the GNU style just adds to my astonishment at the imbecility of core GNU coders. |
19:10:37 | apotheon | There's about one good thing ever made for GNU, I think: the grep algorithm. |
19:10:55 | Mat2 | well, there must have some reasons |
19:10:57 | apotheon | . . . and it annoys the shit out of me, because it keeps people from wanting to use other grep implementations. |
19:11:59 | apotheon | I think a lot of GNU style and coding conventions developed around the GNU community's emacs fetish. It's fine if you want to use emacs, but you shouldn't write all code in ways designed to conform to your editor of choice so that it becomes painful to edit your code in other editors. |
19:12:12 | EXetoC | it's easy to fall into that licensing trap |
19:12:21 | apotheon | There are other problems, too, though I think Araq would disagree with me on some of those. |
19:12:34 | apotheon | EXetoC: What do you mean? |
19:13:51 | apotheon | note: I don't want to get into a fight over licensing in this channel. I would like to influence licensing on Nimrod stuff, of course, but I'll try to keep it non-ideological here because it would be rude to turn this channel into a warzone. |
19:14:44 | apotheon | Araq: You've managed to convince me that I should see if I have any trivial projects to use as experimental contexts in which to use Nimrod for the near future. Thanks. |
19:15:14 | rubino123 | For nimrod to take off: 1) excellent documentation with examples -> think a community built "python module fo the week" but for nimrod 2) take on one of the big benchamrks like the pypy benchmarks or the language shootout documents |
19:15:28 | apotheon | (probably primarily things where I can just write it and post it to the web somewhere, then forget it if I don't care to continue working on it, without feeling like I've wasted my time, at least for now) |
19:16:33 | apotheon | rubino123: Documentation quality is definitely an important factor for many people. If a culture of documentation improvement can be fostered, I think that could be huge. |
19:16:49 | apotheon | ("huge" as in "a big help") |
19:17:27 | rubino123 | apotheon; i think i read a report that the rise of languages is related to the amount and quality of documentation |
19:17:47 | apotheon | Which comes first, though? |
19:17:54 | rubino123 | amount |
19:18:09 | apotheon | I mean the rise of the language or the amount-and-quality of documentation. |
19:18:23 | rubino123 | the beatles were succussful because of the amount of songs they wrote; not necessarily the quality of each one |
19:18:44 | apotheon | Popularity of a language can attract more help developing documentation. Documentation can attract more popularity. Which leads the others in the study behind the report? |
19:18:48 | dom96 | rubino123: In regards to '2)', somebody ported the shootout benchmarks to Nimrod a while ago, would be nice for someone to run them again, i'm sure further optimisations can be made also: https://bitbucket.org/jmb/shootout/wiki/Home |
19:19:07 | rubino123 | Apple during Steve jobs was successful becuase he forced huge amount of itertations until he felt a product was ready for release |
19:20:03 | rubino123 | I would keep a benchmarks tab on the nimrod page then to watch nimrods progression |
19:20:10 | rubino123 | just like pypy |
19:20:23 | apotheon | That might not be a bad idea. |
19:20:47 | dom96 | I am planning on making nimbuild run some benchmarks and create a nice graph showing the results with each commit :) |
19:20:49 | apotheon | PyPy, by the way, is the one thing I like best about Python. |
19:20:58 | apotheon | (coming from someone who doesn't really like Python) |
19:21:12 | rubino123 | That said may people in the python community still think pypy is just experimental and fold in the ruby community know the rubinous vm exists but are still not compelled to use it --- speed is in itself not always power |
19:21:19 | EXetoC | quantity over quality eh? well, we have several few euclidean vector implementations I think :> |
19:22:09 | rubino123 | EXetoC, just use the best iteration |
19:22:11 | apotheon | I used Rubinius as my primary Ruby implementation for a while, but honestly there's a certain amount of laziness that makes me less inclined to use it most of the time when I don't have a specific need for it. |
19:23:50 | EXetoC | rubino123: real programmers have their own sets of wheels :-) |
19:24:52 | rubino123 | EXetoC, hopefully their are not forced to maintain their own standard lib |
19:25:05 | rubino123 | Dlang |
19:25:36 | EXetoC | because of the GC issues? |
19:26:33 | apotheon | rubino123: Who? (re: maintaining distinct stdlib) |
19:26:36 | rubino123 | possibly I have only read about it; but I thought there was a major rift between the users and the devs on what was a proper stdlib; I think language idioms were a large part of it |
19:27:03 | apotheon | "hopefully their are not forced to maintain their own standard lib" |
19:27:08 | apotheon | Who is "they"? |
19:27:13 | apotheon | s/is/are/ really |
19:27:26 | rubino123 | users; the great programmers |
19:27:37 | apotheon | I have no idea what we're talking about, now. |
19:27:47 | apotheon | Is this about PyPy or Rubinius or Nimrod or something else? |
19:27:51 | rubino123 | Ruby / Python -. lets commodity level programmers get great suff done |
19:28:00 | EXetoC | apotheon: I think misspelling english words is the norm |
19:28:19 | apotheon | EXetoC: What? |
19:28:22 | apotheon | I'm lost. |
19:28:33 | apotheon | I'll just bow out of the discussion for now, I guess. I can't figure out what's being discussed. |
19:28:39 | rubino123 | sorry; I have not even looking at the text before I send |
19:29:08 | EXetoC | same. I don't think I've said anything useful in a while |
19:30:26 | rubino123 | This is about giving a good language the best chances of becomming popular with users by following the best practices of other modern languages - python, ruby, haskell (though haskell has only become popular recently after a decade+ of development) |
19:31:08 | apotheon | I think Haskell only started gaining ground because of a spike in popularity of the idea of "functional programming". |
19:31:30 | apotheon | . . . which probably started fading because of the fear, uncertainty, and doubt surrounding Haskell's whole monad situation. |
19:32:37 | Mat2 | what, if popularity of newer programming-languages have nothing to do with practices or features but primary with social dynamics ? |
19:33:04 | apotheon | That's not always the case, but it certainly seems to have been the case with Haskell. |
19:33:09 | rubino123 | Mat2: I think it has everything to do with readability |
19:34:06 | rubino123 | On two seperate occasiona I have hear the Quant Managers say their decision for a language was mainly and first due to readability of the code they had to approve |
19:34:15 | apotheon | Similarly, Logo was actually kind of an excellent language that could have gone a lot further than it did, but it was a victim of its own success within the narrow niche of "educational language". Because it was so successful in targeting that niche, it got pigeonholed as a toy language for children, and BASIC ended up being regarded as a more "serious" language. |
19:34:20 | rubino123 | OCAML and python |
19:34:25 | apotheon | . . . even though BASIC was a worse language pretty much every way. |
19:34:29 | rubino123 | Haskell is in that camp |
19:35:20 | rubino123 | Has anyone used the Julia language? |
19:35:23 | apotheon | I think OCaml is mostly a victim of its bizarre licensing constraints and tightly controlled centralized development in France. |
19:35:47 | Mat2 | hmm, there exist a trend to formal declaration (in spirit of a common, mathematical notation). In my experience most people which are not firm reading symbolical representations have difficulties understanding such code |
19:36:35 | rubino123 | agreed on OCaml; it seems to have fallen behind in developement as it seems strange that a functional based language never learned to handle multicore as soon or easily as the rest of the pack |
19:36:51 | Mat2 | probably that's more relevant to functional languages however |
19:37:18 | apotheon | Y'know, one thing that would help any indie language gain popularity is being "first" at something that a lot of people think is cool, or useful in some kind of revolutionary way. |
19:37:30 | apotheon | (not necessarily literally first, but positioned that way) |
19:38:05 | rubino123 | Anyone see the "Future of Programming" talk? |
19:38:07 | rubino123 | http://worrydream.com/dbx/ |
19:38:44 | apotheon | Mat2: I dunno that it's convined to FP languages. Look at Smalltalk. The question that comes to my mind is whether corporate backing or bureaucratic design was the more significant factor in Java eating its lunch. |
19:38:52 | apotheon | s/convined/confined/ |
19:40:59 | rubino123 | Apotheon: I think smalltalk, like ruby tries to do too much; the philosophy is there are 10 different ways to do one thing where is python and ruby on rails for that matter follow the "there is one best way" to do things |
19:41:12 | rubino123 | convention over configuration |
19:41:55 | Mat2 | hmm I had readed an interview with its creator some time ago. Java is an evolvement from Oak from which some quirks remain |
19:42:03 | apotheon | Smalltalk and Ruby have had dramatically different popularity trends, though. I don't think TIMTOWTDI has anything in particular to do with it in this case. |
19:42:30 | apotheon | Mat2: Oak was the pre-release name for the project, yeah. |
19:42:50 | apotheon | I'm not sure why they changed it. I think I read something about that, but don't recall the details. |
19:42:59 | rubino123 | apotheon: do not forget to compare language evolution |
19:43:51 | apotheon | rubino123: Okay . . . |
19:44:20 | Mat2 | Sun had some copyright troubles with Oak because it share 'influences' from Self |
19:44:37 | Mat2 | ^shared |
19:45:05 | apotheon | Araq: Beware the temptation to think there's one silver bullet for language popularity, by the way. I'm sure you're aware of the temptation and the falsity of the idea there's such a silver bullet, but I figure a friendly reminder can't hurt. |
19:46:27 | apotheon | Mat2: How so? Wasn't Self a Sun project at the time? |
19:47:58 | Araq | apotheon: I know, no matter what I do, people complain ;-) |
19:48:51 | apotheon | har |
19:49:23 | apotheon | The lesson to take from that is that you shouldn't screw up your language in pursuit of a popularity silver bullet. Well, *a* lesson, anyway. |
19:49:56 | * | Endy joined #nimrod |
19:50:21 | Mat2 | apotheon: No but some 'technology' of Self was feared to be not copyright free (that was nonsense of course) |
19:51:43 | Mat2 | however, I don't see any similarities for myself so whatever these influence was (it can be it was the prototype-based object model) there discarded |
19:52:09 | Mat2 | ^it was discarded |
19:52:12 | apotheon | The only thing I know about that was borrowed from Self was some VM optimization. |
19:53:36 | Mat2 | the Java VM is one of the worst example I know (beside pCode for UCSD Pascal) |
19:53:58 | apotheon | . . . or maybe it was the JIT compiler. I'm not sure. |
19:54:10 | apotheon | Something not particular to the *language*, per se, anyway. |
19:54:23 | Mat2 | yes |
19:54:23 | apotheon | I have yet to meet a JVM I liked. |
19:54:57 | apotheon | The persistent process optimization the JVM does is impressive, but everything else about it seems to suck. |
19:55:24 | apotheon | (Keep in mind I'm not exactly an expert on the JVM, so take my comments for what they're worth.) |
19:57:01 | Mat2 | its an academic approach fitting a complex JIT compiler to an ineffective and over complex VM just to compensate low performance |
19:57:08 | apotheon | Hey, I've got another idea for a decent project that could raise some popularity for Nimrod: a reasonably performant PDF rendering library under a license that has no license compatibility issues (thus, a copyfree license). |
19:57:47 | apotheon | Hell, if that happened I'd probably write a PDF viewer front-end myself, if someone didn't beat me to the creation of one I'd like. |
19:58:41 | Mat2 | nice project |
19:59:35 | Mat2 | I assume you do not like Poppler |
20:00:05 | apotheon | In general, I think making these projects usable from other languages will help boost widespread use of Nimrod on the back-end, which would raise awareness of it and give rise to more use of the language on the front-end as well. |
20:00:19 | Araq | apotheon: +1 |
20:00:21 | apotheon | Poppler is pretty mediocre, and the license causes some legal incompatibilities at times. |
20:00:30 | Araq | really useful idea |
20:00:33 | apotheon | thanks |
20:00:39 | apotheon | I'm pretty good at useful ideas, I think. |
20:01:04 | Araq | however a PDF2Text that doesn't suck would also be sweet |
20:01:35 | apotheon | If someone who knows what he's doing gets these projects started -- rendering engine, PDF renderer -- I'd happily pitch in as a scutwork code monkey as a means to help me learn the language and support a project I like. |
20:01:44 | apotheon | Araq: Yeah, it would be pretty awesome. |
20:02:23 | apotheon | Poppler has been getting slower and slower for big PDFs, I think. |
20:02:47 | rubino123 | R style dataframes could not hurt either |
20:03:02 | apotheon | rubino123: Elaborate, please. What do you mean by "R style dataframes"? |
20:03:41 | rubino123 | R dataframes for exploratory data analysis |
20:03:51 | * | BitPuffin joined #nimrod |
20:04:02 | rubino123 | the python library pandas made it a point to prot them to python and julia lang made it priority too |
20:04:21 | rubino123 | prot = port |
20:04:35 | apotheon | As a relatively easy project that might be fun and might get some attention, and would pretty much have an endpoint goal so it doesn't become your whole life, there's the idea of the implementation of a complete set of Unix userland tools in Nimrod. |
20:04:57 | BitPuffin | apotheon: what was your idea for a project? |
20:05:02 | rubino123 | I like that too |
20:05:05 | apotheon | rubino123: Yeah, good point, then. Get the numerical analysis people on board with Nimrod. |
20:05:29 | apotheon | BitPuffin: Uh . . . implementation of a complete set of Unix userland tools in Nimrod? |
20:05:34 | rubino123 | Araq mentioned he has techincal computing in mind thus the strong template support |
20:05:51 | BitPuffin | apotheon: ah, cool. Including stuff like useradd? |
20:06:34 | apotheon | BitPuffin: Maybe, though that might be more OS-specific. I was thinking more stuff like pwd, grep, ed, sed, ls, and so on. |
20:06:48 | BitPuffin | apotheon: ah okay |
20:06:55 | BitPuffin | good way to learn |
20:06:59 | apotheon | I'm not sure about the stuff like useradd -- how portably that could be implemented. |
20:07:16 | apotheon | Yeah, I might tackle some userland tools as a way to get into Nimrod from the ground floor. |
20:07:16 | rubino123 | Can nimrod be compiled into an arduino or arm MCU? An drone autopilot maybe ?? : ) |
20:07:29 | apotheon | rubino123: good idea |
20:08:08 | apotheon | Arduino development (especially if it doesn't require a specific IDE) with Nimrod would be an awesome option to have. |
20:09:59 | rubino123 | I think ability for diffusion into userland is the key here; microcontrollers and mobile developement might be the best way to go... Instead of web frameworks ala rails perhaps a mobile framework will be the next big big thing |
20:10:33 | apotheon | Basically, anything that can in principle replace GNU Coreutils (without necessarily matching its quirks and specific nonessential features) fits the requirements of my Unix userland tools idea. |
20:10:45 | Mat2 | apotheon: I work on bringing up Nimrod to the duinomite |
20:10:53 | Associat0r | rubino123: my experience with Python is that there are also many ways todo things and most people don't even choose the best way |
20:11:05 | * | apotheon looks up duinomite. |
20:11:06 | Mat2 | (on top of my own language) |
20:11:31 | apotheon | Associat0r: That's probably because they're too busy adhering to the orthodoxy. |
20:12:28 | * | Endy quit (Ping timeout: 264 seconds) |
20:12:38 | rubino123 | Associat0r, sure but the great python programmers take the time to learn the "python idioms" which usually are the optimized way of doing things for low level code bytes |
20:13:05 | rubino123 | class and object creation are areas of contention and open for interpretation |
20:13:08 | Mat2 | low-level programming in phyton ? |
20:13:09 | Associat0r | apotheon: btw OCaml's problem is mostly that it was to be used for theorem proving and research |
20:13:45 | rubino123 | Associat0r, theorem proving is why the math folks love the functional based languages |
20:13:50 | Associat0r | if you want an polished and supported ML with libs your only choiche is F# |
20:14:23 | Associat0r | rubino123: I mean most people don't even use the combinators like map in Python |
20:14:42 | rubino123 | Associat0r: they are missing out |
20:14:52 | Associat0r | they seem to write out iterarions and stuff the long way |
20:14:55 | apotheon | Mat2: Tell me more about this DuinoMite stuff, please. |
20:15:07 | rubino123 | Thought list comprehensions are somewhat more flexiable than map in and of itself |
20:15:15 | rubino123 | thought = though |
20:15:16 | apotheon | It looks like an Arduino competitor from what I've found so far, but I'm not sure what would be better (or worse) than with Arduino, so far. |
20:15:37 | apotheon | Associat0r: What if you want ML without .NET? |
20:16:16 | dom96 | Haskell. |
20:16:23 | Associat0r | rubino123: list comprehensions are a longer than a map |
20:16:34 | rubino123 | longer but you can get more done in one line |
20:16:50 | Associat0r | Haskell isn't a ML |
20:17:06 | apotheon | Am I missing anything? http://paste.apotheon.net/?p=nimrod_projects |
20:17:11 | Associat0r | apotheon: what's the problem with .NET? |
20:17:13 | rubino123 | complex processing / formating of data without lambdas |
20:17:13 | apotheon | (a list of good project ideas) |
20:17:26 | apotheon | Associat0r: Sometimes, you don't want to code for a particular framework platform. |
20:17:31 | apotheon | s/you/"you"/ |
20:17:51 | Associat0r | apotheon: well you always do with a language that has a runtime and std library |
20:17:52 | apotheon | dom96: I wouldn't exactly call Haskell an "ML". |
20:18:03 | apotheon | Associat0r: No, I don't. |
20:18:19 | apotheon | Associat0r: I hope you're not trying to turn this into an OS war. |
20:18:24 | Associat0r | apotheon: yes you do unless you're doing systems programming |
20:18:27 | dom96 | apotheon: It's close enough to F# and OCaml though, I think. |
20:18:53 | Associat0r | if you use OCaml you're gonna use the OCaml runtime and libraries |
20:19:04 | apotheon | dom96: I dunno. There are distinct differences. They may seem very similar to someone who doesn't really use FP languages in general, I guess. |
20:19:17 | Associat0r | if you use F# you're gonna use the F# libraries and runtime which happens to be .NET |
20:19:33 | dom96 | What makes a language an "ML" language? |
20:19:37 | apotheon | dom96: I've actually really enjoyed SML, to the extent I've used it, but it's stuck in academia by the paltry state of its ecosystem. |
20:20:03 | Associat0r | dom96: Haskell is pure and has non-strict evaluation |
20:20:16 | apotheon | dom96: ML languages are languages descended from, and still significantly similar to, the original ML. |
20:20:21 | Associat0r | and higher kinds |
20:20:28 | rubino123 | apotheon: port of the python standard lib |
20:20:31 | apotheon | dom96: SML and OCaml are, in practice, it for ML languages these days, I think. |
20:20:50 | apotheon | rubino123: The whole thing . . . ? |
20:20:54 | rubino123 | jk |
20:20:58 | apotheon | har |
20:21:10 | BitPuffin | EXetoC: Why are the XYZ characters exported? I don't see the point |
20:21:52 | Associat0r | apotheon: I wasn't stirring up an OS war |
20:22:00 | BitPuffin | Hmm |
20:22:01 | dom96 | apotheon: I think reactormonk worked on (is still working on?) arduino support. |
20:22:11 | BitPuffin | I wonder how I should represent a matrix.. |
20:22:31 | BitPuffin | I think internally it should be a one dimensional array |
20:22:41 | apotheon | dom96: that's cool |
20:22:43 | EXetoC | hiding it seems a little pedantic, and it's useful documentation. exporting only when nimdoc is defined would be confusing |
20:22:58 | dom96 | apotheon: Hrm, well I only used Haskell and looking at OCaml it seemed similar so I thought that it is also considered an ML language. |
20:22:58 | rubino123 | can nimrod adopt apl / j syntax for matrix ops |
20:23:14 | BitPuffin | EXetoC: pedantic? I don't see how, exporting it seems excessive |
20:23:38 | BitPuffin | EXetoC: better to just document how to swizzle imo |
20:24:43 | BitPuffin | How do I get the length of a range? |
20:25:26 | rubino123 | can nimrod have conventions that keep the programs in L1 cache (ala apl / k / j) for speed |
20:25:54 | rubino123 | its conjecture on my part but I believe the apl family was optimized for the cpu caches |
20:26:14 | rubino123 | according to wikipedia - i think |
20:26:43 | Mat2 | yes, in addition to parallel processing (in modern systems - sadly all very expensive) |
20:27:21 | rubino123 | a port of kbx would win alot of propritary finance shops |
20:27:23 | apotheon | Criminy, I haven't gotten any writing done for my work today. |
20:27:28 | rubino123 | for kdb rather |
20:27:49 | rubino123 | Apotheon; me too |
20:28:01 | rubino123 | Its been great brain storming with you all but I got to go code |
20:28:04 | rubino123 | for real |
20:28:15 | rubino123 | and not just read and muse of it for a while |
20:28:20 | apotheon | I was talking about writing in English, actually, but . . . yeah, coding has been suffering for me lately, too. |
20:28:25 | apotheon | rubino123: Have fun. |
20:28:38 | * | rubino123 left #nimrod ("Leaving") |
20:29:35 | BitPuffin | Araq: Will it be able to override [] for array types soon? |
20:31:22 | EXetoC | I don't know if that's a good idea. maybe your type should be distinct |
20:31:56 | BitPuffin | hmm |
20:31:59 | BitPuffin | distinct array? |
20:32:01 | EXetoC | and then maybe provide a converter for it |
20:32:19 | BitPuffin | don't need that |
20:32:51 | BitPuffin | EXetoC: I wonder if marking it as distinct and then using the borrow pragma will stop me from overriding [] |
20:35:11 | Araq | BitPuffin: yes |
20:35:24 | BitPuffin | Araq: to which thing? :) |
20:36:57 | Araq | I only read the highlighted question |
20:37:50 | BitPuffin | ah |
20:37:52 | BitPuffin | okay |
20:38:07 | BitPuffin | well then maybe making matrices a regular array will work too |
20:38:27 | BitPuffin | still though |
20:38:43 | BitPuffin | There is a problem because I have to use ranges |
20:39:12 | apotheon | dom96: Do you know where I could find something about reactormonk work on Arduino stuff? |
20:39:18 | BitPuffin | since I want the array to be of one dimension (because that makes OpenGL totally happy) I can't get the length |
20:39:51 | BitPuffin | C.low + C.high -1 doesn't work |
20:40:51 | BitPuffin | (C = Columns |
20:40:52 | BitPuffin | ) |
20:41:22 | dom96 | apotheon: No idea, I think he might've pushed something to his fork: https://github.com/Tass/Nimrod |
20:41:35 | apotheon | dom96: Okay, thanks. |
20:42:24 | apotheon | Hm. Old fork, judging by the license notice. |
20:42:50 | BitPuffin | is there a convention inside the code for nimrod how to spell constants? |
20:42:57 | EXetoC | BitPuffin: the alignment will be the same if you nest arrays |
20:42:58 | BitPuffin | I know that nimrod is type insensitive |
20:43:09 | EXetoC | or whatever it is you wanted to do |
20:43:20 | EXetoC | *byte size |
20:43:29 | Araq | BitPuffin: I use myConst mostly |
20:43:33 | BitPuffin | EXetoC: byte size is the same, but traversal is not afaik |
20:43:39 | BitPuffin | Araq: like a function? |
20:43:43 | BitPuffin | proc* |
20:44:11 | Araq | yes |
20:44:50 | EXetoC | a cast should do |
20:45:00 | BitPuffin | Araq: cool, thanks |
20:45:07 | Araq | why does 'len' not work for you? |
20:45:14 | Araq | I fixed it |
20:45:28 | EXetoC | in a function ideally, which would return a "ptr array..." |
20:47:22 | Araq | EXetoC: sounds like a disaster |
20:47:30 | Araq | returning a ptr array |
20:48:01 | EXetoC | it's just a workaround |
20:48:36 | EXetoC | a temporary one, most likely |
20:49:37 | Mat2 | get some sleep. ciao |
20:49:40 | EXetoC | bb |
20:49:49 | * | Mat2 quit (Quit: Verlassend) |
20:50:12 | BitPuffin | Araq: it doesn't work on a range |
20:50:58 | EXetoC | can't you just hide the range stuff with templates for now? |
20:51:12 | Araq | well make it work for ranges then |
20:51:42 | BitPuffin | You mean contribute to system? |
20:51:53 | Araq | proc len*[T: range](x: T): int {.noSideEffect.} = high(T) - low(T) + 1 |
20:51:54 | apotheon | Is there a small, testing-purposes webserver for Nimrod, akin to stuff like webrick for Ruby? |
20:52:13 | BitPuffin | apotheon: believe there is actually |
20:52:23 | apotheon | WEBrick, to capitalize properly. |
20:52:25 | dom96 | apotheon: httpserver module |
20:52:29 | apotheon | coolio |
20:52:52 | apotheon | dom96: Is there any reason that wouldn't be suitable to making local-use web applications in Nimrod? |
20:52:52 | BitPuffin | Araq: well low and high doesn't work either |
20:53:14 | apotheon | (e.g. leveraging it to use the browser as the GUI for an application that doesn't depend on an Internet connection) |
20:54:17 | dom96 | apotheon: Not at all. I will be improving it though and it's interface may change a bit. But I will deprecate the functions that are already there of course instead of removing them. |
20:54:31 | Araq | BitPuffin: well they should |
20:54:40 | Araq | example code? |
20:54:49 | dom96 | apotheon: I would suggest using jester. |
20:54:50 | EXetoC | I think he means in declarations |
20:54:59 | apotheon | dom96: good to know |
20:55:28 | apotheon | Ut-oh. This is what came up in a search for "nimrod httpserver": http://sbtourist.github.io/nimrod/ |
20:55:42 | EXetoC | when passing it to a type parameter or something. I don't know, it's a little vague |
20:55:51 | apotheon | What does the "browsers" module do? |
20:55:52 | BitPuffin | Araq: yeah just a sec! |
20:56:07 | dom96 | apotheon: it launches your default browser :P |
20:56:10 | apotheon | aha |
20:57:19 | BitPuffin | Araq: https://gist.github.com/BitPuffin/6135229 |
20:57:38 | apotheon | Oh, crap, I need to get going. |
20:57:47 | apotheon | Take care, folks. |
20:57:52 | BitPuffin | see you apotheon |
21:06:12 | BitPuffin | Araq: Adding range as a type restriction did unfortunately not work |
21:07:04 | Associat0r | http://www.reddit.com/r/programming/comments/1jik2m/gamedev_what_language_do_i_use/ |
21:07:51 | Araq | Associat0r: thanks you for nothing |
21:08:05 | BitPuffin | yeah Associat0r |
21:08:44 | EXetoC | lol |
21:09:28 | BitPuffin | And python is mentioned, boo is not really another language |
21:09:34 | EXetoC | he wants more experienced users to say something |
21:09:36 | BitPuffin | it's just python for .net |
21:09:47 | dom96 | That's almost like linking to the Programming language list on Wikipedia. |
21:11:21 | EXetoC | does it present a weighted sum of both objective and subjective strengths yet? :> |
21:12:54 | dom96 | gah, I really despise buffering. |
21:14:15 | Associat0r | Boo is't just Python.NET |
21:14:16 | BitPuffin | Araq: no ideas? |
21:14:24 | Associat0r | IronPython is that |
21:14:49 | Araq | Associat0r: what about editing your post and adding Nimrod to this list? |
21:14:58 | Associat0r | Araq: it has been there all along |
21:15:11 | Associat0r | right after Rust |
21:15:20 | Araq | wtf |
21:15:21 | BitPuffin | actually maybe that's just what it once was |
21:15:22 | EXetoC | haha |
21:15:35 | * | BitPuffin switched from Rust to Nimrod |
21:15:36 | Araq | must be some browser refreshing thing? |
21:15:47 | Associat0r | I can put it in front if you want |
21:15:53 | Araq | I swear it wasn't there the first time |
21:16:06 | Associat0r | yes it wasn't there first time but it was when I posted it in the channel |
21:16:25 | Araq | I see |
21:16:29 | Araq | well thank you then :-) |
21:16:40 | BitPuffin | isn't andralex one of the main developers of D, talk about biased :D |
21:17:09 | Araq | BitPuffin: I'm looking at your problem right *now* |
21:17:15 | BitPuffin | Araq: sweet |
21:17:33 | Associat0r | IMO people shouldn't be posting stuff about gamedev langs when only mentioning the status quo |
21:17:40 | Associat0r | in this day and age |
21:20:57 | Associat0r | "Everything from ancient legacy languages like COBOL and FORTRAN to modern languages like Python can target the CLR." |
21:21:30 | Araq | quite true but also quite meaningless |
21:21:40 | Associat0r | and not a mention of F# |
21:22:01 | Araq | Python has so many extensions in C that Python for .NET is irrelevant |
21:22:23 | Araq | Fortran on .NET also seems futile |
21:22:36 | Araq | not sure about Cobol |
21:22:58 | BitPuffin | cobol for .NET? |
21:23:05 | Associat0r | IronPython used to have a perf advantage, but probably not anymore |
21:23:33 | Araq | it still has over CPython |
21:23:41 | BitPuffin | pypy |
21:23:42 | Araq | dunno about PyPy |
21:24:03 | Araq | PyPy still uses way too much RAM afaict |
21:24:37 | BitPuffin | well |
21:24:51 | BitPuffin | unless you are running on something other than a desktop or maybe even a laptop |
21:24:56 | BitPuffin | RAM isn't much of a problem |
21:26:26 | BitPuffin | I wonder if there will be an llvm based (or something) compiler for nimrod one day |
21:26:50 | comex | you tried it once, right? :) |
21:26:52 | BitPuffin | I still don't ever want to lose the compile to C and JS stuff though |
21:27:09 | BitPuffin | because C allows nimrod to run on consoles and phones |
21:27:22 | BitPuffin | and JS lets you run nimrod in the browser :) |
21:27:36 | comex | regarding that list, serious gamedev doesn't do garbage collected for a reason. |
21:27:39 | reactormonk | apotheon, it's messy. |
21:27:57 | comex | (JIT in general is iffy when latency is so important) |
21:28:30 | EXetoC | it can be disabled whenever, unless the language sucks |
21:28:58 | comex | well, that's a dubious article in general |
21:29:16 | comex | it barely mentions performance |
21:29:46 | BitPuffin | EXetoC: problem with D is that most language features become un-usable when disabling GC |
21:30:38 | Associat0r | comex: you can do serious gamedev with GC especially when you use staging |
21:31:40 | Araq | comex: the same serious game developers who are foolish enough to use C++ instead of C? :P |
21:32:02 | comex | Araq: yep |
21:32:26 | comex | Associat0r: maybe, i have yet to see it |
21:32:30 | comex | this is why I like rust |
21:32:39 | BitPuffin | everyone pretty much uses C++ :/ |
21:32:41 | comex | unfortunately, from what I've heard, rust is not actually all that fast in practice yet |
21:33:00 | Araq | comex: that's hardly a reason not to hype it here |
21:33:35 | comex | Araq: huh? |
21:33:37 | Associat0r | comex: Naughty Dog used Scheme for serious games in the PS1 and PS2 era |
21:33:48 | comex | Associat0r: sure, for *scripting*, people use lua for that a lot |
21:33:58 | Associat0r | comex: it wasn't for just scripting |
21:34:00 | comex | they used Scheme in the PS3 era, too |
21:34:02 | Associat0r | comex: check out GOAL |
21:34:08 | EXetoC | Scheme for PS back in the days? interesting |
21:34:17 | Araq | many games mostly consist of scripting ... |
21:34:37 | BitPuffin | actually the engine was written in Scheme |
21:34:44 | comex | Associat0r: oh, cool |
21:34:46 | BitPuffin | Their own version that could step down to asm |
21:34:48 | BitPuffin | actually |
21:34:50 | Araq | the engine is bought and expensive and not to be touched :P |
21:34:52 | BitPuffin | wasn't it lisp? |
21:35:17 | Associat0r | hmm I see PS2 |
21:35:31 | comex | but the article suggests it's not exactly a dynamic garbage collected language anymore |
21:36:39 | Associat0r | well it's like a DSL |
21:37:05 | Araq | in my tests my GC had a latency of 1ms ... |
21:37:06 | EXetoC | BitPuffin: such as slices? I can't remember what else, but there are library types for that. still pretty lame though |
21:37:11 | comex | here is what i was referring to: http://www.gamasutra.com/view/feature/6195/the_secrets_of_enemy_ai_in_.php?page=1 |
21:37:22 | BitPuffin | EXetoC: think slices was one of em yeah |
21:37:28 | BitPuffin | EXetoC: maybe ranges or something too |
21:37:29 | Araq | you have 16ms per frame if you target 60fps |
21:37:57 | comex | Araq: presumably that depends on how muchs tuff you have on the heap... |
21:38:04 | Araq | no |
21:38:05 | comex | dunno, maybe it's possible these days |
21:38:06 | comex | however |
21:38:18 | Araq | it only traces the stack |
21:38:19 | comex | we also have slow mobile processors :) |
21:38:27 | Araq | so it's O(stack depth) |
21:38:35 | comex | generational collector? |
21:38:42 | BitPuffin | and lots of games run on android that are written in java |
21:38:46 | comex | still have to deal with old objects |
21:38:47 | BitPuffin | which is garbage collected |
21:38:48 | Araq | deferred reference counting |
21:38:50 | BitPuffin | just fine |
21:39:05 | EXetoC | aren't the developers struggling though? that's what I've heard |
21:39:23 | Araq | comex: no, but there can be problems with cycles :P |
21:39:33 | comex | EXetoC: they are. http://stackoverflow.com/questions/2484079/how-can-i-avoid-garbage-collection-delays-in-java-games-best-practices |
21:39:38 | comex | Araq: well, that's not garbage collection :P |
21:39:45 | Araq | bullshit |
21:39:50 | comex | which is not to say it's bad |
21:39:59 | Araq | it's GC according to any meaningful definition of the term |
21:40:04 | Associat0r | comex: done in C# http://flyingdevstudio.blogspot.nl/p/games.html |
21:40:19 | comex | Associat0r: i said serious ;) |
21:40:24 | comex | and minecraft is done in java too |
21:40:33 | Araq | but sure maybe I shouldn't call it GC |
21:40:47 | Associat0r | comex: in C# on mobile devices, and a serious game, it's a flightsim |
21:40:48 | comex | i suppose minecraft is serious, but i mean technically rather than game design |
21:40:54 | Araq | people are so full of bullshit with their half knowledge it never stops to amaze me |
21:41:08 | comex | Araq: you talking about me? :) |
21:41:10 | dom96 | Isn't Kerbal Space Program written in C# too? |
21:41:15 | Associat0r | yeah |
21:41:19 | Araq | comex: not really ;-) |
21:41:19 | Associat0r | no |
21:41:23 | Associat0r | it uses Unity |
21:41:28 | BitPuffin | Araq: calm down :) |
21:41:28 | Associat0r | so it's only C# for scripting |
21:41:48 | Araq | comex: you however are full of typical reddit opinions if I may say that |
21:41:50 | Associat0r | but infinite flight is full C# |
21:42:01 | Araq | C++ bad, C good, C + Python winning combo |
21:42:08 | comex | Araq: pfft, most people on Reddit don't think that |
21:42:09 | BitPuffin | amen to that |
21:42:15 | Araq | exceptions bad, lets script in Python instead |
21:42:23 | comex | although i don't usually read r/programming anymore, it's kind of dead |
21:42:26 | Araq | what do you mean Python uses exceptions everywhere? |
21:42:30 | comex | I read Hacker News instead |
21:42:41 | Associat0r | that's worse |
21:42:44 | Associat0r | Javascript good |
21:42:45 | BitPuffin | yup |
21:42:55 | Associat0r | everything else bad |
21:42:55 | BitPuffin | uh |
21:42:56 | BitPuffin | no |
21:43:01 | BitPuffin | JS is pretty crappy |
21:43:06 | comex | I do like Python but I wish it used exceptions less :) |
21:43:18 | BitPuffin | it's got good things though |
21:43:23 | Associat0r | BitPuffin: I mean HN |
21:43:28 | dom96 | JS all the way, lets all just use JS everywhere. Node.js is where it's at, am I right? |
21:43:38 | BitPuffin | Associat0r: yeah that's what I said yup to |
21:44:04 | EXetoC | exceptions are unobtrusive in expressive languages |
21:44:43 | Araq | comex: that doesn't help, Python is crazily dynamic everywhere anyway |
21:45:10 | Araq | Python: nice syntax, absurd semantics, but hey, nobody notices |
21:45:15 | comex | I tend to like dynamic, as it simply lets me write less code |
21:45:20 | EXetoC | and like I said, it's a blessing in many cases where you don't want to do anything other than terminating |
21:45:35 | comex | and the OO semantics are weird but I have yet to see an OO languages with non-weird semantics |
21:45:43 | comex | not saying this is a good thing |
21:45:48 | Araq | comex: and yet when C++ does the same it's pure evil |
21:45:57 | comex | C++ is /much/ weirder than Python :) |
21:46:38 | Araq | hard to argue against that :P |
21:47:07 | comex | but i probably wouldn't want to write a large codebase in Python |
21:47:08 | EXetoC | C++ is definitely not weird |
21:47:13 | * | EXetoC runs |
21:47:20 | comex | however it's excellent for smallish command line scripts |
21:47:36 | EXetoC | +1 |
21:47:45 | Araq | actually I prefer static typing for scripts |
21:48:07 | Araq | who has test cases for scripts anyway? |
21:48:22 | BitPuffin | yeah, I think I might agree actually |
21:48:27 | comex | i don't have test cases for anything, i'm a crappy programmer :p |
21:49:03 | Associat0r | comex: I use a typed language and my code is shorter than Python |
21:49:11 | comex | Associat0r: let me guess, Haskell? |
21:49:13 | comex | ;p |
21:49:16 | Associat0r | comex: F# |
21:49:36 | comex | maybe it's less *lines* than Python :) |
21:49:36 | Associat0r | comex: also not every OO lang has weird semantics |
21:50:08 | EXetoC | steve yegge wasn't able to convince me I'm afraid :> |
21:50:11 | Araq | Associat0r: arguably it does, the basics of OO are weird |
21:50:28 | BitPuffin | I can't figure out how OO got so huge |
21:50:33 | BitPuffin | it's not all that ground breaking |
21:50:54 | comex | Associat0r: name one :P |
21:50:57 | Associat0r | it's not that weird actually as described in Cook's paper |
21:50:57 | EXetoC | some call it marketing |
21:51:50 | Associat0r | comex: Scala's OO for example |
21:51:52 | comex | but I do admire the succinctness that functional languages can achieve |
21:52:08 | Associat0r | comex: yes it's not perfect but it's not weird as like Python |
21:52:34 | Araq | Associat0r: http://lambda-the-ultimate.org/node/4754#comment-75640 |
21:52:50 | Araq | argue with Andreas Rossberg instead :P |
21:53:15 | Araq | who likely forgot more about type systems than I will ever know ;-) |
21:53:56 | Associat0r | I saw that comment before |
21:54:05 | Associat0r | and yeah he's probably right |
21:54:56 | Associat0r | Araq: what about structural subtyping? |
21:54:56 | reactormonk | Araq, what is nominal subtyping exactly? |
21:55:22 | Associat0r | Cook's paper wasn't specifically about nominal subtyping was it? |
21:56:08 | Associat0r | also I think OCaml's OO doesn't really count since it's based on row polymorphism |
21:56:24 | Associat0r | and what about module apscription? |
21:56:37 | comex | module what? |
21:56:51 | Associat0r | abscription |
21:57:01 | Associat0r | like in ML |
21:58:20 | comex | ascription, apparently |
21:59:14 | Araq | Associat0r: structural subtyping seems aweful to implement which makes it a bad idea already IMO |
21:59:41 | Associat0r | correction "signature ascription" |
21:59:43 | Araq | compilers spend lots of time in the type graphs already |
21:59:47 | comex | it's fun though, feels dynamic while not being slow |
22:00:01 | Araq | this holds for both Nimrod and LLVM at least |
22:00:15 | Araq | in fact LLVM's type system had to be redesigned because of it |
22:00:28 | Associat0r | I see |
22:01:10 | Associat0r | Araq: http://www.reddit.com/r/programming/comments/1dumt1/objects_and_functions_conflict_without_a_cause/c9uansb |
22:01:27 | * | OrionPK joined #nimrod |
22:02:25 | Araq | also Cook's paper is indeed not about nominal subtyping but about OO's general idea |
22:02:58 | Araq | and IMHO the general idea really is bad and oversold |
22:03:23 | Associat0r | true but it also gets too much flack |
22:03:35 | comex | I don't understand why you are all criticizing OO and yet when I suggest writing "foo_do_something(x)" rather than "x.do_something()" you think I'm crazy :) |
22:03:46 | comex | i guess it's essentially orthogonal |
22:03:58 | Araq | comex: infix notation has nothing to do with OO :P |
22:04:02 | comex | but very often correlated |
22:04:28 | Araq | true but we're talking about semantics here anyway |
22:05:12 | comex | on the other hand, it's not merely syntactic |
22:05:27 | Associat0r | Araq: I mean if you have to have subtyping because you want to extend in a certain axis, why greenspun around it? |
22:05:29 | comex | well, usually |
22:05:56 | comex | you would expect "foo_do_something" to point to a specific function (no overloading), while "x.do_something()" could easily be virtual |
22:06:12 | comex | although I guess ML modules and generics in general break that promise |
22:06:36 | comex | actually, screw it, lots of functional programmings use generics that way, ignore me |
22:07:18 | BitPuffin | drop everything and watch this: http://www.twitch.tv/bethesda listen to god speaking |
22:07:19 | EXetoC | it has nothing to do with OO in Nimrod so I don't really care. it's just a chain-friendly piece of syntax to me |
22:07:37 | EXetoC | BitPuffin: ffs, I'm trying to be productive here |
22:07:51 | BitPuffin | EXetoC: at 00:07? |
22:07:53 | EXetoC | it's bad enough that these people keep talking about stuff :> |
22:07:53 | Araq | Associat0r: *shrug* I included inheritance for the exception hierarchy and memory efficiency for what it is worth ... ;-) |
22:08:13 | Araq | that doesn't mean I have to like the feature :P |
22:08:13 | EXetoC | BitPuffin: sure |
22:08:26 | comex | how exactly does inheritance promote memory efficiency? :P |
22:08:39 | Araq | it doesn't really ;-) |
22:08:55 | comex | and exceptions suck, therefore you have no good reason for inheritance ;) |
22:09:24 | EXetoC | BitPuffin: ooh Carmack. I forgot about the buyout. this might help me get into the zone actually |
22:09:46 | * | comex is mostly joking |
22:09:59 | dom96 | BitPuffin: What is Carmack doing in a bethesda stream? |
22:10:08 | BitPuffin | dom96: bethestda owns id |
22:10:14 | dom96 | oh |
22:10:20 | Araq | Associat0r: Odersky's comment is not convincing btw |
22:10:31 | Araq | "Type classes are wonderful, but ultimately not scalable enough because they create a global namespace of instance definitions. In a million line system you cannot guard against the situation that two parties will unknowingly create conflicting instances for the same type class." |
22:10:35 | Associat0r | many people in the F# community are very hostile toward OO but their code ends up being a blob of free functions without some obvious extensibility boundaries, I mean F# has no ML style modules and OO is the only way to gain some of the large scale modularity back |
22:11:11 | Araq | nothing scales for a million line system anyway |
22:11:29 | Araq | and if you need millions of line in the first place, you do it wrong |
22:12:00 | Associat0r | Araq: true but the global instance thing is still an issue even in small codebases |
22:12:14 | dom96 | BitPuffin: btw gaben is the one and true God. |
22:12:17 | Associat0r | the standard lib suffers from it in some ways |
22:12:22 | BitPuffin | dom96: hell no |
22:12:28 | BitPuffin | love gabe |
22:12:29 | BitPuffin | but no |
22:12:34 | dom96 | BitPuffin: blasphemy |
22:12:37 | comex | type classes and implicit supertype casting are two sides of the same coin |
22:12:53 | BitPuffin | dom96: JC created gabe |
22:12:54 | comex | both of them let you use one object in many roles without doing anything explicit to convert it |
22:12:57 | BitPuffin | so he's really god |
22:13:08 | Associat0r | also if you need subtyping you have to greenspun around |
22:13:12 | Associat0r | http://www.haskell.org/haskellwiki/Existential_type#Dynamic_dispatch_mechanism_of_OOP |
22:13:43 | Associat0r | http://www.angelfire.com/tx4/cus/shapes/ |
22:14:03 | comex | which is probably fundamentally the wrong thing; although of course the problems manifest quite differently |
22:15:33 | EXetoC | BitPuffin: I think Carmack might be a better game programmer than me even |
22:15:44 | BitPuffin | EXetoC: possibly :P |
22:17:07 | Associat0r | there are many game programmers I rate higher |
22:18:30 | BitPuffin | I look up to him as a graphics programmer |
22:18:30 | EXetoC | notch? |
22:18:34 | OrionPK | lol |
22:18:42 | OrionPK | that should warrant a hardy guffaw |
22:18:50 | Associat0r | Geoff Crammond, David Braben, David Kaemmer |
22:19:01 | dom96 | BitPuffin: I consider gaben a God because I am actually looking forward to HL3, I don't have any games to look forward to from JC. |
22:19:23 | BitPuffin | dom96: Well, that's not really what makes him god |
22:19:24 | OrionPK | thats a matter of game design and marketing |
22:19:25 | OrionPK | :P |
22:19:26 | comex | well, to some degree. I mean that being able to convert List<Sub> to List<Super> feels fundamentally like a good idea when a sub "is" a super, but if super is merely a member of sub, it doesn't |
22:19:35 | BitPuffin | dom96: and gabe isn't the one maknig HL3 |
22:19:41 | BitPuffin | mostly |
22:19:55 | EXetoC | he does it all |
22:19:56 | comex | then again, being able to convert it in O(1) time to an immutable List<Super> can be useful, occasionally |
22:20:09 | BitPuffin | lol |
22:20:18 | BitPuffin | He's the only valve employee :D |
22:20:18 | Araq | Associat0r: you're right in that advanced functional/type system features pretty much allow OO and thus need to be considered misfeatures ;-) |
22:21:03 | dom96 | BitPuffin: Yeah, but thanks to him we had the pleasure of playing HL |
22:21:11 | Araq | Associat0r: but on the other hand Robert Harper disagrees with us so we must be wrong |
22:21:13 | BitPuffin | dom96: for sure |
22:21:15 | dom96 | And will have the pleasure of playing HL3 |
22:21:24 | BitPuffin | dom96: except it will never come out |
22:21:27 | Associat0r | but a lot systems programming relies on subtyping |
22:21:41 | comex | Associat0r: huh? |
22:21:44 | dom96 | BitPuffin: it must! |
22:21:44 | comex | like what? |
22:21:59 | BitPuffin | dom96: man I hope so :( daddy needs his milk |
22:22:04 | BitPuffin | (lol) |
22:22:13 | dom96 | lolwhat |
22:22:33 | Associat0r | comex: like things that can have many different implementations |
22:23:13 | Associat0r | hardware abstraction layers for one |
22:23:38 | comex | well. any sane language needs to make it possible to implement virtual methods. but it doesn't need to be a language feature really |
22:24:03 | Araq | comex: C's aliasing rules permit the first member of a struct to alias the whole struct |
22:24:15 | Araq | that really is a subtyping feature |
22:24:15 | comex | Araq: what about that? |
22:24:22 | Associat0r | comex: I wasn't talking about lang feature in general |
22:24:28 | Associat0r | I'm just saying the concept |
22:24:33 | Araq | even C can't do without subtyping |
22:24:34 | comex | araq: it's a very minor one :) |
22:24:41 | comex | it's not usually necessary |
22:24:49 | Associat0r | so why not make it a lang feature? |
22:24:53 | Associat0r | if it's so common |
22:24:55 | Araq | it is for python's implementation and for GTK |
22:24:59 | comex | Associat0r: because it's _not_ that common |
22:25:10 | Araq | comex: it IS common |
22:25:36 | comex | common as in a large project will have a bunch of virtual method tables, sure. common as in how OO languages do it is at least an order of magnitude more common :) |
22:25:56 | Araq | I agree |
22:26:01 | Associat0r | also Harper isn't a systems programmer, he's a language guy and if all you do is compilers then you might miss out on why OO might be usefull |
22:26:09 | comex | harper is insane |
22:26:18 | Araq | I wasn't talking about virtual methods though |
22:26:24 | comex | he's the "dynamic languages have one type" guy, i believe |
22:26:33 | Araq | yeah |
22:26:42 | Araq | and that's correct |
22:27:05 | Associat0r | GUIs and simulations you would do with OO too conceptually at least |
22:27:49 | comex | (while this is an interesting observation, he takes it too literally: he claims that this means functional languages can do anything that dynamic languages can do [never mind that you'd have to rewrite everything to be dynamic] and generally overlooks the ways that dynamic types can form a type system that is more flexible, albeit less reliable, than a static one) |
22:27:51 | Associat0r | I value Shapiro and Kay's view about this matter more than Harper's |
22:28:13 | Associat0r | also http://matt.might.net/articles/best-programming-languages/ |
22:28:41 | Associat0r | "At the time, I saw functional programming as strictly superior to object-oriented programming, so I didn't see a need for a language that fused functional and object-oriented programming. (That was probably because all I wrote back then were compilers, interpreters and static analyzers.) " |
22:29:13 | Associat0r | even Paul Hudak admitted that there were some good uses for OOP |
22:29:22 | comex | my experience is that it's a matter of reading his latest post to find something stupid |
22:29:31 | comex | quote: |
22:29:32 | comex | “Declarative” means “what, not how”. But every language has an operational semantics that defines how to execute its programs, and you must be aware of that semantics to understand programs written in it. Haskell has a definite evaluation order, just as much as ML has a different one, and even Prolog execution is defined by a clear operational semantics that determines the clause order and that can be influenced by “cut” |
22:29:58 | comex | </rant> |
22:30:46 | comex | does anyone does not see why this is nonsensical?) |
22:30:47 | Araq | Associat0r: Kay is pretty much a fraud |
22:31:06 | Associat0r | I'm not so sure about that |
22:31:11 | Araq | thank you for nothing, kay, smalltalk is a poor man's Lisp |
22:31:42 | Associat0r | Kay isn't really that fond of Smalltalk |
22:31:54 | Associat0r | the media makes it seem that way |
22:32:06 | Araq | Kay is full of himself and I don't know why |
22:32:07 | Associat0r | because all they know about Kay is OOP and Smalltalk |
22:33:07 | Araq | comex: I don't get it. The quote is accurate. |
22:33:50 | Araq | my personal definition of "declarative" is "execution order is different from how it's written down" btw ;-) |
22:34:29 | Araq | so C's for loop is quite declarative as the last statement is executed after the loop body |
22:34:42 | comex | o.0 |
22:34:56 | Araq | Go's "defer" is declarative for the same reasons :P |
22:35:11 | Araq | yeah I know it's a strange definition |
22:35:18 | Associat0r | Andreas Rossberg had some bad things to say about Go's defer thing |
22:35:19 | comex | i interpret 'declarative' as 'what, not now', not trivially as in the order is different from the source order, but as in it is the language (or library)'s job to figure out how best to execute an abstract series of operations |
22:35:24 | comex | *not how |
22:35:44 | comex | for example, SQL is considerably declarative in this sense |
22:35:54 | Associat0r | http://lambda-the-ultimate.org/node/4735#comment-75201 |
22:35:59 | Araq | yeah but SQL is the boring example everybody agrees on |
22:36:25 | comex | sure, but Harper in that quote is basically saying there is no merit to that distinction because all languages have semantics |
22:36:39 | comex | which is nonsensical |
22:36:50 | Araq | perhaps but it's Harper |
22:37:05 | Araq | he's always right and you merely don't understand him :P |
22:37:40 | comex | fyi, i think the defer thing is an interesting issue, but not related to what i would call "declarative" |
22:38:01 | Araq | it's almost declarative |
22:38:18 | Araq | open(f); defer close(f); // wrap in a macro and it's declarative |
22:38:24 | comex | defer/RAII/whatever genuinely can produce cleaner code that doesn't require you to account as many error cases, but it can also be confusing if the cleanup has an unexpected effect |
22:38:33 | comex | *account for |
22:39:14 | comex | imo, therefore, it's best left for relatively simple deallocation semantics |
22:41:54 | comex | (just don't get me started on kernels with complicated reference counting semantics for different kinds of values) |
22:44:40 | Araq | comex: there is no such thing as a "dynamic type system", types are static, if they are "dynamic" they are *tags* :P |
22:45:18 | Araq | [never mind that you'd have to rewrite everything to be dynamic] <-- also wrong. You can use some trival projections |
22:45:41 | comex | Araq: okay, the rest of the world calls them types though :P |
22:46:03 | Associat0r | the rest of the world is wrong |
22:46:49 | comex | you can definitely try to make a language that makes it easy to switch between dynamic and static typing - Dart does this, but for stupid reasons, and only with a simple OO type system |
22:47:24 | Araq | no need to try, it's very easy anyway |
22:47:53 | Araq | new Integer(f(obj.getIntValue()); |
22:48:06 | Araq | tedious perhaps |
22:48:11 | Araq | but not hard at all |
22:48:47 | comex | yeah, tedious sort of negates the advantage of dynamic types :P |
22:48:49 | Associat0r | Dart's type system is idiotic |
22:50:09 | Associat0r | comex: some interesting videos here http://events.inf.ed.ac.uk/Milner2012/videos.html |
22:50:29 | comex | i don't like watching videos very much |
22:51:11 | Associat0r | comex: the PLT heavyweigts are talking there |
22:52:09 | EXetoC | Rasmus Lerdorf? |
22:52:44 | comex | oh I guess there are slides though |
22:53:10 | Associat0r | Odersky's talk is good |
22:53:18 | Araq | nice conversations, but I have to sleep now |
22:53:19 | Associat0r | and the FP panel |
22:53:24 | Araq | so good night |
22:53:38 | comex | night |
22:54:09 | Associat0r | the concurrency panel I still have to see, Xavier Leroy's talk was theorem prover heavy |
22:54:20 | Associat0r | also Pierce's talk was nice |
23:36:32 | Associat0r | carmack talking about haskell and stuff http://www.twitch.tv/bethesda |
23:37:31 | BitPuffin | related to what carmack said |
23:37:45 | BitPuffin | how do we mark a proc as brutally pure in nimrod? |
23:37:53 | BitPuffin | {.noSideEffects.}? |
23:37:58 | dom96 | yes |
23:39:04 | dom96 | I've been listening to him talk this whole time... now i'm inspired to do some game dev in Nimrod. |
23:39:05 | BitPuffin | would be better to have to do {.sideEffects.} hehe |
23:39:12 | BitPuffin | dom96: same here |
23:40:06 | dom96 | Did he just say that Garbage Collection is a "huge programming win"? :P |
23:40:13 | BitPuffin | dom96: he sure did :D |
23:40:21 | dom96 | :D |
23:40:43 | BitPuffin | and I agree |
23:45:55 | Associat0r | I would take what he says with a grain of salt, last time he was praising Java because it was supposedly safe |
23:46:05 | EXetoC | :o |
23:46:23 | Associat0r | o and he liked Go |
23:48:19 | BitPuffin | Associat0r: well it is pretty safe |
23:48:37 | BitPuffin | unless you mean exploit wise |
23:50:47 | BitPuffin | I could probably say that I like Go too without even touching it. But I wouldn't say I love it because it's amazing and solves everything, and I doubt he does too |
23:51:07 | BitPuffin | highly disagree with his opinion on linux games though |
23:51:13 | BitPuffin | that it would be better to focus on wine |
23:52:14 | comex | now that Mac is becoming a bigger target, it seems reasonable to try to get developers to use the same OpenGL code on Linux (and improve drivers to avoid different code paths being necessary) |
23:52:46 | Associat0r | also Haskell and GC isn't the be all end all, with stuff like Idris around and Rust's linear types |
23:53:33 | dom96 | The problem on Linux now is IMO the graphics drivers and Xorg. |
23:54:01 | BitPuffin | dom96: xorg is on its way out |
23:54:14 | dom96 | It's not happening fast enough though. |
23:54:21 | BitPuffin | it's finally going fast |
23:54:27 | BitPuffin | wayland has a stable api and all |
23:54:39 | Associat0r | BitPuffin: Go has many problems |
23:54:40 | dom96 | So when can I replace Xorg then? |
23:54:40 | BitPuffin | and ubuntu will ship with Mir in october |
23:54:44 | BitPuffin | Associat0r: sure |
23:55:41 | BitPuffin | dom96: I'd say by the end of this year ish, you'll have lower performance for a while but eventually it will get better |
23:56:54 | dom96 | As long as I am no longer forced to use some crazy VLC settings to watch videos then I'll be happy. |
23:58:29 | BitPuffin | dom96: hehe yeah. |
23:58:40 | dom96 | And as long as Wayland doesn't use 70% of the CPU when watching videos. |