Все обсирают бейсик (типа недостойный) паскаль (и другие ЯВУ). Восхваляют Си. А чем он лучше? На мой взгляд - полное гуано собачье. Такое ЯВУ достойно тех, кто даташиты не признаёт, и всякие сраные библиотеки под Си ищет (самому написать как-то в падлу(ну как же, даташит читать надо )). Как сказали два умных мужика: - В Си надо писать очень определённым шрифтом, с очень определённым наклоном, разными цветами - на Си можно написать: main(_,l)char**l;{6*putchar(--_%20?_+_/21&56>_?strchr(1[l],_^"pt`u}rxf~c{wk~zyHHOJ]QULGQ[Z"[_/2])? 111:46:32:10)^_&&main(2+_,l);} и это не будет ошибкой (автор - ARV) Не это ли верх извращенства? Когда посмотришь в дизасме код после си , блевотинкой захапывающей память попахивает. И что интересно, в последнее время на сайте чевойто народ на асм подтягивается.
я весьма скептически настроен к Си. но я полностью объективен в его оценке.
я полностью согласен со следующим мнением:
Брайан Керниган писал(а):
Си — это инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво.
но я не согласен, с вашим определением, высказанным в весьма резком тоне. при всех своих недостатках и странностях синтаксиса язык Си является практически безальтернативным вариантом для программирования микроконтроллеров. все дело в количестве программистов, его использующих: их огромное количество, они уже сделали огромное количество библиотек на любые случаи жизни, и количество людей, способных помочь при возникновении вопросов измеряется сотнями тысяч (вообще).
а вот, например, паскаль, который гораздо "правильнее" с точки зрения логики и синтаксиса, увы, для программирования микроконтроллеров не очень прижился, и если вы начнете писать на нем, количество готовых наработок, советчиков-помощников и т.п. будет в тысячи раз меньше, т.е. вам будет гораздо сложнее...
бейсик - та же песня. лично я никогда даже не пытаюсь понять ту писанину, что иной раз вижу в постах с криком о помощи... да, основы бейсика я знаю и мог бы вникнуть - но не хочу, ибо страшно.
так что при всем богатстве выбора иной альтернативы нет...
и еще один момент. так как Си требует определенных усилий по освоению и использованию, т.е. имеет достаточно высокий порог вхождения, достигают в нем успехов лишь люди, способные и готовые работать над собой. что в конечном итоге делает их на самом деле специалитами и знатоками. а это, в свою очередь, позволяет им давать действительно полезные и правильные советы.
а вот паскаль и бейсик и т.п. языки с низким порогом вхождения порождают поток новичков, у которых с первой попытки получилось нечто и это вызвало у них неоправдано высокое мнение о своих навыках. грубо говоря, количество говнокодеров на Си заметно меньше, чем на паскале или бейсике... и соответственно, советов от этих говнокодеров гораздо больше, а качество их недопустимо низкое. это хорошо заметно со стороны...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Не умея мыслить и писать, Язык любой можно обосрать. Как бы мягче вам сказать, Программистом чтоб хорошим стать, Дофига всего ведь нужно знать...
В том плане, что программирование начинается на бумажке, обычным литературным языком, с карандашом в руках. Или на планшетнике с электронным пером, кому как. И на Си, и на ассемблере, и на Бэйсике можно накалякать такой хрени, что только фтопку. - Вы любите кошек? - Нет - Да вы просто не умеете их готовить!
Думаете, на Си вам не нужны знания даташитов? Ага, да вы просто не в курсе. Думаете, на ассемблере вас спасут знания даташитов? Да черта с два! для ассемблера вам понадобится знание ассемблерных команд, это и все, что будет дополнено к Си. Дизасм после Си не нравится? Так если вы привели запись на Си: main(_,l)char**l;{6*putchar(--_%20?_+_/.... (много букав еще), так какого вы ждете еще? Как написали, так и получили. Пеняйте на свои кривые руки из жoпы.
Хотите писать на Паскале или Бейсике? Пишите, не вопрос, вас никто не отговаривает, и религия не запрещает. Пишите на том, на чем умеете. Это сугубо ваше личное дело.
Цитата:
В Си надо писать очень определённым шрифтом, с очень определённым наклоном, разными цветами
то есть вот так, да? :
а чем это плохо? Цветовое и начертательное выделение синтаксиса - это безусловно удобно. Или вы - суровый челябинский кодописатель? Ну-ну. Сравните предыдущий кусок с вот этим:
Код:
/* ---------- * Отправка по SPI с контролем занятости */ int SPI_Send(uint16_t data) { uint16_t i = 0; while (!(SPI1->SR & SPI_SR_TXE)) { i++; if (i > 50000) return 1; // тестовое значение, потом заменить } SPI1->DR = data; return 0; }
тест тот же самый, а восприятие разное. Так что не надо ля-ля насчет выделения синтаксиса. Когда у вас портянка на 10 страниц совершенно одинакового черно-белого текста, вы черта с два сможете выделить в нем хоть какие-то блоки. Цветовое выделение на первый взгляд кажется маскарадом, но если у вас уже отработан стиль и вы придерживаетесь его, то вы вскоре даже будете благодарны различным цветам и шрифтам. Вы с легкостью отличите глобальную переменную от локальной внутри функции и легко вообще найдете, где у вас переменные там записаны, а где функции, и быстро найдете комментарии. Цвета ведь настраиваются. По своему усмотрению можете задать схему с меньшим "маскарадом", выделяя лишь то, что вам нужно по вашему усмотрению.
_________________ Подпись убрал вместе с автором. aen
Последний раз редактировалось Мурато Мяуконни Сб янв 21, 2017 11:21:33, всего редактировалось 1 раз.
Дизасм после Си не нравится? Так если вы привели запись на Си: main(_,l)char**l;{6*putchar(--_%20?_+_/.... (много букав еще), так какого вы ждете еще? Как написали, так и получили. Пеняйте на свои кривые руки из жoпы.
100% ! Для слабых камней есть правило "Одна строка - одно действие", для 16-32 бит камней это правило уже не всегда действует. Сложная на вид строка может быть соптимизирована куда лучше и правильнее, чем набор простых.
Цитата:
Хотите писать на Паскале или Бейсике? Пишите, не вопрос, вас никто не отговаривает, и религия не запрещает. Пишите на том, на чем умеете. Это сугубо ваше личное дело.
Ага! Только пусть не забудет в дизасм заглянуть, что там эти черти наваяли.
Сложная на вид строка может быть соптимизирована куда лучше и правильнее, чем набор простых.
очень спорное утверждение. я не вижу предпосылок, которые действительно могли бы дать какой-то эффект при оптимизации... а вот отладка одной сложной строки даст столько геморроя, что мнимый эффект оптимизации померкнет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
После любого языка высокого уровня дизасм будет вызывать несварение желудка с точки зрения религиозно-правильного ассемблерщика. Но если на мелких пик-авр это еще имеет значение, то на более крупных и мощных контроллерах это уже не столь важно. Я так понял, топикстартер некоторое время сидел на Бейсике и смотрел дизассемблированный его код, пытаясь изучить ассемблер, и ему очень не нравился получаемый результат. Хотите писать на ассемблере - пишите, если сумеете. Но вы должны писать именно на ассемблере, а не опираясь на дизасм. Как один кекс тут похвалялся писаниной на ассемблере, а на поверку оказался это дизасм. Так что, изучайте ассемблер с начала. Например, когда на мелких пиках уткнетесь в математику, одинхрен пойдете искать готовые ассемблерные куски. Которые, кстати, писаны еще лет 10-15 назад.
Кстати, доводилось ли кому видеть, как начинает колбасить сишную отладку при высоком уровне оптимизации?
_________________ Подпись убрал вместе с автором. aen
А вот хренушки! С Асма всё началось. Си видал в ...... А давайте моск ипать не будем. Пишем моргалку, кажный в своём любимом языке на полсекунды, на любом PIC (не сильно новом (увы, кислодрищенск)). Сравним, померим письки.
Кстати, доводилось ли кому видеть, как начинает колбасить сишную отладку при высоком уровне оптимизации?
И что? Мне, например, пофигу. Если оптимизатор свою задачу выполнил и всё работает как надо, то какая мне разница? Если оптимизация по скорости, компилер там чёта развернул, чёта заинлайнил, код чуть подрос в размерах - ну и фиг с ним! На АСМЕ пришлось бы делать то же самое, только вручную, и код точно также бы подрос. Если по размеру - компилятор что-то там навыпиливал в подпрограммы, что-то там понавыхватывал, код сократился? Ну и ладно! На АСМЕ тоже бы пришлось выискивать что можно урезать. Всё равно отладку, как правило, производят только в узких местах, а не всего того что уже работает. Там можно и поднапрячься.
А вот еще одна сишная фишка, которая вызывает у многих непонимание, а половина вообще не знает об этом, а еще одна половина неправильно этим пользуется. #include и файлы хидеров *.h Кто-то во все файлы кода *.c подключает все хидеры сразу, кто-то пытается подключить вместо хидера файл кода *.c, кто-то создает файл main.h и в него собирает все хидеры и подключает main.h ко всем файлам кода - кто во что горазд. И получают засорение пространства имен и разросшееся пространство доступа к функциям. Неправильное использование хидеров приводит к тому, что имена функций, переменных, макросов и дефайнов приходится делать уникальными на протяжении всего кода. Например, GREEN_LED_01. Хотя правильное подключение хидеров позволит использовать одно имя LED хоть для десятка одинаковых или разных светодиодов. Кто-то вроде и более-менее правильно подключает хидеры, но в файл хидера включает не то, что надо было бы. И получает снова засорение имен и распространение доступности не в тех границах, которые следовало бы. Фишка языка Си в этом плане такова, что пространство имен переменных, текстовых замен и доступность функций определено от начала файла и до его конца. Расширить границы доступности можно при помощи #include заголовочного файла, в который помещены переменные и прототипы функций, которые должны быть доступны извне. Вот именно с помощью инклюда можно создать такие связи между файлами, когда не будет прямой видимости из main.c локальных функций и переменных, определенных в некотором файле. И внутри разных файлов можно будет использовать одинаковые локальные имена, если они не выходят за границы этого файла, то есть не вынесены в файл хидера.
Сложность для понимания? Да. Но зато какие возможности она открывает.
_________________ Подпись убрал вместе с автором. aen
А вот хренушки! С Асма всё началось. Си видал в ...... А давайте моск ипать не будем. Пишем моргалку, кажный в своём любимом языке на полсекунды, на любом PIC (не сильно новом (увы, кислодрищенск)). Сравним, померим письки.
Та даже не интересно, тем более на ПИКах и тем более на старых. Там "Всё уже украдено до нас!"(с). Ну и что вы там увидите? Инит переменных? Так это и в АСМе требуется. Загрузку константы генератора? Так это можно отключить в опциях компилятора, при необходимости. Старенький добрый Хайтеч сделает код на уровне средного АСМИста, т.е не хуже. И за что там в АСМе бороться? За несколько байт? Так я лучше сразу возьму СТМ8 или СТМ32, если уж на то пошло, и не буду вообще вспоминать этот кошмар под названием Микрочип.
Цитата:
А давайте моск ипать не будем.
Давайте. Тем более что это уже столько раз обсуждалось, что уже просто совсем.
А вот хренушки! С Асма всё началось. Си видал в ...... А давайте моск ипать не будем. Пишем моргалку, кажный в своём любимом языке на полсекунды, на любом PIC (не сильно новом (увы, кислодрищенск)). Сравним, померим письки.
А вот хренушки - за полсекуны вы даже палец на мышку перенести не успеете. Да полстраны начинало с асма, и что с того то? Могралку на ПИК? Вопервых, я сто лет не писал для старых пиков, но, не сильно углубляясь в даташитное соответствие, асм:
while (1) { PORTB |= 1 //забыл, как правильно там было Delay(130); PORTB &= ~1; Delay(130); }
void Delay(volatile int n) { for (; n > 0; n--); }
вот, а теперь давайте напишем bin-to BCD на асме и на си?:) а потом попробуем написать что-то более сложное, с модульным раскладом. И засечем время. Разница будет не то что полсекунды, а даже и полдня и более, более, более.
koms48 писал(а):
Си видал в ...... .
Ладно, хорошо. А какой язык вам нравится тогда? Есть предпочтения? Так вот и пишите на выбранном языке и не выёживайтесь. Можете писать на Бейсике, если вам он по душе. Вон есть Пик-Бейсик для пиков. или вообще Flowcode, какой-то графический турбо-визуальный-конструктор для младших научных сотрудников. Пжалста - ваш выбор, вам решать. Как говорится, не умеете в воду пердеть - нефик рыб пугать.
_________________ Подпись убрал вместе с автором. aen
Последний раз редактировалось Мурато Мяуконни Сб янв 21, 2017 12:36:17, всего редактировалось 1 раз.
Фишка языка Си в этом плане такова, что пространство имен переменных, текстовых замен и доступность функций определено от начала файла и до его конца.
по-моему в своём патриотическом запале вы перегибаете палку, искажая действительность, смешивая всё в кучу.
в Си имена всех функций по умолчанию глобальны, а не ограничены "пространством имен файла". кстати, понятие пространства имен вообще в Си нет, не стоит и превносить этот термин. принято говорить "область видимости". так вот, область видимости идентификатора функции - весь проект в целом, если нет явного ограничения в виде static. более того, не локальные переменные так же формально имеют область видимости во всем проекте! только следует подсказать компилятору, что переменная всё-таки существует при помощи слова extern - и ошибки компиляции не будет, а линкер найдет это имя в любом из множества файлов проекта!
так что ваше утверждение о том, что область видимости ограничена файлом - ошибочно.
и, вообще-то, подобное "глобальное" поведение является недостатком Си, а не достоинством, как ошибочно можно предположить из вашего выступления.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: Google [Bot], ручнойтигр, sancio и гости: 34
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения