4 ms·
As a recovering schemer, I often heard how Javascript is very closely related to Scheme, but I've never really seen the resemblance. Granted, both languages po
by rprospero 11y ago
As a recovering schemer, I often heard how Javascript is very closely related to Scheme, but I've never really seen the resemblance. Granted, both languages possess:
* Dynamic Typing
* Garbage Collection
* First Class Functions
However, Python also meets those requirements. Now, looking at it from the Scheme perspective, Python is missing
* Tail Recursion
* Macros
* Continuations
* Concise Language Spec
However, Javascript is also missing those same factors (though I might be wrong about the tail recursion). Yet, I rarely hear of Python described as an infix version of Scheme, yet I often hear that remark about Javascript.
I really want to like Javascript and I already do like Scheme, so I have a vested interest in seeing the connection, but I'm still missing something. What's the strong resemblance between Scheme and Javascript?
- davexunit 11y agoLexical scope and first-class functions are about as far as the similarities go. JavaScript has nothing on Scheme.
- agumonkey 11y agoDoesn't have to have anything `on`, simply coming from is enough.
- anentropic 11y agomaybe more an 'inspiration' than related in concrete ways... Scheme gets mentioned re Javascript because: https://brendaneich.com/tag/history/ https://brendaneich.com/tag/history/
- numlocked 11y agoECMAScript 6+ has tail call recursion optimization, but prior versions do not.
- thinkpad20 11y agoFirst-class functions (esp. anonymous functions) see relatively little use in python, due to the hobbled syntax. For example, you can't use `print` in a lambda, raise exceptions, or define any variables. In JavaScript, using an anonymous function is no different than any other function, and not surprisingly they are ubiquitous. I'd wager that this is the primary reason that JavaScript is compared to LISP so much more often than Python is. There's also the fact that JavaScript functions are all variadic, which also is similar to LISP. Also Python encourages OOP much more than JavaScript. So yeah the "look and feel" of python is quite a bit different from JS and from scheme as well.
- zipfle 11y agoJavaScript's scoping is much friendlier for creating closures than Python's: def why_is_scoping_hard(): n = 4 def print_n(): print n def modify_n(new_value): n = new_value print n return [print_n, modify_n] >>> print_n, modify_n = why_is_scoping_hard() >>> print_n() 4 >>> modify_n(7) 7 >>> print_n() 4 When you assign to a variable it is automatically created in the local scope, shadowing a variable with the same name from an outer scope. If you don't assign to it, you get the value from the outer scope. If you try to print it, but then assign to it later, the print call raises an error.
- sophacles 11y agoNote - in python3 variable shadowing is much more controllable - in your example having modify_n look like: def modify_n(new_value): nonlocal n (and of course the print x -> print(x) changes), will result in 4,7,7