Fact-checked by Grok 2 weeks ago

JS++

JS++ is a programming language that serves as a typed superset of JavaScript, designed specifically for high-quality web and mobile development by incorporating an optional, sound type system to ensure type safety at both compile-time and runtime. Developed by Onux, a company founded in 2011 in London with operations in Silicon Valley, JS++ was first announced and released in open beta on June 7, 2016, as a reliable successor to JavaScript aimed at addressing its notorious type-related errors, such as NaN values or negative numbers in unsigned contexts. Unlike type-erased systems like TypeScript, JS++ employs a patented "unified external type" mechanism (U.S. Patent 10,296,313, issued 2019) to seamlessly integrate and convert untyped JavaScript code and libraries, providing automatic safeguards and lightweight type conversions without requiring a steep learning curve for JavaScript developers. Key features include optional type declarations (e.g., unsigned int), elimination of runtime type errors, full compatibility with existing JavaScript environments—including edge cases like ActiveX objects, cross-browser DOM inconsistencies, and iframes—and support for imperative, object-oriented, and functional programming paradigms. The language compiles to ECMAScript 3-compliant JavaScript, ensuring broad compatibility from legacy browsers like Internet Explorer 6 to modern ones, and includes a standard library with classes, data structures, algorithms, and utilities, alongside tools like a documentation generator that produces pages from source code comments. Backed by years of scientific research and developed by a team with experience dating to the early World Wide Web, JS++ emphasizes reliability in production environments, particularly when interfacing with third-party untyped code, and remains available for free download via its official compiler.

Overview

Description and Purpose

JS++ is a statically-typed, optional-type programming language designed as a superset of JavaScript that compiles to plain JavaScript, targeting ECMAScript 3 (ES3)-compatible output with a sound gradual typing system to provide compile-time and runtime type correctness. This approach ensures compatibility with existing JavaScript environments while introducing robust type guarantees that prevent subtle errors inherent in JavaScript's dynamic typing. The primary purposes of JS++ are to enhance JavaScript's reliability and developer productivity by incorporating type safety mechanisms that catch common issues, such as type mismatches and NaN propagation, at both compile time and runtime, all while retaining the language's dynamic scripting flexibility for rapid prototyping and iteration. By addressing these pain points, JS++ enables the creation of more maintainable and error-resistant codebases without requiring a complete rewrite of existing JavaScript applications. Unique to JS++, its design is grounded in years of scientific research tackling JavaScript's shortcomings in large-scale , including the brittleness of type systems in competing supersets like , and it prioritizes across client-side browsers and server-side environments through full compatibility. This foundation allows JS++ to handle obscure edge cases, such as cross-browser DOM inconsistencies, that often plague untyped in production. JS++ targets developers seeking enhanced typing similar to , with a for integrating untyped legacy code into typed systems for scalable web projects. Its gradual permits seamless mixing of typed and untyped code, ensuring without forcing full adoption upfront. Development of JS++ appears to have ceased around 2018, with no major updates since then (as of November 2025).

Compatibility and

JS++ source code is transpiled to standard , ensuring it can execute in any JavaScript runtime environment, such as web browsers or , without requiring additional runtime dependencies. The compilation process, performed via the js++ command-line tool, generates standalone .js files from .jspp sources, allowing seamless deployment in legacy environments like as well as modern ones. This approach prioritizes broad compatibility while leveraging the host environment's native execution capabilities. As a superset of , JS++ accepts all valid JavaScript code as syntactically correct, facilitating incremental adoption where developers can gradually introduce typed elements into existing untyped codebases without full rewrites. Automatic type inference assigns the unified external type to undeclared variables (using var), while coercion mechanisms handle conversions between typed JS++ code and untyped , such as appending "" for string promotion from external types. The generated output incorporates runtime type checks and lightweight conversions only in regions with declared types, optimizing performance by avoiding unnecessary overhead in untyped sections. Support for ES5 and ES6+ features is achieved through transpilation to ES3 when targeting older runtimes. A key compatibility feature is the unified external type, which encapsulates all untyped JavaScript values into a single category, isolating JS++'s sound internal type system from potential errors in external code, such as propagation of undefined or null values into typed contexts. This isolation enforces explicit conversions at boundaries, preventing runtime failures like type mismatches or unexpected mutations, while maintaining interoperability with JavaScript libraries declared via external statements. By design, this mechanism ensures type soundness without compromising the dynamic nature of integrated JavaScript portions.

