La semantiko de aktoraj sistemoj
Nuntempe, objektemaj sistemoj uzas la lingvon kreitan por alia sistemo. La metaforo de mesaĝpasado venas unue de la aktora sistemo kiu disvolviĝis dum la sama jardeko ol la objektema sistemo, nome la 70-a jaroj. Sed la semantikoj estas iom malsame, kaj tio povas esti problemema.
En la aktora sistemo, mesaĝpaso estas nesamtempa evento. Objekto sendas mesaĝon al celobjekto kaj la sendanta objekto daŭrigas sian laboron. Kiam la celobjekto ricevas la mesaĝon, ĝi plenumas agon kaj eble sendos novan mesaĝon, al aŭ la sendanto aŭ alia objekto. Sed la tuta afero plenumas nesamtempe.
Aktora Sistemo disvolviĝe baziĝas je la antaŭsupozo ke grande paralelaj, disaj, komputilaj sistemoj povas esti ĝenerale haveblaj, kaj sekve oportuna kaj kapabla metodo por strukturi komputadon estas granda nombro de memlimigitaj procezoj, nomata aktoroj, kiu komunikas per la sendado de mesaĝoj al unu la alia.
ActorSystem research was based on the assumption that massively parallel, distributed, computer systems could become prevalent, and therefore a convenient and efficient way to structure a computation was as a large number of self contained processes, called actors, communicating by sending messages to each other.
Fonto: MessagePassing [angla]
Kontraste, objektemaj sistemoj emas trakti mesaĝon kiel metoda alvoko, sed por nomi la metodan alvokon mesaĝpaso nur estas metafore. La semantiko de metoda alvoko estas samtempe, do tiu funkcio ne plu daŭrigas sian laboron ĝis la alvoko de la sendata objekto finos sian laboron.
Eĉ se objektoj komenciĝas per SIMILA-67, ili evoluas per la disvolviĝo de Smalltalk. La unuaj versioj de Smalltalk fakte ne uzis metodan alvokon por mesaĝoj:
Tiel la unuaj kelkaj lingvoj en la familio de Smalltalk ne estas ordemaj, kaj ne havis metodajn alvokojn, sed variaĵo de mesaĝpasado en la senso de la aktora sistemo.
Therefore the first few languages in the SmalltalkLanguage family were not procedural, and did not have procedure calls, but variants of message sending in the ActorSystem sense.
Fonto: MessagePassing [angla]
Sed je la lasta parto de la 70aj jaroj, la semantikoj de Smalltalk ŝanĝiĝis,
Kun Smalltalk-80 ia signo de la influo de la aktora sistemo jam foriĝis, parte ĉar komputadojn de la aktora sistemo estas multkoste simili je kutimaj laborkomputiloj, parte ĉar la skipo de Alan Kay influiĝis de la esploro de lispo sur la samaj laborkomputiloj ĉe XeroxParc.
With Smalltalk-80 any trace of ActorSystem orientation were removed, in part because ActorSystem computations are very expensive to simulate on conventional workstations, in part because AlanKay's group were influenced by the Lisp research being performed on the same workstations at XeroxParc.
Sed la metaforo pri mesaĝpasado daŭriĝis eĉ se la semantikoj ŝanĝiĝis. Pro la fakto ke la ordema semantiko de la lingvoj ne ŝanĝis, objektemeco nur estas mensa modelo pri kiel organizi kodon kaj malpli pri kiel strukturi sistemoj.
Kio perdiĝis en la ordema semantiko estas la distingo ke vera mesaĝpasado ebligas nesamtempecon en sistemo. Aktoraj sistemoj populariĝas nun, sed trakti ilin kiel objektemaj sistemoj kaŭzas problemojn.
Se vi vere havas aktoron sistemon, ĝi fundamente ŝanĝos kiel la sistemo disvolviĝas kaj interagas kun si mem kaj aliaj sistemoj. Ĝi ne nur puŝas iom da la laboro al fonaj taskoj plenumitaj nesamtempe, ĉio estas tasko plenumita nesamtempe kaj pli paralela ĉar unuopa tasko blokata ne paŭzas la tutan komputadon.
Tio gravas ĉar la unuo de paraleleco ne plu estas komputilo, sed ero de ĝi. En retprogramoj ĝi graviĝas ĉar uzantoj volas pli da konektoj al niaj serviloj kaj pli daŭraj konektoj. Komputiloj ekhaltos se vi havas kelkmiloj da fadenoj kiuj zorgas pri semaforoj aŭ haltita por eneligado, sed komputilo facile povas enhavi milionoj da aktoro, kiu povas malpeze komputi bezonataĵojn kaj daŭre labori.
La plej popularaj aktoraj sistemoj nun estas Erlang (kun ĝia virtuala maŝino BEAM), Elixir (nova lingvo kiu ankaŭ funkcias je la BEAM) aŭ Akka kiu funkcias per Scala aŭ Ĝava. Mi tute rekomendas pristudi, eĉ se vi ne jam bezonas ĝin.