Tony Garnock-Jones uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-tonyg.1212.mcz
==================== Summary ====================
Name: Kernel-tonyg.1212
Author: tonyg
Time: 30 January 2019, 5:20:04.609071 pm
UUID: 03bd0e4c-76d2-4be6-a7e1-58414c7fab52
Ancestors: Kernel-mt.1211
Improve promise resolution error handling via #fulfillWith:.
=============== Diff against Kernel-mt.1211 ===============
Item was added:
+ ----- Method: Promise>>fulfillWith: (in category 'resolving') -----
+ fulfillWith: aBlock
+ self fulfillWith: aBlock passErrors: rejecters isEmpty!
Item was added:
+ ----- Method: Promise>>fulfillWith:passErrors: (in category 'resolving') -----
+ fulfillWith: aBlock passErrors: aBoolean
+ "Evaluate aBlock. If it signals an exception, reject this promise with the exception
+ as the argument; if it returns a value [or another Promise], resolve this promise
+ with the result.
+
+ If aBoolean is true, and an exception is signaled, it is passed out to the caller.
+ If aBoolean is false, signaled exceptions are considered handled after the promise
+ has been rejected."
+ [ self resolveWith: aBlock value ]
+ on: Exception
+ do: [ :ex |
+ (ex isKindOf: Halt)
+ ifTrue: [ex pass]
+ ifFalse: [
+ self rejectWith: ex.
+ aBoolean ifTrue: [ ex pass ] ]]!
Thank you for your notes Richard, it's really interesting to see not so
well-known projects.
I would love to have more people sharing their wisdom and knocking down
more myths.
Cheers,
Hernán
El dom., 27 ene. 2019 a las 1:17, Richard O'Keefe via Glass (<
glass(a)lists.gemtalksystems.com>) escribió:
> I have my own Smalltalk system implemented as a batch compiler via C.
> This was originally just going to be a baseline for a student wanting
> to work on JIT, but he went elsewhere and I found the system surprisingly
> useful. I also wanted something that hewed closely to the ANSI Smalltalk
> standard, but could diverge in other matters (like not having dynamic code
> modification).
>
> - All Smalltalk bytecode sets are stack-based VM. (?)
>
> My system has no bytecodes. Smalltalk=>C=>native code.
>
> - Bytecodes are always fixed-size. (?)
>
> False back in the Blue Book. Why does it matter anyway?
>
> - Most of the time spent by a VM is in the instruction interpreter.
> (actually it's in the GC right?)
>
> There is no interpreter in my system, and many modern systems use a JIT.
> That or they generate Javascript or JVM instructions or .NET or something,
> and then _that_ gets turned into native code.
>
> - You cannot serialize objects containing blocks. (IIRC one can use
> MessageSends)
>
> True in my system but that's because blocks contain pointers to native
> code and may
> contain pointers into the C stack. I have plans to work around this, but
> it has not been
> a priority. Something I don't ever plan to deal with is objects
> containing references to
> external objects (memory-mapped segments, file descriptors, sockets, ...)
> and it is not
> at all clear to me what the semantics should be.
>
> BinaryObjectStorage in VisualWorks has no trouble with blocks.
>
> I meant to try this in Pharo 7.0. The image I just installed via the
> launcher has
> no DataStream, ReferenceStream, or SmartRefStream, but the class comment
> for MCDataStream begins
> "This is the save-to-disk facility.
> A DataStream can store one or more objects in a persistent form.
>
> To handle objects with sharing and cycles, you must use a ReferenceStream
> instead of a DataStream. (Or SmartRefStream.) ReferenceStream is
> typically
> faster and produces smaller files because it doesn't repeatedly write the
> same Symbols."
>
> This was also the case back to Pharo 2.0. What *is* the persistence
> scheme in Pharo these days?
>
> - Image cannot be bootstrapped. (This is possible in ST/X and now in Pharo
> I think).
>
> There are no images in my system.
>
> - All Smalltalks includes UI classes. (GemStone doesn't have AFAIK).
>
> It depends on what you mean by "include". Gnu Smalltalk *has* UI classes
> but they
> are not loaded by default.
>
> - All implementations uses direct pointers, (GST?)
>
> True in my case, but that's because I'm lazy and using the Boehm collector.
>
> - All implementations uses green threads. (VAST? MT?)
>
> False in my case. A Process is a POSIX (red) thread and no green threads
> exist.
> This meant having to keep the interface fairly lean, but honestly wasn't
> that hard,
> since the Boehm collector handled the hard stuff.
>
>
> On Tue, 22 Jan 2019 at 13:27, Hernán Morales Durand <
> hernan.morales(a)gmail.com> wrote:
>
>>
>> Done.
>>
>> I have some possible myths, but I'd like to confirm or reject:
>>
>> - All Smalltalk bytecode sets are stack-based VM. (?)
>> - Bytecodes are always fixed-size. (?)
>> - Most of the time spent by a VM is in the instruction interpreter.
>> (actually it's in the GC right?)
>> - You cannot serialize objects containing blocks. (IIRC one can use
>> MessageSends)
>> - Image cannot be bootstrapped. (This is possible in ST/X and now in
>> Pharo I think).
>> - All Smalltalks includes UI classes. (GemStone doesn't have AFAIK).
>> - All implementations uses direct pointers, (GST?)
>> - All implementations uses green threads. (VAST? MT?)
>>
>> I'm sure people in this list will have a lot more myths heard from
>> Conferences, Forums, Videos, Talks, etc. Like the guy who said Smalltalk
>> was dead. So if you did something which could be ignored publicly, please
>> don't hesitate to reply or ping me to get added as collaborator.
>>
>> Cheers,
>>
>> Hernán
>>
>>
>>
>> El dom., 20 ene. 2019 a las 22:41, Eliot Miranda (<
>> eliot.miranda(a)gmail.com>) escribió:
>>
>>> Hi Hernán,
>>>
>>> On Sun, Jan 20, 2019 at 2:31 PM Hernán Morales Durand <
>>> hernan.morales(a)gmail.com> wrote:
>>>
>>>> Hi there,
>>>>
>>>> I just created a GitHub repo to collect myths around Smalltalk-based
>>>> technologies: Pharo, Squeak, VW, VAST, Smalltalk/X, GNU/ST, etc. in the
>>>> spirit of the Falsehoods lists [1-4].
>>>>
>>>> This is just a draft now but please feel free to add falsehoods based
>>>> on your own experiences. Examples are greatly appreciated.
>>>>
>>>
>>> You want pull requests? If not, would you give me write permission?
>>> I'd love to add to the "Smalltalk is obsolete" section...
>>>
>>>
>>>>
>>>> https://github.com/hernanmd/falsehoods_smalltalk
>>>>
>>>> Cheers,
>>>>
>>>> Hernán
>>>>
>>>> [1]
>>>> https://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-ab…
>>>> [2]
>>>> https://chiselapp.com/user/ttmrichter/repository/gng/doc/trunk/output/false…
>>>> [3]
>>>> https://github.com/googlei18n/libphonenumber/blob/master/FALSEHOODS.md
>>>> [4]
>>>> https://meta-package-manager.readthedocs.io/en/develop/falsehoods.html
>>>>
>>>>
>>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>> _______________________________________________
> Glass mailing list
> Glass(a)lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-tonyg.1212.mcz
==================== Summary ====================
Name: Kernel-tonyg.1212
Author: tonyg
Time: 29 January 2019, 5:20:15.285274 pm
UUID: b291eae8-dfde-4ee1-b5dd-a351cb270ec9
Ancestors: Kernel-mt.1211, Kernel-tonyg.1153
Merge "Improve promise resolution error handling via #fulfillWith:."
=============== Diff against Kernel-mt.1211 ===============
Item was added:
+ ----- Method: Promise>>fulfillWith: (in category 'resolving') -----
+ fulfillWith: aBlock
+ self fulfillWith: aBlock passErrors: rejecters isEmpty!
Item was added:
+ ----- Method: Promise>>fulfillWith:passErrors: (in category 'resolving') -----
+ fulfillWith: aBlock passErrors: aBoolean
+ "Evaluate aBlock. If it signals an exception, reject this promise with the exception
+ as the argument; if it returns a value [or another Promise], resolve this promise
+ with the result.
+
+ If aBoolean is true, and an exception is signaled, it is passed out to the caller.
+ If aBoolean is false, signaled exceptions are considered handled after the promise
+ has been rejected."
+ [ self resolveWith: aBlock value ]
+ on: Exception
+ do: [ :ex |
+ (ex isKindOf: Halt)
+ ifTrue: [ex pass]
+ ifFalse: [
+ self rejectWith: ex.
+ aBoolean ifTrue: [ ex pass ] ]]!
A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-tonyg.1153.mcz
==================== Summary ====================
Name: Kernel-tonyg.1153
Author: tonyg
Time: 29 January 2019, 5:14:21.285019 pm
UUID: 66ed8c76-624e-4050-bdc2-045d694e8aca
Ancestors: Kernel-tonyg.1152
Improve promise resolution error handling via #fulfillWith:.
=============== Diff against Kernel-tonyg.1152 ===============
Item was added:
+ ----- Method: Promise>>fulfillWith: (in category 'resolving') -----
+ fulfillWith: aBlock
+ self fulfillWith: aBlock passErrors: rejecters isEmpty!
Item was added:
+ ----- Method: Promise>>fulfillWith:passErrors: (in category 'resolving') -----
+ fulfillWith: aBlock passErrors: aBoolean
+ "Evaluate aBlock. If it signals an exception, reject this promise with the exception
+ as the argument; if it returns a value [or another Promise], resolve this promise
+ with the result.
+
+ If aBoolean is true, and an exception is signaled, it is passed out to the caller.
+ If aBoolean is false, signaled exceptions are considered handled after the promise
+ has been rejected."
+ [ self resolveWith: aBlock value ]
+ on: Exception
+ do: [ :ex |
+ (ex isKindOf: Halt)
+ ifTrue: [ex pass]
+ ifFalse: [
+ self rejectWith: ex.
+ aBoolean ifTrue: [ ex pass ] ]]!
Hi everybody,
We are very pleased to announce the first pre-release of UziScript (
https://github.com/GIRA/UziScript), a new programming environment for
educational robotics.
For a long time we've been wanting to show you what we are working on at
GIRA (http://tecnodacta.com.ar/gira/) and although we're still far from
finished we've decided it's time to share our little project with the
community.
As some of you may know we work mostly on developing tools to facilitate
the use of robots for education. We published Physical Etoys as part of
that work. Now we are working on a new programming environment that
attempts to fix some common problems we see in most of the tools available
for educational robotics.
We call this environment UziScript and it consists of a small VM that runs
on an Arduino, a web server that runs on your computer, and a set of web
tools that use the web server to connect and program the Arduino. We're
focusing on Arduino UNO for now (mainly because it's very popular and
accessible) but we plan to support other boards in the future.
UziScript has a few cool features:
- *Block-based and text-based programming*: It includes a block-based
programming language suitable for beginners but it also supports text-based
programming for more advanced users. To ease the transition UziScript
automatically generates the textual code from the blocks (and viceversa).
- *Concurrency*: Most educational robotics projects require the
implementation of a device that performs two or more simultaneous tasks.
UziScript allows the definition of concurrent tasks that will be executed
independently from each other.
- *Autonomy*: UziScript programs are stored and executed autonomously in
the Arduino without requiring a connection to the computer.
- *Interactive programming*: If the board is connected to the computer
UziScript allows to inspect and monitor the program state while it runs.
Furthermore, every change made to the program can be automatically compiled
and transmitted to the Arduino, which allows to see the effects of the
change almost immediately.
- *Debugging*: Without debugging tools the process of fixing programming
errors can be frustrating for an inexperienced user. UziScript's debugger
provides mechanisms for error handling and step-by-step code execution.
All the code is open source and can be found on Github:
https://github.com/GIRA/UziScript. We also made a few short videos to show
UziScript in action:
https://www.youtube.com/playlist?list=PL1aXD47455XPWv4rTXQBuHvamCoNUGeke
We're still not ready to use this with actual teachers and students (we
have a LOT of bugs and unfinished features) but we think we're ready to
show this to other programmers.
You can download and try our first pre-release (
https://github.com/GIRA/UziScript/releases/tag/v0.1.1). We would greatly
appreciate any comments or suggestions.
Have fun!
Richo
Chris Muller uploaded a new version of Collections to project The Inbox:
http://source.squeak.org/inbox/Collections-cmm.819.mcz
==================== Summary ====================
Name: Collections-cmm.819
Author: cmm
Time: 27 January 2019, 4:48:02.281136 pm
UUID: f625e4bd-47ec-4e68-b9a4-5add60915489
Ancestors: Collections-pre.818
Let Strings have the same #name as the object they name, sans Smalltalk syntax. Allows the #name of either to be used as a lookup key.
=============== Diff against Collections-pre.818 ===============
Item was added:
+ ----- Method: String>>name (in category 'accessing') -----
+ name
+ ^ self!
David T. Lewis uploaded a new version of Chronology-Core to project The Trunk:
http://source.squeak.org/trunk/Chronology-Core-dtl.40.mcz
==================== Summary ====================
Name: Chronology-Core-dtl.40
Author: dtl
Time: 27 January 2019, 6:03:22.297765 pm
UUID: 1a41ff47-716c-4625-9be2-38eaa73f2640
Ancestors: Chronology-Core-dtl.38
Implement Timespan>>beCanonical from Chronology-Core-cmm.15, accidentally omitted in recent UTC updates.
=============== Diff against Chronology-Core-dtl.38 ===============
Item was added:
+ ----- Method: Timespan>>beCanonical (in category 'squeak protocol') -----
+ beCanonical
+ "Chronology preserves Timespans that are extracted from DateAndTime's, making Dates, Months and Years in Squeak able to represent a true Timespan of those durations starting at a specific local DateAndTime. In case a canonical version is needed, make the receiver independent of any Timezone by removing it."
+ start makeUTC!