History and Development

Origins and Design

JS++ was developed by Onux, a founded in , , with operations extending to , , and , beginning in 2011 as an exploration of advanced and mechanisms for . The project originated from the need to mitigate the pitfalls of JavaScript's dynamic typing, such as runtime errors that proliferate in large-scale codebases and enterprise applications, while overcoming limitations in existing supersets like , which do not provide full type soundness when interacting with untyped code. Onux, established by Roger Poon, drew on the team's extensive experience—spanning over two decades and dating back to the early days of the —to focus on enhancing reliability for in production environments. The core motivations behind JS++ centered on delivering a dependable superset of that enforces engineering rigor without sacrificing compatibility or ease of adoption. Unlike prior attempts at typed variants, which often resulted in brittle or incomplete error detection, JS++ aimed to eliminate common issues like out-of-bounds errors through innovative approaches, including the invention of "existent types" by co-lead Anton Rapetov. This effort was grounded in a scientific , incorporating research-inspired type systems and techniques to ensure provable guarantees against type-related failures. Key design principles of JS++ emphasize soundness, defined as comprehensive verified at both compile-time and runtime, enabling where developers can incrementally add types to existing code without a steep learning curve. The language maintains full with legacy , including seamless integration of untyped libraries via a unified external type mechanism that isolates typed regions while enforcing correctness across boundaries. Over years of iteration, the initial evolved to simplify complex typing challenges, such as runtime enforcement and type preservation, resulting in a system that compiles to efficient, typed while preserving the original ecosystem's flexibility. This approach reflects the team's background in , algorithms, and , with contributions from patented innovations in type systems.

Release History

Development of JS++ began with alpha releases in 2011 and 2012, including version 0.013 on January 29, 2012, and 0.014.1 on August 15, 2012. JS++ entered open beta on June 7, 2016, introducing a typed superset of with initial support for basic type checking and incremental typing for existing codebases. At launch, the language targeted ES3 compatibility while emphasizing runtime through a patent-pending unified external . Later in 2016, version 0.4.2 was released on October 19, adding features such as classes and the "module" keyword for modular code organization, alongside to optimize compilation by excluding unused functions and overloads. This update also enhanced integration with editors like and improved Windows support. Version 0.4.2.2 followed on November 21, 2016, incorporating in-browser debugging capabilities via source maps for setting breakpoints and logging. Minor releases through 2017 and 2018 primarily addressed refinements, fixes, and compatibility improvements, with no major feature additions documented publicly. The project's repository reflects updates ceasing around 2018, though official releases continued thereafter. The most recent version, 0.10.0, was released on December 10, 2021, under the BSD License, with the compiler remaining available for download from the official Onux website. As of November 2025, JS++ operates in , with no new major versions or significant updates since version 0.10.0.

Language Features

Type System

