{"id":20418876,"url":"https://github.com/sehugg/ssbt","last_synced_at":"2025-10-24T05:22:42.189Z","repository":{"id":16542363,"uuid":"19295896","full_name":"sehugg/SSBT","owner":"sehugg","description":"Silly Sailor's Bytecode Translator","archived":false,"fork":false,"pushed_at":"2014-04-30T00:26:39.000Z","size":1472,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-26T15:54:28.253Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sehugg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-04-30T00:25:31.000Z","updated_at":"2020-10-05T09:37:38.000Z","dependencies_parsed_at":"2022-09-13T07:30:45.408Z","dependency_job_id":null,"html_url":"https://github.com/sehugg/SSBT","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sehugg/SSBT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sehugg%2FSSBT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sehugg%2FSSBT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sehugg%2FSSBT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sehugg%2FSSBT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sehugg","download_url":"https://codeload.github.com/sehugg/SSBT/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sehugg%2FSSBT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280742556,"owners_count":26382931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-24T02:00:06.418Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T06:35:08.231Z","updated_at":"2025-10-24T05:22:42.175Z","avatar_url":"https://github.com/sehugg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nWHAT THIS IS\n============\n\nIn February 2000 I got this wild idea to create a Java --\u003e native code\ntranslator.  I was sick of Java's lousy speed and set out to make it right.\nThere were projects like GJC out then, but they weren't really up to snuff\nyet.  So I started this mad project.  I did it for about a month and then\nit fizzled.\n\nWhy did it fizzle?  Well, Hotspot was plenty fast, and there are \n\u003ca href=\"http://www.bearcave.com/software/java/comp_java.html\"\u003eother, mature, commercial offerings\u003c/a\u003e\nout there.\n\nSo what we are left with is an experimental Java to C++ converter, that\nalmost compiles javac, does not support AWT or anything funky like that,\nand doesn't do GC.  Use at your own peril, and don't expect to do anything\nserious with it.\n\nI started calling it \u003cb\u003efastj\u003c/b\u003e, but there is now a product with the same\nname, so let's call it \u003cb\u003eSilly Sailor's Bytecode Translator\u003c/b\u003e (SSBT).  \nWhy not?\n\n\nOPTIMIZATION\n\nMy goal was aggressive optimization.  I wanted to perform was is now known\nas \u003ci\u003eescape analysis\u003c/i\u003e (that'll be 50 cents, please) -- it amounts to\nfinding out which objects can be allocated on the stack and then freed when\nthe method exits.\n\n\nTARGET LANGUAGE\n\nI decided my target language would be C++.  I started with a Java --\u003e C\ntranslator but class inheritance was just too ugly.  One of the goals was\nto make C++ classes that are ugly on the inside, but perfectly approachable\nfrom the outside.  I used C++'s native exception handling routines, which\nseemed to work out OK.\n\n\nGC\n\nGarbage collector?  Well, there's boehm-gc, but that's, ummm... we won't\ntalk about that now :)  GC is tough.\n\n\nLIBRARIES\n\nI used the LGPL'ed \n\u003ca href=\"http://www.gnu.org/software/classpath/classpath.html\"\u003eclasspath\u003c/a\u003e\nlibrary as my open source Java-compatible runtime library.  I unfortunately\nhad to hack it a little bit because I'm lazy, so I've included the distro\nthat I used in this archive, under \"fastjlib\".\n\nI also used the \u003ca href=\"http://bcel.sourceforge.net/\"\u003eJavaClass\u003c/a\u003e library\nto introspect class bytecode.  I hacked that a bit too, so it is also\nincluded here.\n\nThe only thing I \u003ci\u003edidn't\u003c/i\u003e hack was\n\u003ca href=\"http://www.cacas.org/java/gnu/regexp/\"\u003egnu.regexp\u003c/a\u003e, which you'll\nneed to download to compile JavaClass.\n\n\nINSTALLATION\n\nThere is no automated installation process.  Sorry.  Look at INSTALL.txt for\nmy hastily scratched notes.  You have to use JDK 1.2.2, I think, because JDK\n1.3 is funky.  But then I am not sure about this, who can tell?\n\nNOTE: You might run out of memory \u003ci\u003every\u003c/i\u003e quickly because the\noptimization processs is horribly memory-intensive.  Use the -Q flag to Make\nor just start it again after it gives you an OutOfMemoryError.\n\nOh, you'll have to edit Makefile.in and very possibly a few other files\nto point to your home directory, and set the FASTJ_HOME variable.  Might\nalso have to sacrifice a few chickens here and there.\n\n\nRUNNING\n\nOnce you've magically compiled everything (yeah right) you can run the\nmain program which is \"Make\".  This takes .class files and turns them into\n.hpp (headers) and .cpp (source).  It does a simple dependency analysis\nand compares dates, so you don't have to compile the entire Java class\ntree every time.\n\nA short guide to Make's usage:\n\njava com.hamco.fastj.Make [classes] [@classlist] options\n\n   [classes] is a list of classes to convert -- full package names.\n\n   [@classlist] means to read a list of classes from a file.\n\n   -cp \n\tSet the classpath that the translator reads class files from.\n   -r\n\tAlso visits classes that the interface of a class\n\tdepends on.  If this doesn't make sense, view the source.\n   -R\n\tAlso visit all dependencies.\n   -h\n\tJust generate header files.\n   -N\n\tMake stubs for native code.\n   -F\n\tForce rebuild -- do not do a timestamp check.\n   -Q\n\tDon't do the spiffy recursive method analysis.\n   -d\n\tDebug mode.\n   -dd\n\tSuper debug.\n\n\nMake sure you have the src and include directories created when\nrunning this thing.\n\n\nLICENSE\n\nSince everything else here is LGPL, I guess this is too!\n\n\nFINAL WORD\n\nDon't expect this to work!  Go get yourself an evaluation of JET\nat www.excelsior-usa.com ... it actually works!\n\n\n===========\n\nSteven Hugg\n3/22/01\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsehugg%2Fssbt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsehugg%2Fssbt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsehugg%2Fssbt/lists"}