Makroprogrammalastırıw

Kompyuter iliminde **makroprogrammalastırıw** — bul agentlerdiń yamasa esaplaw qurılmalarınıń pútkil sistemasınıń makroskopiyalıq, global minez-qulqın ańlatıwǵa baǵdarlanǵan programmalastırıw paradigması.
Makroprogrammalastırıwda bólistirilgen sistemanıń jeke komponentleri ushın jergilikli programmalar ádette sistema dárejesindegi kózqarastan yamasa jobalanǵan global maqset boyınsha ańlatılǵan makro-programmadan kompilyaciyalanadı yamasa interpretaciyalanadı. Makroprogrammalastırıw usıllarınıń maqseti — esaplaw qurılmaları yamasa agentleriniń pútkil bólistirilgen sistemasınıń makroskopiyalıq óz-ara tásir háreketin bir programmada ańlatıwdı qollaw yamasa, uqsas túrde, olardıń kollektiv intellektin alǵa ilgerletiw.
Onı kóbinese programmalastırıw tillerinde (C yamasa Scala sıyaqlı) programma bólekleri ushın almastırıw qaǵıydaların ańlatıw ushın qollanılatuǵın makroslar mexanizmi menen shatastırmaw kerek.

Makroprogrammalastırıw sımsız sensor tarmaqların programmalastırıw kontekstinde payda boldı hám Zatlar Interneti hám topar robototexnikası kontekstinde qayta qızıǵıwshılıq oyattı.

Makroprogrammalastırıw (sistemanı global kózqarastan programmalastırıwǵa baylanıslı) kóp dárejeli programmalastırıw, xoreografiyalıq programmalastırıw hám agregatlı esaplaw menen uqsas maqsetlerdi bólisedi.

## Kontekst hám motivaciya
Bólistirilgen sistemalardı, kóp agentli sistemalardı hám programmalıq támiynat agentleri toparların (mısalı, robotlar toparı) programmalastırıw qıyın, sebebi kóp máseleler (baylanıs, parallellik hám sátsizlik sıyaqlı) durıs esapqa alınıwı kerek. Atap aytqanda, ulıwma qaytalanatuǵın másele — bul qatnasıwshı jeke komponentlerdiń yamasa agentlerdiń minez-qulqın anıqlaw arqalı jobalanǵan global minez-qulıqtı qalay payda etiw. Másele kóp agentli bekkemlewshi oqıtıw sıyaqlı oqıtıw usılları arqalı yamasa hárbir komponentti basqaratuǵın basqarıw programmasın qoldan anıqlaw arqalı sheshiliwi múmkin. Degen menen, máseleni tolıǵı menen jeke (yamasa bir túyinli) kózqarastan sheshiw qátege alıp keliwi múmkin, sebebi iskerlikler hám óz-ara tásirlerdiń quramalı tarmaqlarınan payda bolatuǵın ulıwma minez-qulıqtı aldınnan boljaw ulıwma alǵanda qıyın (qarań: quramalı sistemalar hám payda bolıw menen salıstırıń). Sonlıqtan, izertlewshiler abstrakciya dárejesin kóteriw, bólistirilgen sistemalardı kóbirek global kózqarastan yamasa kollektiv túrde erisiliwi kerek bolǵan ulıwma maqset boyınsha programmalastırıwdı alǵa ilgerletiw jolların izertley basladı.

## Mısallar