JS++ employs a gradual type system that allows developers to optionally specify static types while maintaining compatibility with untyped JavaScript code. This approach enables a seamless transition from dynamic typing to full static typing, where variables can be declared with explicit types such as int x = 5; or left untyped using var for dynamic fallback. Unlike purely dynamic languages, JS++ provides compile-time guarantees that prevent type errors from propagating when mixing typed and untyped regions, ensuring runtime safety without requiring annotations for all code. The categorizes types into internal and external varieties to distinguish between JS++'s safe, statically checked constructs and JavaScript's dynamic behaviors. Internal types include like int, unsigned int, string, and bool, as well as object types derived from classes and collections such as arrays and dictionaries. External types, represented by a unified external type (via keywords like external or var), abstract all JavaScript values into a single compile-time category, allowing automatic inference from context in mixed scenarios. For instance, a declared as external can accept any JavaScript input without immediate type checking, while internal types enforce strict validation. Soundness is achieved through a combination of compile-time checks and runtime guards that isolate typed JS++ code from untyped . At compile time, the system detects mismatches, such as assigning a to an int variable, halting compilation to prevent errors. Runtime guards employ the unified external type to handle untyped inputs safely; for example, invalid values are converted to safe defaults like 0 for numeric types, avoiding crashes or unexpected behaviors. This mechanism ensures no type errors escape into execution, providing stronger guarantees than unsound systems. Unique to JS++, the eliminates common pitfalls like and propagation by enforcing automatic conversions to predictable values during type transitions. It also supports custom type conversions for user-defined types, allowing developers to define how internal objects interact with external data. In contrast to , which relies on an any type that can introduce false negatives, JS++ proves by isolating regions and avoiding unchecked unions, ensuring all type checks are verifiable without human-provided annotations.

Object-Oriented Programming

JS++ supports through a class-based system that emphasizes and compile-time checks, distinguishing it from JavaScript's prototypal . This system was introduced in post-beta releases around 2016, enabling developers to define structured, reusable code with single and polymorphism. Classes in JS++ are declared using the class keyword, creating user-defined types with typed fields and methods. Fields are declared with their types, and constructors initialize instances. For example, a basic Point class can be defined as follows:
jspp
class Point {
  int x;
  int y;
  
  Point(int x, int y) {
    this.x = x;
    this.y = y;
  }
}
Instances are created with the new keyword, such as Point p = new Point(3, 4);. Inheritance is achieved via the extends keyword for single inheritance, allowing subclasses to inherit and override members while supporting polymorphism through virtual methods resolved at runtime. The super keyword accesses parent class members, and the final modifier prevents further subclassing or overriding to enforce design contracts. Encapsulation in JS++ defaults to private visibility for all members, reducing accidental exposure in large codebases and promoting data hiding. Explicit access modifiers like public, protected, and private provide fine-grained control. Getters and setters enable controlled access to private fields. Consider this BankAccount example demonstrating encapsulation:
jspp
class BankAccount {
  private int balance;
  
  BankAccount(int initialBalance) {
    this.balance = initialBalance;
  }
  
  public int getBalance() {
    return this.balance;
  }
  
  public void deposit(int amount) {
    if (amount > 0) {
      this.balance += amount;
    }
  }
  
  public void withdraw(int amount) {
    if (amount > 0 && amount <= this.balance) {
      this.balance -= amount;
    }
  }
}
Here, balance is private, accessible only through public methods that enforce business rules. To illustrate polymorphism in practice, JS++ allows defining comparable classes for sorting. A Sortable base class with a compare method can be extended, enabling type-safe sorting implementations. For instance:
jspp
class Sortable {
  public virtual int compare(Sortable other) {
    // Default comparison; subclasses override
    return 0;
  }
}

class Person extends Sortable {
  string name;
  int age;
  
  Person(string name, int age) {
    this.name = name;
    this.age = age;
  }
  
  public override int compare(Sortable other) {
    Person p = (Person) other;
    if (this.age < p.age) return -1;
    if (this.age > p.age) return 1;
    return 0;
  }
}

// Usage in a sorting function (assuming a typed [array](/page/Array))
Person[] people = new Person[2] { new Person("Alice", 30), new Person("Bob", 25) };
// Sort using compare method (implementation via [standard library](/page/Standard_library) or custom sorter)
This setup leverages subtype polymorphism for age-based sorting, with compile-time type checks ensuring safety. JS++ modules facilitate organizing code into namespaces, using typed import and export statements akin to ES6 modules but with static type verification across boundaries. For example, a can be exported from one and imported into another, maintaining type integrity for large-scale applications.

Control Structures and Data Types

