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

Updated Blade README to reflect the new goals of the language #173

Merged
merged 1 commit into from
May 27, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 33 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,11 @@
[![Gitter](https://badges.gitter.im/blade-lang/community.svg)](https://gitter.im/blade-lang/community)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/blade-lang/blade/blob/master/LICENSE)
[![Coverage Status](https://coveralls.io/repos/github/blade-lang/blade/badge.svg?branch=main)](https://coveralls.io/github/blade-lang/blade?branch=main)
[![Version](https://img.shields.io/badge/version-0.0.84-green)](https://github.com/blade-lang/blade)
[![Version](https://img.shields.io/badge/version-0.0.86-green)](https://github.com/blade-lang/blade)

Blade is a simple, clean, and embeddable dynamic programming language created to be simple enough for beginners, yet powerful and expressive for professionals. It has a very small syntax set with a very low learning curve. Blade improves upon the best features of JavaScript, Python, and Ruby to give developers a familiar and powerful system that feels native for developers coming from any of these languages and an easy way to leverage the strength of any.
Blade is a modern general-purpose programming language focused on enterprise Web, IoT, and secure application development. Blade offers a comprehensive set of tools and libraries out of the box leading to reduced reliance on third-party packages.

Blade also comes with [Nyssa](https://github.com/blade-lang/nyssa), the official package manager, which makes it easy to install and manage packages and modules.

## Features

- **First-class package management**: Package management is built into the language module system.
- **Iterable classes**: Blade has built-in support for iterable classes, making it easy to work with collections of data.
- **Backend development**: Blade can be used for backend development without any external dependencies.
- **Function promotion**: Blade allows for function promotion, making it easy to reuse any piece of code from an imported module.
- **Default exports and imports**: Blade supports default exports and imports, making it easy to organize code.
- **Anonymous functions**: Blade supports anonymous functions, making it easy to write functional code.
- **Access modifiers**: Unlike any of JavaScript, Python and Ruby, Blade supports access modifiers for variables, properties, functions, classes, modules, etc.
- **Decorator functions**: Blade supports decorator functions, making it easy to add functionality to existing code.
- **Function overrides**: Blade supports function overrides in classes, allowing a class to choose the result to return for a function if the function allows it.
- **Easy to extend with C modules**: Blade supports external extensions built in C, making it easy to extend the language with C modules.

## Use Cases

Blade can be used for a wide range of tasks, including:

- **Web development**: Blade can be used to create web applications and web services.
- **Data science**: Blade can be used to perform data analysis and machine learning tasks.
- **Scripting**: Blade can be used to write scripts to automate tasks.
- And more...

## Showcase

- **[Nyssa](https://github.com/blade-lang/nyssa)**: The Nyssa self-hostable repository server and package manager is written in Blade.
- **[jsonrpc](https://github.com/mcfriend99/jsonrpc)**: A JSON-RPC library for Blade programming language.
- **[wire](https://github.com/mcfriend99/wire)**: Dynamic HTML template engine.
- **[tar](https://github.com/mcfriend99/tar)**: Pure Blade library for creating and extracting TAR archives.
Blade comes equipped with an integrated package management system, simplifying the management of both internal and external dependencies. Its intuitive syntax and gentle learning curve ensure an accessible experience for developers of all skill levels. Leveraging the best features from JavaScript, Python, and Ruby, Blade provides a familiar and robust ecosystem that enables developers to harness the strengths of these languages effortlessly.

## Example

Expand All @@ -61,40 +32,54 @@ echo 'Listening on Port 3000...'
server.listen()
```

## How does it differ from Python and Ruby?
## What's interesting about Blade

- **Built-in package manager and repository server:** Package management is built into the language module system. Blade also comes with `Nyssa`. Nyssa is a package manager and self-hosted repository server highly suitable for private use.
- **Zero-dependency full-stack web development**: Blade comes with a built-in web server and a rich set of tools and libraries that support it, making it easy to build composable full-stack web applications out of the box:
- Built-in Model-View-Template (MVT) based HTTP web server.
- Built-in testing framework.
- Built-in Object Relation Mapping support.
- Built-in support for multiple databases.
- Built-in web template engine — `Wire`.
- Built-in routing library.
- Built-in mail library with SMTP, IMAP, and POP3 support.
- Built-in device integrations (such as support for COM/Ports, USB, etc.).
- Built-in cryptography library.
- Built-in support for media processing (Image, audio, video, etc.).
- And more.
- **Function promotion**: A feature of the Blade language that makes it easy to reuse any code from an imported module.
- **Access modifiers**: Unlike JavaScript and Python, Blade supports access modifiers for variables, properties, functions, classes, modules, etc.
- **Decorator functions**: Decorator functions are a set of class methods in Blade that makes extending the functionality of existing code super easy.
- **Easy to extend with C modules**: Blade supports external extensions built in C with a built-in extension compiler. This feature makes it easy to extend language features with C modules.

## Showcase of other uses

While Blade focuses on Web and IoT, it is also great for general software development. Below are a few showcases of libraries using Blade for other impressive stuff:

- First-class package management (Package management is built into the language module system).
- Iterable classes.
- Backend development without any external dependencies.
- [Function promotion](https://bladelang.com/tutorial/modules.html#function-promotion).
- Default exports and imports.
- Anonymous functions.
- Access modifiers for variables, properties, function, class, modules, etc.
- Decorator functions.
- Function overrides in classes — A class can chose the result to return for a function if the function allows it.
- Easy to extend with C modules with a familiar API to Wren.
- **[jsonrpc](https://github.com/mcfriend99/jsonrpc)**: A JSON-RPC library for Blade programming language.
- **[tar](https://github.com/mcfriend99/tar)**: Pure Blade library for creating and extracting TAR archives.

## Installation

To install Blade, please follow the instructions in the [Building](./BUILDING.md) guide.

## Usage

To start using Blade, please refer to the [Tutorial](https://bladelang.com/tutorial/index.html) guide in the documentation.
To start using Blade, please refer to the [Tutorial](https://bladelang.com/tutorial/index.html) section of the online documentation.

## API Documentaion
## API Documentation

API documentation for Blade which is under active development can be found at [bladelang.com](https://bladelang.com/standard/index.html).
API documentation for Blade is under active development and can be found at [bladelang.com](https://bladelang.com/standard/index.html).

## Community

- Join the conversation on [Gitter](https://gitter.im/blade-lang/community)
<!-- - Follow us on Twitter -->
- Submit a [feature request](https://github.com/blade-lang/blade/issues/new?labels=feature-request) or [bug report](https://github.com/blade-lang/blade/issues/new?labels=bug).
<!-- - Follow us on Twitter -->

## Contributing

Blade desire to make the community around it as friendly and welcoming as possible. Therefore, all forms of contributions from pull requests, suggestions, typo fixes in documentation, feature request, bug reports and any contribution at all is highly appreciated. Please refer to the [Contributing](./CONTRIBUTING.md) guide for more information.
The Blade community is as friendly and welcoming as possible. All kinds of contributions like pull requests, suggestions, typo fixes in documentation, feature request, bug reports, and others are highly appreciated. Please refer to the [Contributing](./CONTRIBUTING.md) guide for more information.

## License

Expand Down