### ScaFi
Tómendegi ScaFi agregat programmalastırıw tilindegi programma derek qurılmasın maqsetli qurılmaǵa adımba-adım jol arqalı baylanıstıratuǵın `true` mánis beretuǵın qurılmalardıń ornalasqan kanalı (logikalıq maydanı) esaplaw ushın kerekli cikl basqarıw logikasın anıqlaydı, bul bir neshe jaqın jaylasqan qurılmalar arasında.
```scala
class SelfContainedChannel extends AggregateProgram with SensorDefinitions {
  def isObstacle = sense[Boolean]("obstacle")
  def isSource = sense[Boolean]("source")
  def isDestination = sense[Boolean]("target")
  
  override def main(): Boolean = 
  branch(isObstacle){ false }{ channel(isSource, isDestination, 5) }

  def channel(src: Boolean, dest: Boolean, width: Double): Boolean =
    dilate(distanceTo(src) + distanceTo(dest) <= distanceBetween(src,dest), width)

  type OB[T] = Builtins.Bounded[T]
  def G[V:OB](src: Boolean, field: V, acc: V=>V, metric: =>Double): V =
    rep( (Double.MaxValue, field) ){ dv =>
      mux(src) { (0.0, field) } {
        minHoodPlus {
          val (d, v) = nbr { (dv._1, dv._2) }
          (d + metric, acc(v))
        } } }._2

  def distanceTo(source: Boolean): Double =
    G[Double](source, 0, _ + nbrRange(), nbrRange())

  def broadcast[V:OB](source: Boolean, field: V): V =
    G[V](source, field, x=>x, nbrRange())

  def distanceBetween(source: Boolean, target: Boolean): Double =
    broadcast(source, gradient(target))

  def dilate(region: Boolean, width: Double): Boolean =
    gradient(region) < width
}
```
Itibar beriwge tiyisli nárse — bul channel funkciyası, sonday-aq onı ámelge asırıw ushın qollanılatuǵın, atap aytqanda, distanceTo, distanceBetween, dilate, broadcast hám t.b. funkciyalardı tek bir qurılmanıń jeke minez-qulqı boyınsha emes, al makroskopiyalıq kózqarastan da interpretaciyalawǵa boladı. Haqıyqatında da, mısalı, distanceTo(s) s ańlatpası durıs mánis beretuǵın eń jaqın qurılmadan minimal aralıqlar maydanın esaplaw ushın qollanıladı: bul óz-ózinen shólkemlesiw usılı menen, jaqın qurılmalar menen qayta islew hám baylanısıw arqalı qollap-quwatlanatuǵın bólistirilgen maǵlıwmat strukturası. Semantikalıq jaqtan, bunday funkciyalar makro-dárejeli (yamasa kollektiv) maǵlıwmat strukturasın payda etetuǵın makro-dárejeli (yamasa kollektiv) minez-qulıqtı anıqlaydı. Bunday makro-dárejeli funkciyalar/minez-qulıqlar basqa quramalıraq makro-dárejeli funkciyanı/minez-qulıqtı alıw ushın biriktiriliwi múmkin.

### Regiment
Regiment tilindegi tómendegi programma pútkil sistema tárepinen sezilgen ortasha temperaturanı esaplaw ushın qollanılıwı múmkin:
```prolog
% funkciya anıqlaması
doSum :: float (float, int) -> (float, int);
doSum(temperature, (sum, count)) { (sum+temperature, count+1) }

% funkcional reaktiv programma logikası
temperatureRegion = rmap(fun(node){ sense("temperature", node) }, world);
sumSignal = rfold(doSum, (0.0, 0), temperatureRegion)
avgSignal = smap(fun((sum,count)){ sum / count }, sumSignal)

BASE <- avgSignal % bunday informaciyanı tiykarǵı stanciyaǵa jiberiw
```


### PyoT
PyoT tilindegi tómendegi programma, bir neshe sensor tárepinen esaplanǵan ortasha temperatura belgili bir shegaradan asqanda ventilyatordı iske túsiriw ushın qollanılıwı múmkin.
```python
temperatures = Resource.objects.filter(title="temp")
results = [temp.GET() for temp in temperatures]
avg = sum(results) / len(results)
TEMP_THRESHOLD = 24
if avg > TEMP_THRESHOLD:
    Resource.objects.get(title="fan").PUT("on")
```


### TinyDB
TinyDB-de, maǵlıwmatlarǵa baǵdarlanǵan makroprogrammalastırıw usılı qollanıladı, onda baǵdarlamashı bir-túyinli operaciyalarǵa hám sımsız sensor tarmaǵında marshrutlawǵa aylanatuǵın soraw jazadı.
```sql
SELECT nodeId , temperature WHERE temperature > k FROM sensors SAMPLE PERIOD 5 minutes
```


## Derekler

__BÖLİDİMÖNDEMEW__