JS++ introduces enhancements to JavaScript's mechanisms and data types, providing stricter scoping and precise numeric handling to mitigate common pitfalls in untyped JavaScript code. These features leverage the language's to enable compile-time verification, ensuring more reliable program behavior in web applications.

Data Types

JS++ supports a range of primitive data types, with a particular emphasis on integer types for accurate arithmetic operations. The int type is a 32-bit signed two's-complement integer, ranging from -2,147,483,648 to 2,147,483,647, while unsigned int is a 32-bit unsigned integer ranging from 0 to 4,294,967,295. Unlike JavaScript's Number type, which uses 64-bit IEEE 754 double-precision floating-point representation with only 53 bits of integer precision, JS++ integers provide exact representation for values within their range, avoiding precision loss in computations such as large integer additions or multiplications. For example:
jspp
int x = 2147483647;  // Maximum int value
unsigned int y = 4294967295;  // Maximum unsigned int value
int result = x + 1;  // Wraps around to -2147483648 due to overflow
Integer operations in JS++ wrap around on at , similar to C-style behavior, which contrasts with JavaScript's potential for unexpected floating-point approximations. Other primitives include bool for boolean values and string for text, all integrated with the for compile-time checks.

Control Structures

Control structures in JS++ build on JavaScript's syntax but incorporate block scoping and type awareness to prevent common errors like variable hoisting. All variables declared within blocks, such as int i = 0;, are strictly scoped to that block, akin to let and const in modern JavaScript, ensuring they cannot be accessed outside their defining scope and eliminating hoisting-related issues associated with var. For instance:
jspp
{
    int i = 0;  // Scoped only to this block
    // i is incremented here
}
// i is inaccessible outside, preventing unintended reuse
Conditional statements include if, else if, and else for branching based on boolean expressions, and switch for multi-way selection using strict equality matching (equivalent to ===). The switch statement requires explicit break statements to avoid fallthrough, with the compiler issuing warnings for missing breaks, and supports a default case for unmatched values. Loops such as for, while, do...while, for...in, and foreach allow iteration, with declarations inside loops benefiting from block scoping and type enforcement—for example, a for loop can declare a typed counter like for (int i = 0; i < 10; ++i). These structures integrate with JS++'s type system (detailed separately) to catch type mismatches at compile time, such as assigning a non-integer to a loop variable.

Safety Features

JS++ incorporates several built-in safety features that extend beyond its type system to prevent common runtime errors prevalent in plain JavaScript, such as out-of-bounds accesses and null/undefined mishandling, through compile-time static analysis and targeted runtime checks. These mechanisms aim to prove the absence of specific error classes at compile time, reducing reliance on dynamic error handling and enabling safer code generation that compiles to efficient ECMAScript 3 JavaScript. Unlike JavaScript's dynamic checks, which can lead to unpredictable runtime failures, JS++'s analyses ensure deterministic behavior while maintaining full compatibility with existing JavaScript environments. These features were introduced in JS++ 0.9.0 (2019); the latest version, 0.10.0, was released on December 10, 2021. A core safety feature is the out-of-bounds analysis introduced in JS++ 0.9.0, which performs efficient compile-time detection of invalid array, string, and object accesses to prevent buffer overflows or undefined value returns that could crash applications. This analysis leverages existent types (denoted as T+), which distinguish in-bounds values of type T from out-of-bounds accesses that would otherwise yield undefined in JavaScript. For instance, in the code int[] arr = [7, 8, 9]; int+ x = arr[0];, the compiler confirms x is an in-bounds int, while int+ y = arr[1000]; flags the out-of-bounds access at compile time, allowing safe fallback handling like int b = y ?? 1;. The compiler generates minimal runtime bounds checks only when necessary, adding negligible overhead (e.g., 1-2 ms on benchmarks for projects up to 6,000 lines), and extends to dictionary (object) key accesses and conditional branching logic. This static proof of bounds safety eliminates entire classes of errors without the performance cost of pervasive dynamic checks in other languages like Java or C#. Null and undefined safety is enhanced through nullable types (T?) and combined existent-nullable types (T?+), which explicitly model empty or non-existent values, preventing ambiguous runtime errors common in JavaScript. For example, int?+ d = 1; can hold an integer, null (an empty but existent value), or undefined (non-existent), allowing the compiler to track and enforce safe handling. JS++ supports optional chaining via the safe navigation operator (?.) and nullish coalescing (??), enabling expressions like Console.log(arr[1000]?.toString() ?? "out of bounds"); to avoid exceptions on invalid accesses. These features integrate with the type system to eliminate obscure JavaScript edge cases, such as unreliable instanceof checks across execution frames, by resolving type identities statically during compilation. For enforcing program invariants, JS++ provides runtime assertions through the System.Assert module in its standard library, which includes methods to verify conditions at execution time and throw an AssertError if violated. These assertions complement compile-time checks, allowing developers to validate assumptions like data integrity or external library behaviors, such as Assert.isTrue(condition, "Invariant failed");. In web database code, frameworks like leverage JS++'s type-safe data access layers for and similar databases, ensuring typed query results handle nulls and prevent pointer-like exceptions through compile-time validation of result types. This typed approach indirectly mitigates risks like by promoting parameterized queries via safe, typed interfaces, though primary prevention relies on database library implementations.

