{"action":"created","issue":{"url":"https://api.github.com/repos/NumberFour/n4js/issues/266","repository_url":"https://api.github.com/repos/NumberFour/n4js","labels_url":"https://api.github.com/repos/NumberFour/n4js/issues/266/labels{/name}","comments_url":"https://api.github.com/repos/NumberFour/n4js/issues/266/comments","events_url":"https://api.github.com/repos/NumberFour/n4js/issues/266/events","html_url":"https://github.com/NumberFour/n4js/issues/266","id":177390602,"number":266,"title":"Afaics N4JS has no compelling market","user":{"login":"shelby3","id":247731,"avatar_url":"https://avatars.githubusercontent.com/u/247731?v=3","gravatar_id":"","url":"https://api.github.com/users/shelby3","html_url":"https://github.com/shelby3","followers_url":"https://api.github.com/users/shelby3/followers","following_url":"https://api.github.com/users/shelby3/following{/other_user}","gists_url":"https://api.github.com/users/shelby3/gists{/gist_id}","starred_url":"https://api.github.com/users/shelby3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shelby3/subscriptions","organizations_url":"https://api.github.com/users/shelby3/orgs","repos_url":"https://api.github.com/users/shelby3/repos","events_url":"https://api.github.com/users/shelby3/events{/privacy}","received_events_url":"https://api.github.com/users/shelby3/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2016-09-16T10:18:30Z","updated_at":"2016-09-16T23:11:16Z","closed_at":null,"body":"Per [my reply](https://groups.google.com/d/embed/msg/strengthen-js/611mdeOu2qw/wDDfqQUtAgAJ) to Jens von Pilgrim, I'm interested in (and I have a need for) a more soundly typed JavaScript variant than TypedScript.\r\n\r\nHowever, I am questioning whether some of the design and target market decisions for N4JS can appeal to me or even to anyone who has a similar interest and need?\r\n\r\nMeta: <sub>Please receive my criticisms as constructive, because I want to see what you all have to say and how it influences my logic on this issue. I am not writing this to criticize your admirable effort and technical excellence, but rather to determine how resolve the issues I have which are enumerated below. I am not trying to stomp on anyone's orderly orderliness here (not to insinuate that you all would be upset if I did), rather just being a voice from the outside to stimulate brainstorming about what is the use case and market for N4JS and whether some design decisions should change or not. Apologies given born and raised in the USA, although I have some German ancestry (Hartwick) I don't read or understand the German language, so all communication will need to be in English. Also note my avatar is a joke (myself at age 29), I am age 51 with 34+ years of programming experience. Apology if I start posting so forcefully without getting to know you all first, it is because I am very rushed and lacking time so please don't perceive me as an aggressive troublemaker.</sub>\r\n\r\nI don't understand why I or anyone would to use N4JS instead of GWT (to compile Java) or Scala's Scala.JS compiler? Scala would give me the very desirable brevity of \"everything is an expression\" which [JS doesn't have](https://github.com/Microsoft/TypeScript/issues/10841) (yet).\r\n\r\nBut the reason I don't want to use Scala is because:\r\n\r\n* It is a \"[too many paradigms](https://www.reddit.com/r/scala/comments/4246qc/heres_why_scala_sucks/)\" language with [too many corner cases](https://www.youtube.com/watch?v=TS1lpKBMkgg) of complexity (took me some years to realize this)\r\n* The emitted JS is somewhat incomprehensible in the browser's JS debugger\r\n* It forces me into a narrow set of IDE tool choices such as Eclipse (which I loathe) or JetBrains. I'm forced to use an IDE even for simple scripts, which is not in the spirit of JavaScript being a light-weight language (which I can edit in a text editor even without linting and test in the browser).\r\n* It doesn't [have typeclasses](https://github.com/Microsoft/TypeScript/issues/10844) and I now think [subclassing is an anti-pattern](http://asserttrue.blogspot.com/2009/02/inheritance-as-antipattern.html) (see also [this](http://c2.com/cgi/wiki?ClassicOoAntiPatterns) and [this](http://programmers.stackexchange.com/questions/137687/why-is-subclassing-too-much-bad-and-hence-why-should-we-use-prototypes-to-do-aw) and [this](http://blog.berniesumption.com/software/inheritance-is-evil-and-must-be-destroyed/))\r\n\r\nSo why would I want to use a Java clone which:\r\n\r\n* emulates Java's lack of brevity, e.g. methods are not `public` by default which is the predominate case. In my experience, [productivity doesn't derive](http://esr.ibiblio.org/?p=7221) from pedantic [orderly orderliness](http://esr.ibiblio.org/?p=4901) tsuris, but rather from paradigms and big picture thinking. I don't want noisy code in the way of seeing the big picture algorithm.\r\n* doesn't offer \"everything is an expression\"\r\n* forces Java's subclassing (an anti-pattern) on me by not offering typeclasses\r\n* forces me into the Java ecosystem of IDEs and even the source code of N4JS has many Java dependencies. Note I have read [the white paper for N4JS](http://www.thinkmind.org/index.php?view=article&articleid=computation_tools_2016_1_20_80013) which I sourced from [Jens' website](http://jevopi.de/publications.html). Whereas, TypeScript's compiler is written in TypeScript.\r\n\r\nWhat I think I want is a soundly typed typeclass language where \"everything is an expression\" which otherwise has a syntax and semantics that is as close to ECMAScript as possible, so that the emitted JS code is comprehensible when debugging in the browser even without source mappings. I want it to be able to interopt with JS's structural typing as well, when I want to use that paradigm instead of typeclasses. And it must be a self-hosted compiler asap, and it should not have any dependencies which are not self-hosted.\r\n\r\nI've searched for such a language and I can't find it. I've found Haskell clones such as PureScript but that deviates too far from JS semantics and forces a Haskell like purity and monadic effect system.\r\n\r\nI think to create a significant enough niche for new programming language, you have to design something that people want which they can't find with a more established choice. Otherwise it is very difficult for you to attract a community of supporters (especially the early adopters) and the network effects that scale up an ecosystem.\r\n\r\nWhat we really need is the simple language I have described above. I think such a language would be incredibly popular over time. And I would certainly become an enthusiastic contributor. Also I would work to popularize such a language by publishing and marketing popular ecosystems that featured this language. I've done million user software more than once in my career. (and I would help to select a more marketable/brandable name than \"N4JS\")\r\n\r\nThoughts?"},"comment":{"url":"https://api.github.com/repos/NumberFour/n4js/issues/comments/247729395","html_url":"https://github.com/NumberFour/n4js/issues/266#issuecomment-247729395","issue_url":"https://api.github.com/repos/NumberFour/n4js/issues/266","id":247729395,"user":{"login":"shelby3","id":247731,"avatar_url":"https://avatars.githubusercontent.com/u/247731?v=3","gravatar_id":"","url":"https://api.github.com/users/shelby3","html_url":"https://github.com/shelby3","followers_url":"https://api.github.com/users/shelby3/followers","following_url":"https://api.github.com/users/shelby3/following{/other_user}","gists_url":"https://api.github.com/users/shelby3/gists{/gist_id}","starred_url":"https://api.github.com/users/shelby3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shelby3/subscriptions","organizations_url":"https://api.github.com/users/shelby3/orgs","repos_url":"https://api.github.com/users/shelby3/repos","events_url":"https://api.github.com/users/shelby3/events{/privacy}","received_events_url":"https://api.github.com/users/shelby3/received_events","type":"User","site_admin":false},"created_at":"2016-09-16T23:11:16Z","updated_at":"2016-09-16T23:11:16Z","body":"@yoosiba thanks for the reply. You have some good points which I roughly agree with, and I will respond on those in more detail later.\r\n\r\nFor now, I want to emphasize the most important point.\r\n\r\nSpecialty (novelty) programming languages with small ecosystems die because nobody wants to invest their man-hours in a syntax that will become orphaned. You need to make your language popular enough that the open source resources will come in to refine and maintain it.\r\n\r\nFor that goal to be achieved, I am going to strongly suggest you implement typeclasses cleanly and elegantly, so that you have a competitive advantage that NO OTHER PROGRAMMING LANGUAGE has. There is no strict evaluation, optimally targeted to JavaScript, with structural first-class unions, and type classes language on earth right now. The closest is PureScript, which has several flaws making it unsuitable for those who want to write in a syntax as close to EMCAScript as possible while gaining the best typing advantages.\r\n\r\nI want to convince you that typeclasses are the killer feature. Apple's Swift has adopted them (sort of) and is leading the way. Rust has adopted them but conflated it with other paradigms (global lifetimes tracking) which are unsuitable to the mass market. Typeclasses are going to be the next big hot language feature, because they enable extensibility on both axis of Wadler's famous Expression Problem.\r\n\r\nPlease read [my TypeScript Issue thread](https://github.com/Microsoft/TypeScript/issues/10844) which explains typeclasses in great detail.\r\n\r\nI think if N4JS were show willingness to implement typeclasses, I would likely throw all my support effort to N4JS. I can't speak for @keean (he is a CTO in the UK and co-author of HList paradigm), but I have invited him to this thread.\r\n\r\nI will be brainstorming on language names.\r\n\r\nI am not trying to push you to do anything. I just hope you will feedback to me why and what fits and doesn't fit your strategies. I am trying to decide what I should do. Do I have to go write my own language? I hope not.\r\n\r\nNote the above is an oversimplification. Many details need to be looked at. I need to better understand your goals and rules in terms of what you will and won't add to your language. I need to better understand where the feature set of N4JS is now and the rate of progress. I need to better understand if I would be able to quickly come up to speed on the contributing to the development of N4JS and in what areas of the project.\r\n\r\nSo the above is just to elicit any off-the-cuff feedback or discussion you would like to enjoin."}}
{"actor":{"display_login":"shelby3"}}