diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml deleted file mode 100644 index 5e17940433..0000000000 --- a/.github/workflows/codecov.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: codecov -on: - push: - branches: - - master -jobs: - codecov: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: 11 - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven- - - run: mvn install -Pjacoco - - uses: codecov/codecov-action@v1 - with: - files: ./eo-parser/target/site/jacoco/jacoco.xml,./eo-runtime/target/site/jacoco/jacoco.xml,./eo-maven-plugin/target/site/jacoco/jacoco.xml - fail_ci_if_error: true diff --git a/.github/workflows/latexmk.yml b/.github/workflows/latexmk.yml deleted file mode 100644 index 0d3da7b29f..0000000000 --- a/.github/workflows/latexmk.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: latexmk -on: - push: - branches: master - paths: 'paper/**' - pull_request: - branches: master - paths: 'paper/**' -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: yegor256/latexmk-action@0.4.0 - with: - path: paper - opts: -pdf - packages: acmart cjk ffcode href-ul datetime fmtcount libertine paralist makecell footmisc currfile enumitem wrapfig lastpage biblatex titling svg trimspaces catchfile transparent textpos fvextra xstring framed environ totpages hyperxmp ifmtarg ncctools comment anyfontsize fdsymbol algpseudocodex algorithmicx stmaryrd preprint cyrillic cm-super babel-russian hyphen-russian lh to-be-determined cancel iexec csquotes diff --git a/.github/workflows/mvn.yml b/.github/workflows/mvn.yml deleted file mode 100644 index 8469b562b0..0000000000 --- a/.github/workflows/mvn.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -name: mvn -on: - push: - branches: - - master - paths-ignore: ['paper/**', 'sandbox/**'] - pull_request: - branches: - - master - paths-ignore: ['paper/**', 'sandbox/**'] -jobs: - test: - name: Tests - strategy: - matrix: - os: [ubuntu-20.04, windows-2022, macos-12] - java: [11, 17] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: ${{ matrix.java }} - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-jdk-${{ matrix.java }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-jdk-${{ matrix.java }}-maven- - - run: mvn clean install -Pqulice --errors --batch-mode diff --git a/.github/workflows/pdd.yml b/.github/workflows/pdd.yml deleted file mode 100644 index 7bb19b96ae..0000000000 --- a/.github/workflows/pdd.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: pdd -"on": - push: - branches: - - master - pull_request: - branches: - - master -jobs: - pdd: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: g4s8/pdd-action@master diff --git a/.github/workflows/xcop.yml b/.github/workflows/xcop.yml deleted file mode 100644 index 1cad90bb77..0000000000 --- a/.github/workflows/xcop.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: xcop -"on": - push: - branches: - - master - pull_request: - branches: - - master -jobs: - xcop: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: g4s8/xcop-action@master diff --git a/.github/workflows/year.yml b/.github/workflows/year.yml deleted file mode 100644 index 81997af956..0000000000 --- a/.github/workflows/year.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: year -on: - schedule: - - cron: '0 1 22 * *' # Runs at 01:00 UTC on the 22nd of every month -jobs: - license: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: FantasticFiasco/action-update-license-year@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - path: | #add new path with glob pattern https://www.npmjs.com/package/glob - **/* - commitTitle: "update license year" diff --git a/README.md b/README.md deleted file mode 100644 index cea227d088..0000000000 --- a/README.md +++ /dev/null @@ -1,216 +0,0 @@ -logo - -[![EO principles respected here](https://www.elegantobjects.org/badge.svg)](https://www.elegantobjects.org) -[![DevOps By Rultor.com](http://www.rultor.com/b/objectionary/eo)](http://www.rultor.com/p/objectionary/eo) -[![We recommend IntelliJ IDEA](https://www.elegantobjects.org/intellij-idea.svg)](https://www.jetbrains.com/idea/) - -[![mvn-linux](https://github.com/objectionary/eo/actions/workflows/mvn.yml/badge.svg)](https://github.com/objectionary/eo/actions/workflows/mvn.yml) -[![PDD status](http://www.0pdd.com/svg?name=objectionary/eo)](http://www.0pdd.com/p?name=objectionary/eo) -[![Maintainability](https://api.codeclimate.com/v1/badges/b8b59692f3c8c973ac54/maintainability)](https://codeclimate.com/github/cqfn/eo/maintainability) -[![Maven Central](https://img.shields.io/maven-central/v/org.eolang/eo-parent.svg)](https://maven-badges.herokuapp.com/maven-central/org.eolang/eo-parent) -[![codecov](https://codecov.io/gh/objectionary/eo/branch/master/graph/badge.svg)](https://codecov.io/gh/objectionary/eo) -[![Hits-of-Code](https://hitsofcode.com/github/objectionary/eo)](https://hitsofcode.com/view/github/objectionary/eo) -![Lines of code](https://img.shields.io/tokei/lines/github/objectionary/eo) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/objectionary/eo/blob/master/LICENSE.txt) -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcqfn%2Feo.svg?type=shield)](https://app.fossa.com/reports/0ebb3149-4934-4565-bf6f-6fa41aed3b49) -[![Codacy Badge](https://app.codacy.com/project/badge/Grade/22dac7549c384692b79e02107de1d3c3)](https://www.codacy.com/gh/objectionary/eo/dashboard) -[![Known Vulnerabilities](https://snyk.io/test/github/objectionary/eo/badge.svg)](https://snyk.io/test/github/objectionary/eo) -[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=com.objectionary%3Aeo&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=com.objectionary%3Aeo) - -**EO** (stands for [Elegant Objects](http://www.yegor256.com/elegant-objects.html) or -ISO 639-1 code of [Esperanto](https://en.wikipedia.org/wiki/Esperanto)) -is an object-oriented programming language based on -[𝜑-calculus](https://arxiv.org/abs/2111.13384). -We're aware of popular semi-OOP languages and we don't think -they are good enough, including -[Java](https://en.wikipedia.org/wiki/Java_%28programming_language%29), -[Ruby](https://en.wikipedia.org/wiki/Ruby_%28programming_language%29), -[C++](https://en.wikipedia.org/wiki/C%2B%2B), -[Smalltalk](https://en.wikipedia.org/wiki/Smalltalk), -[Python](https://en.wikipedia.org/wiki/Python_%28programming_language%29), -[PHP](https://en.wikipedia.org/wiki/PHP), -[C#](https://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29): -all of them have something we don't tolerate. - -EO is not planning to become a mainstream language—this is not what -we want. Our main goal is to prove to ourselves that true object-oriented -programming is practically possible. Not just in books and abstract -examples, but in real code that works. That's why EO is being created—to -put all that "crazy" pure object-oriented ideas into practice and -see whether they can work. - -These things we **don't** tolerate: - - * types ([why?](https://www.yegor256.com/2020/11/10/typing-without-types.html)) - * static/class methods or attributes ([why?](http://www.yegor256.com/2014/05/05/oop-alternative-to-utility-classes.html)) - * classes ([why?](http://www.yegor256.com/2016/09/20/oop-without-classes.html)) - * implementation inheritance ([why?](http://www.yegor256.com/2016/09/13/inheritance-is-procedural.html)) - * mutability ([why?](http://www.yegor256.com/2014/06/09/objects-should-be-immutable.html)) - * NULL ([why?](http://www.yegor256.com/2014/05/13/why-null-is-bad.html)) - * global scope ([why?](https://www.yegor256.com/2018/07/03/global-variables.html)) - * type casting ([why?](http://www.yegor256.com/2015/04/02/class-casting-is-anti-pattern.html)) - * reflection ([why?](https://www.yegor256.com/2022/06/05/reflection-means-hidden-coupling.html)) - * scalar types and data primitives - * annotations ([why?](http://www.yegor256.com/2016/04/12/java-annotations-are-evil.html)) - * operators - * traits and mixins ([why?](https://www.yegor256.com/2017/03/07/traits-and-mixins.html)) - * flow control statements (`for`, `while`, `if`, etc) - * [syntactic sugar](https://en.wikipedia.org/wiki/Syntactic_sugar) ([why?](https://github.com/objectionary/eo/issues/51)) - -## Quick Start - -First, install [Java SE](https://www.oracle.com/java/technologies/downloads/), -[npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), -and [eoc](https://github.com/objectionary/eoc). - -Then, start with a simple EO program in `app.eo` file: - -``` -[args...] > app - QQ.io.stdout > @ - "Hello, world!\n" -``` - -Compile it like this (may take a minute or so): - -``` -$ eoc link -``` - -Then, run it: - -``` -$ eoc --alone dataize app -``` - -You should see "Hello, world!" printed. - -## Simple Tutorial - -In the example above, we create a new [abstract object](https://www.yegor256.com/2020/12/01/abstract-objects.html) -named `app`, which has got a single attribute named `@`. The object attached to the attribute -`@` is a copy of the object `stdout` with a single argument `"Hello, world!"`. The object -`stdout` is also [abstract](https://www.yegor256.com/2020/12/01/abstract-objects.html). -It can't be used directly, a copy of it has to be created, with a few requirement arguments provided. -This is how a copy of the object `stdout` is made: - -``` -QQ.io.stdout - "Hello, world!" -``` - -The indentation in EO is important, just like in Python. There have to be two spaces -in front of the line in order to go to the deeper level of nesting. This code can also be written -in a "horizontal" notation: - -``` -QQ.io.stdout "Hello, world!" -``` - -Moreover, it's possible to use brackets in order to group arguments and avoid -ambiguity. For example, instead of using a plain string `"Hello, world!"` -we may want to create a copy of the object `stdout` with a more complex -argument: a copy of the object `sprintf`: - -``` -[] > app - QQ.io.stdout > @ - QQ.txt.sprintf - "Hello, %s!" - "Jeffrey" -``` - -Here, the object `sprintf` is also [abstract](https://www.yegor256.com/2020/12/01/abstract-objects.html). -It is being copied with two arguments: `"Hello, %s!"` and `"Jeffrey"`. This program -can be written using horizontal notation: - -``` -+alias org.eolang.io.stdout -+alias org.eolang.txt.sprintf - -[] > app - (stdout (sprintf "Hello, %s!" "Jeffrey")) > @ -``` - -The special attribute `@` denotes an object that is being -[decorated](https://www.yegor256.com/2015/02/26/composable-decorators.html). -In this example, the object `app` decorates the copy of the -object `stdout` and through this starts to behave like -the object `stdout`: all attributes of `stdout` become the -attributes of the `app`. The object `app` may have its own -attributes. For example, it's possible to define a new abstract object -inside `app` and use it to build the output string: - -``` -[] > app - QQ.io.stdout (msg "Jeffrey") > @ - [name] > msg - QQ.txt.sprintf "Hello, %s!" name > @ -``` - -Now, the object `app` has two "bound" attributes: `@` and `msg`. The attribute -`msg` has an abstract object attached to it, with a single "free" attribute -`name`. - -This is how you iterate: - -``` -[args...] > app - memory 0 > x - seq > @ - x.write 2 - while. - x.lt 6 - [i] - seq > @ - QQ.io.stdout - QQ.txt.sprintf - "%dx%d = %d\n" - x - x - x.pow 2 - x.write - x.plus 1 - TRUE -``` - -This code will print this: - -``` -2 x 2 = 4 -3 x 3 = 9 -4 x 4 = 16 -5 x 5 = 25 -``` - -Got the idea? - -## What's Next? - -Join [our Telegram group](https://t.me/polystat_org). - -Read [our blog](https://news.eolang.org), especially the section with -[recently published papers](https://news.eolang.org/papers.html). - -See the full collection of canonical objects: [objectionary](https://github.com/objectionary/home). - -Take a look how we use EO as an Intermediary Representation (IR) in -[Polystat](https://www.polystat.org), a polyglot static analyzer. - -Play with more examples [here](https://github.com/objectionary/sandbox). - -Read about integration with Maven, -[here](https://github.com/objectionary/eo/tree/master/eo-maven-plugin). - -## How to Contribute - -Fork repository, make changes, send us a [pull request](https://www.yegor256.com/2014/04/15/github-guidelines.html). -We will review your changes and apply them to the `master` branch shortly, -provided they don't violate our quality standards. To avoid frustration, -before sending us your pull request please run full Maven build: - -```bash -$ mvn clean install -Pqulice -``` - -You will need [Maven 3.3+](https://maven.apache.org) and Java 8+ installed.