Interoperability

Importing JavaScript Libraries

JS++ facilitates the integration of existing untyped libraries by allowing developers to declare them as external symbols, enabling seamless interoperability while providing optional type safety. The primary mechanism is the external statement, which imports JavaScript identifiers into the JS++ scope without requiring type definition files or build tools. This declaration assumes the JavaScript library is loaded in the runtime environment, such as via a <script> tag in browsers or require in , making JS++ compatible with the vast JavaScript ecosystem. The syntax for the external statement is straightforward: external identifier; or external identifier = initializer;, where multiple identifiers can be comma-separated. For instance, to import the jQuery library, one declares external jQuery, $;, which brings the global $ and jQuery objects into scope. This allows direct usage in JS++ code, such as string src = $("#logo").attr("src");, where the selector returns a typed string at compile time. Without explicit typing, these symbols adopt the unified external type, a special type in JS++ that encompasses all possible JavaScript values, ensuring sound static analysis across varying JavaScript implementations. Handling untyped JavaScript code involves wrapping functions and objects with the unified external type, which provides a safe typed for calls while abstracting platform-specific behaviors. Automatic occurs during to JavaScript, converting JS++ types (e.g., int or string) to compatible JavaScript equivalents, such as numbers or strings. If a returns an unexpected type, JS++ isolates errors at without propagating to typed code, maintaining isolation through the external wrapper; for example, invoking an untyped method on invalid input triggers a standard JavaScript error, but typed parameters prevent compile-time issues. Developers can enhance safety by adding type annotations, such as using typed variables for parameters like byte for RGB values (0-255).
jspp
// Example: Typed jQuery usage
external jQuery, $;

// Typed selector and attribute access
string url = $("#logo").attr("src");  // Compile-time type: string
if (url == "/images/logo.png") {
    alert("Logo found");
}
Best practices emphasize incremental typing of external wrappers to gradually enhance for dependencies. Start with basic external declarations for quick integration, then refine with specific types for critical APIs to catch errors early; for complex libraries, create JS++ wrapper modules that export typed interfaces, allowing progressive adoption without rewriting the entire codebase. This approach leverages JS++'s optional to bridge untyped while minimizing runtime surprises. As of 2025, JS++ development appears inactive since its last update in 2019.

External Interactions

