Skip to content
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

Linux? #60

Closed
gabebear opened this issue Dec 4, 2015 · 26 comments
Closed

Linux? #60

gabebear opened this issue Dec 4, 2015 · 26 comments

Comments

@gabebear
Copy link

gabebear commented Dec 4, 2015

Now that Linux has Swift and GCD... any chance of porting this? https://swift.org

@m3talsmith
Copy link

I'm going to attempt this over the weekend.

@damian-kolakowski
Copy link
Member

xD

@gabebear
Copy link
Author

gabebear commented Dec 4, 2015

IBM's Swift Linux repl thing has a http server/client example(server.swift). http://swiftlang.ng.bluemix.net/#/repl

@ankitspd
Copy link

ankitspd commented Dec 5, 2015

Foundation for linux is not yet complete so very difficult to port this project to linux
even NSString has so many unimplemented method
https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/NSString.swift

@damian-kolakowski
Copy link
Member

hi all,

I spend some time on the support for Linux. I worked on Socket class and it compiles successfully on Linux machine ( Ubuntu 15.10 Swift 2.2 ). I removed:

  1. NSData dependency from HttpServer and Socket classes ( both use [UInt8] array ).
  2. String::dataUsingEncoding(...) dependency from HttpServer and Socket classes.

I am going to continue the journey with the following roadmap:

  1. Remove NSRegularExpression dependency from HttpServer ( maybe together with routing mechanism redesign ).
  2. Remove objc_sync_enter/objc_sync_exit dependency from HttpServer.
  3. Remove NSURL dependency from HttpServer.

Guys, if you have any ideas or pull requests please let me know !

best,
dk

@julien-c
Copy link
Member

julien-c commented Dec 6, 2015

Awesome!

Why do you need to remove the NSURL dependency? What's missing in the
current implementation in Foundation core libs?

How can we help?!

Julien

On Sunday, December 6, 2015, Damian Kołakowski notifications@github.com
wrote:

hi all,

I spend some time on the support for Linux. I worked on Socket class and
it compiles successfully on Linux machine ( Ubuntu 15.10 Swift 2.2 ). I
also removed NSData dependency from HttpServer and Socket classes ( both
use [UInt8] array ).

I am going to continue the journey with the following roadmap:

  1. Remove NSRegularExpression dependency from HttpServer ( maybe together
    with routing mechanism redesign ).
  2. Remove objc_sync_enter/objc_sync_exit dependency from HttpServer.
  3. Remove NSURL dependency from HttpServer.

Guys, if you have any ideas or pull requests please let me know !

best,
dk


Reply to this email directly or view it on GitHub
#60 (comment).

@damian-kolakowski
Copy link
Member

@julien-c thanks :)

The following classes works on Linux:
Socket.swift, HttpRequest.swift, HttpParser.swift

TODO: HttpServer, HttpResponse.

best,
dk

@johnno1962
Copy link
Contributor

Hi @glock45 if you’re looking for dispatch_async try https://github.com/johnno1962/NSLinux

@damian-kolakowski
Copy link
Member

hi @johnno1962

Correct me If I am wrong ? Every time I call dispatch_async the library creates a new thread and after the run all the resources are released ( which is absolutely fine for me ) ?

best
dk

@gabebear
Copy link
Author

It does look to spin a thread every time... I'm confused why @johnno1962 code would be better than the dispatch_async provided by Apple/Swift? https://github.com/apple/swift/blob/8d9ef80304d7b36e13619ea50e6e76f3ec9221ba/test/ClangModules/Dispatch_test.swift

I admittedly haven't used swift on Linux yet, but have been using GCD via ObjC on Linux for a long while now. http://chris.mowforth.com/posts/2011/installing-grand-central-dispatch-on-linux/

@julien-c
Copy link
Member

I've put in some work on the Linux support of swifter (in #72, #73, #74, #75).

One of the last roadblocks on getting basic support (first of all, getting to something that builds 😄) is the locking that happens in HttpServer. My question is: is it really needed? If it is, is there something equivalent that we could use in Glibc?

@C0deH4cker
Copy link
Contributor

@C0deH4cker
Copy link
Contributor

Really it boils down to just using a NSLock and doing:

nslock.lock()
closure()
nslock.unlock()

@julien-c
Copy link
Member

@C0deH4cker Your link seems to 404

@damian-kolakowski
Copy link
Member

@julien-c Thanks for a great work !!!!! I pushed two changes more and finally we compile on Linux ( with NSLinux from @johnno1962 ). I have not run it yet xD This tension kills me xD

@C0deH4cker thanks for NSLock ! I've update Swifter. I've been thinking about ( dispatch_semaphore ) since it's more friendly for GCD environment we have.

@C0deH4cker
Copy link
Contributor

@julien-c Whoops, looks like I accidentally removed the last "9"! Try this one: https://gist.github.com/kristopherjohnson/d12877ee9a901867f599

@C0deH4cker
Copy link
Contributor

I'll clone it and test on Ubuntu 14.04 now and let you know!

@damian-kolakowski
Copy link
Member

( I build on Linux using "swift build" ).

@C0deH4cker
Copy link
Contributor

Built both NSLinux.a and Swifter.a. How are you building the samples?

@julien-c
Copy link
Member

Yay! Swifter server running on Ubuntu here: http://swift.circular.io:8080/ 🎉🎉

@julien-c
Copy link
Member

The app's code is here: https://github.com/julien-c/example-package-dealer

Small variation on Apple's playing card dealer example. There's a pretty sweet /cards endpoint here: http://swift.circular.io:8080/cards

I had to unplug the JSON serialisation as NSJSONSerialization is unimplemented in Foundation so far.

@julien-c
Copy link
Member

I've just posted this to Hacker News, if you wish to upvote 😄 https://news.ycombinator.com/item?id=10718544

@C0deH4cker
Copy link
Contributor

Got a demo running on my server as well! Took a little extra time as I didn't realize Azure firewalls new VMs from everything but SSH by default, not using iptables but external to the VM (and it seems that adding a new firewall rule is broken). Great work!

@johnno1962
Copy link
Contributor

congrats @glock45. @gabebear You’re right NSLinux’s dispatch_async is pretty inefficient spinning a thread each call but libdispatch seems not to be available on Linux. It should clean up after each thread exits (calls pthread_detach)

@gabebear
Copy link
Author

oops, interesting, I'd setup my ObjC Linux server long enough ago I'd forgotten how I'd done it. Went back and I've been using http://nickhutchinson.me/libdispatch/ (forgot I'd even installed it)

@segabor
Copy link

segabor commented Jan 2, 2016

Hi,

Happy to see it runs on Linux at last. Here's my work that makes the example run also, with build script.

https://github.com/segabor/swifter/commit/918a751e1ef02cb0c13c72e20512a1465218fcc1
Cheers,

Gábor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants