Skip to content

Commit d44c78b

Browse files
authored
Delete examples and part of README (#41)
1 parent 87bb475 commit d44c78b

File tree

9 files changed

+7
-1053
lines changed

9 files changed

+7
-1053
lines changed

README.md

Lines changed: 7 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,12 @@
1-
# native-loop (PRE-RELEASE)
2-
Extensible event loop and async-oriented IO for Scala Native; powered by libuv.
1+
# scala-native-loop
32

4-
## UNDER CONSTRUCTION
5-
6-
If you're looking for the new 0.4 rewrite, check the `04` branch. The current state of master is mostly extracted from the book [Modern Systems Programming in Scala Native](https://pragprog.com/book/rwscala/modern-systems-programming-with-scala-native).
3+
Async IO and event loop for Scala Native
74

85
## What is it?
96

10-
scala-native-loop provides a real, asynchronous ExecutionContext implementation for Scala Native.
11-
It's backed by libuv, the same C library that the node.js ecosystem runs on; in addition to basic
12-
Future dispatching, we can also use libuv to provide other basic functionality, like:
13-
14-
- File IO
15-
- Pipe IO
16-
- TCP Sockets
17-
- UDP Sockets
18-
- Timers
19-
20-
To provide a working API for practical, async Scala Native programs, we have two subprojects,
21-
`client` and `server`, which provide an async HTTP client and server, respectively, by integrating addtional C libraries: [nodejs/http-parser](https://github.com/nodejs/http-parser) for request parsing, and [curl](https://github.com/curl/curl) for a full featured client with HTTPS support.
22-
23-
That said - providing a full-featured ecosystem in a single library isn't feasible - instead, we provide a `LoopExtension` trait that allows other C libraries to be integrated to the underlying event loop, in the same way that libcurl and http-parser are integrated; this opens up the possiblity of fully asynchronous bindings for postgres, redis, and many others.
24-
25-
## Why is this here?
26-
27-
To demonstrate the architectural style of a full, extensible async ecosystem for Scala Native, with an idiomatic Future-based API, implemented entirely as a library, and to start discussion about what we our priorities are.
28-
29-
## LoopExtension trait
30-
31-
To attach a new library to the event loop, all we need to do is provide the `LoopExtension` trait:
32-
33-
```
34-
trait LoopExtension {
35-
def activeRequests:Int
36-
}
37-
```
38-
39-
And then register the component at runtime with `EventLoop.addExtension()`.
40-
41-
This is necessary because we need some way to know if there are pending IO tasks being managed by a C library, even if there are no outstanding Futures, and prevent the event loop from shutting down prematurely in that case.
42-
43-
## Maintenance Status
44-
45-
This code is a pre-release preview - I am cleaning up both the style and the implementation,
46-
aiming to align with Scala Native 0.4 for something more robust.
47-
48-
For now, I'm filing issues to remind myself of work that needs to be done.
49-
50-
I'll also create a few "discussion" issues for broader conversation.
51-
52-
Please feel free to file additional issues with questions, comments, and concerns!
53-
54-
## Server API Example
55-
56-
```
57-
def main(args:Array[String]):Unit = {
58-
Service()
59-
.getAsync("/async") { r => Future {
60-
s"got (async routed) request $r"
61-
}.map { message => OK(
62-
Map("asyncMessage" -> message)
63-
)
64-
}
65-
}
66-
.getAsync("/fetch/example") { r =>
67-
Curl.get(c"https://www.example.com").map { response =>
68-
Response(200,"OK",Map(),response.body)
69-
}
70-
}
71-
.get("/") { r => OK {
72-
Map("default_message" -> s"got (default routed) request $r")
73-
}
74-
}
75-
.run(9999)
76-
uv_run(EventLoop.loop, UV_RUN_DEFAULT)
77-
}
78-
```
79-
80-
## Streaming API Example
7+
scala-native-loop provides asynchronous utilities for Scala Native.
8+
It's backed by libuv, the same C library that the Node.js ecosystem runs on.
9+
It currently offers:
8110

82-
```
83-
def main(args:Array[String]):Unit = {
84-
val p = FilePipe(c"./data.txt")
85-
.map { d =>
86-
println(s"consumed $d")
87-
d
88-
}.addDestination(Tokenizer("\n"))
89-
.addDestination(Tokenizer(" "))
90-
.map { d => d + "\n" }
91-
.addDestination(FileOutputPipe(c"./output.txt", false))
92-
println("running")
93-
uv_run(EventLoop.loop,UV_RUN_DEFAULT)
94-
}
95-
```
11+
- `scala.scalanative.loop.Timer`: to schedule callbacks to execute after a timeout
12+
- `scala.scalanative.loop.Poll`: to schedule callbacks when data is read/written on a file descriptor

build.sbt

Lines changed: 0 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,9 @@ val publishSettings = Seq(
2626
url("https://github.com/scala-native/scala-native-loop"),
2727
"scm:git:[email protected]:scala-native/scala-native-loop.git"
2828
)
29-
),
30-
developers := List(
31-
Developer(
32-
"rwhaling",
33-
"Richard Whaling",
34-
35-
url("http://whaling.dev")
36-
)
3729
)
3830
)
3931

