I am looking forward to participating in the 2023 GSOC program with Swift. I am eager to contribute to the Swift community and was wondering if there might be a possibility of a Swift project in the web development space for this year's Google Summer of Code program.
I have been researching and exploring some potential project ideas that blend the purpose of Swift with web development & one of the ideas that I felt worth sharing was of developing a full-fledged online IDE for Swift , that could be integrated directly into the Swift.org website to make learning, exploring, and working with Swift accessible for students and developers right from their browser. This is similar to the Swift Playgrounds software for the macOS, but for the web.
The basic functionality of the IDE would be to compile Swift code using wasm and use wasm and browser APIs to interact with the compiled code within the application. To make the IDE more comprehensive, additional features such as code snippets, debugger, integration with Git, plugins, and swift packages integration could be added, which are just possible examples of the features.
To ensure that this IDE is a standalone service within the Swift project, a separate sub-domain such as ide.swift.org or web.swift.org could be set up, which could be referenced from the swift.org website itself.
I am looking for a mentor who can guide me through the process of validating this project idea and guiding me.
Thanks for taking the thread to the forums after we chatted a bit
I'm a bit concerned this may be a little too fuzzy defined for a GSoC project which usually need a well defined scope and deliverable. It also seems to be kicking off a new project, rather than contributing to the Swift project itself -- although I understand that such editor would definitely benefit the Swift website and ecosystem.
I would like to invite the community to speak up if they think this is a worthy project, and perhaps if there is someone willing to polish up the idea and get it to a proposal form, as well as mentor it - as I don't think we currently have a mentor candidate within the Swift team for such effort.
Thank you for your time, Konrad. I agree with your concerns about this idea that are important for a gsoc project.
I will continue to explore other potential project ideas and look for opportunities to contribute to the Swift project.
Thank you for your time and consideration.
Just a thought: Have thought about GitHub Codespaces and how they could be used to achieve the goal of having a fully-fledged development environment for Swift inside the browser? With the Swift Extension for VSCode, I think it should be fairly straightforward to set up a Swift development environment that runs on one of GitHub’s VMs – I haven’t tried it though.
Hey @ahoppen !
Absolutely, that's a great option as well. It could solve the purpose of my idea pretty much in an efficient way.
The idea that I proposed was to have an exclusive IDE exclusively for Swift only, that is ready to go in one click. In contrast, codespaces would require complex setup configurations like setting up virtual machine types, booting complexities, and other complicated stuff, which might be overwhelming at first and not so convenient option.
The IDE that I'd talked about would have features exclusive to Swift language such as ease of installing packages, some kind of debugging features like with lldb & picking particular crucial features of swift and developing features around them over the timeline. Building an API, that integrates with docs of Swift lang and links it with the Ide would make learning Swift easy by getting help on the go can also be an exclusive aspect of this project. All these features could help beginners as well as experienced developers.
Anyways, I understand your & @ktoso 's concern about the project & I totally understand the complexities that can occur because of this. I'd keep on exploring other possibilities of the Swift project as well.
Thank you for your time and consideration.
Just to be clear: I’m not saying that your idea isn’t great or impossible to do – I just think getting to compiler to work inside a browser would be a gigantic undertaking. Essentially, you would need to compile the compiler itself down to WASM so it can run in the browser and that alone would probably take someone familiar with the codebase at least several months – let alone the effort it would take to write the source editor itself.
That’s why I thought that setting something up with GitHub Codespaces might be similar to what you’ve originally proposed while also being realistically possible as a Google Summer of Code project. Also, I don’t think that GitHub Codespaces is conflicting with your ideas. VSCode with the Swift extension already supports debugging using LLDB and loading of SwiftPM packages so setting that up should also be simple.
So, depending on what you had in mind, the GSoC project could be to set up a devcontainer that allows you to run Swift inside GitHub codespaces and write examples that can be linked from documentation on swift.org.
You have raised valid concerns about the technical challenges that could occur in the project. Indeed compiling the compiler itself down to wasm and further processing of it to compile the user code would be a difficult task.
That's a great idea as well. Thank you for the valuable suggestion.
Based on your input, I'd take the idea of making a dev container environment that allows running Swift inside GitHub codespaces along with features exclusive to swift and writing examples that can be linked from swift's documentation to the forums so that I can take inputs from other respected members as well for the feasibility of the project.
Thank you so much for your time and valuable feedbackk.
FWIW I've used GH Codespaces and once you've added the dev container files (which is just choosing a few options because the SSWG provide a Swift option) it's one click to open a code space that provides you code completion, debugging, test support and everything you'd want in an IDE. I did a talk on it at Do iOS and here it is running on an iPad
I'm always using https://swiftfiddle.com as my swift playground, specially to easy experiment with the nightly-main build, and I wonder if there was ever a discussion about make it an official swift playground.
Something that requires an always running server component that needs scaling in response to fluctuations in load from clients (as compared to a CDN, which scales automatically) is unlikely to be considered, as it raises a question of said scaling, specific platform it should be hosted on, billing etc.
As for building the compiler for WebAssembly, in addition to adding support for this to LLVM, clang, and all of the required tools (linker, SwiftPM et al), the Swift compiler itself needs to support Wasm to be able to produce output that can run in the browser without requiring any servers. Thus a project of this kind, such as proposed WebIDE, needs to include a plan for implementing all of these requirements first.
There was a presentation a few years ago at CppCon about porting Clang to Wasm. It seems that the biggest hurdle the presenter faced was creating an in-memory filesystem shim.
Porting the Swift compiler to Wasm may or may not be as smooth as that process.
I think a web-embeddable compiler would be a fantastic asset. It would allow us to run a compiler in all kinds of places which include Swift code - in documentation, on these forums, in GitHub's web editor (not the same as codespaces; it's basically VSCode entirely in the browser), etc. Some evolution proposals come with downloadable toolchains; if those were web-embeddable toolchains, it would be even easier to demonstrate proposed language features, and for reviewers to experiment with them. It would dramatically improve our access to the Swift compiler.