List Of Transpilers, TransCompilers, etc source-code to source-code converter & similar tools/apps, and Decompilers, Compilers, etc & related tools/apps.
( History : I created a question in StackOverflow(SO), where i have initially asked Which transpiler can convert "Go"
source-code into "C"
source-code, and then i had to change question & ask : Which transpiler (out of four specific transpiler) can convert from Go
to C/C++
and can still keep (almost all) high-level algorithms & structures used in source-code , fairly accurately same/intact in output source-code . And this project/data borned from that research, so later when StackOverflow's "PRO-GOOGLE"
& "PRO-GO"
do-evil mods ganged-up on my Quesiton+Answer & deleted it (vote to undelete here) , so i had to publish from this github project, & improve it here. )
"Transpiler.And.Similar.List" project pages, info, data, file, etc are Released with following combined LICENSE(s) + RESTRICTIONs + PERMISSIONs:
-
• Do Not Use Any Data/File From This Project To File LawSuit Against Someone Who Uses It/Derivative To Save/Protect Life,Liberty,Privacy,Correct-Information,Community,Earth,etc.
• No-Permission Given/Granted To Anyone To Send Me/Us About "Information" Take-Down Or Removal Notice/Request , Access To "Information" Is A Fundamental Human-Right , And So Information Cannot Be Taken-Down Or Removed . People's Security Inside A Country Has More Priority Than Their Country's Corrupt-Government Officials Or Evil Businessman's Continuation Of Criminal-Acts On Human/Community, Other-Countries, Earth . People Of One Country Or Corrupt-Gov Of One Country Or "National-Security" Of One Country Or Even Multiple Of Them Combined , Are NOT Above The "Human-Rights" / "Humanity" . No One Have More Right To Kill/Deprive/Violate People Of Another/Inside Country Or Other People . Corrupt Laws Or InHumane Laws Are Never Above "Human-Rights" or "Humanity" . Security+Safety+Stablity Of All People Begins-With & Increases-With Correct Information & Awareness . Information (On An Item, Listed Here) Can Be Informative & Used For Correct/Good Purpose Or For Taking Correct/Good (Informed) Decision After Analysis With It Or Information Can Be Used For Defense Or Can Be Used To Reduce Crime Or Catch Criminal Developer Or Initiators, etc . Actual Listed Items Are Not Located Here in This List Or Research Documents.
• Peaceful Open Source License, "PeaceOSL (2020)", v2020-11-07
• Copyright © 2020 atErik (Erik T. Ashfolk) (<atErik@ÖυťĹöōķ·ċōm; atErïķ@AśhFölķ·ćōm>
Do Not Copy Eml-Adrs, Type In English/basic-Latin Char, No-Permission is Given To Solicit).
All rights reserved.
Get copy of "PeaceOSL(2020)" license for this project, from here.--- BEGIN the Peaceful Open Source License ---
License/Contract name: PEACEFUL OPEN SOURCE LICENSE/CONTRACT.
License/Contract version(y-m-d) 2020-11-07.
License/Contract authored by: Linkesh Diwan. 2013.
License/Contract authored by: Emde T. Ashfolk. 2020.Transpiler.And.Similar.List : List of transpilers, transcompilers, decompilers, compilers, etc. Copyright (C) 2020 Erik T. Ashfolk (atErik at ashfolk dot com). License version(y-m-d) : 2020-11-07.
Redistribution and use of this "SDSP" or "SHIDSP", where SDSP/SHIDSP is pointing to the above software/hardware/information/data/service/ project,etc accompanying this PeaceOSL license/contract in source and binary (aka: object-code) forms, with or without modification, are permitted provided that the following ten conditions are met:
- Redistributions of this SDSP/SHIDSP (software, source code, data, hardware, information, service from this project) must retain the above copyright notice, this list of conditions, and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution from this SDSP/SHIDSP (software/hardware/info/data/ service/project).
- Modifications to this SDSP/SHIDSP (software, source code, data, hardware, information, service from this project) must retain the above copyright notice, this list of conditions, and the following disclaimer, and may not include further conditions or licensing which go against the spirit of this license.
- Here we are using "HR" = Human-Rights. "CH" = Copyright-Holder(s). This SDSP/SHIDSP (software/hardware/info/data/service/project) must not be used to violate or abuse (any) HR, either directly or indirectly in any form. This SDSP must not be used to abuse or violate HR in any form in any physical location, written articles, media, broadcast, video, etc or in any form inside cyberspace/Internet. This SDSP license/contract is declaring/ stating in early to you, user of this SDSP, that, this SDSP/SHIDSP must not be used to violate or abuse any human-rights even for "National Security" excuse/reason : As nothing (not even "National Security" or court order/decision or voted decision) can be above "Human-Rights". This SDSP license/contract is further declaring and stating in early to you : any result/decision from any voting, or any order or decision from any court, to override usage of this SDSP or SDSP content to violate/abuse HR, is hereby declared null-and-void and illegal.
- This SDSP/SHIDSP(software/hardware/info/data/service/project) must not be used to cause deliberate harm to any human individual, group,community or country either directly or indirectly, in any form.
- This SDSP(software/data/service/project) must not be used for stealing any data or physical items, and this SDSP must not be used to violate or abuse any privacy rights, of any human group, individual, community, country or earth, either indirectly or directly in any form. This SDSP must not be used for any type of stealing: spying, data collection, etc, without first obtaining written fully aware and voluntary specific consent from each individual, person, groups, subjects,etc, and also not without obtaining prior permission from this SDSP CH(copyright-holders). This must not be used for any type of digital (or physical) jail: monitoring, tracking,etc not-without obtaining permission from each subject's written fully-aware and voluntary consent, and also not-without obtaining prior permission from this SDSP CH. This SDSP license/contract invalidates any permission to spy/ steal/collect which is (or will-be) obtained from any judge(s), proxy, jury, court or vote, etc. To obtain exception/permission from CH of this SDSP, CH must be provided proof of real voluntary consented permission directly from each subject, and such must not violate/abuse HR (human-rights). This SDSP license/contract is declaring and stating to you in early, that, any type of voting result/decision or any court or judge's any order/decision to use this SDSP for mass scale (data) stealing/collection, etc are still violation and abuse of HR and any such decision/order is/are hereby declared null-and-void and illegal.
- This SDSP(software/data/service/project) must not be used by any Military or branches, Law Enforcement or branches, or by any service/items provider or supplier of/for Military or Law Enforcement. Unless specific written exception/permission is obtained from CH(copyright holders) of this SDSP.
- This SDSP (software/data/service/project) must not be used by any Human-Rights-violating-or-abusing = "HR-v-o-a" entity or person: HR-v-o-a Government(Gov), HR-v-o-a Gov branches, HR-v-o-a public offices, Gov/public funded HR-v-o-a individual, companies, groups, corporations, businesses, organizations, etc, any HR-v-o-a private individual, offices, companies, corporations, businesses, groups, organizations, etc Or any human/contractor person working in/for any of mentioned entities in this section.
- This SDSP(software/data/service/project) license/contract stating and declaring to you in early, that, you are permitting this SDSP CH(copyright holders) to question & obtain answer+proof from you and other sources, to find-out if this SDSP can be used for any violation or abuse of HR (human-rights). This SDSP license/ contract further stating: upon any report of HR violation or abuse by the user of this SDSP or by this SDSP itself, this license/ contract authorizes CH to obtain detail usage information from you/user of this SDSP, and also authorizes CH to obtain further related information/proof from any other sources by any means, including obtaining any data which even if you have defined as type of "secret" data, etc and then these are to be used for realizing the level of HR violations and abuses and losses therein. You completelt agree & permit, that any type of HR violation or abuse by you automatically removes all protection of all related data, including any type of "secret" data, and brings those under public & international sector and scrutiny, to find-out detail of HR violations/abuses, to deter HR abuses/ violations. This license/contract also permits CH to seek compensation, remedy, etc. This license/contract permits CH to terminate this license/contract, when CH decide(s) to do so at any time at CH's will. This license/contract also stating and declaring to you in early, especially after above mentioned incidents, CH of this SDSP are automatically authorized to investigate and proceed to international or public court, even if you fail or succeed in providing detail data. This SDSP license/contract is further declaring and stating to you in early: any decision or order from any type of "secret" or non-public nature of court(s), judge/jury, proxy or vote, is hereby declared invalid and null-and-void, from overriding any prceedings into international or public court. Any HR violation/ abuse must be resolved publicly, so that, even coersion/corruption can become public knowledge. This license/contract also stating you/user of this SDSP: upon HR violation/abuse report/incident, CH at their/his/her will can also publish publicly what HR abuse/ violation has occurred, and what steps are taken to solve.
- If you do not agree with these above conditions, then you cannot use this SDSP(software/data/service/project) in any form directly or indirectly, and you are free & welcome to choose any other software/choice. This SDSP has shown these conditions at every stage in top or in beginning or agreement is obtained with yes/no. Any usage of this SDSP grants this SDSP CH(copyright holders) your full consent of your full acceptance & agreements of above all (including this condition number ten) conditions and terms and contract, specified in this SDSP license & contract. This license/contract will make every attempts & efforts to avoid any and all type HR("Human-Rights") violations/abuses (related to where this SDSP is used, and who is using this SDSP, etc), So please do not use this SDSP, if you cannot uphold or honour all HR.
DISCLAIMER : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
AND CONTRIBUTORS "AS IS", AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER, AUTHORS, OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, MONEY, POSSESSIONS,
OR LIFE; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.--- END of the Peaceful Open Source License ---
Get copy of "PeaceOSL(2020)" license, from here.
• (All other trademarks, etc cited here are the property of their respective owners.)
• (All other copyright items cited here are the copyright of their respective author/creator.)
IF YOU DO NOT AGREE WITH ABOVE LICENSE / CONTRACT RESTRICTIONS & PERMISSIONS , THEN YOU CANNOT USE ANY DATA/SERVICE FROM THIS PROJECT OR WEB-PAGES , PRESS BACK BUTTON IN YOUR WEB-BROWSER , AND COMPLETELY STOP USING/VIEWING THIS WEBPAGE/DATA ( AND ANY OTHER WEBPAGES/DATA UNDER IT ).
IF YOU SCROLL DOWN, OR, IF YOU DO NOT PRESS BACK-BUTTON IN WEB-BROWSER , THEN ANY OF YOUR THOSE ACTIONS IS YOUR ACCEPTANCE AND AGREEMENT WITH ABOVE ALL CONDITIONS SPECIFIED IN THE LICENSE / CONTRACT.
CPL = Computer Programming Language | f.e. = for-example | i.e. = in-example | e.g. = example-goes-to | aka = a.k.a. = also-known-as.
TRANSPILE : source-code to source-code conversion , where high-level structures, algorithms, etc (of input code) are usually kept same or accurate during conversion process (in output code) . Sometime extra codes are needed in output code, to function same, as input code . Transpile is also known as: Transcompile, Transform, etc.
Which TRANSPILER Can Convert (aka: TRANSCOMPILE) Input Source-Code (for-example: "Go"
or Any/✱ other CPL) Into (A Different Language) Output Source-Code (for-example: "C"
or Any/✱ other CPL) ?
Which TRANSPILER Can Keep High-Level Algorithms / Structures Used In Input Source-Code (f.e: "Go"
or Any/✱ other CPL) Fairly Accurately Intact/Same After Conversion Into A Different Language Based Generated / Output / Destination / Target Source-Code (f.e: "C"
or Any/✱ other CPL), As Much As Possible ?
( abbreviations : lang
= language | C++
= Cpp
= C-plus-plus
| Go
= Golang
)
TRANSPILE : source-code to source-code conversion , where high-level structures, algorithms, etc (of input code) are usually kept same or accurate during conversion process (in output code) . Sometime extra codes are needed in output code, to function same as input code.
( IF YOU HAVE AGREED WITH ABOVE LICENSE PERMISSIONS & RESTRICTIONS , THEN, YOU MAY GOTO LIST OF ALL TRANSPILERS (LIST) DIRECTLY FROM HERE )
For example, when input code ("Go"
language code) contains:
// "Go" based source-code:
var n int
type Node struct {
left, right *Node
data interface{}
}
func twice(f func(int) int, v int) int {
return f(f(v))
}
func main() {
f := func(v int) int {
return v + 3
}
twice(f, 7) // returns 13
}
Then, this "Go"
-to-"C"
conversion/transpilation1 process need to convert & generate/output below "C"
language code:
// Converted "C"-lang based source-code
#include <stdio.h>
typedef int (*int_func_int) (int);
int n;
struct Node {
struct Node *left, *right;
void *data;
};
int add3(int x) {
return x + 3;
}
int twice(int_func_int f, int v) {
return f(f(v));
}
int main() {
printf("%d\n", twice(add3, 7));
return 0;
}
When "Go"
-to-"C++"
(C++14
) transpilation is done, then output should be:
// Converted "C++"(C++14)-lang based source-code
#include <iostream>
int n;
struct Node {
struct Node *left, *right;
void *data;
};
auto twice = [](auto f, int v)
{
return f(f(v));
};
auto f = [](int i)
{
return i + 3;
};
int main()
{
std::cout << twice(f, 7) << std::endl;
}
When "Go"
-to-"C++"
(C++11
) transpilation is done, then output should be:
// Converted "C++"(C++11)-lang based source-code
#include <iostream>
#include <functional>
int n;
struct Node {
struct Node *left, *right;
void *data;
};
auto twice = [](const std::function<int(int)>& f, int v)
{
return f(f(v));
};
auto f = [](int i)
{
return i + 3;
};
int main()
{
std::cout << twice(f, 7) << std::endl;
}
An actual EXAMPLE of "C"-to-"Go" CODE is shown here 2, 3, but we want opposite of "C"-to-"Go" : so we want "Go"-to-"C" (go-to-c / go2c),
and/or "Go"
-to-"C++"
/"Cpp"
(go-to-cpp / go2cpp).
•
Let us assume, you're more familiar with "C"
& "C++"
more, than "Go"
/✱.
•
In computer programming language, let us assume, C
/C++
/Assembly
are your native computer language (these you have learned in School/University, & then practiced).
•
So it should be okay to convert non-C
& non-C++
language "Go"
aka: "Golang"
/✱ , into "C"
or "C++"
, to understand better.
•
Learning a second computer language (for example: "Go"
/✱) (or lets say: French) & hoping to become expert within 7-days or so like your native computer language ("C"
or "C++"
) (or lets say: English) , is not only a plain wrong expectation , if any fool suggested such then that i consider a wrong advice , because this will NOT take you to a LEVEL where you can begin to contribute in real open-source projects . But one of the right advice can be this : Start to learn+practice the second computer language in parallel (in a different, easy & forked project), as it will take long time & effort to reach expert level in that second computer language.
•
So, we do not want to keep any input ("Go"
/✱) source-code remaining in output (C/C++
) source-code . ( But some Assembly
is fine in output if you're okay with Assembly
language ) . And also be aware of that 'Go' Has Problems 2, 3, 4 , Security Vulnerabilities of 'Golang' 2, 3, 4, 5, etc are just few reasons to move away from "Go"
, and use other language . You have full freedom & right to choose what you want to do.
•
Let us assume : Necessary Features or Functionality that i or you need to add, those are developed & optimized for C/C++
, and those are not-available for input language (here: "Go"
/✱ language), Or, input language devs (here: "Go"
-devs) do not want to add such functionality or features that i or you need.
•
Programs that i or you want to TRANSPILE/CONVERT from Go-to-C
or ✱-to-C
, or from Go-to-C++
or ✱-to-C++
, that type of programs should be developed with C/C++
, as that type of programs work better with C
, and even more better with C++
.
•
Recreating complex & large software/systems with years of development, from scratch, with another (second) computer language , is not-only hard , that is also not-suggested1 (not-adviced) , So transcompilation steps are helpful to give a head-start by converting easier or simpler source-code faster . Transcompilation process always requires human developer based manual code conversion, as none of the Transcompilers/Transpilers are perfect or supports ALL aspects of source/input language or different programming styles, codes, libraries, etc that are used in real practical projects/languages . Small project(s) or new project can be built from scratch, and even by using a second computer language.
•
If source code is from open-source project , then Human/manual and/or automated transpilation of output source-code should also be released as open-source , same as input source-code . In that way, another group of developers skilled at output language (C/C++
) can also participate in open-source development, to help all users & people.
( YOU MAY GOTO LIST OF ALL TRANSPILERS DIRECTLY FROM HERE )
Currently, i SPECIFICALLY have these solutions/choices to use:
•
Solution A or #1 : "go2cs", "CSharp.lua", "lua2c".
•
Solution B or #2 : "go2cs", "Blazor", "wasm2c".
•
Solution C or #3 : "gomoku", "Cfront" or "Comeau C/C++".
•
Solution D or #4 : "go2c".
•
...
WHICH Go
-To-C
SOLUTION (out of above solutions) IS BETTER ?
( better at keeping high-level algorithms/structures,etc fairly or accurately same in output source-code )
is there (similar) better transpiler solution, among the links that i have shown ?
Above (transpiler-set) solutions have what Pros/Cons ?
- steps: we are attempting to do these:
"Go"
-->"C#"
-->"Lua"
-->"C"
- (A-1) use this
"go2cs"
transpiler to convert
"Go"
/"Golang"
source-code into"C#"
(C-sharp) based code.- (place your GoProject here:
D:\Dev\GoProject\
)
(create & go inside this folder:D:\Dev\Go-to-CS-GoProject\
)
Convert a singleGo
file:go2cs -l D:\\Dev\\GoProject\\src\\Main.go
Convert entireGo
project:go2cs D:\\Dev\\GoProject
ConvertGo
Standard Library:go2cs -s -r D:\\Dev\\GoProject\\src\\
- (place your GoProject here:
- (A-2) convert that
"C#"
source-code into"Lua"
code with this "CSharp.lua" transpiler.- D:\> dotnet CSharp.Lua.Launcher.dll -h
(source folder should be:Usage: CSharp.lua [-s srcfolder] [-d dstfolder] Arguments -s : can be a directory where all cs files will be compiled, or a list of files, using ';' or ',' to separate -d : destination directory, will put the out lua files Options -h : show the help message and exit ...
D:\Dev\Go-to-CS-GoProject\
)
(create & specify destination folder:D:\Dev\CS-to-Lua-GoProject\
)
- D:\> dotnet CSharp.Lua.Launcher.dll -h
- (A-3) convert that
"Lua"
source-code into"C"
code with this "lua2c" transpiler.- (create & go into a folder 1st like this:
D:\Dev\Lua-to-C-GoProject\
or specify previous as destination folder in next command)
lua
toC
cmd:lua lua2c.lua D:\Dev\CS-to-Lua-GoProject\Main.lua
- (create & go into a folder 1st like this:
- (A-1) use this
"go2cs"
transpiler to convert
- in this solution-"A", a developer have to be familiar with
"C#"
&"Lua"
, and you can also clearly see that transpile/conversion occurred 3-TIMES :"Go"
-->"C#"
-->"Lua"
-->"C"
, which is not-very-good . Conversion done bygo2cs
is high-quality(HQ), but other tools in chain are not that much HQ, so overall conversion quality is not good.
As dev/user also need to know middle language(s), ( and i'm not very familiar withC#
orLua
).
In solution-"A", atleast final destination"C"
code will still have high-level structures fairly intact that were used in initial"Go"
source-code.
Solution-Set B or #2 :
- steps: in this solution we attempt to do these:
"Go"
-->"C#"
-->"WebAssembly"
-->"C"
. (also see alternative Solution-E)- (B-1) use this "go2cs"
transpiler to convert
"Go"
/"Golang"
source-code into"C#"
(C-sharp) based code.- see sub-section inside above Solution-A-1.
- (B-2) convert that
"C#"
source-code into"WebAssembly"
code with this "Blazor" transpiler. - (B-3) convert that
"WebAssembly"
source-code into"C"
code with this "wasm2c" transpiler.
- (B-1) use this "go2cs"
transpiler to convert
- in this solution-"B" also doing conversion 3-TIMES :
"Go"
-->"C#"
-->"WebAssembly"
-->"C"
, but these steps will completely breakdown all high-level structures & meaningful programming codes into large amount of micro (machine level) elements, etc,
Thus its depriving me or developer from chance to improve source-code further or improve quickly.
( btw, in my case, i'm familiar with"Assembly"
&"C"
& also"C++"
).
Solution-Set C or #3 :
- (C-1) use this "gomoku"
transpiler to convert
"Go"
/"Golang"
source-code into"C++"
based code.- (C-2) convert that
"C++"
source-code into"C"
code with (any one of these) transpilers like these: Cfront, Comeau C/C++, also see these SO(StackOverflow) pages for more info: 1, 2, 3, 4.
Compiler tools can also convertC++
-to-C
1:
clang -c CPPtoC.cpp -o CPPtoC.bc -emit-llvm
clang -march=c CPPtoC.bc -o CPPtoC.c
or
llvm-g++ -c CPPtoC.cpp -o CPPtoC.bc -emit-llvm
llc -march=c -enable-correct-eh-support CPPtoC.bc -o CPPtoC.c
- (C-2) convert that
- in this solution-"C" steps , transpile/conversion occurred 2-TIMES :
"Go"
-->"C++"
-->"C"
. In "Go"-to-"C++" conversion by "gomoku", only subset (smaller portion) of "Go" is supported, but it can keep high-level structures/algorithms, etc intact . Then, in "C++"-to-"C" conversion stage, output quality varies . When LLVM/llc, etc are used, then output "C" does not have input's high-level structures intact anymore . Comeau C/C++ appears able to keep high-level structures intact during "C++"-to-"C" conversion, but it is a proprietary (aka: not-openSource) & older tool.
- (D-1) use this "go2c"(mukadr)
transpiler to convert
"Go"
source-code into"C"
based code, though it can transpile"Go"
-to-"C"
by itself, but at this moment (when this was posted here), sadly this supports only a subset components of Go. These transpilers can also be used forGo-to-C
conversion : goc, go-transpiler(mewbak), etc, but these also only supports subset of"Go"
language, at this moment (when this was posted here). - in this solution-"D", transpiler can convert 'Go' into 'C' directly
in one-time w/o using any other intermediate transpilers :
Go
-->"C"
, but does not support conversion of all components ofGo
-language.
Solution-Set E or #5 :
- steps: this Solution-E is alternative of above Solution-B.
- (E-1) use these commands to convert
"Go"
into"Go"-"Assembly"
,"go2goasm"
, output of"Go"
-tool is a Google/Golang
flavored"Assembly"
, its not completely Standard/regularAssembly
, but close to it . Commands:
go tool compile -S Main.go
or
go build -gcflags -S Main.go
- (E-2) use Boomerang
decompiler2,
3 on
Go-"Assembly"
source-code file, and manually change/convert incompatible portions into generalAssembly
until Boomerang can do Asm-to-C conversion . Or use asm2c, etc transpiler, that can convertAssembly
(Asm
) intoC
(Asm
-to-C
) . Other solutions are mentioned here, 2, 3.
- (E-1) use these commands to convert
- Conversion happens 2-TIMES :
"Go"
->"Assembly"
->"C"
. Because of "go2asm" conversion, allmost all higher-level structures in"Go"
will go away from"Assembly"
(low-level language) . So, afterAssembly
toC
conversion ,C
source-code will not-include any high-level structures of "Go" source, new high-levelC
will be something different, though functioning same way.
Usually this solution is faster.
- steps:
- Conversion happens 2-TIMES :
"Go"
->"C#"
->"C"
. Many higher-level structures in"Go"
will remain in final output . The"go2cs"
does HQ conversion, but next step ("cs2c") not that much, need more improvements.
-
(G-1) "go-transpiler"(supercoww) . According to it's dev, though original goal was to make a transpiler but now its a parser that checks if code is valid as per Golang grammar.
This "esp32-transpiler" can convert 'Go' into 'C' for Arduino (an embedded system), but only small subset of 'Go' lang spec is supported.
- at this point:
So, solution-"A" (go2cs->CSharp.lua->lu2c) is better than solution-"B" (go2cs->Blazor->wasm2c).
solution-"E" (go2asm->asm2c) is obviously better than solution-"B" (go2cs->Blazor->wasm2c).
solution-"F" (go2cs->hurley) is better than solution-"A" (go2cs->CSharp.lua->lu2c).
solution-"C" (gomoku->cfront) is better than solution-"A" (go2cs->CSharp.lua->lu2c).
solution-"F" (go2cs->hurley) is better than solution-"C" (gomoku->cfront;).
solution-"C" (gomoku->cfront) is better than solution-"D" (go2c/goc/go-transpiler).
So, solution-"F" (go2cs->hurley) is best"Go"
-to-"C"
transpiler-set,
at this point, among previous choices (when this message was posted here 2020-Oct-22).
Note: none of these transpilers support conversion of all components of "input" language, but their developers are improving them , So, often check out supported component list. Such list is shown in their website. And, compare.
( YOU MAY GOTO LIST OF ALL TRANSPILERS DIRECTLY FROM HERE )
Many developers have pointed out, in some cases C++
(based compiled program) can often be much better & faster than C
ones, so i'm also displaying these few options in below to convert/transpile Go
source-code directly (or via multiple stages) into C++
source-code while keeping higher-level algorithms & structures fairly intact/accurate as much as possible , in this way output C++
source-code is also easier to improve as/when necessary:
- ALTERNATIVE SOLUTION CHOICES :
- ALT-SOLUTION A or #1: use gomoku for
Go
toC++
. - ALT-SOLUTION B or #2: use go2cpp for
Go
toC++20
/C++17
. - ALT-SOLUTION C or #3: use GoLite Transpiler for
GoLite
(subset ofGo
) toC++
. GoLite Transp supports only subset ofGo
. - ALT-SOLUTION D or #4: use go2cs for
Go
toC#
(C-Sharp), then use any of these: cs2cpp, Alter-Native, CoreRT, OneLang, Ranger, etc to convertC#
intoC++
. - ALT-SOLUTION E or #5: use go-transpiler(Theodus) for
Go
toC++
.
- ALT-SOLUTION A or #1: use gomoku for
- WHICH
Go
-To-C++
SOLUTION (out of above solutions) IS BETTER ?
( better at keeping high-level algorithms/structures,etc fairly or accurately same in output source-code ) - CONCLUSION ON
"Go"
-TO-"C++"
:
Alt-Solution-A (gomoku) is obviously slightly better than Alt-Solution-B (go2cpp),
and Alt-Solution-B (go2cpp) is much better than Alt-Solution-C (GoLite Transp),
and Alt-Solution-D (go2cs+cs2cpp) is also much better than Alt-Solution-C (GoLite Transp).
In Alt-Soln-D, thoughgo2cs
conversion quality is higher, but next stagecs2cpp
tools are not.
and Alt-Solution-D (go2cs+cs2cpp) is better than Alt-Solution-B (go2cpp).
So Alt-Solution-A (gomoku) is best at this point, among these available transpiler choices, (when this message was posted here).
abbreviations : aka
= also known as
Transpiler/Transcompiler1 internally contains primarily three major components:
- 1of3: Parser : it is used to create Abstract Syntax Tree(AST)1 from input/source code, by using Lexical1 analysis and Syntax1 analysis.
• Comparison of Parser-Generators and Lexer-Generators. - 2of3: Transformation : with one or more steps, input code's AST will be converted into output/target code's AST . Uses semantic1 analysis, Intermediate Representation (IR)1 generation . IR is aka: Intermediate Language (IL)1.
- 3of3: Generator : output AST is used to generate output/target language code.
- Transpiler can/may use MetaProgramming1, NLP(Natural Language Processing)1, Finite-state Automata1, 2, Lexical Analysis1, Syntax/AST Analysis1, Parser1, 2, etc1, etc, to convert source-code of one CLP(computer programming language) into source-code of another CLP.
- Notes/References:
•
Transpiler.
•
How to write a transpiler, 2.
•
Transpiling between any languages.
•
The "Transpiler Diagram Image" shown above, is a modified image, it's original image was obtained from RoseCompiler website . Rose compiler is released with BSD modified license, and it was developed at Lawrence Livermore National Laboratory(LLNL), Livermore, California, United States.
I have added reference-links immediately after each sentence or section, by using superscript numbers.
Go2C Conversion : My objective here is to share simple steps/directions on converting / TRANSPILING Go
/✱ language source-code into C
(or C++
) lnaguage source-code , with one of the mentioned (in above) possible set of TRANSPILER-set solutions , that can still keep high-level algorithms / structures, etc used in initial/input Go
/✱ source-code , fairly or accurately same/intact in final destination / output C
(or C++
) source-code.
Then we can compile such transpiled/transcompiled C/C++
source-code (into binary machine code) when necessary, to run it faster.
So after Go-to-C
/✱-to-C
or Go-to-C++
/✱-to-C++
source-code conversion , it will be possible to change source-code , to add required necessary feature or functionality , and improve C
(or C++
) source-code.
Some users have mis-conception (aka: brainwashed) about "Go"
computer programming language , and some users intentionally lies purposefully as they work under some projects from "Google" or projects supported by "Google", or working under a project that uses Google products, for-example : Google's "Go" language, Google Advertisements, Google's practice of violating Privacy-Rights (aka Spying-on ak Stealing-from People,Citizens,Users,Persons), etc, etc , these are hard-core Google-PUSHERS (aka: Google-supporters) , some of these criminal/"evil" acts are very dangerous Anti-Humanity (aka: Anti-Human-Rights) activities.
We need to push Google (and it's parent company: Alphabet) and it's corporate-controllers by exposing their criminal & "evil" activities , so that their harmful & "evil" acts are Questioned & punished , so that in end Google (and Alphabet) & it's corp-controllers chooses real good & correct & non-"evil" ways to do correct & good & non-"evil" things for People, Citizens, Users , not-only inside USA but for entire World.
In entire world, country after country are now filing Lawsuit against years of Google's "evil"/hamrful practices . So if Google/Alphabet wants to do business with/for people/companies, they need to cultivate good & non-"evil" practices.
References: 1, 2, 3, 4, 5, 6.
So, (to remove mis-conception & brainwashing), I have added data/info from accredited computer COMPETITION , BENCHMARKS , etc to prove which computer programming language is better & which is not.
And remember, ANYONE/USER/people have full Freedom+Right to informaton what he/she wants, and also have full Freedom+Right to convert one language into another.1, 2, 3, 4, 5
Do not ever forget, there are people & groups who are pushing more & more for violation of human-rights , profitting by violating human-rights , and also there are people who are pushing for establishing more human-rights & peace & justice.
Some COMMON-SENSE & HUMAN-RIGHTS:
- ( water is needed by human body to survive (and human also need to poop/pee) . human has right of access to water & sanitation 1, 2 . California, USA has California Water Code : “every human being has the right to safe, clean, affordable, and accessible water.”1 . Other USA states have no such specific right, yet. )
- ( information is needed inside the human brain for taking correct & good decision , to survive & to survive better . human has right to information 1, 2, 3, 4, 5. )
UNESCO (United Nations Educational, Scientific and Cultural Organization)'s 1945 Constitution mandates “promote the free flow of ideas by word and image”PDF.
1946 UNGA Resolution 59, and 1948 Article-19 of UDHR (Universal Declaration of Human Rights) : “Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.” 1 . USA signed+Agreed to uphold it.
In "American Convention On Human Rights" (A.K.A.: Pact Of San Jose, Costa Rica) (B-32)1 : “Article 13. Freedom of Thought and Expression: 1. Everyone has the right to freedom of thought and expression. This right includes freedom to seek, receive, and impart information and ideas of all kinds, regardless of frontiers, either orally, in writing, in print, in the form of art, or through any other medium of one's choice. 2. ... 3. The right of expression may not be restricted by indirect methods or means, such as the abuse of government or private controls over newsprint, radio broadcasting frequencies, or equipment used in the dissemination of information, or by any other means tending to impede the communication and circulation of ideas and opinions. ... Article 14. Right of Reply: 1. Anyone injured by inaccurate or offensive statements or ideas disseminated to the public in general by a legally regulated medium of communication has the right to reply or to make a correction using the same communications outlet, under such conditions as the law may establish. ...”
Gov = Government . Multi = Multiple.
By Deceptively Using "National-Security" Excuse , A Corrupt-Gov Cannot Kill People Or Deprive People Or Violate Human-Rights Of Other People Or People Who Are Inside Their Own Country . When A Corrupt-Gov Or A Gov-Run-By-People-From-Business-Corporations Or A Gov-Run-By-Bribery-From-Business-Corporation(s) Can Deceptively Use "National-Security" Excuse To Commit More "Human-Rights" Violation, Then There Is No "Human-Rights" Left, & Nor Will "Human-Rights" Exist Anywhere . One Human/Person, Or One Group Of Human/Persons Or Multi Groups, Or One Gov Or Even Groups Of Multiple Govs Are NOT Above The "Human-Rights" / "Humanity".
And By The Way, Exposing The Crime(s)+Violation(s) Of Corrupt-Gov(s) & Corrupt Corporations Is The Real "National-Security" Act , And This Must Be Done With “Freedom Of Press” , Which Is Also Part Of Human-Rights : Access To Information . It Exists/Written In USA's First Ammendment Of "Bill Of Rights"(BoR) . It Is Put Into BoR In Around ~ 1791, Because Entities Similar To Colonial-British Once Violated "Human-Rights" Massively Around The World And Inside America , And It Is In "Bill Of Rights" There To Protect Humans/"Human-Rights" Again From Similar Future Entities, For-Example: Evil-Zionism Evil-Corporatism, Evil-Capitalism, etc, Who Are Again Destroying+Violating "Human-Rights" Around The World And Inside America . (People of) Sweden Put "Freedom of Press" in 1766 in Their Constitution 1 . USA's 1791 BoR1, UN's 1948 UDHR1, EU's 1950 CoHR1 are based on various model documents of Human-Rights, including UK's 1689 BoR1 . Recent/Lately Many Gross+Mass Violations Are Done With Excuse Of "National-Security" , Be-Aware Of Other Name Of This Excuse: "More Violation of Human-Rights With "National-Security" Deception".
Also Be Aware Of These/More Deceptions : "Do-Evil" Side Uses More & More Deception(s), Their Military Attack Force Or Department That Drops Bombs Or Attacks On People/Community/Country, Are Called "Defense" Department, etc . These Do-Evilers Can+Will Rename It To "Department Of Love" or "Peace", And Still Destroy People/Community/Country.
When A Group Of Humans/People Vote or Start To Kill Other Humans/People And Deceptively Calls That "Humanty" Or Upholding-"Human-Rights" or "Democratic-Decision" , Then Such/Those Acts Are Still MASS SCALE Gross Violation Of "Human-Rights" And "Humanity" , and Also Evil Act/Decision . When 3 People Out Of 5 Will Vote To Kill You Or Not Give/Share Water With You , It Is Not "Democratic-Decision" , It Is Still "Violation Of Human-Rights" , It Is InHumane/Cruel & Evil Act/Decision. ) - ( Freedom of Expression on the Internet 1 )
- ( Press Freedom 1 )
abbreviations : CPL
= Computer Programming Language | lang
= language.
- https://en.wikipedia.org/wiki/ICFP_Programming_Contest
In this competition, 1st prize means: "it is the programming tool of choice for discriminating hackers" . 2nd prize means: "it is a fine programming tool for many applications" . 3rd prize means: "it is also not too shabby" . And "Lightning" prize means: "it is very suitable for rapid prototyping".
In 2019: 1st:Rust
| 2nd:C++
| 3rd: - | Lightning:C++
&Haskell
.
In 2018: 1st:Rust
| 2nd:C++
,Python
,Ruby
,JavaScript
,bash
,SQL
| 3rd: - | Lightning:OCaml
. - RESULT : So from above section you can see, As of 2018
Go
(Golang) HAS NOT ACHIEVED ANY PRIZE in any category . In 2002C
achieved 2nd prize . And in 2018C++
achieved 2nd prize again.
abbreviations : CPL
= Computer Programming Language | lang
= language.
- Please also see these Q+A on CS.StackExchange site:
What Determines the Speed of a Programming-language?
Why are some programming languages “faster” or “slower” than others?
`CS` = Computer-Science. - Benchmarks from
"The Computer Language Benchmarks Game"
(CLBG) are based on such criterias : Overall user runtime, Peak memory allocation,
Gzip'ped size of the solution's source code, Sum of total CPU time over all threads,
Individual CPU utilization.
BE-AWARE : many notable developers pointed out results are not perfect benchmarks, due to: various programming techniques, configuration issues, weak programming, etc that exist in various software & hardware tools & human expertise, etc.
In this CLBG page you can see performance chart on compiled program of different computer programming language (CPL) . I'm displaying names of selected few (not all) CPL in below from "Program Busy Time / Least Busy" category chart of July-1, 2020, in the ORDER of their placement shown there , So, better performing one (based on above mentioned criterias) is mentioned earlier in left-side , & less-better are mentioned later or after that :C++
(g++
),C
(gcc
),Rust
,Julia
,Intel Fortran
,Ada 2012
,C# .NET Core
,Free Pascal
,F# .Net Core
,Go
,Java
, etc. - RESULT : So you can see in above section, there is a huge performance
gap between
Go
&C
, orGo
&C++
. The"Go"
(Golang) is ~2 to ~5.25 TIMES SLOWER THAN"C"
."Go"/"Golang"
is ~2.25 to ~7 TIMES SLOWER THAN"C++"
.
abbreviations : CPL
= Computer Programming Language | lang
= Language.
Comparison of Programming Language's instructions, functions, components, etc:
•
Basic instructions.
•
Syntax.
•
Higher-order function.
•
Operators.
•
Object-Oriented Programming(OOP).
•
OOP Constructor.
•
Exception handling.
abbreviations : CPL
= Computer Programming Language.
How To Determine Which Transpiler/Tarnscompiler Is Better Than Another ?
CHECK+COMPARE SUPPORTED COMMANDS / INSTRUCTIONS, FUNCTIONS, etc LIST PROVIDED BY TRANSPILER DEVELOPER / WEBSITE :
Transpiler software's primary-dev or project's website displays LIST of supported commands/instructions, functions, etc language components . Their primary developer(s) & other developers are developing+improving those transpiler-projects when they can . Usually support for more options, instructions, etc are added into these Transpiler projects.
So, you have to often check out those LISTs & COMPARE, to find out which transpiler is better.
And also do this TEST : use same source file and convert with multiple transpilers (in sae category) , and check & compare output source-code file , to find out which transpiler able to do conversion completely or which one has skipped some portions or which one has done incorrect conversion.
So, Which one is BEST, that will always change or most-likely be different at different time.
(and "BEST" is connected with different "Category" , so based on different category there are different types of BEST, and at different time)
Most of the time, certain code/strings need to be modified/changed, & prepared in each initial source-code (here "Go"
) files (with PreProcessor type of software), before the primary transpiler can be used.
And, often you also have to change some specific style of code/string in each output (here "C"
or "C++"
) file , and you also have to fix or change something that was not automatically generated by transpiler in output source-code.
So use below code/string replacing script-codes, mentioned in below linked SO/SE pages:
- These SO(StackOverflow)/ SE(StackExchange) Q+A(s) are showing various solutions:
•
Use sed to replace a multi line string.
•
Do recursive find & replace string with awk or sed.
•
Find & replace string in all files recursively using grep & sed.
•
How can I replace a newline (\n) using sed?.
•
Re2c: fast flexible scanner for regular expression matching.
•
Recursively read folders & execute command on each.
•
Process all files in all directories.
•
Execute command on all files in a directory.
•
In Bash, Handle paths that have spaces and wildcards.
ANY USER/PEOPLE HAVE FULL FREEDOM+RIGHT TO INFORMATION ON ANY LANGUAGE AND ANY TOOL/TRANSPILER TO TRANSLATE/TRANSFORM ANY LANGUAGE1, 2, 3, 4, 5.
abbreviations : CPL
= Computer Programming Language | lang
= Language.
Some users have tendency to give false & wrong suggestions and wrong advice(s) and wrong Answer (about Transpiler , Transpilation, etc) . If quesiton is about "A", then such user(s) answer for "B" & says they answered the Quesion about "A" ... this is wrong + incorrect , even if the answer for "B" is a very good solution , because its not an answer for Quesiton-"A" . Answer for Quesiton-"A" must discuss about "A" & provide solution for "A" , then that user can/may talk about "B" inside an extra-info section in bottom-side of an answer.
So here in below, i have tried to gather & post correct advices , after reading & contacting more knowledgeable persons & their discussions:
- There are some USE CASES where using
C/C++
is better, if that is the case for your software need or your project's target/objectives, then TRANSPILEGo
/✱
intoC/C++
with transpiler, Or transpile manually by hand-typing inC
/C++
code, by replacingGo
/✱
(with equivalentC
/C++
code) . Which steps you will take, that freedom & choice is yours.- And there are also some USE CASES where using
Go
is better, if that is the case for your software need or project's target, then you should avoid conversion/transpilation ofGo
into something else, instead improve existingGo
codebase, if you can after learning it . And again, which steps you will take, that freedom & choice is yours. - So, transpile into
C
/C++
, when features & specialties & benefits ofC
/C++
usage are needed, And know firsthand/early, where (aka: in which USE CASES)C
/C++
excels and whereGo
excels, then decide to do+follow correct & balanced steps.- Use multiple search-engine websites to find-out : "When to use Go/Golang", "When to not use Go/Golang", "When to use
C/C++
", "When to not useC/C++
", or use onlyC
orC++
orGo
orGolang
, etc.
- Use multiple search-engine websites to find-out : "When to use Go/Golang", "When to not use Go/Golang", "When to use
- And there are also some USE CASES where using
- Anyone can transpile/translate/transform any source-code for personal use or for test purpose, etc, etc . Information related activities are fundamental human rights 1, 2, 3, 4, 5 . Everyone has fundamental Rights to transpile/translate/transform any lang/code into any native/other lang code, for-example: to defend ourselve from harmful instructions, conversations, lies, etc.
- For example, If you don't understand a Book written in French, then learning French would be "good" but it will for sure take you many many months or years to actually understand many facets & layers of French in order to accumulate related layers of required understanding/knowledge on French, but "better" is to have the content (that Book) TRANSLATED by expert language-translators into your own NATIVE LANGUAGE OR simply find the translated version of that Book (many Book publishers publish translated editions when its popular), then you will actually understand it (that Book's translation) much much better . Normally human cannot learn ALL about French within even 6months.
- If you want to add a very specific feature in a (specific) software, later we will call it "upstream" software, which that software's dev has denied to add, then ask again & this time propose to sponsor/pay to add that feature if you have (monetary) resource.
• But when that is not possible, you can try to add that feature by yourself in a "fork" of that software . Specify publicly in your fork, what exactly you're trying to do in your fork . You may even find more users contributing in your fork to develop/improve that feature, to ultimately include improvements in that upstream software.
• But, if you do not understand the language used in that (upstream) software very well, then one option is to learn it, & try to understand related sections , so "fork" that (upstream) software, & try to add new feature in that forked software . You can add copyright notice on your contributed code & on your code-files contribution, but usually you have to release it with same license type that is used by the "upstream" project, not with a different or incompatible license.1, 2, 3, 4
Disclaimer: IANAL.
• If above steps are not working well or not-suitable enough to achieve your goal/objectives , then, one of the option you have is: "Transpile" the entire (upstream) software into the "destination" computer language which is your native computer language which you have LEARNED & understand better . By the way, this is not an easy option.
• So begin with by creating a new project in GitHub1, BitBucket1, GNU-Savannah1, SourceForge1, GitLab1, etc etc various open-source code collaboration repository sites1 (aka: SCH=Source-Code-Hosting), choose such site where more devs with higher-skill on that "destination" computer language are hanging-out, and posses friendly collaborative spirit . Or, create project in multiple code-collaboration sites & SYNC each one after each code-update . Or, load Git1, 2, 3 VCS (version control software1) in your own server or personal computer, & put your transpiled code in it. (Repo=Repository)
• Transpile a specific version of upstream software inside your own computer, then immediately upload output source-code of transpilation, into your SCH or VCS, either publish it publicly if you want to share it , Or create "private"-type repo (without publishing it publicly) . If you're skilled enough to develop all side by yourself, then "private"-type repo is useful, Or, keep it "private" until you completely convert all remainingGo
intoC/C++
. After complete "Go-to-C" or "Go-to-C++" conversion, If you publish publicly then other devs/users can see & may join to improve it or contribute in it.
• In source-code conversion/transformation steps, if input source-code isGPL
licensed, then output also have to be licensed underGPL
(in most cases. CWPL) . And without all copyright-holder(s) & code-contributor's permission/approval, theGPL
license (generally) cannot be changed into another license . When input source-code is licensed underApache
,BSD
,MIT
, etc (or code was released in Public Domain) then output can have same Or different license . If you use or have used your own hand, eye, brain to transform/transpile (aka: source-to-source code conversion) manually some portions or significant portions of source-code , then you can claim copyright ONLY on the portions of code which you yourself have manually by yourself modified or transformed or written (without using any machine/software based transpilation) , so in such case you can add your name under the input/"upstream" software's copyright-holder(s) name, in the destination language (here"C/C++"
) source-code . If you have used machine or mechanized process or software to do complete code transpilation, then you cannot claim any copyright on any portion which were transpiled in such way (because, a machine has done it, not you), and in such case, input/"upstream" software's copyright-holder(s) name(s) must be added/declared back into the destination/output source-code, (and again, you cannot add your name under those "upstream"/input software's copyright-holders).1 So far, there is no Transpiler software, that can do complete 100% conversion of large or real-life useful practical projects , human conversion/transpilation is always needed . Usually If you have seen (input) source-code or source-algorithms, and then if you have written / transformed / transpiled those algorithms with your own hand, eye, brain, etc manually by yourself into a DIFFERENT destination/output language based code, hereC/C++
, only then, it is a totally new work done/created by you . When you need to transpile propietory functions done by a machine-code binary program(s) then you first have to find another developer-user who will first convert machine-code or proprietory source-code or dissassembedAssembly
source-code, etc into "Algorithms", flow-chart, etc, etc first , then you can only see that "Algorithms",etc, (you cannot & must-not see see any source-codes), and then you can write new source-codes (in same or different computer programming language) with your own (human) hand , then such will be treated as "new work", otherwise it will be treated as a "derivative work") . So, in such "new work" case, you can add your name as copyright-holder, without adding any input / "upstream" software's previous copyright-holder(s) name(s) , & you can also use whichever license you prefer, in the output source-code.
Disclaimer: IANAL. CWPL.
• Usually, in a transpiled output/destination code , many many code-portions have to be re-worked/re-written by human, to functionally perform same-way as "upstream" (aka: input source-code) software , especially those portions, which you initially could-not transpile during manual transpilation/transformation process, and, there will also be many many non-transpiled source-code portions, when you have used mechanized (or automated) transpilation process or transpiler software , as these tools are not yet capable to transpile (all type of codes) completely, and instead transpiles only a subset(smaller portion) of (simple or limited-advanced) input source-code language into destination/output language . So you or a HUMAN have to write, fix, adjust, & adapt ("destination" language) source-code, and compile / run / test / improve it.
• Once you have achieved the state, where, your (transpiled and then improved output/destination code based) software can run same-way as upstream software , then, you can start adding your feature or functionality that you need or want to add . If you have publshed source-code publicly then, you may also find that other devs have began to join & contribute in this new project.
• In any OPEN-SOURCE project, one of the most helpful thing to bring in more code contributors is : Addition of DETAIL COMMENTS & NOTES on each code line & section, and describe what a code-line/code-section is actually doing . So create a ToDo for yourself & for any code-contributors, that, beside improving code directly, this new project also need contribution of more detail COMMENTS & NOTES ON CODE . So that some devs can spend time on understanding + identifying each line & section & algorithm, and start adding detail general human-friendly notes & comments . Do not make comment & note helpful only for advanced devs , as that creates islands & separation & division . That is opposite of open-source spirit . Everyone, even general user, should be able to understand a code line/section, after reading comments & notes.
• If upstream software's dev also transpiles new feature or functionality that you & your team has added , or you have transpiled again from "C-to-Go" , and add into forked project of "upstream" , then upstream dev can also add new feat/functionality into the upstream software.
• When everyone is open-sourcing their work, means SHARING IMPROVED KNOWLEDGE WITH OTHERS , then everyone is benefitted more . Each of us, We all have learned something from another person who has shared something old or shared something that he has improved , SO IN THAT SAME WAY , we all need to share old & share improved works with others.
• Abbreviations : IANAL = I Am Not A (Professional) Lawyer | CWPL = Consult With Professional Lawyer.
Some brainwashed or stupid people/users have question, Why this License has so many "restrictions" ? ... , ...
Does "Freedom/Right Of Speech" allows you to say/speak LIES or harmful things against someone ? NO.
Does "Freedom/Right Of Religion" allows you to disrespect+destroy another religion ? NO.
Does "Freedom/Right of People To Keep and Bear Arms" allows you to kill/shoot someone/anyone ? NO.
...
You cannot do "whatever" or "unethical" or "immoral" things that you want to, with your Freedom/Right, etc.1, 2
CIVILIZED SOCIETY/PEOPLE/COMMUNITY always have restrictions on how much or what you can do with such freedom/Right.
Civilized Society makes sure a Freedom/Right DOES-NOT & cannot allow someone to harm/kill someone-else or steal from someone or destroy something valueable.
...
right ?
...
So why software or freedom of software will have Freedom to be used for KILLING Human, Steal from Human, Destroying Society/Community, Or Destroying Earth Or it's Elements !? !?
...
All+Everything must have peaceful & balanced "restrictions" in all abilities & where used , for greater benefit & goodness.
...
Those who want to use or help to use something for destruction, stealing, killing, etc , Those type of users will always want "FULL" freedom, etc, and give BIG speech about "FULL FREEDOM", "FREE", etc.
Face+Challenge those Anti-Humanity (or Pro-Destruction or Pro-Stealing) type of persons/users . Some of them may look like human being, but all else is completely "evil".
Transpiler.And.Similar.List : Copyright (C) 2020 atErik (Erik T. Ashfolk).
( Licensed under PeaceOSL(2020) )