1

我正在設計一個可以在多個環境中自動執行任務的編排引擎:JavaScript Web UI,Python Web服務器和c運行時。一種可能的方法是在每種語言中編寫編配核心。這看起來很脆弱,因爲每個新的引擎特性都需要添加到每種支持的語言中(並且錯誤必須多次解析,而所有這些都是在處理每種語言中的不同習語時)。另一種方法是用最低公分母語言(可能是c)編寫核心,然後用其他語言包裝它。但是,我認爲將編譯的庫部署到瀏覽器將是一場噩夢,如果不是不可能的話。所以,我正在考慮的另一個選擇是模板和代碼生成。然後可以將引擎編寫一次(可能使用Python),並使用jinja模板將工作流編譯到每個目標。多平臺代碼生成

這最後一種方法聽起來可行嗎?如果我走這條路,我應該知道哪些陷阱?我應該把它吸起來並且寫下引擎三次?

+0

你是說你正在重新實現廚師或Ansible? –

+0

@JohnZwinck嘿,好問題!我不這麼認爲,因爲我沒有處理服務器配置和應用程序部署。即使我是這樣,人們也覺得有足夠的空間存在,但是沒有,這更多的是關於多次運行時的數據處理。 – matthewatabet

回答

1

不要緊,您使用哪種技術,你會面臨三個潛在的問題:

  1. 跨所有N目標使用「相同的(業務流程驅動器)的數據」。 每個目標都有一個首選方式來表示這些數據。 您可以選擇一個最低公分母(例如,文本或XML),以使目標引擎笨拙的價格編寫
  2. 在N個目標中找到等價效果。想象一下你在每個目標中都需要「eval」(我不希望);即使他們似乎有類似的實現,一些細節將是錯誤的,你將不得不圍繞該工作
  3. 一個或多個目標的性能很差。

如果你編碼你自己的實現,你可以更容易地克服2)和3)。

如果您生成代碼,您可以更靈活地更改特定目標的運行方式。如果您使用簡單的基於文本的「模板」來生成目標語言代碼,您將無法生成非常高效的代碼;你無法優化你生成的東西。如果您使用更復雜的代碼生成器,則可以生成/優化結果。

很難說你會有多少麻煩,部分原因是你沒有告訴我們這個引擎會做什麼或者目標語言是什麼。即使有這些數據也很難說;直到你有一個正在運行的系統,你不能確定沒有一個無禮的驚喜。

當人們面對未知時,人們使用複雜的代碼生成技術,因爲這可以最大限度地提高靈活性,從而更容易克服併發症。

當人們沒有精力去學習如何使用複雜的發電機時,他們使用更簡單的代碼生成。如果他們幸運的話,沒有問題出現,他們贏了。如果這個實驗不是很多工作,那麼你應該嘗試一下,並希望最好。

+0

感謝您的答案!正如我在問題中提到的,目標語言包括JavaScript,python和c。希望有所幫助! – matthewatabet

+0

當你提到「複雜的代碼生成」時,你有什麼想法? – matthewatabet