в статье про function barrierс там все ясно. Там основная функция получает нетипизированные переменные и не может специализироваться так, как функция которая делает собственно loop. Функция которая делает loop, специализируется по типу массива. Потому что тип массива становится известен ДО того как сделается кодеген на цикл. Там динамик диспатч по типам на экземпляр функции с конкретным массивом (там отличается у них мерность массива например). У нас только 1 тип, этот тип Array{String} и он известен и неизменен всегда. У нас другой случай. Тот факт, что это лечится через function barrier (wtf3) говорит о том, что кодеген генерирует разный (?) код для случая когда тип указан в локальной переменной и когда тип указан в аргументе функции (в любом случае типов достаточно).