-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] layers: list: organize languages #10977
Conversation
95d79d4
to
15c50c2
Compare
Great work! I would like to see this in Spacemacs but it needs more work on the Spacemacs side because the So this great work will be overwritten when the file is regenerated :-( I'm not fond of moving all the files physically to get this classification but I like the fact that the A first solution that comes to mind is to define a new conventional variable
|
Instead of So it becomes:
Maybe in the event where there is no |
15c50c2
to
1efd5b3
Compare
|
I wanted to add:
So I have a mix, in my org skills I am not sure, while also Lisp I need to learn, and that is also why I have a trouble understanding how to do the Lisp/org right here. So I would not mind:
|
@JAremko is working on improving the categorization of layers and auto-generation of layers list. We may add tags via the org file of the layer. |
Good day. This PR in brief - categorization of program language layers by language families and paradigms. Above comment reference your work on layers lists infrastructure. I have an entry ELisp skill, and knowledge in functional programming. Thank you. |
@Anton-Latukha Most of documentation processing written in Clojure and resides in the separate repo: https://github.com/JAremko/spacetools |
Ok, thank you. Then my stall wasn't in vain =) If you would deside on the fly - feel free to implement this. If you would leave this for me - I would ping you in 2 month for general directions. Thank you. |
@Anton-Latukha I added new layer generation system (it's pretty much WIP) It is driven by tags of
You can try generating layers file locally with: docker run --rm \
-v <SPACEMACS_REPO_ROOT>:/tmp/docs \
-v <PATH_TO_CONFIG_FILE>:/opt/spacetools/spacedoc-cfg.edn \
jare/spacetools docfmt /tmp/docs/ Config file looks like this: {:spacetools.spacedoc.config/layers-org-query
[{"lang" [
"pure" {"general" [
"imperative"
"multi-paradigm"
]
}
]
}
"markup"
]
:spacetools.spacedoc.config/valid-tags
{"lang" "Programming languages"
"js" "JavaScript"
"dsl" "Domain-specific"
"e-mail" "E-mail"
"distribution" "Distributions"
"os" "Operating systems"
"chat" "Chats"
"misc" "Misc"
"framework" "Frameworks"
"markup" "Markup languages"
"tagging" "Tags"
"i18n" "internationalization"
"pairing" "Pair programming"
"web service" "Web services"
"versioning" "Source control"
"fun" "Fun"
"script" "Scripting"
"imperative" "Imperative"
"general" "General-purpose"
"pure" "Purely functional"
"emacs" "Emacs"
"vim" "Vim"
"completion" "Completion"
"tool" "Tools"
"extra" "Extra"
"lisp" "Lisp dialects"
"layer" "layers"
"theme" "Themes"
"multi-paradigm" "Multi-paradigm"
"checker" "Checkers"
}}
Here maps For example query like this Important notes:
|
@Anton-Latukha feel free to edit https://github.com/syl20bnr/spacemacs/blob/develop/.ci/spacedoc-cfg.edn and add tags to |
Also this: [{"lang" [
"pure" {"general" [
"imperative"
"multi-paradigm"
]
}
]
}
"markup"
] should be formatted like this: [{"lang" [
"pure"
{"general" [
"imperative"
"multi-paradigm"
]
}
]
}
"markup"
] I missformatted it. |
@Anton-Latukha I added almost all layers #12254 . If you want, you can take care of languages 😉 |
Ok. |
@Anton-Latukha This evening I'll add "layer" and "uncategorized" tags to all layers that need to be tagged. So you'll just have to remove "uncategorized" and add proper tags to the README.org files. |
@JAremko Expliit |
@Anton-Latukha rebese your fork #12259 |
@Anton-Latukha all that still needs a tag is under https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS_WIP.org#readmeorg-files-that-need-proper-tags |
@Anton-Latukha added new tags to the query and valid tags https://github.com/syl20bnr/spacemacs/pull/12260/files |
1efd5b3
to
c58677b
Compare
Currently, I pushed the 100% copy of structure that was published/discussed here previously, now in the new format. |
I am still thinking, maybe to include Markup languages as |
@JAremko |
@Anton-Latukha Description headlines of the README.org files are copied into the corresponding LAYERS.org entries. You can add additional information into them (descriptions) |
The situation I observe swung my decision. They are really belong there by computer science nomenclature. I am making a local fork and doing manual testing now. |
1b9f930
to
aa0d2fb
Compare
@JAremko You are right. Docker stack really works great on local out-of-emacs fork. Now I see what you told about description being provided - awesome. I observe these specific features of current document generation:
|
I would also include |
@JAremko {"programming" [{"dsl" ["lisp"
"markup"
"script"
]}
{"general" ["imperative"
{"multi-paradigm" ["js"
]}
"pure"
]}
"framework"
"util"
]} |
@Anton-Latukha |
@JAremko I submitted a current state. The thing I noticed - since
And links all TOC |
@Anton-Latukha TOC links seem to work properly:
for what?
Hmm. I have couple of ideas how to make it less verbose. Hopefully without overcomplicating thing 🤔 |
Ok. About links - was an empty message, I should thought more. Talked about org-links inside Emacs & it doesn't metter in what we do. Since web links work properly. About Org view, since I do not know how it would be parsed in HTML site form - I'd would increase TOC to |
@JAremko |
@Anton-Latukha I added layer sorting and now each README.org file can appear only once so
Yo can add |
@Anton-Latukha Also this PR needs a |
bf98b67
to
3fb311c
Compare
layers: lang: mv framework -> programming/framework layers: programming: framework: upd
3fb311c
to
5868347
Compare
Checked TOC 4 -> 5 influence. It is minimal, across all Spacemacs doc files in total added several (~5-8) headers. @JAremko - Done. |
@Anton-Latukha Are you sure that you used the latest image ? This seems like an old error https://circleci.com/gh/syl20bnr/spacemacs/32805?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link 🤔 |
5868347
to
18f96ba
Compare
@Anton-Latukha I'll fix this https://circleci.com/gh/syl20bnr/spacemacs/32811?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link and we can merge 🤔 It happens because we have 2 identical headlines. I just need to merge them. |
18f96ba
to
3f7d2f5
Compare
@JAremko In current manner we collide with current CI validation rule "Multiply identical path IDs ... can happen if two headlines have child headlines with too similar names." "pairing"
"reader"
{"programming" [{"dsl" ["lisp"
"markup"
"script"
]}
"dsl"
{"general" ["imperative"
{"multi-paradigm" ["js"
]}
"multi-paradigm"
"pure"
]}
"general"
"framework"
"util"
]}
"versioning"
{"spacemacs" ["distribution"
"util"
]}
"tag"
"theme" |
@Anton-Latukha Yeah I'll fix it by making the tool merge same headlines. |
@Anton-Latukha Should be fixed now (with the latest image) Hopefully last update 😛 Also don't forget to https://circleci.com/gh/syl20bnr/spacemacs/32826?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link 😉 |
@Anton-Latukha I cherry picked it. You can delete the PR branch. 👍 |
@Anton-Latukha Btw there still |
List of language layers in Spacemacs is huge. Pull request organizes languages.
Reason to do so came from personal experience of configuration. List was long enumeration of everything and their uncle. As DevOps needs to look in many types of files/data, I needed to look several times through it to be sure I picked all that is helpful to me.
Also there is a factor of: "Interesting, what that language is for" and "I forgot what that language is for".
Categorization
Yes, there are a huge number of ways about how to categorize programming languages.
I thought about classifications of this list, and from time to time studied classification of languages, for a half of the year.
And this is the conclusion.
General-purpose OR Domain-specific
There are two major defined domains of computer languages:
Paradigm classification
All programming languages by themselves have solid paradigm classification.
Additional points
Language paradigm choices are targeted to fulfill the areas of application of the language. So areas of application that language created for has an influence on design of language and paradigms chosen. That is why area of application is primary to the paradigm.
Language can be purely functional, and have very narrow domain-specific application (Coq, Faust), making it not possible/useful in other areas.
Many of domain-specific languages are not Turing-complete (programming in the strict sense) languages (example - markup languages). That is other point why area (target) of application is primary to the paradigm.
Many languages are multi-paradigm, due to they are had been multi-paradigm from the start design, or because of the imperative -> functional paradigm creep, or due language having not purely functional design, that enables it to have other paradigms.
To move language from multi-paradigm to imperative or other group we need to have a field professional statement, that the language possibilities in some paradigms are very rudimentary, and that language is primary belongs to one paradigm. Otherwise language belongs to multi-paradigm.
Many general-purpose languages initially were/are scripting languages, but most of general-purpose scripting languages are Turing-complete and offer general-purpose grade programming libraries/tooling, and also now have compilation possibilities, and other traits of classical general-purpose languages. That is why general-purpose scripting languages group is not formed, because it is hard to strictly state they are scripting - they are general-purpose languages.
Major C family group is also hard to form. It is OR half of languages in broad sense, OR (
c-c++
&d
) in strictest sense, that makes a group too small (only two layers).Where strict sub-goups of more then two by the main trait could be created - they was grouped (JavaScript (since purpose of TypeScript and PureScript is to produce good JavaScript output), Lisp dialects (and link to Emacs Lisp being DSL), DSL -> {Markup, {Windows, Unix} Scripring}).
Also there are a couple of explanations, so mortal-ones can instantly see that
ess
is a bundle forR
, and what is ingpu
layer.I am open to make additional touches in the name of the strict sense.