JS++ provides typed interfaces for core browser objects such as document and window, enabling developers to interact with the Document Object Model (DOM) and other Web APIs while benefiting from compile-time type checking. These interfaces account for variations in browser implementations, including support for non-standard features like ActiveX objects in Internet Explorer, ensuring consistent behavior without requiring manual type guards. For instance, the type system safeguards against garbage collection bugs and unpredictable data formats in host objects, promoting portability across environments from legacy browsers like IE6 to modern ones. In cross-context scenarios, such as iframes, JS++ addresses challenges with operators like instanceof by enforcing safe type resolution across frames, which prevents type errors and issues in modular web applications. handling in these contexts is similarly protected, allowing reliable propagation without explicit checks for frame boundaries. This built-in extends to edge cases in browser quirks, such as inconsistent event bubbling or access, ensuring code runs portably without additional guards. For server-side development, JS++ maintains compatibility with through its compilation to 3 JavaScript, supporting typed modules for operations like file I/O and HTTP requests. Developers can import modules using the external statement, such as external require; external fs = require("fs"); for safe file operations with error handling, or integrate HTTP clients via external libraries with type safeguards against common pitfalls like unhandled asynchronous errors. These features enable robust server-side code with compile-time verification of interactions with APIs.

Development Tools

Compiler

The JS++ compiler, distributed as the command-line executable js++, serves as the primary tool for transpiling JS++ source files into optimized, executable . It processes JS++ code by the syntax, enforcing optional static type checking, and generating standard that maintains compatibility with existing JavaScript environments and libraries. This compilation ensures type guarantees at both compile-time and runtime, enabling developers to integrate JS++ seamlessly with untyped JavaScript without runtime errors from type mismatches. Basic usage of the compiler involves invoking it from or command prompt with the source as input. For example, js++ main.jspp compiles the and outputs main.js by default, while specifying an output uses the -o flag: js++ -o output.js input.jspp. Additional flags include --execute to compile and immediately run the resulting in a environment, and -O levels (e.g., -O2) to enable optimization passes for . Debug information can be retained via appropriate flags during development, though strict mode enforcement is handled implicitly through type annotations rather than a dedicated flag. The is freely downloadable from the official site at onux.com/jspp, with binaries provided for Windows (via setup.exe installer), macOS, and . Architecturally, the JS++ operates in multiple passes: an initial to build an from JS++ source, followed by a typing pass for static and checking, an analysis pass for optimizations and error detection, and a final pass to produce output. is integrated into the analysis , automatically removing unused functions, variables, and overloads to reduce bundle sizes and improve runtime efficiency— a feature unique to JS++ and not applicable to plain . This modular design supports handling large codebases effectively, with incremental compilation capabilities introduced in the 2016 beta release to recompile only modified modules, minimizing build times for extensive projects. During the and passes, the performs analyses to detect potential issues, such as out-of-bounds , contributing to JS++'s sound (detailed further in the Safety Features section).

IDE and Editor Support

JS++ offers integrations with several popular code editors through plugins that primarily provide for enhanced editing workflows. These include , Vim, , , Notepad++, , and Adobe Brackets, enabling developers to write and navigate JS++ code more effectively. In , the official JS++ extension supports and can be installed by downloading the plugin from the project's repository and placing it in the extensions folder. For Vim and , dedicated plugins deliver , with the Vim plugin bundled in JS++ releases starting from version 0.4.0; involves copying the plugin files to the respective editor's plugin directory. integration extends beyond highlighting to include , build system support for invoking the JS++ compiler, and error navigation via squiggles in the editor. Additional editors such as Notepad++, UltraEdit, gedit, /KWrite, and also feature JS++ syntax highlighting through simple plugin installations from , often with extras like TODO comment highlighting or symbol navigation in select tools. Web-based editors like and support JS++ via syntax definition files for highlighting in environments such as online code playgrounds. These plugins connect to the JS++ for on-the-fly builds when configured in editors with build integration, such as . As of 2025, JS++ editor support remains limited to these community-driven plugins, with no dedicated language server for advanced features like real-time type checking, autocomplete, refactoring, or hover documentation. The project, last actively updated in , has seen low adoption, resulting in no official full IDE comparable to those for , though basic compatibility provides minimal support in tools like WebStorm.

Build and Integration Tools

