можно сделать это через Терминал:
GIMP
sudo apt-get autoremove gimp gimp-plugin-registry
Удаления Добавляет, что следующий PPA
sudo add-apt-repository ppa:otto-kesselgulasch/gimp
sudo apt-get update
Переустанавливает последний GIMP
sudo apt-get install gimp
Человек, который создает аппаратное обеспечение (процессор, материнскую плату и т. Д.), Также предоставляет свой машинный язык (язык ассемблера). Это становится самым низким уровнем. Затем другой человек пишет компилятор для C, который конвертирует синтаксис C в родной язык ассемблера для этого оборудования (пожалуйста, исправьте меня, если я ошибаюсь). С C вы можете использовать сборку, следовательно, достигнут самый низкий уровень !!
C сегодня используется во многих случаях как «переносимый язык ассемблера», потому что семантика языка может быть в значительной степени лишь тонким слоем над базовой архитектурой машины.
В прошлом было довольно просто посмотреть на строки кода на C и понять, каким будет реальный машинный язык, который будет генерировать код на C.
Если рассматривать его целиком вместе с окружающей средой разработки, то легко получить полный контроль над структурой памяти структур данных и общим размещением памяти. Имейте в виду, что этот вид кода C, в целом, не переносим, поскольку он опирается на детали реализации компилятора, которые стандарт C позволяет гибко использовать, и он основан на реализации. Но в целом сам код C может быть САМОГО переносимым. Именно этот аспект языка привел к его популярности в таких системах, как Unix, благодаря возможности переноса большей части ОС между компьютерами при минимально возможных аспектах реализации, скажем, на ассемблере. 113]
Сегодня, с современными компиляторами и их оптимизацией, C может быть менее буквальным. То, что вы видите в коде C, может не переводиться буквально в то, что вы получаете в сборке из-за фактических оптимизаций, выполненных компилятором.
Простой надуманный пример выглядит примерно так:
int func(int a, int b) {
int c;
int d;
d = 10;
return a * d;
}
В простом компиляторе реализация вполне может выделить 4 целых в стеке, 2 для аргументов и 2 для рабочих переменных. Очевидная оптимизация заключается в том, чтобы вообще не выделять переменную 'c', поскольку она не используется. Дальнейшая оптимизация заключается в том, чтобы игнорировать и d, и просто использовать константу 10. И даже более умный компилятор может хорошо видеть, как используется эта функция, и автоматически встроить ее в вызывающую функцию, полностью исключая вызов подпрограммы.
Итак, с одной стороны, вы можете увидеть код и сказать «это то, как он будет выглядеть в сборке», и, таким образом, обработать его как низкоуровневую оболочку поверх сборки. С другой стороны, вы можете включить современные оптимизации компиляторов, чтобы они были менее буквальными, сохраняя семантику того, что вы выражаете в коде, если не фактическую идеальную реализацию.
Тот факт, что вы задаете этот вопрос, выражает вашу наивность предмета. Это не так просто.
В конце - C не обладает полным гибким языком ассемблера, но он подходит близко. В ней отсутствуют такие функции, как Tail Recursion
Но в большинстве случаев C делает все, что вам нужно - вероятно, нужно -