Her gömülü proje sonunda aynı duvara çarpar: eşzamanlılık. Bir motor çalışmaya devam ederken, bir güvenlik monitörü sensörleri izlemeli, bir iletişim yığını ana bilgisayara cevap vermeli ve bir zamanlayıcı otomatik bir eylemi geri saymalıdır. Bunlardan ikisi etkileşime girdiği anda, kod iş parçacıkları, mutex'ler, koşul değişkenleri ve sahada yalnızca birkaç bin saatte bir ortaya çıkan bir hata sınıfıyla dolar.
İki bilinen kaçış yolu vardır. İlk yol, tüm kontrol kodunu elle yazmaktır - ve bunun neden ölçeklenebilir olmadığını zaten savundum. İkinci yol ise tüm problemi kod üreten bir yapay zekaya devretmektir - ve bunun da neden üretimde kullanılan gömülü sistemler için kabul edilemez olduğunu savundum.
Bu yazı, üçüncü yol hakkındadır: davranışı metin tabanlı bir DSL'de tanımlamak ve deterministik bir üretecin mekanik işi yapmasına izin vermek. Bu tür araçlara soft-robot diyorum - ve geliştiriciyle kurduğu ilişki ne manuel emek ne de körü körüne yetki devridir. Bu, ortak geliştirmedir.
Metin Tabanlı Bir DSL Süreci Neden Değiştiriyor?
DSL'nin bariz avantajı soyutlamadır. Daha az bariz - ve günlük çalışmada çok daha değerli - avantajı ise modelin düz metin olmasıdır.
Bir .umt dosyası, Git'te herhangi bir kaynak dosyası gibi bulunur. Temiz bir şekilde karşılaştırılır: bir meslektaşınız bir geçiş eklediğinde, çekme isteği tam olarak bir eklenmiş satır gösterir, yeniden oluşturulmuş iki yüz satır switch bloğu değil. Birleştirilir, grep'lenir, her editörden ve her CI hattından sağ çıkar. İkili veya XML deposuna sahip grafiksel modelleme aracı size bunların hiçbirini vermez; iki XMI dosyasının farkı bir tasarım incelemesi değil, gürültüdür.
Metin ayrıca, modelin aynı anda insanlar ve makineler için tek doğruluk kaynağı olduğu anlamına gelir. Bir inceleyici davranışı doğrudan okur. Üretici aynı dosyayı okur ve uygulamayı üretir. Dokümantasyon, inceleme çıktısı ve derleme girdisi bir ve aynıdır - hiçbir şey sapamaz, çünkü sapacak ayrı bir şey yoktur.
Eşzamanlılığı Uygulamak Yerine Bildirmek
UMTSM, UML Durum Makineleri 2.5'e dayanmaktadır ve eşzamanlılığı bildirimsel hale getiren kısımlar da dahil olmak üzere tüm özellik seti desteklenmektedir: ortogonal bölgeler, çatal/birleştirme senkronizasyonu, tamamlama olaylarına sahip do aktiviteleri ve derin/sığ/kalıcı geçmiş.
Bu, "eşzamanlı kod yazmanın" ne anlama geldiğini değiştirir. Paralelliği uygulamak yerine, bildirirsiniz:
sm Conveyor
{
state Running
{
region Motion
{
init -> Moving;
state Moving
{
BeltStalled -> Fault;
}
}
region Safety
{
state Monitoring
{
do / checkLightCurtain;
[is_breached] -> Fault / stopBelt();
}
}
}
}
Running durumunun iki bölgesi paralel olarak yürütülür. Üretilen C++ kodu, iş parçacığı yönetimini, paylaşılan veriler etrafındaki mutex korumasını ve bölge tamamlanmasında senkronizasyonu içerir; bu kod her seferinde aynı şekilde, deterministik olarak üretilir. Geliştirici, durum makinesinin kendi kayıt tutma işlemleri için asla bir std::mutex yazmaz ve tasarlamadığı altyapı içindeki bir yarış durumunu asla hata ayıklamaz.
Soft-Robot: Kontrolü Kaybetmeden Otomasyon
Endüstriyel robotlar, montaj hattındaki mühendislerin yerini almadı. Hassas bir programı tekrarlanabilir şekilde yürütürler ve mühendis, ne üretileceği konusunda tam yetkiye sahiptir. Doğaçlama yapan bir kaynak robotu, fabrika zemininden derhal kaldırılırdı.
Deterministik bir kod üreteci, yazılım eşdeğeridir - ben soft-robot olarak adlandırdım. Bir yapay zeka asistanı gibi hızlı ve yorulmak bilmez, ancak bir yapay zeka asistanından farklı olarak asla doğaçlama yapmaz. Aynı .umt girdisi, bayt bayt aynı çıktıyı üretir. Üretilen kodun her satırı, modelin bir satırına kadar izlenebilir. Davranış yanlış olduğunda, düzeltme modelde, sürüm kontrolü altında, incelenebilir bir farkta gerçekleşir.
Bu, bu yazının başlığının vaat ettiği dengedir: karmaşık kontrol kodu elle yazılmaz, ancak kontrol de asla teslim edilmez. Geliştirici, tam olarak bunun için oluşturulmuş bir dilde ifade edilen tasarımın (durumlar, olaylar, koruyucular, eylemler) sahibidir. Yazılım robotu, doğru eşzamanlı altyapıya çevirinin sahibidir. Yapay zeka, daha önce tartışıldığı gibi, masada hala bir yere sahiptir: modeli taslak haline getirmeye ve eleştirmeye yardımcı olabilir. Ancak koda nihai dönüşüm, yalnızca ikna edici değil, hesap verebilir bir makineye aittir.
Sonuç
Eşzamanlılık, kahramanca el yazısı kodlarla veya mühendislik yargısını bir jeneratöre devretmekle yönetilebilir hale gelmez. Davranış, metin tabanlı bir modelde (fark edilebilir, incelenebilir, sürümlü) yaşadığında ve deterministik bir yumuşak robot bu modeli, geliştiricinin her projede kusurlu bir şekilde yeniden uygulayacağı altyapıya dönüştürdüğünde yönetilebilir hale gelir. Mühendis karar verir; robot inşa eder; model onları dürüst tutar.
UMTSM ile ilgili sorularınız veya projeleriniz için lütfen iletişime geçin.
