Snap! version 10.0.0 is out!

The same as being able to edit primitives.

but cant you always edit custom blocks?

I think that's the core of "blocks all the way down": putting Snap! code "inside" a primitive, visible with the Edit menu option.

Oops, sorry, I meant COMBINE. Wrong programing language. :blush:

image


um thats not true, I personally think there should be a menu option in those blocks. so bh is right.

The issue is about primitives, not about traditional custom blocks. We can now associate equivalent Snap! code with primitive blocks.

why would you want that

I already answered that at length here: Snap! version 10.0.0 is out! - #16 by bh

Ooooh, amazing!

bh/Jens, can you please explain the Lisp code feature a little more?

Blocks all the way down is really exciting. I thought it seemed like a potential feature bh mentioned in the past, and sure enough here's at least one reference to it, from 2016. Plus kinda a BYOB3/Elements throwback!

It's just a way of easily converting Snap blocks to a simple text representation using a Lisp style syntax (and back again)

Right, thanks. I've only figured out how to go the one direction, though; how do you turn it back into a script?

Can be used to make a simpler metacircular evaluator.

The parse code reporter converts back to blocks

untitled script pic (32)

Ah, ok, and it uses a couple of overloaded primitives.

No, the block is just a wrapper for a built in snap feature.

I know, that's exactly what I meant :slight_smile: JOIN and SPLIT was overloaded with the new feature.

What do you mean by "overloaded". In my mind, I thought you were saying the the library has custom definitions for the blocks, which overload the existing definitions, which is not the case.

Nope, I just meant new functionality was added to the primitives, though actually SPLIT was overloaded with a new case when the input is text and it's by blocks, but OF just gets more menu items I suppose.

What does EDC (in libraries) stand for?

Education Development Center, Inc. They're a nonprofit research and curriculum development group who worked with us on BJC (the Beauty and Joy of Computing curriculum) and are now using Snap! to build pedagogic restricted environments (which my colleagues insist on wrongly calling "microworlds") for early-grades math curriculum.

I'm not sure that Libraries is really the right place for those, but that's another discussion for later.

Does "microworld" mean something different? What would you have them call it?

This is one of those issues that nobody cares about except me. The original meaning of "microworld" is a playground for investigating some topic without a specific curriculum. The paradigmatic example is Andy DiSessa's physics microworld, in which he added a KICK primitive that applies an input force in an input direction. Since sprites don't really have a mass, it's taken as 1 (in some unit or other, doesn't matter), so the force value is also the acceleration applied to the sprite. As the animation continues, the sprite's velocity changes based on its acceleration. So, a problem you might pose is, if the sprite is moving up the screen and you kick it rightward, what will its direction (that is, the direction of its velocity vector) be? Alternatively, if the sprite is moving up the screen, in what direction must you kick it so that it starts moving rightward instead?

The point is, a microworld is a programming language that's been enriched with domain-specific primitives. Most of the libraries could be considered microworlds, but usually the intent is different (pedagogic richness vs. practical utility). What the Snap! gang are calling a "microworld" now is a programming language that's been reduced by removing (i.e., hiding) primitives. This is an etymological confusion; people are interpreting the "micro" as meaning a language that's tiny, compared with the regular language, whereas in reality it's the world that's tiny, compared to, you know, Earth, wth billions of people running around as well as all that nature stuff. The language is expanded.

</rant>

PS: I guess I didn't answer this:

I dunno, maybe a "puzzle"? Because that's what they are, a kinda-language narrowly focused on answering one question. "Rearrange these five blocks into a script that finds the smallest number in a list."

Microworld is just another term for Domain. Domain specific languages can both add and limit functionality. EDC developed microworlds that let elementary school kids explore math concepts, such as the - bidirectional(!) - number line. The prefix "micro" actually implies something "less than" a full world. I think there is a lot of value in abstracting away the complexity of "everything" to create learning environments that let kids safely explore certain ideas. Like they sing at Disney World: "It's a small world after all".