GoWorks

GoWorks demonstrates our ability to overcome multiple constraints frequently encountered in commercial product development — time limited, budget limited, and facing a brand-new general purpose language featuring implicit typing and a standard library with over 1200 files... challenge accepted.

Development Time: 11 Weeks as of Preview 7

Release Notes

Standalone Application or NetBeans Plugin

GoWorks is now available both as a standalone application and as a plugin to NetBeans 7.3. For users who already have NetBeans 7.3 and wish to include support for Go as an integrated plugin, please see the Release Notes below for special instructions.

A Video Introduction to GoWorks

The following video gives a brief overview of GoWorks Preview 7. We start with a few basic tips for users launching GoWorks for the first time, followed by several examples to help developers effectively use our highly-responsive code completion features. We recommend watching the video in HD for best image quality (should be automatic in full-screen mode).

Release-Oriented Development

When facing a project with tight restrictions on time, it's essential to prioritize development of features in a manner that maximizes the productivity of end users. For GoWorks, we chose a feature set that highlights the scalability of our algorithms. 28 days after starting this project, we released GoWorks 1.0 Preview 4 featuring full-project responsive code completion support exceeding standards seen in most established products. We later revisited this project to incorporate several performance and usability improvements which are now part of our standard NetBeans framework.

Scalable Code Completion

GoWorks employs the same approach approach to highly-responsive code completion seen in ANTLRWorks 2, and shows the exceptional scalability of these techniques to large, general-purpose programming languages. Providing these features requires on-the-fly type analysis for inferred types and full analysis of complicated expressions.

Looking Forward

The rapid progression of GoWorks proved that even we can be surprised. GoWorks was our first attempt to bring our highly-responsive code completion algorithms from computer science theory to a successful product. The result proved support for every one of our goals over the previous four years so well that we've been forced to revisit the basic question of what is possible. Following evaluations of this IDE in practice, we have modified many portions of our framework to improve support for new languages, reduce development overhead, and (perhaps most importantly) significantly improve our ability to progressively develop an IDE with a low risk of regression bugs. For companies using in-house languages on a daily basis, this approach produces usable products early in the development cycle while working along a solid path to completion.

Editor Analysis and Features

After careful review of the behavior of GoWorks in practice, we've revisited many of its features to improve performance, reliability, and flexibility to address the varying needs of programming languages in use today. In particular, we are better equipped than ever to handle the following features, but the strict time limits of this project prevented us from includeing them in the GoWorks demonstration.

Automatic Indentation and Formatting

After five years of searching for the best answer in this space, we now have a generalized approach to code indentation and formatting that can meet the needs of all of our internally tested languages.

Semantic Analysis

After developing the semantic analysis features in GoWorks, we generalized our approach and modified it to better meet the needs of developers working with implicitly- and dynamically-typed programming languages. Areas where the algorithm in GoWorks is inaccurate or slow have since been properly resolved.

Large File Support

GoWorks uses a limited version of our framework support for large files. Currently our advanced approach to handling exceptionally large files works well but requires careful language-specific development and integration into the IDE. We are working to generalize the concepts used in these builds so they can be applied to all IDEs from the beginning.

Mobility Concerns

For developers working while traveling, concerns such as battery life and application performance in battery saving modes require serious consideration. Our approach to these problems is based on dynamic feature reduction, a set of techniques which disable "candy" features while fully preserving the behavior of essential productivity features like highly-responsive code completion.

Refactoring and Static Analysis

For very short projects, we make sure to emphasize features developers use most frequently. GoWorks does not currently include support for automatic refactoring or static analysis features like Find Usages or browsing call graphs.

Build System and Debugging Support

Go provides the go tool for compiling and installing packages. GoWorks Preview 7 provides basic support for building, running, and testing packages with this system. GoWorks does not yet support the GDB-based debugging features of Go. When adding support for debugging a programming language, we make sure to leverage algorithms similar to those used in code completion to provide a consistent, responsive debugging interface even when using complicated watch expressions.

Release Notes

Getting Started

System Requirements

  • Java 6 or newer
    • Java 7 or newer is recommended; GoWorks takes advantage of performance improvements in this release
  • 512MB free memory for GoWorks to use
    • 1GB free memory is recommended
  • A release of Go should be installed, and the GOROOT environment variable set as described on the Go installation page

Installing GoWorks

Standalone Application

With Java and Go already installed on your system, simply download GoWorks from the link above and extract the files to some fixed location on your system.

Plugin for NetBeans 7.3 Users

GoWorks is also available as a plugin for NetBeans 7.3. When used as a plugin, GoWorks has the ability to use additional standard and 3rd-party NetBeans plugins, including source control integration. To install this plugin, open the NetBeans 7.3 plugin manager and go to the Settings tab. Add an Update Center with the following settings. Afterwards, the plugins will be available under Available Plugins in the Tunnel Vision Labs category.

Running GoWorks

The GoWorks bin folder includes three binaries. You should launch the one matching your system:

  • Windows, 64-bit Java: goworks/bin/goworks64.exe
  • Windows, 32-bit Java: goworks/bin/goworks.exe
  • Linux, OSX: goworks/bin/goworks

Projects

For projects using the directory structure recognized by the Go command, the root folder (the folder containing your src folder) is recognized by GoWorks as a project. To get started in GoWorks, simply use the Open Project... command to open this root folder in the IDE.

The current preview release of GoWorks primarily targets users who already have some Go code they're working on. As such, there is not currently a way to create a new Go project directly within the IDE. To create a new project, create a directory on your system for the project, and add a src folder containing one or more .go source files. GoWorks will then recognize the project folder as a Go project and allow you to open it in the IDE.

Issue Tracker

Bugs and feature requests may be reported on the GoWorks Bitbucket issue tracker.

Release History

A complete release history for GoWorks is available on the project's Bitbucket Wiki.