News for hackers. Stuff that matters.

gracenotes

Re:Why New York City Stopped Building Subways (2018) on Monday October 07, 2019 @02:50AM (#21178133)
I think we both agree that cars have some significant utility to them, although having utility doesn't mean that any amount of cost is acceptable. This is my problem with "cars pay for themselves, therefore other forms of transit should pay for themselves", which I have seen evidence against (see linked pdf) and nothing conclusively for. The meaningful discussion to have is what we want to support as a society, like your argument.

Trucks on last mile delivery are invaluable for some deliveries, as you mention, but then... why else does any other vehicle need to use most streets? Is it reasonable for someone who orders a truck to pay 33% of the cost of that truck on the road? What about 0%, or 100%? Which is best?

In cases where alternatives to trucks or cars are less costly overall in some situation, or additional efficiency can be achieved with batching, how much of that is ignored because of these accidentally created incentives? Not even mentioning the indirect cost to communities (walkability, clean air, autonomy of disabled people).

I don't have the answers, but I think these are good questions to be asking. For the specifics of policies, we need to base that on data ofc.

Re:Why New York City Stopped Building Subways (2018) on Monday October 07, 2019 @01:29AM (#21177808)
I can't find that info about funding sources in the urban.org article, or what "sales tax" is generated from specifically. The article does say that HTF is not fully self-funded. If something comes from general revenues/tax, that means that all taxpayers are paying for it, whether or not they use a car.

If this is in fact the case, I don't think it's a bad thing. The problem in that case comes from double standards, where the ground-level understanding of how society operates includes costs incurred by individuals/businesses which effectively disappear into a vacuum rather than being directly paid/passed onto customers, yet is used as evidence of the completely natural and inherent utility of cars over alternatives.

For a different doc more directly about who pays for roads, I've found this one useful. Made by a so-so thinktank, but seems well-sourced and rigorous.

https://uspirg.org/sites/pirg/files/reports/Who%20Pays%20for...

Re:Seemingly Impossible Swift Programs on Monday December 10, 2018 @03:08PM (#18650803)
I think you're seeing the influence of math on programming conventions. If I think of something like (!a && !b), I can immediately start doing boolean algebra in my head. I can manipulate it like an algebraic expression and get the job done 10x faster than if I had to work through the "real" meaning.

Anyone's productivity in programming can be enhanced by taking a mathematical outlook, although I suppose the beauty of programming is that you don't have to.

To throw in a Dijkstra, "The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise." What do you do when certain semantic levels require some mathematical background - do you choose a less precise abstraction or do you just require that background? I'm not sure what the answer should be for this kind of blog post, but at least intro-to-programming materials should be as accessible as possible.

Re:Type erasure and reification on Wednesday December 05, 2018 @08:00PM (#18614434)
Reification doesn't just impose a substantial complexity cost on dynamic languages in the CLR, either. See this F# feature request from 2011 that is effectively unimplementable:

https://visualstudio.uservoice.com/forums/121579-visual-stud...

As GP mentions, Haskell is a great example of achieving both superb type safety and superb type expression with type erasure. That said, sometimes you don't want superb type safety - things like dependency injection and mocks are examples of frameworks you can use in languages with some amount of type reification without restructuring your entire codebase. Java/JVM achieve a decent balance here imo.

Re:OOP Is Dead, Long Live OOP on Thursday October 18, 2018 @04:52PM (#18252000)
Oddly enough I've been getting into UE4 and things would be so much easier for me if the core classes were better decoupled.

For instance, I'd like to have a quadraped skeleton with the ability to apply a movement vector. Unfortunately, in the Actor->Pawn->Character hierarchy, you cannot have movement (applying vectors, walk/jump/fall state) without a capsule root component - which is the only one respected for collision - so either I have to rewrite all of the movement code or somehow make the capsule vestigial and carefully maintain its state.

In short, in some cases it's useful to say that a Pawn is an Actor with a set of extra features, or that a Character is a Pawn with a set of extra features, but even there, the way inheritance forces you to adapt an exact set of extra features and no others and also those features are not piecewise reusable elsewhere is a pretty big structural problem.

I've already done enough arguing about OOP for one career in programming, I think, but the more I see what's out there, the more that I think the real enemy is any use of class inheritance - even the TAPL formalization of OOP uses interfaces only.

It's worth looking at "for no reason" in greater detail for cars, which is different from those other medical cases in significant ways. We collectively as a society decided that motorization of roads was worth pursuing at the expense of human health and safety, if you look at rhetoric at the time of cars' introduction, in no small part due to input from car manufacturers. This wasn't about driving skills; it was about restructuring all of society to make cars close to the bottom rung, not infrequently at the expense of minority groups. More recently, car-related deaths occur from bad design and usually refusal to fix it until sufficiently many lives have been taken. Any kind of "Vision Zero" which is focused on enforcement rather than infrastructure fixes is bound to fail.

So if "bad things happen to good people for no reason" is unpalatable and it's the narrative for mass transit, and "bad things happen to drivers for reasons in their control" is the easy narrative for cars, I'd say "bad things happen to good people for reasons that are in our control but we still do nothing" is closer to the true narrative for cars, but it is also unpalatable. There is an element of this in many risk-related scenarios, but it is especially clear here.

Re:How to Study Mathematics (2017) on Friday February 16, 2018 @03:54PM (#16396107)
You can take it from one of the most productive living mathematicians:

https://terrytao.wordpress.com/career-advice/theres-more-to-...

I recommend reading the entire post - it's not too long, and links to other great materials - but this is a good relevant quote:

> The point of rigour is not to destroy all intuition; instead, it should be used to destroy bad intuition while clarifying and elevating good intuition.

Re:Let's Learn About Waveforms on Wednesday February 14, 2018 @04:08PM (#16379375)
I was going to link this one if someone did not already. It is a natural followup from this article and must-read for getting intuition on DFT and its limitations, many of which are just limitations of sampling.

As far as progressing even further into DSP, especially for audio processing, I've found https://www.dsprelated.com/freebooks/filters/ to be a good map of the territory. But as someone with a CS degree rather than an engineering or math degree, it's all pretty overwhelming.

Yes. It is a slow, slow decline into the kind of behavior described in the article that could have been stopped or mitigated at any point along the way but wasn't. Not necessarily in terms of how someone is deep down, but in terms of their understanding of how they can/should interact with people around them.

Rather than refuse to understand how someone could have gotten there, let's try to understand the assumptions they made along the way. Then rather than pretending we're unaffected by the culture around us, let's see if we share some of those assumptions. If we want to fix things rather than be blindsided by them, these are at least the first steps.

Re:Peter Thiel To Join Trump Transition Team on Friday November 11, 2016 @05:25AM (#12929432)
I am not sure what molly-coddling means in this context, but as a single data point you can look at the platform page of a minority advocacy group: [0]. The actual low-level details of many of the policies (if not the headlines) share a lot in common with Sanders' platform, for instance.

I'd like to think that, for the most part, trying to address a societal problem like [1] is better than denying that any action is needed, even if the increased visibility causes strife—[2] is of interest here—or we don't get it right the first time. It's hard to discuss because many Americans begin on vastly different pages with vastly different experiences.

[0]: https://policy.m4bl.org/platform/

[1]: http://www.benjerry.com/whats-new/systemic-racism-is-real

[2] https://www.africa.upenn.edu/Articles_Gen/Letter_Birmingham....

It's better to try to understand what's happening than handwave and say "it's all bunk". That is way more political of an action than trying to determine causality through data. The social sciences are valuable in that they're trying to figure things out about the world which are critical to making good policy, rather than winging it and accidentally or intentionally screwing over people who are different than you.

> Some of these articles are implying a size of an effect that is completely ridiculous, there is just no way that diversity "could increase revenue by 41%" - we'd see way more diversity in work places if this was true.

This seems to be rejecting data and substituting and a handwave. From the original study, 41% is the actual coefficient, controlling for a ton of things. Likely there are latent factors that make workplaces both gender-diverse and performant, so just swapping out half of a workplace would not hit all of these, which the paper acknowledges. We are seeing more diversity thanks to studies like these and explicit diversity initiatives, but given all of the biases that can exist in hiring pipelines, I can't think of any reason why it would happen naturally.

The paper you link is trying to measure firm productivity (could not 100% figure out what this means) based on data from Denmark, mainly non-white-collar jobs. It notes that demographic diversity promotes "better problem-solving abilities and more creativity and knowledge spillover" and can be a "substantial competitive advantage", limited by people not trusting/communicating with each other (i.e. integrating effectively).

Maybe? The type of diversity that companies care about (to contrast with the many strawmen out there) happens to be good for the bottom line. That is, a team with 5 men and 5 women is likelier to perform better than one with 10 men [1]. Some explanations I have heard are that diversity brings perspective that wouldn't be present in a monoculture, and that it improves psychological safety which is a huge determiner of team performance [2]. There are models out there made by actual social scientists of why diversity helps. See [3] for instance, has both elements.

It does seem like age-based discrimination would have a negative effect on psychological safety, as with any discrimination due to conscious or unconscious biases. Regarding perspective, an experienced individual could either bring in valuable insight from their experience or constantly veer towards the status quo, partly depending on how you want to look at it.

I think the answer is: it is complicated. You now have my ideas on why diversity is valuable. Does age fit that model? (Even if not, of course, age-based discrimination is not good.)

[1] https://news.mit.edu/2014/workplace-diversity-can-help-botto... [2] http://www.nytimes.com/2016/02/28/magazine/what-google-learn... [3] https://hbr.org/2013/12/how-diversity-can-drive-innovation [4] https://www.fastcompany.com/1841060/redefining-diversity-new... - bonus

Re:Ask a Female Engineer: Interviewing and Company Culture on Friday October 07, 2016 @12:56AM (#12658294)
I am not sure I agree with this focus. As someone who does not exactly do single-question technical interviews but more like two- or three-question ones, my goal is somewhere in the vicinity of measuring the software engineering version of IQ. Granted, free form technical interviews are well known to be bad at this, but all the other ways seem worse.

Bloom's taxonomy[1] is useful here I think. Assessment ideally shouldn't stall at 'understand' or 'remember'. I do agree it is important to know about a large variety of things. The more specialized the job is, the more important it is for a candidate to do a decent subset of it on day 1. But sometimes you can explore a candidate's knowledge through 'apply' (use X to do Y) or 'analyze' and 'evaluate' (do Y), such as in a system design question, to see the structure of their thought process rather than something more scattershot.

Finally, regarding skipping a question, sometimes you can sense that a candidate's knowledge is limited in some area, which is a good time to just move on and try to go deep on something else. Not everyone has been afforded the same opportunities and has the same amount of experience. Software is a job where the potential to grow can do you better than a fixed skill set, especially if you see hiring as similar to making an investment.

[1] https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/

Re:Code reviews aren’t just for catching bugs on Thursday May 12, 2016 @05:05PM (#11686785)
I do occasionally ask newer employees who are not experienced with code reviews to split up a review into multiple smaller reviews. Actually there is a natural equilibrium that happens here. There is an exponential relationship between complexity and size of a single change and review latency, just because that's most efficient for reviewers (assuming some hard limit on acceptable latency as well). Most changes take on a uniform medium size as a result of this. The sheer number of changes isn't as big a factor here because most reviewers look at reviews in batch anyway.

Separately, minimizing diffs with the codebase is not just easier for the reviewer, it also makes 'blame' and resolving problems with existing code easier. You shouldn't break your back to minimize diffs, but as a form of hygiene it is not without merit.

Your definition of continuous integration is interesting in that I haven't seen it used in that way, or rather with that emphasis. Smaller syncs-to-master than "this is the entire feature" are great, but their effectiveness depends on automated testing, building, and deploying. When code under review is a coherent, high-quality, and tested thing, this can be a boon for CI because you get a small chunk with clear before and after states, which you might not get from just winging it. You can also work on code while other code is under review, especially with a Scrum/Kanban-type task system.

Re:Code reviews aren’t just for catching bugs on Thursday May 12, 2016 @03:43PM (#11686169)
As several other commenters have pointed out, code reviews are not a silver bullet. It is widely known that there is no silver bullet.

That said, if your goal is to make a quality product, you shouldn't have to choose between code reviews and continuous integration. You shouldn't have to choose between code reviews and code coverage, or manual QA processes. These are all widely regarded as best practices and if implemented "correctly" and appropriately to the team their combination forms a virtuous cycle for code health and team culture.

Re:Are you a grammar pedant? This might be why on Sunday April 10, 2016 @03:46AM (#11465331)
Who says language rules were intentionally made by we as a society? :)

Unless you mean these grammar rules: http://chronicle.com/article/50-Years-of-Stupid-Grammar/2549...

Re:Are you a grammar pedant? This might be why on Sunday April 10, 2016 @03:28AM (#11465285)
One of the most important things in "professional" writing, which includes technical writing, is clarity. Sticking to a style in that context is important because you shouldn't draw attention away from what you're saying to how you're saying it. The same thing is true of code style, where I think style guides really do improve productivity in codebases touched by multiple people.

As you mention, you could also see specific usage patterns as shows of "professionalism" (again in quotes... it's a word that I think should be used carefully re systemic biases). But it's perhaps a little reductionist to view informal contexts as not-caring-about-correctness at one end and professional contexts as caring, because there are many aspects of communication in both that are "incorrect" for different reasons. Usage patterns in work environments are not strictly more correct, then.

As the article proposes, being bothered by ungrammatical language is more often just an issue of sensitivity to stimuli. At least in conversations, those of us with the good sense to be descriptivists can hopefully tell when additional clarity would be helpful and when it's just putting other people down to try to look smart.

I have been a little mad at Safari while building a website recently (https://windmill.thefifthmatt.com), and the issues I ran into seemed like Safari's "fault"—it does not implement several web features such as requestPointerLock which Chrome and Firefox implement, so I had to jerry-rig worse experiences for Safari users. I had to neuter a Content-Security-Policy header because Safari refused to render a font no matter what font-src was... still have not figured that one out. Mobile browsers are similar here, although I have not tried out Safari remote debugging (only Chrome remote debugging).

Obviously both browsers are developed by highly talented software engineers (disclaimer: biased Google employee here, not in Chrome, speaking for self). But I think type of website and upfront ecosystem investment have some effect on where the most development pain comes from. My naive guess is that rich content consumption sites are easier to do in Safari, more app-like long-tail-of-features stuff easier in Chrome. If this is true, why? My guess is that Apple has its own idea of which general-purpose platform it'd prefer to most invest in.

> "Won't somebody think of every single possible group that is possible to somehow offend in some way"

I'm pretty sure that is part of the job description of marketers.

Re:GitHub doesn't show search field unless you sign in on Sunday March 20, 2016 @12:13PM (#11323431)
I'm reminded of this section from "Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month" (http://highscalability.com/blog/2013/8/26/reddit-lessons-lea...):

> Treat nonlogged in users as second class citizens. By always giving logged out always cached content Akamai bears the brunt for reddit’s traffic. Huge performance improvement.

I have ended up using this philosophy in a website I've been working on lately, where people can post puzzles from The Witness. This includes simplifying decisions such as not tracking solved puzzles unless you have a user id, and not allowing navigating to a random puzzle either, as this routine depends on stored solves and upvotes. Supporting not-logged-in users just means extra code for me.

In general, I don't think this is a bad attitude for a website to have.

It is perhaps different in the case of GitHub, a highly depended-on and well established website which is actually removing functionality here. I would still assume good faith about the reason. And mobile login rates are a problem for everyone, I'm pretty sure, not just GitHub.

Re:A few people develop a compulsive urge to crack jokes on Thursday March 17, 2016 @03:34AM (#11303008)
I make a lot of jokes and incongruous juxtapositions and things like that, I hope not anywhere close to 'disinhibition' mentioned in the paper. But it makes me wonder how much laughing at a joke is appreciation of a witty idea vs how much of it is a social contract where you say something mildly interesting, laugh, and other conversation participants laugh.

It's still a genuine social exchange, but the point is that humor has empathy as a key component, and it helps us bond. If you were to convey the same concept in a tone of anger or disappointment, most listeners won't laugh. So maybe humor and rants are two sides of the same coin: socialized salience.

But like any other social contract, it can be abused. If you frame a sentence in the cadence of a joke or rant, you're expecting the listener to respond. If you rant for a very long time, people stop listening. If you make jokes 24/7, the social activity of joke-telling is no longer a two-way street, and people stop laughing. If you deliver nonsense like a joke, you may get the knee-jerk social laugh, but not the witty-idea laugh (unless nonsense is the witty idea). If it's inappropriate to bond in a situation, and you tell a joke, you might not get a laugh, let alone an acknowledgment.

For various reasons, patients described in the article only have pieces of this whole system, and struggle with the social aspect or the witty-idea aspect.

Re:Yann LeCun's comment on AlphaGo and true AI on Monday March 14, 2016 @03:49AM (#11281546)
That is a great point. Talking about supervised vs unsupervised vs reinforcement learning is most straightforward with tasks like language learning, audio processing, image processing, and playing discrete games. It is possible to see broad similarities between deep learning approaches and human cognition for several of these tasks. But when you start getting into tasks like the formation of narrative identity, things get very complicated.

Maybe one major difference between playing a game and forming a personality is that these early important interactions don't just adjust wirings in the cerebral cortex, the part of the brain most responsible for general intelligence. It goes straight to our emotional memory bank in the limbic system, which is all about learning an incredibly important objective function: to survive. But very high level features formed by unsupervised learning can do this, not just reptilian predator detection routines. Being scolded or corrected can have a powerful effect on future motivation. Suffice to say, artificial intelligences don't currently worry about this.

Re:Yann LeCun's comment on AlphaGo and true AI on Monday March 14, 2016 @02:57AM (#11281422)
Interesting. I have heard the opposite of this.

Supervised learning may be how it looks from the outside, but consider that out of the >6,570,0000 waking seconds of a child's life up to age 5, there maybe only a few dozen instances of supervised adult instruction per day. Besides those, what do neurons do the remaining 99.99% of the time?

Part of the problem might be that comparing supervised and unsupervised learning 'effectiveness' is a bit apples-and-oranges. Their effect together is highly collaborative. Children have to develop abstractions on their own before you can supervise them on those abstractions. It is probably fair to say that a key part of human general intelligence is creating high-level representations of low-level stimuli. It might also be fair to say that this is what the brain is doing 100% of the time.

So if I may hand wave a little: while supervised learning can make a child better maximize objectives on those high-level representations (objectives they may be aware of through unsupervised observation), for the most part it does not fundamentally change the structure of those things in the child's brain. This makes unsupervised learning almost all of the cake to me.

My post has the caveat that children undergo a lot of other objective-based learning besides explicit instruction from adults, and all of this maps only fuzzily to supervised vs unsupervised learning in AI, which is the issue from the submitted post.

Re:Yann LeCun's comment on AlphaGo and true AI on Monday March 14, 2016 @02:14AM (#11281341)
I took a closer read through the AlphaGo paper today. There are some other features that make it not general.

In particular, the initial input to the neural networks is a 19×19×48 grid, and the layers of this grid include information like:

- How many turns since a move was played

- Number of liberties (empty adjacent points)

- How many opponent stones would be captured

- How many of own stones would be captured

- Number of liberties after this move is played

- Whether a move at this point is a successful ladder capture

- Whether a move at this point is a successful ladder escape

- Whether a move is legal and does not fill its own eyes

Again, before the neural nets even get involved. Some of these layers are repeated 8 times for symmetry. I would say for some of these, AlphaGo got some domain-specific help in a non-general way.

It is of course still groundbreaking academically. The architecture is a state-of-the-art deep learning setup and we learned a ton about how Go and games in general work. The interaction between supervised and reinforcement learning was interesting, especially how the latter behaved worse in practice in selecting most likely moves.

disclaim: Googler, not in anything AI.

Re:A practical introduction to functional programming on Sunday January 25, 2015 @09:03PM (#8945208)
I would agree with GP that emergent code organization principles that come from eliminating side effects are the crux of FP, as far as being the bottom line of what makes it effective and worth internalizing.

Higher-order functions are a simple and powerful form of abstraction, but not much else. I could imagine something which has the software engineering benefits of an FP language without HOF, although maybe it wouldn't culturally be one.

I think getting enthusiastic about higher-order functions and trying to use them in OO languages can range from good to neutral to bad. On the plus side, code is usually shorter. On the negative side, it's not necessarily more readable, and types still usually expose the same amount of information about their inputs/outputs, which is "call me, anything can happen" (plus plenty of opportunity for lazy side effects, the most confusing kind).

Re:The Humpty-Dumpty Guide to OOP on Monday October 27, 2014 @03:09AM (#8514266)
REST came to mind for me as well.

Let's assume there is a platonic ideal for REST, or for OOP. Just talking about REST over HTTP (methods, response codes, URIs) clouds that ideal, making it hard to learn about and even harder to talk about with other programmers. The same could be said about OOP with classes, structs, prototypes, etc... or as some of this article's quotes do, about OOP in Smalltalk. Over time you could look at this in terms of SCOT theory[1] and I think it would be fascinating. You could look at all of the marketing, conflict, and the effects of collective perspective shifts where things are considered "solved" but they aren't really.

My own opinion about the platonic ideal of OOP is close to Chapter 18 of Pierce's Types and Programming Languages, which suggests these attributes: 1. Multiple representation 2. Encapsulation 3. Subtyping 4. Inheritance 5. Open recursion.

To me the kernel of OOP is mainly just #1 and #2. If you don't have #3, you should have a damn good alternative. I don't attach #4 and #5 to the core definition but certainly the former should imply the latter. Another favorite is "On Understanding Data Abstraction, Revisited"[2], which contrasts objects and ADTs in a different framework.

[1] http://en.wikipedia.org/wiki/Social_construction_of_technolo... [2] http://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf

Re:On the Computational Complexity of MapReduce on Sunday October 05, 2014 @02:46PM (#8413040)
Nice article. I got too far into it before realizing I was essentially tricked into reading an academic paper :) There seems to be a tradeoff between clear presentation of an idea and the formalization required to usefully build off of it/publish it. Abstractions which do both (e.g. Turing machines) get more reuse, I think.

The sublogarithmic result is constructive, though, and my understanding of it is like this: We can split up a decision problem (take in a string, give a yes/no answer) over many workers by splitting up the input string into sqrt(n) chunks of size sqrt(n) each and using a shared working space. The first worker handles the first chunk with a blank working space, the second worker handles the second chunk with finished working space from the first one, etc. until the last worker handles the last chunk, with the second-to-last's working space, and gives a yes/no answer. This can be parallelized into a single MapReduce round by instead having every worker process their chunk using every possible configuration of the shared working tape. This sounds like a lot of work, but if shared working area is sublogarithmic in size, calculating such a table fits within polynomial time and sqrt(n) space. This means that one final "reduce" step can take the working space from the first input chunk, pass it through the second input chunk in constant time, and so on until it can make a decision.

I can't think of any practical sublogarithmic space problems off the top of my head but evidently there are some good ones in graph theory. If you tried to implement the above in practice, you could imagine that the final reduce step could be intelligent about combining the processing stages so workers don't need to calculate every single configuration.

What is unclear to me is whether all Turing machine deciding languages in sublogarithmic space can be chunked in this way. The usual definition of an input read head is that you can go left or right whenever you want, but having access to the entire input means that the workers can't be cleanly chunked. You could say the input is one-way like a DFA/PDA, but is there a result that these are equivalent with sublogarithmic scratch space?

Re:Sonic Pi – A Music Live Coding Environment for Schools on Saturday September 20, 2014 @05:27PM (#8345631)
There was a talk at Strange Loop 2014, "Our Shared Joy of Programming", which was just recently put on YouTube:

https://www.youtube.com/watch?v=3_zW63dcZB0

The whole talk is stimulating, but the parts relevant to Sonic Pi are its Overtone (http://overtone.github.io/) lineage at about 9:05, a demo at about 17:36, and the experience using it in schools (http://www.raspberrypi.org/sonic-pi-live-summer-school/) at about 26:48.

What I got out of it was that it's a language which is meant to be both fully featured and easy for kids to pick up, to get interested in music, programming, or both. Maybe not so much programming as just "computational thinking". It has less incidental complexity than EDSLs (like Overtone) or traditional tools which expose more of the synthesis pipeline. Compared to most video game/graphics frameworks, which are also used in education, you can get to more polished content faster.

Re:9007199254740992 on Saturday March 15, 2014 @11:33PM (#7407672)
Based on comments from the 2048 thread, I'm running a deterministic variant of this which just cycles Left, Down, Right, Down.

After an hour or so, the largest tile is 524288, 2^19: http://i.imgur.com/Yk758sx.png

While I was writing this comment, it collapsed down to the next largest tile, 1048576, 2^20: http://i.imgur.com/PVPCvUC.png

Re:Streams in Java 8 on Monday February 10, 2014 @02:41AM (#7209661)
For more context on why F# does in fact run into problems, see https://visualstudio.uservoice.com/forums/121579-visual-stud.... To my understanding, F# only allows type variables to vary, not type constructors (all generic variables must be escorted by a concrete type), and to go a step further, it doesn't allow type constructors to be used as higher-kinded type variables, which is useful sometimes. I see no reason why these couldn't be implemented on top of the JVM, though.

Older »