thp-lang.org/md/learn/index.md

79 lines
1.8 KiB
Markdown
Raw Normal View History

2023-10-02 01:41:38 +00:00
![Accurate visual description of THP](/img/desc_thp.jpg)
# Welcome
Welcome to the documentation of the THP programming languague.
2023-07-01 01:00:17 +00:00
THP is a new programming language that compiles to PHP.
2023-09-15 03:15:35 +00:00
<br>
This page discusses some of the design decitions of the language,
2023-10-02 01:41:38 +00:00
if you want to install THP go to the [installation guide](/installation-guide)
2023-09-15 03:15:35 +00:00
If you want to learn the language, go to the learn section.
## Goals
2023-07-01 01:00:17 +00:00
- Bring static typing to PHP: Not just type hints, not use `mixed` for everything
that isn't a primitive type.
- Avoid automatic type conversion.
- Remove the inconsistencies in the language.
- Organize the stdlib.
- Differentiate between Arrays, Tuples, Maps and Sets.
- Create a **consistent** language.
- Create typings for popular libraries (like TS's `.d.ts`).
- Have a simple instalation and configuration (requiring just Composer).
- Ship a fast, native binary (not written in PHP).
- Sub 10ms watch mode.
- Support in-place compilation.
2023-07-01 01:55:29 +00:00
- Emit readable PHP code.
2023-07-01 01:00:17 +00:00
- Implement a LSP server.
## Not goals
These are **not** aspects that THP looks to solve or implement.
2023-07-01 01:55:29 +00:00
- Be what TypeScript is for JavaScript (PHP with types).
2023-07-01 01:00:17 +00:00
- Use PHP syntax/conventions.
2023-07-01 01:55:29 +00:00
- Be familiar for PHP developers.
2023-07-01 01:00:17 +00:00
## Philosophy
2023-07-01 01:55:29 +00:00
- Consistency over familiarity
- Change over conventions
- Explicit over implicit
2023-07-01 01:00:17 +00:00
2023-07-01 01:55:29 +00:00
That is, while there is value in the items on
the right, we value the items on the left more.
2023-07-01 01:00:17 +00:00
## Compared to PHP
### Differences
### Runtime similarities
## Improvements
2023-10-02 02:26:57 +00:00
```thp
use PDO
use Globals::Env
val (Some(dbUri) Some(dbUser) Some(dbPassword)) = (
Env::get("DB_URI")
Env::get("DB_USERNAME")
Env::get("DB_PASSWORD")
)
else {
die("All 3 db environment variables must be set.")
}
2023-10-02 02:26:57 +00:00
match PDO(dbUri dbUser dbPassword)
| Ok(connection) { /* db operations */ }
| Err(pdoException) { /* handle exception */ }
```