В основном,должен быть языковой интерфейс и все необходимые вспомогательные библиотеки, лицензированные соответствующим образом, с достаточно качественным (кодом, а также документация и тесты ), с людьми, желающими их поддерживать. Принимают решения руководящий комитет GCC .
Есть примеры добавления и удаления языков в не -слишком -далеком прошлом. D стал кандидатом в 2011 году , был утвержден в 2017 году и доступен в GCC 8. С другой стороны, Java была удалена в GCC 7 после долгого бездействия.
Есть проекты по добавлению Python и Rust , но я не думаю, что там много активности.
GCC разделяется на несколько компонентов ; различные языки, которые он поддерживает, реализованы внешними интерфейсами, которые преобразуют программы в промежуточное представление, GIMPLE (, который не зависит от языка -и машины -). Таким образом, оптимизаторы являются общими для разных языков.
В вашем сценарии awk
печать запускается как действие по умолчанию, которое, в свою очередь, зависит от «побочного -эффекта» оценки назначения $1=$1
как шаблона.
В первом случае перед первым разделителем есть пустое поле, поэтому $1
— это пустая строка, которая оценивает ЛОЖЬ. Во втором случае $1
— это не -пустая строка a
, которая оценивается как ИСТИНА, запуская действие печати по умолчанию.
Вы полагаетесь на истинное значение первого поля, чтобы заставить awk напечатать запись. Значение истинности пустой строки равно false, поэтому awk не делает ничего, кроме присваивания. Выведите явно (или используя какое-либо другое всегда истинное условие, например 1
), вместо использования первого поля в качестве проверки:
echo ":a:b:c:" | awk '{$1=$1; print}' FS=":" OFS="$"
-v
или BEGIN
или назначение перед вызовом awk, к которому вы можете получить доступ изENVIRON[]
(см.https://stackoverflow.com/q/19075671/1745001). Итак, ваш скрипт должен быть awk -F':' -v OFS='$' '{$1=$1}1'
.