GithubHelp home page GithubHelp logo

locke / coreasm.core Goto Github PK

View Code? Open in Web Editor NEW

This project forked from coreasm/coreasm.core

1.0 2.0 0.0 16.78 MB

CoreASM core projects

License: Other

Java 90.81% CSS 4.30% TeX 4.82% HTML 0.06% Shell 0.01%

coreasm.core's Introduction

build status codecov maven-central: de.athalis.coreasm:coreasm-parent

About

This repository is forked from https://github.com/CoreASM/coreasm.core. CoreASM is licensed under the Academic Free License version 3.0, which can be found in the LICENSE.md file and is also available on http://www.opensource.org/licenses/afl-3.0.php. All changes in this repository are licensed under the Academic Free License version 3.0 as well.

This repository contains changes to the CoreASM Engine that have been created to better support a CoreASM-based S-BPM interpreter and a semantic verification.

The separate releases are necessary, as important bug fixes were only published as SNAPSHOT version (see Issue 24) and important Pull Requests are still without any feedback. Until the currently open PRs are not merged I won't create additional PRs upstream.

Branches

The branch upstream follows the master branch of CoreASM. The master branch follows upstream, adds this README and a custom SNAPSHOT version.

These feature branches are based on upstream, and may be rebased when upstream is updated:

  • jparsec3, Pull Request at PR29
    • updates the minimum required Java version to 8
    • updates jParsec to version 3.0 and makes some limited use of Java 8 lambdas
  • fixes, Pull Request at PR30
    • various small fixes, performance improvements and other changes
  • emError-deadlock, Pull Request at PR31
    • resolves an assertion error
    • add blocking wait for next command in emError
  • codestyle
    • various code improvements
  • ForkJoinPool, Pull Request pending
    • migrate from EDU.oswego.cs.dl.util.concurrent to java.util.concurrent, as it has been deprecated and merged into Java 7, where support continues
    • Exceptions are no longer caught and stored, but use the native error handling
    • as java.util.concurrent.ForkJoinPool no longer offers stats a custom measurement of execution times has been added
    • batched execution ([recursive] evaluation of multiple agents in one tasks) has been removed, as the ForkJoinPool can better distribute the work across workers
    • TODO: determine number of processors to be used

Since important features have not yet been merged upstream and additional work was needed, isolated branches on top of master became too hard to maintain.

The locke branch is now the default branch of this fork. It contains a somewhat stable version of features that are likely to be released next. Its history may be rewritten to pull in different features and pick commits from the development branch, but rebases unlikely to happen anymore.

There are some additional major differences to upstream & changes in the "locke" branch, that are not mentioned in the above feature branches:

  • targets Java 11 (instead of Java 7)
  • the maven layout has been changed
  • TestEngineDriver: public constructor with properties
  • robustness, performance and codestyle improvements
  • currently not supported in this fork:
    • compiler (I started working on the branch dev-compiler)
    • eclipse modules / plugin

Development of experimental features happens in the dev branch, which is based on the locke branch. It must be considered as experimental, as it contains experiments and patches for my specific workload. I share them for the interested visitor, but be warned that the history is dirty and will be rewritten a lot (i.e. expect things that I try out but discard later on).

Some noteworthy changes of the "dev" branch, not in any feature nor the "locke" branch:

  • SchedulerImp: public ForkJoinPool
  • ConcurrentProgramEvaluator: removed AgentContext, added InterpreterCache
  • ConcurrentProgramEvaluator: injectUpdates
  • TestEngineDriver: return list of updates

Upstream Merged PRs

  • nanoTime, Pull Request at PR27
    • adds the function nanoTime, which serves System.nanoTime(), to better measure elapsed time than the now function, which is based on System.currentTimeMillis()
  • test-jar, no Pull Request intended
    • installing / publishing org.coreasm.engine now creates an additional test-jar, to make it possible to use the TestEngineDriver from external projects
  • avoid-yield, Pull Request at PR26
    • uses a signal to wait for the Engine to be idle; the Engine uses a LinkedBlockingQueue to wait for a new command when it is idle. This improves CPU utilization as waiting threads no longer call Thread.yield() constantly in a loop until the condition changes
    • TestEngineDriver has been restructured to avoid an internal thread, on which was waited with an additional Thread.yield()-loop
    • this branch is based on test-jar, which should've been a separate PR

Releases

Releases are tagged with the suffix -locke-N. Their history will not be rewritten.

coreasm.core's People

Contributors

araschke avatar dependabot[bot] avatar locke avatar markusbrenner avatar mdausend avatar mstegmaier avatar normanthiel avatar roozbehf avatar spellmaker avatar wolskia avatar

Stargazers

 avatar

Watchers

 avatar  avatar

coreasm.core's Issues

only fat carma.jar published

nexus-staging-maven-plugin uploads the assemblied fat jar, instead of only the compiled jar. Both should be uploaded.

InterruptedException in CI run

InterruptedException in CI runs, macos-latest, 17:

Error:  Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.53 s <<< FAILURE! - in org.coreasm.engine.test.plugins.schedulingpolicies.TestSchedul1
Error:  org.coreasm.engine.test.plugins.schedulingpolicies.TestSchedul1.performTest  Time elapsed: 2.139 s  <<< FAILURE!
java.lang.AssertionError: Test failed for class: TestAllCasm
An error occurred after 6 steps in TestSchedul1.casm: An error occurred in TestSchedul1.casm:java.lang.InterruptedException
	at java.base/java.util.concurrent.locks.ReentrantLock$Sync.lockInterruptibly(ReentrantLock.java:159)
	at java.base/java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:372)
	at java.base/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:432)
	at org.coreasm.engine.Engine$EngineThread.processNextCommand(Engine.java:1141)
	at org.junit.Assert.fail(Assert.java:89)
	at org.coreasm.engine.Engine$EngineThread.run(Engine.java:820)
	at org.coreasm.engine.test.TestAllCasm.performTest(TestAllCasm.java:180)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:377)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:284)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:248)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:167)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:456)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:169)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:595)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:581)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.