GitHub PullRequestReviewCommentEvent at 2014-09-02 14:35:33
Repository: typelevel.github.com
Actor: milessabin
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/comments/16990185","id":16990185,"diff_hunk":"@@ -0,0 +1,69 @@\n+---\n+layout: post\n+title: Typelevel Scala and the future of the Scala ecosystem\n+\n+meta:\n+  nav: blog\n+  author: milessabin\n+  pygments: true\n+---\n+\n+Typelevel Scala and the future of the Scala ecosystem\n+\n+TL;DR --- Typelevel is forking Scala ; we call on all stakeholders in the Scala ecosystem to collaborate on the creation of an independent, non-profit, open source foundation to safeguard the interests of the entire Scala community.\n+\n+Last week I tweeted the following question --- \"How much interest would there be in a community sponsored fork of the #Scala toolchain?\" It generated a lively response, both on Twitter and privately. The responses were sometimes perplexed, but typically excited and invariably positive. What I want to do here is provide some background to the question and sketch out the directions that positive answers lead.\n+\n+As the Scala community has matured, a number of different strands of development of the language have emerged,\n+\n+* The Typesafe Scala compiler is focused on stability and compatibility with Java.\n+* The LAMP/EPFL Dotty compiler is focused on providing a practical implementation of the DOT calculus.\n+* The Scala.js compiler is focused on targeting Javascript as a backend language.\n+* The Scala Virtualized compiler is focused on language virtualization and staging.\n+* The planned Scala.Meta (formerly Macro Paradise) compiler is focused on metaprogramming.\n+* There are several research and private variants of the Scala compiler in development and use by a variety of academic and commercial organizations.\n+* The IDEs provide their own Scala variants which more or less accurately approximate Typesafe Scala.\n+\n+Of these, the only compiler targeting the JVM which is generally suitable for use by the Scala community at large in the near term is the Typesafe Scala compiler. The current roadmap for the 2.12 release of this compiler, due in early 2016, has very modest goals, consistent with Typesafe's focus. Beyond that, the Next Steps roadmap mentions many things of interest, however it is clear that these are all a long way out -- it will be 2017 at the earliest before any of this sees the light of day.\n+\n+Typesafe's motivation for focusing on stability and Java 8 compatibility is very easy to understand. Typesafe is a commercial entity with products to sell in the JVM-based enterprise middleware space. Its primary software offerings, Akka and Play, are probably the most Java-friendly Scala projects of any significance, and simple arithmetic should tell you that a very large proportion (probably a large majority) of the potential customers for these (and the associated consultancy, training and support) are mainly Java enterprises with wholly or largely Java codebases and development teams. In this context it should be easy to see that for them an emphasis on Scala as a complement to Java, rather as its successor, is paramount.\n+\n+Whilst this is entirely reasonable, and meets the needs of many, there is nevertheless a significant constituency at the core of the Scala community whose needs are not being fully met. This constituency is the segment of the Scala community which puts greater emphasis on typeful functional programming styles and which has a strong interest in current developments in functional programming in the wider world beyond Scala. The projects gathered here under the Typelevel umbrella are prime examples of that constituency.\n+\n+As the producers and consumers of these and other projects we continually find ourselves running up against limitations of current Scala. Sometimes these limitations are minor and amenable to simple workarounds, many of which have passed into Scala folklore. Other limitations are more serious and can only be worked around with cumbersome encodings or otherwise elaborate and confusing hacks. These have the unfortunate consequence that elegant solutions to important problems are obscured by layers of cruft which exist only to sidestep quirks of the current compiler.\n+\n+What makes this all the more frustrating is that many of these limitations are comparatively easy to remove. Fixes for some of them are purely syntactic -- for instance type constructor partial application, of huge importance to Scalaz and its users, has a clunky encoding (\"type lambdas\") which could be given first class syntactic support without any impact on Scala's semantics and in a completely binary compatible way. Similarly, syntactic support for singleton types for literal values (see SIP-23) would be of enormous value to shapeless and Spire and their users. And the addition of literals for Bytes and Shorts would be welcomed by Spire, Scodec and many others. Other fixes, whilst affecting semantics, would do so only in a conservative way -- programs which are valid when compiled with the Typesafe Scala compiler would have the same meaning and binary representation when compiled with the fixes in place.\n+\n+With this in mind, we intend to create a new Scala distribution, as a conservative fork of the Typesafe Scala compiler, with a focus on meeting the needs of the part of the Scala community which has coalesced around the Typelevel stack. As a conservative fork, our aim is to be merge compatible from the Typesafe Scala compiler, and a key objective is to feed pull requests (many of which will resolve long standing Scala bugs or feature requests) back to the Typesafe Scala compiler. Our goal is to have a language which continues to evolve at the pace we saw until a couple of years ago, but with the difference that this will now be an opt-in process and the priorities will be set by the community.","path":"_posts/2014-09-02-typelevel-scala.md","position":37,"original_position":37,"commit_id":"5ce81c2a568af126a65dc1788ddee37b1e8bff8d","original_commit_id":"5ce81c2a568af126a65dc1788ddee37b1e8bff8d","user":{"login":"milessabin","id":131183,"avatar_url":"https://avatars.githubusercontent.com/u/131183?v=2","gravatar_id":"8a7e159fad28f672ca794fb7f2bf7f0f","url":"https://api.github.com/users/milessabin","html_url":"https://github.com/milessabin","followers_url":"https://api.github.com/users/milessabin/followers","following_url":"https://api.github.com/users/milessabin/following{/other_user}","gists_url":"https://api.github.com/users/milessabin/gists{/gist_id}","starred_url":"https://api.github.com/users/milessabin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/milessabin/subscriptions","organizations_url":"https://api.github.com/users/milessabin/orgs","repos_url":"https://api.github.com/users/milessabin/repos","events_url":"https://api.github.com/users/milessabin/events{/privacy}","received_events_url":"https://api.github.com/users/milessabin/received_events","type":"User","site_admin":false},"body":"Hopefully a globally installed SBT plugin will do the trick. We'd be keen to get the benefit of your and @tiarkrompf's experiences here.","created_at":"2014-09-02T14:35:33Z","updated_at":"2014-09-02T14:35:33Z","html_url":"https://github.com/typelevel/typelevel.github.com/pull/27#discussion_r16990185","pull_request_url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27","_links":{"self":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/comments/16990185"},"html":{"href":"https://github.com/typelevel/typelevel.github.com/pull/27#discussion_r16990185"},"pull_request":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27"}}},"pull_request":{"url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27","id":20599138,"html_url":"https://github.com/typelevel/typelevel.github.com/pull/27","diff_url":"https://github.com/typelevel/typelevel.github.com/pull/27.diff","patch_url":"https://github.com/typelevel/typelevel.github.com/pull/27.patch","issue_url":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/27","number":27,"state":"open","locked":false,"title":"Added Typelevel Scala article.","user":{"login":"milessabin","id":131183,"avatar_url":"https://avatars.githubusercontent.com/u/131183?v=2","gravatar_id":"8a7e159fad28f672ca794fb7f2bf7f0f","url":"https://api.github.com/users/milessabin","html_url":"https://github.com/milessabin","followers_url":"https://api.github.com/users/milessabin/followers","following_url":"https://api.github.com/users/milessabin/following{/other_user}","gists_url":"https://api.github.com/users/milessabin/gists{/gist_id}","starred_url":"https://api.github.com/users/milessabin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/milessabin/subscriptions","organizations_url":"https://api.github.com/users/milessabin/orgs","repos_url":"https://api.github.com/users/milessabin/repos","events_url":"https://api.github.com/users/milessabin/events{/privacy}","received_events_url":"https://api.github.com/users/milessabin/received_events","type":"User","site_admin":false},"body":"For review and feedback before publishing ...","created_at":"2014-09-02T08:51:26Z","updated_at":"2014-09-02T14:35:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"30b36636ba72e0a5e599a2954871bffd44970551","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27/commits","review_comments_url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27/comments","review_comment_url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/comments/{number}","comments_url":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/27/comments","statuses_url":"https://api.github.com/repos/typelevel/typelevel.github.com/statuses/5ce81c2a568af126a65dc1788ddee37b1e8bff8d","head":{"label":"milessabin:master","ref":"master","sha":"5ce81c2a568af126a65dc1788ddee37b1e8bff8d","user":{"login":"milessabin","id":131183,"avatar_url":"https://avatars.githubusercontent.com/u/131183?v=2","gravatar_id":"8a7e159fad28f672ca794fb7f2bf7f0f","url":"https://api.github.com/users/milessabin","html_url":"https://github.com/milessabin","followers_url":"https://api.github.com/users/milessabin/followers","following_url":"https://api.github.com/users/milessabin/following{/other_user}","gists_url":"https://api.github.com/users/milessabin/gists{/gist_id}","starred_url":"https://api.github.com/users/milessabin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/milessabin/subscriptions","organizations_url":"https://api.github.com/users/milessabin/orgs","repos_url":"https://api.github.com/users/milessabin/repos","events_url":"https://api.github.com/users/milessabin/events{/privacy}","received_events_url":"https://api.github.com/users/milessabin/received_events","type":"User","site_admin":false},"repo":{"id":23571055,"name":"typelevel.github.com","full_name":"milessabin/typelevel.github.com","owner":{"login":"milessabin","id":131183,"avatar_url":"https://avatars.githubusercontent.com/u/131183?v=2","gravatar_id":"8a7e159fad28f672ca794fb7f2bf7f0f","url":"https://api.github.com/users/milessabin","html_url":"https://github.com/milessabin","followers_url":"https://api.github.com/users/milessabin/followers","following_url":"https://api.github.com/users/milessabin/following{/other_user}","gists_url":"https://api.github.com/users/milessabin/gists{/gist_id}","starred_url":"https://api.github.com/users/milessabin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/milessabin/subscriptions","organizations_url":"https://api.github.com/users/milessabin/orgs","repos_url":"https://api.github.com/users/milessabin/repos","events_url":"https://api.github.com/users/milessabin/events{/privacy}","received_events_url":"https://api.github.com/users/milessabin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/milessabin/typelevel.github.com","description":"Web site of typelevel.scala","fork":true,"url":"https://api.github.com/repos/milessabin/typelevel.github.com","forks_url":"https://api.github.com/repos/milessabin/typelevel.github.com/forks","keys_url":"https://api.github.com/repos/milessabin/typelevel.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/milessabin/typelevel.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/milessabin/typelevel.github.com/teams","hooks_url":"https://api.github.com/repos/milessabin/typelevel.github.com/hooks","issue_events_url":"https://api.github.com/repos/milessabin/typelevel.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/milessabin/typelevel.github.com/events","assignees_url":"https://api.github.com/repos/milessabin/typelevel.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/milessabin/typelevel.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/milessabin/typelevel.github.com/tags","blobs_url":"https://api.github.com/repos/milessabin/typelevel.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/milessabin/typelevel.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/milessabin/typelevel.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/milessabin/typelevel.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/milessabin/typelevel.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/milessabin/typelevel.github.com/languages","stargazers_url":"https://api.github.com/repos/milessabin/typelevel.github.com/stargazers","contributors_url":"https://api.github.com/repos/milessabin/typelevel.github.com/contributors","subscribers_url":"https://api.github.com/repos/milessabin/typelevel.github.com/subscribers","subscription_url":"https://api.github.com/repos/milessabin/typelevel.github.com/subscription","commits_url":"https://api.github.com/repos/milessabin/typelevel.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/milessabin/typelevel.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/milessabin/typelevel.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/milessabin/typelevel.github.com/issues/comments/{number}","contents_url":"https://api.github.com/repos/milessabin/typelevel.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/milessabin/typelevel.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/milessabin/typelevel.github.com/merges","archive_url":"https://api.github.com/repos/milessabin/typelevel.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/milessabin/typelevel.github.com/downloads","issues_url":"https://api.github.com/repos/milessabin/typelevel.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/milessabin/typelevel.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/milessabin/typelevel.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/milessabin/typelevel.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/milessabin/typelevel.github.com/labels{/name}","releases_url":"https://api.github.com/repos/milessabin/typelevel.github.com/releases{/id}","created_at":"2014-09-02T08:33:50Z","updated_at":"2014-09-02T08:49:41Z","pushed_at":"2014-09-02T08:49:42Z","git_url":"git://github.com/milessabin/typelevel.github.com.git","ssh_url":"git@github.com:milessabin/typelevel.github.com.git","clone_url":"https://github.com/milessabin/typelevel.github.com.git","svn_url":"https://github.com/milessabin/typelevel.github.com","homepage":"http://typelevel.org","size":344,"stargazers_count":0,"watchers_count":0,"language":"CSS","has_issues":false,"has_downloads":true,"has_wiki":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"typelevel:master","ref":"master","sha":"6690a75b4bc8d9944e59b7ca09b89b61fb81c3d2","user":{"login":"typelevel","id":3731824,"avatar_url":"https://avatars.githubusercontent.com/u/3731824?v=2","gravatar_id":"02f4695aa581071db396f4bc3ad97d67","url":"https://api.github.com/users/typelevel","html_url":"https://github.com/typelevel","followers_url":"https://api.github.com/users/typelevel/followers","following_url":"https://api.github.com/users/typelevel/following{/other_user}","gists_url":"https://api.github.com/users/typelevel/gists{/gist_id}","starred_url":"https://api.github.com/users/typelevel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typelevel/subscriptions","organizations_url":"https://api.github.com/users/typelevel/orgs","repos_url":"https://api.github.com/users/typelevel/repos","events_url":"https://api.github.com/users/typelevel/events{/privacy}","received_events_url":"https://api.github.com/users/typelevel/received_events","type":"Organization","site_admin":false},"repo":{"id":8810137,"name":"typelevel.github.com","full_name":"typelevel/typelevel.github.com","owner":{"login":"typelevel","id":3731824,"avatar_url":"https://avatars.githubusercontent.com/u/3731824?v=2","gravatar_id":"02f4695aa581071db396f4bc3ad97d67","url":"https://api.github.com/users/typelevel","html_url":"https://github.com/typelevel","followers_url":"https://api.github.com/users/typelevel/followers","following_url":"https://api.github.com/users/typelevel/following{/other_user}","gists_url":"https://api.github.com/users/typelevel/gists{/gist_id}","starred_url":"https://api.github.com/users/typelevel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/typelevel/subscriptions","organizations_url":"https://api.github.com/users/typelevel/orgs","repos_url":"https://api.github.com/users/typelevel/repos","events_url":"https://api.github.com/users/typelevel/events{/privacy}","received_events_url":"https://api.github.com/users/typelevel/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/typelevel/typelevel.github.com","description":"Web site of typelevel.scala","fork":false,"url":"https://api.github.com/repos/typelevel/typelevel.github.com","forks_url":"https://api.github.com/repos/typelevel/typelevel.github.com/forks","keys_url":"https://api.github.com/repos/typelevel/typelevel.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/typelevel/typelevel.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/typelevel/typelevel.github.com/teams","hooks_url":"https://api.github.com/repos/typelevel/typelevel.github.com/hooks","issue_events_url":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/typelevel/typelevel.github.com/events","assignees_url":"https://api.github.com/repos/typelevel/typelevel.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/typelevel/typelevel.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/typelevel/typelevel.github.com/tags","blobs_url":"https://api.github.com/repos/typelevel/typelevel.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/typelevel/typelevel.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/typelevel/typelevel.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/typelevel/typelevel.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/typelevel/typelevel.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/typelevel/typelevel.github.com/languages","stargazers_url":"https://api.github.com/repos/typelevel/typelevel.github.com/stargazers","contributors_url":"https://api.github.com/repos/typelevel/typelevel.github.com/contributors","subscribers_url":"https://api.github.com/repos/typelevel/typelevel.github.com/subscribers","subscription_url":"https://api.github.com/repos/typelevel/typelevel.github.com/subscription","commits_url":"https://api.github.com/repos/typelevel/typelevel.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/typelevel/typelevel.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/typelevel/typelevel.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/comments/{number}","contents_url":"https://api.github.com/repos/typelevel/typelevel.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/typelevel/typelevel.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/typelevel/typelevel.github.com/merges","archive_url":"https://api.github.com/repos/typelevel/typelevel.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/typelevel/typelevel.github.com/downloads","issues_url":"https://api.github.com/repos/typelevel/typelevel.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/typelevel/typelevel.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/typelevel/typelevel.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/typelevel/typelevel.github.com/labels{/name}","releases_url":"https://api.github.com/repos/typelevel/typelevel.github.com/releases{/id}","created_at":"2013-03-15T22:19:50Z","updated_at":"2014-09-02T09:43:26Z","pushed_at":"2014-09-02T09:55:36Z","git_url":"git://github.com/typelevel/typelevel.github.com.git","ssh_url":"git@github.com:typelevel/typelevel.github.com.git","clone_url":"https://github.com/typelevel/typelevel.github.com.git","svn_url":"https://github.com/typelevel/typelevel.github.com","homepage":"http://typelevel.org","size":1051,"stargazers_count":10,"watchers_count":10,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":false,"forks_count":14,"mirror_url":null,"open_issues_count":1,"forks":14,"open_issues":1,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27"},"html":{"href":"https://github.com/typelevel/typelevel.github.com/pull/27"},"issue":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/27"},"comments":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/issues/27/comments"},"review_comments":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27/comments"},"review_comment":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/pulls/27/commits"},"statuses":{"href":"https://api.github.com/repos/typelevel/typelevel.github.com/statuses/5ce81c2a568af126a65dc1788ddee37b1e8bff8d"}}}}