JS++ compiles to standard , enabling its integration into established build ecosystems without requiring wholesale changes to existing workflows. Developers typically incorporate the JS++ compiler into task runners like Gulp or through custom tasks or plugins that invoke the compiler on source files, transforming JS++ modules into before further processing, such as minification or concatenation. Similarly, bundlers like can be configured with loaders or pre-compilation steps to handle JS++ files, ensuring they are resolved and bundled alongside plain for production deployment. In and () pipelines, JS++ supports automated compilation via command-line invocation of its within scripts for platforms such as Jenkins or Actions. These workflows often include type checking as a preliminary step in testing suites, allowing early detection of type errors before runtime, which enhances reliability in automated builds. For deployment, the generates minified outputs that are fully compatible with content delivery networks (CDNs) and web servers, facilitating efficient distribution of applications. JS++ tools accommodate mixed-language projects in monorepos, where JS++ files coexist with untyped , enabling phased adoption without disrupting ongoing development. JS++ uniquely facilitates gradual migration in legacy projects by providing mechanisms to incrementally apply to existing files, preserving compatibility with unmodified code while progressively enhancing across large codebases.

References

  1. [1]
  2. [2]
  3. [3]
  4. [4]
    onux/jspp: JS++, a sound static/dynamic programming ... - GitHub
    JS++ (JSPP) Official website: https://www.onux.com/jspp Please visit the official website to download the JS++ compiler and stay up-to-date.
  5. [5]
    New compiler tackles JavaScript's weak typing - InfoWorld
    Jun 6, 2016 · JS++, now available as an early-access preview, compiles to JavaScript and is supported wherever JavaScript is supported, according to Poon.
  6. [6]
    The case for JS++ - SD Times
    Jul 27, 2016 · JS++ is a web programming language built for software engineering. ... Roger Poon is a founder, speaker, and developer and has been ...
  7. [7]
    [PDF] Making the case for a sound type system in JavaScript
    Aug 1, 2016 · JS++ is a web programming language built for software engineering. It is built with engineering principles: strong, sol- id foundations via a ...
  8. [8]
    TypeScript versus JS++: JavaScript typing done right!
    JS++ works by compiling to ECMAScript 3 JavaScript. As a result, JS++ works wherever JavaScript works. This ranges from Internet Explorer 6 to the latest Chrome ...<|control11|><|separator|>
  9. [9]
    JS++ - Getting Started - Onux
    Compile the file using the js++ command with the --execute flag to run the code after compilation: > js++ --execute Hello.jspp. If everything worked ...
  10. [10]
    The JS++ Type System - Onux
    This book assumes you know how to compile and execute JS++ code. In this chapter, you will discover how to start adding types to your variables and functions ...<|control11|><|separator|>
  11. [11]
    Company Overview - Onux
    Onux Announces JS++, the First Reliable Successor to JavaScript. Yahoo Finance on June 7, 2016. Onux JS++, an answer to JavaScript 'brittle' type safety?
  12. [12]
    JS++ programming language looks to solve out-of-bounds
    Jan 16, 2019 · The web programming language JS++ is looking to tackle a common problem impacting a majority of major programming languages: out-of-bounds errors.
  13. [13]
    Microsoft announces UWP Community Toolkit 1.2, JS++ 0.4.2.2 ...
    21, 2016. Latest News. Published: November 21st, 2016. - Madison Moore ... JS++ is a multi-file, modular programming language,” according Roger Poon, ...<|control11|><|separator|>
  14. [14]
    JS++ | Type System - GeeksforGeeks
    Apr 2, 2024 · In JS++, the key concept to understand is that JS++ splits data types into "internal" types and "external" types. Internal data types are the JS ...
  15. [15]
    The case for JS++
    ### Summary of JS++ OOP Capabilities
  16. [16]
    Classes & OOP: The 'final' Modifier - JS++ Tutorial - Onux
    When the 'final' modifier is applied to a class, it means the class can no longer be subclassed. In other words, further inheritance is prevented. For ...
  17. [17]
    Tips & Tricks: Overriding 'toString' – JS++ Blog - Onux
    Nov 22, 2018 · JS++ has a default 'toString' method implementation but ... class Point. {. int x;. int y;. Point( int x, int y) {. this .x = x;. this ...
  18. [18]
    JS++ | Classes, OOP, and User-defined Types - GeeksforGeeks
    Jul 11, 2025 · JS++ provides access to object-oriented programming (OOP) via classes, which also create user-defined types. JS++ is an extension of the ...
  19. [19]
    Modules | JS++ Tutorial - Onux
    Modules provide a way to organize code and divide an application into smaller parts. For example, a personal computer can be divided into keyboard, mouse, ...
  20. [20]
    Scoping | JS++ & JavaScript Documentation
    ### Summary of Scoping in JS++
  21. [21]
    Types | JS++ & JavaScript Documentation
    ### Summary of Data Types in JS++
  22. [22]
    int | JS++ & JavaScript Documentation
    ### Summary of `int` Type
  23. [23]
    unsigned int | JS++ & JavaScript Documentation - Onux
    Overflow and Wrapping. When values for integer types go out of range at runtime, they will "wrap around". Thus, if a variable is declared as having the ...
  24. [24]
    Primitive Types | JS++ & JavaScript Documentation
    ### Summary of Primitive Integer Types in JS++
  25. [25]
  26. [26]
    switch | JS++ & JavaScript Documentation
    ### Summary of Switch Statement (JS++ Documentation)
  27. [27]
  28. [28]
    JS++ 0.9.0: Efficient Compile Time Analysis of Out-of-Bounds Errors
    Jan 11, 2019 · I promised a breakthrough for our next release. We are proud to announce JS++ efficiently analyzes and prevents out-of-bounds errors.
  29. [29]
    Assert | JS++ & JavaScript Documentation - Onux
    JS++ · Standard Library · System; Assert. Externals · System · Array<T>. Assert. assert ... Assert. Summary. The System.Assert module provides assertion methods ...
  30. [30]
    onux/altitude: MVC/MVP framework for JS++ - GitHub
    Type-safe data access layers for MySQL and other popular databases; Easy domain modeling with JS++ type guarantees, classes, virtual methods, method overloading ...
  31. [31]
    external | JS++ & JavaScript Documentation - Onux
    enum; external; for · for...in · foreach · function · if...else · import · interface · label · module · return · switch · throw · try/catch/finally · var ...
  32. [32]
    JavaScript superset JS++ adds dead code - InfoWorld
    Oct 19, 2016 · With an upgrade this week to its type-safe JS++ programming language, Onux is backing modular design, dead code elimination, and multiple code ...Missing: Announces First Reliable
  33. [33]
    JS++ Blog - Onux
    We improved compile times in this release by pre-parsing and caching the JS++ Standard Library. There is more to Standard Library compilation than this ...
  34. [34]
    JS++ Editors & IDEs - Onux
    ... IDE. Beware that it has a high learning curve! Downloads. » Vim (Latest Version) » JS++ Vim plugin. GNU Emacs. http://www.gnu.org/software/emacs/. Platforms ...
  35. [35]
    JS++ 0.4.2 released with code editor integrations, modules and ...
    Oct 19, 2016 · Onux is still trying to fill gaps in JavaScript with the release of JS++ 0.4.2. JS++ is the company's safe superset of the programming ...
  36. [36]
    JS++ - Visual Studio Marketplace
    Dec 13, 2018 · This plugin provides JS++ integration for Visual Studio Code. Installation. Copy the "jspp" folder to the VS Code "extensions" folder. This is ...
  37. [37]
    Visual Studio Code Integration – JS++ Blog - Onux
    Sep 19, 2016 · Onux is committed to providing maximum editor and IDE integration for JS++, and today's double announcement reinforces our commitment. JS++ ...
  38. [38]
    vim Syntax Highlighting for JS++ - Onux
    Jun 29, 2016 · The vim plugin will also be included into the next release of JS++. At Onux, we remain committed to maximum editor & IDE integration for JS++.
  39. [39]