so I'm saying
so i do start to think Smalltalk might suffer from arandom state��problemwhich as you say is greatly made a lot lot lot easier bycoding in the debugger and mass test driven development onLIVE OBJECTSwhich hide the state.but the state is still in there and a method ffffff that takes indata1��at time t0and returns��data2and then at time t1 doesdata3 := data1 ffffffwhere (��data1 isNotEquivalentTo: data3 )causes the ability to reason about ffffff to get a lot harder so thatautomated and manual��proof methods refuse to halt.
On Tuesday, November 11, 2014, Kjell Godo <squeaklist@gmail.com> wrote:something happenedgmail just blew a main springso continuing from below abovelike we stick the dangerous bits into a seperate Package ( info )so we know where they arethe pure functions defined outside of the monadsare not really pure ( my take )they are definitely manipulating statebut the state is hidden inside the pipesinside the pure functionsand no global variables or other places where state hangs outcan be accessed from in therethe bind >>= and return functions are confusingbut >>= takes in a Monad m��with a data value a in itm aand also��a function [ :a | �� ��m ( a message ) �� ��] <---[ mixing metaphors languages��]and returns a Monadm a'to the next >>= in line.So the a is taken out of the Monad m��and manipulated by a��pure function I'm guessingnamely��the function #message which is pure or can be pureand then the data a is put back into the Monad mand m is passed to the next >>= bind in linereturn is like takes in a data a and returns m aso the function [ :a | �� �� m ( a message ) �� ]is actually [ :a | �� �� ( a message ) return �� ��]or [ :a :monad | �� ��( a message ) return: monad �� ]so this is all optimized by the compiler down into native code.So to get away from this >>= bind nonsense the compiler has ado { s1 ; ��s2 ��; s3 ; s4 ...��}which gets translated by a preprocessor into(��(��( s1 >>= s2 ) >>= s3 ) >>= s4 ) ...where s1 returns anm aand the si have the form [ :a | ( a messagei) return: m ]another gmail blow out��I can't see what I am typing��I'm typing blindoh wellsnow blind
On Tuesday, November 11, 2014, Kjell Godo <squeaklist@gmail.com> wrote:
On Friday, November 7, 2014, kilon alios <kilon.alios@gmail.com> wrote:Its definetly an interesting concept. I am curious to give it a try because it would take me outside my comfort zone and there is nothing more that I love than getting outside my comfort zone. But I blame Pharo and the Pharo people who dont let me to try another language, damn them !!!! DAMN THEM I SAY!!!!��Side effects certainly can be a source of trouble but alas they are not the holy grail of trouble. Coding is a complex subject so introducing restrictions of purity will produce some side effects. OH YES PUN WAS INTENDED !!!!Its easy to dismiss such an approach however without trying it in practice with real projects. But then I do also recognise that mixing types can be a problem too at some point that does not convince me into going to ��static type language.��I think for Pharo state is much less of a problem because Pharo has very powerful inspector , debuger and IDE to track down state. So its easy for a pharo developer to be aware of state compared to some developer using another language and not using an IDE at all. If state becomes too complex then its a sign to refactor code and make it simpler. I do think however with powerful IDEs you can get around this problem easily.��So I cant say I am a big believer of Haskell.��Also I real hate the terminology "side effect" ... sounds too..... elitist to me.��bravothat's the spiriti like itso i looked up some more about��monadsand the teacher saidno it was another teacher but i can't find him nowsomething that is really sticking in my headhe saidsomething likehe saidthe state changes are in the monadsthey are localised in the monadslike we stick the dangerous bits into a seperate Package ( info )so we know where they arethe pure functions defined outside of the monadsare not really pure ( my take )they are definitely manipulating state��On Fri, Nov 7, 2014 at 5:51 PM, Kjell Godo <squeaklist@gmail.com> wrote:This is off topic.I tried to post it as a top level thread but I have become unknown.I don't know if you want this crap in here but I have decided not to wait for thepostmaster to get back to me on the subject of becoming known.�� Feel free.( Original-SUBJECT: �� �� "( picoVerse-:( what about state , is state really evil?��) )" �� �� �� )I am a Smalltalker.But in the past few months i have been running with the Haskellers.The Haskellers hate state.This seemed strange at first because as a Smalltalker i��love(d) state.�� State iswas my friend.90% of my life as a Smalltalker is state wrangling.�� I am a state herder. ��The debugger is my staff I use to whack the state.�� And TestCase is my sheep dog.But to the Haskellersstate isthe evil trinity��ofsatan the anti christ and the false prophetall rolled into one.State is the true dev incarnation of the total catastrophe of development Armageddon.Blood up to the bridles for hundreds of miles.�� Dogs and cats living together.�� Mass hysteria.They say.I'm not sure i quite get it yet but they keep preaching on this one point most of all.State is evil.You must keep all state in a Monad.�� As many methods/functions m��as possiblemust be 100% dependent on the input parameters ONLY. ����No hidden instance variables affecting the return value of m are allowed.The only effect m��can have is to return a value.If all this is true then m is pure. ����And pure is good. �� Pure is very good.�� And the wind saysvery.So i wonder if any of you fellowSmalltalkershave thought about this at all.ThanksKjell E God��((((((((((��Maybe Smalltalk should be called Statewalkas in yak��it up fuzz ball. ))))))))))
On Tuesday, November 4, 2014, Alain Rastoul <alf.mmm.cat@gmail.com> wrote:Stef,
As I said to Igor, the main problem about NativeBoost was between
the chair and the keyboard... :)
It is my first use of NativeBoost, I simply overlooked the very good
existing chapter of EnterprisePharo on NativeBoost
(NativeBoost recipes, the X11 journey) and misused the
NativeBoost marshalling of data types.
NAtiveBoost is great.
If I achieve my experiments with zeromq and ends up with
something clean (not the case actually, and not my first goal),
I will be glad to add�� a chapter about that.
My current problem is about a different socket behaviour between
windows and linux.
I think this is not a problem with ZeroMQ, the C program works as expected,
I have to look for an explanation.
No stress about that
Alain
Le 04/11/2014 10:39, stepharo a ��crit :
Alain
which nativeboost chapter :)?
Could you propose a paragraph so that we cover the problem you faced?
Stef
On 4/11/14 00:44, Alain Rastoul wrote:
Hi Igor,
Thank you for your answer, it worked perfectly
Looks like I overlooked the nativeboost chapter
.. 10 timesRepeatAfterMe: [self rtfm ] .
And my suggestion about testing nil was stupid, much better to fail soon.
...�� I am an ass on this one...
However, I am struggling on another point you already answered in the
past
in the mailing list to a guy who wanted to use socket.io :
(http://forum.world.st/socket-io-td3891592.html#a3893031)
"Sockets in Pharo are not blocking the whole VM.
What they block is the process which working with concrete socket. But
other processes can still run, while
one waiting data / even from single socket. "
on windows, zmq socket receive is blocking, on linux, not blocking
(hence not working).
As zmq is doing is IO on another thread, I guess there is some side
effect of
socket receive timeout settings somewhere (in the plugin ?) - just a
guess...
Getting socket options shows no difference, but I don't know how it is
done on the vm
side with regards to threads and if the socket is the same (zmq socket
is not the tcp socket)...
And on linux, the equivalent C program of to the smalltalk version
blocks as expected.
I a mperplexified ...
may be I should look at vm and plugin code (VMMaker package IIRC) ?
Do you have another advice ?
Thanks you
Alain
Le 03/11/2014 02:12, Igor Stasenko a ��crit :
NBExternalArray instances cannot be passed directly to functions
expecting pointers.
use 'myarray address' for arguments.
On 3 November 2014 00:20, Alain Rastoul
<alf.mmm.cat@gmail.com
<mailto:alf.mmm.cat@gmail.com>> wrote:
�� �� Hi,
�� �� I have a problem with a nativeboost call, but�� I don't see what I do
�� �� wrong.
�� �� �� ��library function prototype is:
�� �� �� int zmq_getsockopt (void *socket, int option_name, void
�� �� *option_value, size_t *option_len);
�� �� my calling method in pharo is:
�� �� zmq_getsockopt: socket option_name: option_name option_value:
�� �� option_value option_len: option_len
�� �� �� �� �� �� ��<primitive: #primitiveNativeCall module: #NativeBoostPlugin
�� �� error: errorCode>
�� �� �� �� �� �� ��^self nbCall: #(int zmq_getsockopt (void *socket, int
�� �� option_name, void * option_value, size_t* option_len)�� )
�� �� when I call it with
�� �� ...
�� �� optionValue := (NBExternalArray ofType: 'int') externalNew: 1.
�� �� optionLen := (NBExternalArray ofType: 'size_t' ) externalNew: 1.
�� �� [�� �� �� ��optionValue at: 1 put: 0 .
�� �� �� �� �� �� ��optionLen at: 1 put: (NBExternalType sizeOf: 'int')�� .
�� �� �� �� �� �� ��rc := self zmq_getsockopt: socket option_name: option_name
�� �� �� �� �� �� �� �� �� �� �� �� �� �� ��option_value:�� optionValue
�� �� �� �� �� �� �� �� �� �� �� �� �� �� ��option_len: optionLen�� .
�� �� �� �� �� �� ��value := optionValue at: 1 .
�� �� ] ensure: [�� optionValue free.
�� �� �� �� �� �� �� �� �� �� ��optionLen free�� ].
�� �� ...
�� �� I allways get an exception: "error during FFI call : nil"
�� �� After stepping in NBFFICallout generation, I found something
�� �� strange, the code
�� �� generation seems not to be called because lastError stays at nil ?
�� �� handleFailureIn: aContext nativeCode: aBlock
�� �� �� �� �� �� ��lastError := self getErrorFrom: aContext lastError:
�� �� NativeBoost lastError.
�� �� �� �� �� �� ��>>getErrorFrom: aContext lastError: errorCode
�� �� �� �� �� �� �� ...�� checks�� pragmas etc
�� �� �� �� �� �� ��>>getErrorFrom: aContext lastError: errorCode
�� �� �� �� �� �� ��...�� �� �� �� �� �� ��lastError := aContext�� tempAt: method
numTemps.
�� �� �� �� �� �� �� �� �� �� ��=> lastError = nil ???�� shouldn't be
�� �� ErrNoNativeCodeInMethod ?
�� �� �� �� �� �� ��"install native code and retry the send"
�� �� �� �� �� �� ��lastError = ErrNoNativeCodeInMethod
�� �� �� �� �� �� �� �� �� �� ��ifTrue: [ ^ self generateCode: aBlock andRetry:
�� �� aContext ].
�� �� �� �� �� never gets called ...
�� �� �� �� �� �� ��"ok, we're out of options, signal an error here"
�� �� �� �� �� �� ��^ self signalError: lastError
�� �� Could it be because I use this image on windows and unix ?
�� �� Or because I had an exception at prototype parsing the first time
�� �� because I forgot a ; at the end of the prototype ?
�� �� Is my prototype correct or is it the origin of the error ?
�� �� Is there a way to reset the lastError (aContext�� tempAt: method
�� �� numTemps) ?
�� �� I will try to reset it in debugger but may be there is a cleaner
way ?
�� �� would it be ok to change�� the test in handleFailure to
�� �� (lastError = ErrNoNativeCodeInMethod) or:[ lastError isNil ] ?
�� �� (I can open a bug in this case )
�� �� Any idea or comment is welcome
�� �� Thanks in advance
�� �� Alain
--
Best regards,
Igor Stasenko.