A comparison from 2 weeks using Go.
Akka's central principle is that there you have an ActorSystem
which runs Actor
s. An Actor
is defined as a class and it has a method to receive messages.
""" | |
1) | |
Given a 2D list of integers where each row and column is sorted in ascending | |
order from left to right and top to bottom... | |
e.g. | |
""" | |
""" | |
Write a method that checks for the number occurrences of an integer in the matrix. |
/* Go's "hello world" */ | |
package main | |
import "fmt" | |
func main() { | |
fmt.Println("hello world") | |
} |
clean: | |
-rm DB kernel maple.log | |
compile: | |
go build kernel.go db.go log.go parse.go |
package main | |
import ( | |
"net/http" | |
"fmt" | |
"io/ioutil" | |
"strconv" | |
"strings" | |
"os" | |
"bufio" |
[info] Loading global plugins from /Users/sfrazer/.sbt/0.13/plugins | |
[info] Loading project definition from /Users/sfrazer/projects/cromwell/project | |
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". | |
SLF4J: Defaulting to no-operation (NOP) logger implementation | |
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. | |
[info] Set current project to cromwell (in build file:/Users/sfrazer/projects/cromwell/) | |
[info] Compiling 2 Scala sources to /Users/sfrazer/projects/cromwell/engine/target/scala-2.11/classes... | |
[info] Running cromwell.Main run scatter.wdl - | |
[2016-05-25 11:47:02,566] [info] Slf4jLogger started | |
[2016-05-25 11:47:02,604] [info] RUN sub-command |
workflow w { | |
Array[String] x = ["a", "b", "c"] | |
String z = "d" | |
call t as t0 {input: a=z} # a="d" | |
scatter (y in x) { | |
String z = y + "foo" | |
call t as t1 {input: a=y, b=z} # (for first shard) a="a", b="afoo" |
task append_array { | |
Array[Int] input_array | |
Array[Int] elements_to_add | |
command { | |
python <<CODE | |
for x in [${sep="," input_array}]: | |
print(x) | |
for x in [${sep="," elements_to_add}]: | |
print(x) | |
CODE |
/** PBE: the return value of WorkflowExecutionActorState is just temporary. | |
* This should probably return a Try[BackendJobDescriptor], Unit, Boolean, | |
* Try[ActorRef], or something to indicate if the job was started | |
* successfully. Or, if it can fail to start, some indication of why it | |
* failed to start | |
*/ | |
private def startJob(call: Call, index: Option[Int], attempt: Int, inputs: Map[FullyQualifiedName, WdlValue]): WorkflowExecutionActorState = { | |
val jobKey = BackendJobDescriptorKey(call, index, attempt) | |
val jobDescriptor = BackendJobDescriptor(workflowDescriptor.backendDescriptor, jobKey, inputs) | |
val configDescriptor = BackendConfigurationDescriptor(ConfigFactory.parseString("{}"), ConfigFactory.load()) |
Formerly WorkflowBackendActorFactory
, the new interface is BackendLifecycleActorFactory
:
trait BackendLifecycleActorFactory {
def getWorkflowInitializationActorProps(...): Option[Props] = ???
def getJobExecutionActorProps(...): Props = ???
def getWorkflowFinalizationActorProps(...): Option[Props] = ???
}