Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

smalltalk.js

smalltalk.js web app

A simple Smalltalk environment written in TypeScript.

STATUS: Proof of Concept

How to run

git clone https://github.com/markandre13/smalltalk.js.git
cd smalltalk.js
npm install
npm start

Resources used

Planned

  • window manager
    • move
    • resize
    • minimize
    • close
  • Transcript, Workspace
  • Console: A modernized variant of Transcript/Workspace, with a GNU readline feel and executes when the enter key is pressed.
  • System Browser

Background Information on Smalltalk

Smalltalk's History

The Smalltalk system with it's OOP, Live Coding, Code Browser, Refactoring tools, MVC, etc. has been a major influence on, not just the Apple Lisa/Macintosh, but also on Agile, Clean Code, Unit Testing (SUnit), TDD, Design Patterns, XP, MVVM, ...

Then it became overshadowed by C++, and finally became a niche in the 90's when IBM united with Sun Microsystems against Microsoft and switched from Smalltalk to Java and Sun moved the Strongtalk team from Smalltalk to Java.

VisualWorks is still around as a commerical grade Smalltalk (and also the origin of the MVVM pattern) while Squeak is aimed at the educational market and has replaced MVC with Morphic. E.g. the first versions of Scratch were written with Squeak.

see also https://www.reddit.com/r/smalltalk/comments/66xm0c/gnu_smalltalk_a_free_implementation_of_the/

Distribution

When you go to look for a Smalltalk implementation, you'll usually find these things:

  • Compiler

    Compiles Smalltalk into another language. Most compilers are part of a Smalltalk Image running inside a Smalltalk VM and generate bytecode suitable for that VM.

    E.g. Amber compiles Smalltalk into Javascript.

  • Interpreter

    Compiles and executes the code at once.

    E.g. GNU Smalltalk.

  • Virtual Machine (VM)

    The book Smalltak-80 The Language and It's Implementation describes a common Smalltalk VM.

    Smalltalk VMs usually mimic a complete operating system complete with a bitmapped display to be able to run old Smalltalk images.

    E.g. Squeak, which is based on the the book but was been adjusted to deliver better performance.

  • Just-In Time Compiler (JIT)

    A VM which also compiles parts into native machine code.

    E.g. Strongtalk, which adds optional type checking to Smalltalk and whose JIT layed the foundation for todays Java (HotSpot) and JavaScript (V8) VMs.

  • Image

    An image to run in a VM. Old ones are available starting from the 1972 till today.

Links

Docs

Code

About

A simple(!) Smalltalk interpreter written in TypeScript.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages