{"id":16086952,"url":"https://github.com/guillep/pharocandle","last_synced_at":"2025-03-18T06:30:44.093Z","repository":{"id":4211351,"uuid":"5331982","full_name":"guillep/PharoCandle","owner":"guillep","description":null,"archived":false,"fork":false,"pushed_at":"2019-03-07T09:15:45.000Z","size":575,"stargazers_count":18,"open_issues_count":1,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-02-28T07:49:31.455Z","etag":null,"topics":["pharo"],"latest_commit_sha":null,"homepage":null,"language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guillep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-08-07T18:48:52.000Z","updated_at":"2022-11-05T02:50:10.000Z","dependencies_parsed_at":"2022-09-14T20:11:02.934Z","dependency_job_id":null,"html_url":"https://github.com/guillep/PharoCandle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillep%2FPharoCandle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillep%2FPharoCandle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillep%2FPharoCandle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillep%2FPharoCandle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guillep","download_url":"https://codeload.github.com/guillep/PharoCandle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243906645,"owners_count":20367068,"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","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":["pharo"],"created_at":"2024-10-09T13:26:23.272Z","updated_at":"2025-03-18T06:30:43.617Z","avatar_url":"https://github.com/guillep.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"PharoCandle\n===========\n\n\tWARNING: This project contains the current development branch of PharoCandle.\n\tFor a stable version, check other branches.\n\nPharoCandle is a minimal [Pharo](http://www.pharo.org) distribution, based on [MicroSqueak](http://web.media.mit.edu/~jmaloney/microsqueak/readme.txt), work of John Maloney. This distribution is currently for research purposes, but you can take it and use it for your own purposes.\n\nThe main purpose of this project is the Bootstrap of a PharoCandle image using the sourcecode under the _source_ folder. In order to bootstrap, we need to install the bootstrap library into a Pharo environment. Look at _installation_ and _usage_ for more details.\n\nInstallation\n------------\n\nIn order to download the complete environment to bootsrap PharoCandle, there is only need for execute the following bash script on the master folder.\n```bash\nbuild/build.sh\n```\n\nOnce downloaded and built, a _results_ folder will be created. The results folder will contain a complete Pharo environment, with the following files:\n- pharo_vm: a folder containing the Pharo Virtual Machine\n- pharo and pharo_ui scripts to run the VM\n- PharoCandleBootstrap.image: Pharo 2.0 image file with the pharo candle project installed\n- PharoCandleBootstrap.changes: the changes log of the correspondent image with the same name\n- package-cache: a folder for caching Pharo's monticello packages  \n\nUsage\n-----\n\nTo create a PharoCandle image from source code, we bootstrap it following the process described in [here](http://playingwithobjects.wordpress.com/2013/05/06/bootstrap-revival-the-basics/). To run the bootstrap you need to open the PharoCandleBootstrap.image with the VM supporting ui. That can be done in the command line with the following script:\n\n```bash\ncd results\npharo-ui PharoCandleBootstrap.image\n```\n\nThe Pharo image will contain the Pharo 2.0 welcome workspace, and a workspace with the code to run the PharoCandleBootstrap.\n\nLoad the sourcecode into the image:\n```smalltalk\nseed := PharoCandleSeed new\n    fromDirectoryNamed: '../source';\n    buildSeed.\n```\n\nCreate an object space that will use an AST evaluator to run code during the bootstrap. An objectspace is an object enclosing the bootstrapped image.\n```smalltalk\nobjectSpace := OzObjectSpace onOzVM.\nobjectSpace withExternalSymbolTable. \"we need this to bootstrap\"\nobjectSpace worldConfiguration: OzPharoCandle world.\nobjectSpace interpreter: (AtASTEvaluator new codeProvider: seed; yourself).\n```\n\nCreate a PharoCandle builder, and tell it to bootstrap. Voilá, the objectSpace will be full\n```smalltalk\nbuilder := PharoCandleBuilder new.\nbuilder objectSpace: objectSpace.\nbuilder kernelSpec: seed.\nbuilder\tbuildKernel.\n```\n\n\nBrowse the bootstrapped objectSpace by evaluating\n```smalltalk\nobjectSpace browse.\n```\n\nYou can serialize the objectSpace into an image file (Cog format) by evaluating\n```smalltalk\nobjectSpace serializeInFileNamed: 'PharoCandle.image'.\n```\n\nPharoCandle's Overview\n----------------------\n\nPharoCandle is a minimal Pharo distribution containing only 49 classes. Those 49 classes define a whole Pharo kernel including classes such as PCString, PCObject, PCClass or PCSmallInteger. Additionally, it contains a minimal Collection library. PharoCandle classes are prefixed with 'PC' only for documentation purposes, but the prefix is not necessary for the bootstrap.\n\nWhen run, a PharoCandle image runs the method **PCSystem\u003e\u003estart**. This method satisfies the role of a main method of other languages. The current distribution's _start_ method is as:\n\n```smalltalk\nPCSystem \u003e\u003e start\n\tself log: 'Welcome to Pharo Candle edition!'.\n\tself log: self tinyBenchmarks.\n\tself log: PCForm new primScreenSize printString.\n\tself beep.\n\tPCObject superclass ifNil: [ self quit ]\n```\n\nCurrently, to run a PharoCandle distribution, a special VM is needed that allows the context switch between different images inside the same VM process. The ability for serializing an image into a file will be re-added soon.\n\nTODOs\n----------------------\n- Autogenerate this script :)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillep%2Fpharocandle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguillep%2Fpharocandle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillep%2Fpharocandle/lists"}