Yes, in one sense, object oriented programming involves state and is the 
opposite of pure functional programming.

Now, there are clean and less clean ways of doing object oriented design.

But I too have a hard time accepting or understanding how a useful real world 
piece of software can be written without some form of state. Mathematical 
functions are easy, but once you have a number of closures over some captured 
and shared state, you basically have a object. Passing a world object into and 
returning it modified from pure functions becomes heavy too.

The world is not black or white, but a complex form of grey.

There are many good ideas in (pure) functional programming, you can use all of 
them in Smalltalk, if you want.

> On 07 Nov 2014, at 16:51, Kjell Godo <[email protected]> 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 
> the
> 
> postmaster 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 Haskellers
> 
> state is
> 
> the evil trinity 
> 
> of
> 
> satan the anti christ and the false prophet
> 
> all 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 possible
> 
> must 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 says
> 
> very.
> 
> So i wonder if any of you fellow
> 
> Smalltalkers
> 
> have thought about this at all.
> 
> Thanks
> 
> Kjell E Godø
> 
> 
> 
> 
> 
> 
> 
> 
> 
> (((((((((( Maybe Smalltalk should be called Statewalk
> 
> as in yak it up fuzz ball. ))))))))))
> 
> 
> On Tuesday, November 4, 2014, Alain Rastoul <[email protected]> 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
> <[email protected]
> <mailto:[email protected]>> 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.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 


Reply via email to