# Needs

## All in all
### For code convertion
hero programming language -> Python, Typescript, dart, kotlin, C#, Golang, C++ 

### For code compile
hero programming language -> golang -> binary file


## Features

* npm package structure

> For each package you use, we pre-compile it into one file. So for your project, each time, it will only have to compile your code + a single dependency file

* It has to  include the compiler that has command like `hero run *.hero` and `hero compile --platform "linux/amd64" *.hero` and `hero convert --to javascript/go *.hero`

* It has to has the package manager like `hero init (a template)` and `hero add new_package` and `hero remove new_package`

* For the importing, it allows relative(./*.hero) and absolute file import(/*.hero). For third-party package name import(*), it will do this: search `npm_modules` folder, if found the name, convert the name to absolute file path

* It support `async` and `none` features like `await` and `??`

* It use "`#`,`//`,`/* */`" as comment symbol

* For each sub-package, we fetch all it's submodule into `go_modules` or `hero_modules`, for `go_modules` or `hero_modules`, it has to fetch all its sub-dependences into `go_modules` folder, so that for the next compile, it will success even if there has no internet.

* Use typescript version of `lambda anonymous function`: `() => {}`

* (Optional) Remove `for (const x of list)`, remain `for (const x in list)`. If they want to use index, use `for (const index,value in enumerate(list))`

* Strict to lib_writer, soft to lib_user.

<!-- * Use typescript version of `a==b? c: d` -->

https://github.com/yingshaoxo/my-cpp20-example/tree/main/Example1_module_test/x.final_idea_for_cpp20


## Judgment

* Easy to understand, no abbreviation, only using Snakecase Instance Naming Style
* Strong Type Check
* Cross Platform Compile in one single platform without using virtual-container
* Auto-Completion with manual selection
* 'None' variable support (Better use vs-code extension to make sure you handled the two situations, I mean, a variable is none or not-none
* GRPC support (Make sure it's object instance has two functions: to_json() and from_json(), and the keys in the json object has to be string type
* Easy to adopt GRPC/YRPC. (No rule on variable naming, has constructor, has to_dict() and from_dict() functions in dataclass object/struct
* High Process Speed while taking little memory and disk space
* VScode running-time code completion and debug
* Could directly run a test function in VScode
* Cross Platform audio and video play API
* I could use it to develop linux script, web broswer, game, game ai or general machine learning app.