40-
val noPublishSettings = Seq(
41-
publish := {},
42-
publishLocal := {},
43-
publishArtifact := false,
44-
skip in publish := true
45-
)
46-
4732
lazy val commonSettings = Seq(
4833
scalacOptions ++= Seq(
4934
"-deprecation",
@@ -56,11 +41,6 @@ lazy val commonSettings = Seq(
5641
),
5742
libraryDependencies += "com.lihaoyi" %%% "utest" % "0.7.11" % Test,
5843
testFrameworks += new TestFramework("utest.runner.Framework"),
59-
Test / nativeLinkStubs := true,
60-
)
61-
62-
lazy val examplesSettings = Seq(
63-
test := {}
6444
)
6545

6646
lazy val core = project
@@ -70,75 +50,10 @@ lazy val core = project
7050
.settings(publishSettings)
7151
.enablePlugins(ScalaNativePlugin)
7252

73-
lazy val pipe = project
74-
.in(file("pipe"))
75-
.settings(commonSettings)
76-
.settings(test := {})
77-
.settings(noPublishSettings)
78-
.enablePlugins(ScalaNativePlugin)
79-
.dependsOn(core)
80-
81-
lazy val client = project
82-
.in(file("client"))
83-
.settings(commonSettings)
84-
.settings(test := {})
85-
.settings(noPublishSettings)
86-
.enablePlugins(ScalaNativePlugin)
87-
.dependsOn(core)
88-
89-
lazy val server = project
90-
.in(file("server"))
91-
.settings(commonSettings)
92-
.settings(test := {})
93-
.settings(noPublishSettings)
94-
.enablePlugins(ScalaNativePlugin)
95-
.dependsOn(core)
96-
9753
lazy val scalaJsCompat = project
9854
.in(file("scalajs-compat"))
9955
.settings(name := "native-loop-js-compat")
10056
.settings(commonSettings)
10157
.settings(publishSettings)
102-
.settings(test := {})
103-
.enablePlugins(ScalaNativePlugin)
104-
.dependsOn(core)
105-
106-
lazy val serverExample = project
107-
.in(file("examples/server"))
108-
.settings(
109-
commonSettings,
110-
examplesSettings
111-
)
112-
.settings(noPublishSettings)
113-
.enablePlugins(ScalaNativePlugin)
114-
.dependsOn(core, server, client)
115-
116-
lazy val pipeExample = project
117-
.in(file("examples/pipe"))
118-
.settings(
119-
commonSettings,
120-
examplesSettings
121-
)
122-
.settings(noPublishSettings)
123-
.enablePlugins(ScalaNativePlugin)
124-
.dependsOn(core, pipe, client)
125-
126-
lazy val curlExample = project
127-
.in(file("examples/curl"))
128-
.settings(
129-
commonSettings,
130-
examplesSettings
131-
)
132-
.settings(noPublishSettings)
133-
.enablePlugins(ScalaNativePlugin)
134-
.dependsOn(core, client)
135-
136-
lazy val timerExample = project
137-
.in(file("examples/timer"))
138-
.settings(
139-
commonSettings,
140-
examplesSettings
141-
)
142-
.settings(noPublishSettings)
14358
.enablePlugins(ScalaNativePlugin)
14459
.dependsOn(core)

0 commit comments

Comments
 (0)