{"action":"created","issue":{"url":"https://api.github.com/repos/ceylon/ceylon/issues/5851","repository_url":"https://api.github.com/repos/ceylon/ceylon","labels_url":"https://api.github.com/repos/ceylon/ceylon/issues/5851/labels{/name}","comments_url":"https://api.github.com/repos/ceylon/ceylon/issues/5851/comments","events_url":"https://api.github.com/repos/ceylon/ceylon/issues/5851/events","html_url":"https://github.com/ceylon/ceylon/issues/5851","id":122957198,"number":5851,"title":"Module splitting up","user":{"login":"FroMage","id":179265,"avatar_url":"https://avatars.githubusercontent.com/u/179265?v=3","gravatar_id":"","url":"https://api.github.com/users/FroMage","html_url":"https://github.com/FroMage","followers_url":"https://api.github.com/users/FroMage/followers","following_url":"https://api.github.com/users/FroMage/following{/other_user}","gists_url":"https://api.github.com/users/FroMage/gists{/gist_id}","starred_url":"https://api.github.com/users/FroMage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FroMage/subscriptions","organizations_url":"https://api.github.com/users/FroMage/orgs","repos_url":"https://api.github.com/users/FroMage/repos","events_url":"https://api.github.com/users/FroMage/events{/privacy}","received_events_url":"https://api.github.com/users/FroMage/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ceylon/ceylon/labels/m-dist","name":"m-dist","color":"00aa00"},{"url":"https://api.github.com/repos/ceylon/ceylon/labels/os-android","name":"os-android","color":"207de5"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/ceylon/ceylon/milestones/15","html_url":"https://github.com/ceylon/ceylon/milestones/1.2.3","labels_url":"https://api.github.com/repos/ceylon/ceylon/milestones/15/labels","id":1590811,"number":15,"title":"1.2.3","description":"","creator":{"login":"FroMage","id":179265,"avatar_url":"https://avatars.githubusercontent.com/u/179265?v=3","gravatar_id":"","url":"https://api.github.com/users/FroMage","html_url":"https://github.com/FroMage","followers_url":"https://api.github.com/users/FroMage/followers","following_url":"https://api.github.com/users/FroMage/following{/other_user}","gists_url":"https://api.github.com/users/FroMage/gists{/gist_id}","starred_url":"https://api.github.com/users/FroMage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FroMage/subscriptions","organizations_url":"https://api.github.com/users/FroMage/orgs","repos_url":"https://api.github.com/users/FroMage/repos","events_url":"https://api.github.com/users/FroMage/events{/privacy}","received_events_url":"https://api.github.com/users/FroMage/received_events","type":"User","site_admin":false},"open_issues":150,"closed_issues":41,"state":"open","created_at":"2016-02-18T14:05:01Z","updated_at":"2016-04-04T15:31:37Z","due_on":null,"closed_at":null},"comments":55,"created_at":"2015-12-18T14:24:01Z","updated_at":"2016-04-04T15:37:57Z","closed_at":"2016-04-04T13:50:52Z","body":"I've already split some things up:\r\n\r\n- `com.redhat.ceylon.langtools.classfile` from `com.redhat.ceylon.compiler.java` so that the language module can use it without depending on the compiler. Itself does not depend on anything and is a split of the javac fork.\r\n- `com.redhat.ceylon.tool.provider` from `ceylon.language` which removed the dependencies to the compilers and typecheckers from the language module.\r\n\r\nWe need further splits:\r\n\r\n- Remove the tools part of `com.redhat.ceylon.common` to `com.redhat.ceylon.tools`, because the language module depends on `common` but does not need the tools.\r\n- Remove the CMR dependency from the language module. This requires moving a few things from CMR into `common`.\r\n- Remove jandex dependency. I'm fairly sure we can do what we need with `langtools.classfile`, although we have to make sure it's as efficient.\r\n- Remove shrinkwrap from the Maven equation. Aether seems small and only depends on `httpclient` (already a dependency of `sardine`) and `org.slf4j:jcl-over-slf4j` which drags slf4j but we already depend on it (not sure why). That should make the Maven support smaller. And besides our Aether deps is outdated.\r\n- Possibly make our WebDAV CMR provider optional. That would remove dep on `sardine`, and `httpclient` (even though it's used by aether too). We don't use most of that for Herd and we can easily replace it with the JDK net connections.\r\n\r\nOnce this is done, we should review the minimal size for language module dependencies and see if we can do further improvements. Splitting the metamodel and serialisation out of it may be useful too, but that means untangling \"reified is\" out of the metamodel, which may not be very useful since it depends on the `model` module and I suppose the metamodel is comparatively smaller.\r\n\r\nOTOH if we can split subtyping into its own pure-Ceylon independent module (unlikely) it would mean reusability in JS, which is hard ATM."},"comment":{"url":"https://api.github.com/repos/ceylon/ceylon/issues/comments/205355058","html_url":"https://github.com/ceylon/ceylon/issues/5851#issuecomment-205355058","issue_url":"https://api.github.com/repos/ceylon/ceylon/issues/5851","id":205355058,"user":{"login":"gavinking","id":579974,"avatar_url":"https://avatars.githubusercontent.com/u/579974?v=3","gravatar_id":"","url":"https://api.github.com/users/gavinking","html_url":"https://github.com/gavinking","followers_url":"https://api.github.com/users/gavinking/followers","following_url":"https://api.github.com/users/gavinking/following{/other_user}","gists_url":"https://api.github.com/users/gavinking/gists{/gist_id}","starred_url":"https://api.github.com/users/gavinking/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavinking/subscriptions","organizations_url":"https://api.github.com/users/gavinking/orgs","repos_url":"https://api.github.com/users/gavinking/repos","events_url":"https://api.github.com/users/gavinking/events{/privacy}","received_events_url":"https://api.github.com/users/gavinking/received_events","type":"User","site_admin":false},"created_at":"2016-04-04T15:37:57Z","updated_at":"2016-04-04T15:37:57Z","body":"I guess I agree. I thought it would be more.\n\nSent from my iPhone\n\n> On 04 Apr 2016, at 17:27, Stéphane Épardaud <notifications@github.com> wrote:\n> \n> And here's the per-module/package method count:\n> \n> methods\tfields\tpackage\n> 2405\t283\tceylon.collection\n> 1160\t150\tceylon.interop.java\n> 9881\t1194\tceylon.language\n> 683\t47\tceylon.language.impl\n> 482\t73\tceylon.language.meta\n> 156\t40\tceylon.language.serialization\n> 531\t291\tcom.redhat.ceylon.common\n> 2668\t496\tcom.redhat.ceylon.compiler.java\n> 744\t135\tcom.redhat.ceylon.compiler.java.language\n> 111\t13\tcom.redhat.ceylon.compiler.java.metadata\n> 1624\t317\tcom.redhat.ceylon.compiler.java.runtime\n> 19\t1\tcom.redhat.ceylon.compiler.java.runtime.ide\n> 1411\t261\tcom.redhat.ceylon.compiler.java.runtime.metamodel\n> 469\t98\tcom.redhat.ceylon.compiler.java.runtime.metamodel.decl\n> 617\t114\tcom.redhat.ceylon.compiler.java.runtime.metamodel.meta\n> 190\t55\tcom.redhat.ceylon.compiler.java.runtime.model\n> 4\t0\tcom.redhat.ceylon.compiler.java.runtime.serialization\n> 1085\t857\tcom.redhat.ceylon.langtools.classfile\n> 3649\t944\tcom.redhat.ceylon.model\n> So, the language module is:\n> \n> methods\tfields\tpackage\n> 9881\t1194\tceylon.language\n> 683\t47\tceylon.language.impl\n> 482\t73\tceylon.language.meta\n> 156\t40\tceylon.language.serialization\n> 2668\t496\tcom.redhat.ceylon.compiler.java\n> 744\t135\tcom.redhat.ceylon.compiler.java.language\n> 111\t13\tcom.redhat.ceylon.compiler.java.metadata\n> 1624\t317\tcom.redhat.ceylon.compiler.java.runtime\n> 19\t1\tcom.redhat.ceylon.compiler.java.runtime.ide\n> 1411\t261\tcom.redhat.ceylon.compiler.java.runtime.metamodel\n> 469\t98\tcom.redhat.ceylon.compiler.java.runtime.metamodel.decl\n> 617\t114\tcom.redhat.ceylon.compiler.java.runtime.metamodel.meta\n> 190\t55\tcom.redhat.ceylon.compiler.java.runtime.model\n> 4\t0\tcom.redhat.ceylon.compiler.java.runtime.serialization\n> 12549\t1690\tTotal (14239 for both)\n> Of which, this is purely serialisation:\n> \n> methods\tfields\tpackage\n> 156\t40\tceylon.language.serialization\n> 4\t0\tcom.redhat.ceylon.compiler.java.runtime.serialization\n> 160\t40\tTotal\n> And this is purely metamodel:\n> \n> methods\tfields\tpackage\n> 482\t73\tceylon.language.meta\n> 1411\t261\tcom.redhat.ceylon.compiler.java.runtime.metamodel\n> 1893\t334\tTotal (2227 for both)\n> So the metamodel in the language module represents 15.6%, and serialisation peanuts.\n> \n> Arguably, if we get the metamodel out of the language module, we also get rid of the 4593 (methods+fields) of the model module, EXCEPT we have to extricate the subtyping algos out of there and into the language module so that reified generics keep on working. How much of that is the model module, I've no idea, but remember it's not just subtyping in the typechecker model logic, but also at least the part of the model loader which deals with loading type hierarchies and containers from Java classes (methods/fields is probably irrelevant).\n> \n> IMO the massive undertaking there is not necessarily justifiable to split the metamodel out of the language module, WDYT @gavinking?\n> \n> —\n> You are receiving this because you were mentioned.\n> Reply to this email directly or view it on GitHub\n> \n"}}