Комментарии 64
Сейчас тоже не понимаю.
А так в конце статьи
Уткнулся в пределы быстродействия используемого им языка программирования, например, Python.и пр.
Думаю, ниже увидим.
Походу, для любителей холивара.
Системные API — может быть!
Но вот «обычные» веб-API — нет, для них есть более подходящие языки!!!
Перешел на Rust и C, вспоминаю как страшный сон D
о что угодно можно плюс-минус за день
удачи перейти в джаву коммерческую со спрингом (гы-гы-гы) или в какое-нибудь функциональное программирование (хаскель?)
Я сильно сомневаюсь, что среди программистов вообще бывают зарплаты, реально отличающиеся на порядок.
Может двоичной порядок?
Я сильно сомневаюсь, что среди программистов вообще бывают зарплаты, реально отличающиеся на порядок.
50000 рублей и 500000 рублей — вполне реально, десятичный порядок
Ну или точнее так — если это про один город, то между C и питон программистом такой разницы не будет никогда. Она будет между совсем ничего не умеющим джуном/стажером, и специалистом достаточно редкого высокого уровня (скорее всего — с задачами руководства командой). Языком это не объясняется ну никак.
Да пёс его знает, что имели в виду в статье ) если то, что разрабам на Си (начинающим) платят на порядок меньше, чем начинающим pythonшокам, то соглашусь с Вами, что разница вряд ли столь огромна. А если сравнивать профессионального программиста и новичка, то причём тут python/Java? :)
Я скорее к тому, что натянуть этот тезис автора на глобус, наверное, возможно при определенных условиях )
Ну 99000 и 101000))
Низкоуровневое программирование.
Микроконтроллеры — да.
Можно писать так, что понимаешь, как это транслируется без лишних затрат.
Плюсы были излишними.
Насколько это востребованно сейчас — невостребованно.
Только с очень редкими вакансиями, которых почти нет.
Можно выделить 4 основных повода освоить C:
…
- Для написания программ с бескомпромиссным быстродействием.
Но ведь C не даёт бескопромиссного быстродействия.
- Для низкоуровневого программирования различных устройств, например, Arduino, мощности которых не хватает ни на какие другие языки.
Вот прям совсем ни на какие? Даже на C++?
Попробую в обратку сыграть:
Язык C нужен! сейчас! практически безальтернативно (или, э-э-э, ассемблер?):
— для программ, где нет (или с ней проблемы) динамической памяти. Т.е. память есть, страниц/виртуализации/арены/кучи — нет;
— где нет операционки. Да, можно натянуть плюсы, однако всё это грустно…
— для написания драйверов. Да, до сих пор! Читал про заходы C++, читал про «оригиналов», пишущих драйвера на C#, но…
— в банковском секторе (естественно, в узкой сфере);
— в авиационном ПО.
Два последних пункта связаны с возможностью автоматизированной проверки/верификации кода на правильность/отсутствие/недопущение и т.д.
Это у них что-то типа требования: прохождение определённых тестов по коду. При этом используется урезанный C, запрещён ряд функций, и для компиляции используется «сертифицированный» компилятор.
Забавно, но с языком "C" меня связывает только Arduino, на котором используется упрощёная версия C++
Об этом говорят мало, либо предлагаются различные монстры, хоть и опенсорсные, типа MFC, Qt, wxWidgets, Win32++ и т.п. Но для целей создания легкого, простого и легковесного GUI там речь особо не идет. Win32++ конечно самый простой из них, но не слишком привлекателен, поскольку использует парадигму MFC, а к ней уже успели вызвать оскомину.
Остается, по факту только WTL, в связке с С++. Очень классная вещь, но хороших книг на эту тему нет, хоть бери и пиши сам. А для обработки и подготовки данных для интерфейсных программ целесообразно использовать Питон. Для баз данных, уровня небольшого предприятия, вполне годится SQLite и технология MMF.
А вся это «скорость» и «близость к железу» это ни о чем. Простой, легкий и удобный интерфейс плюс такая же работа с данными, вот практически все, что нужно обычному пользователю. А монстромания, типа 1С8х, это на любителя, тем кому «нужно все еще вчера».
Меня, кстати, всегда удивляло, почему одни люди пытаются отговорить других заниматься тем, что им интересно и предлагают взамен свое? Я «свой» C++ / WTL может быть, слегка, рекламирую, но не навязываю.
Конечно, к WTL, как и к математике, надо привыкнуть, чтобы получать удовольствие. На мехмате МГУ была шутка, что удовольствие от математики можно начать получать не ранее третьего курса, до этого это просто адски тяжелая вещь, даже для победителей международных математических олимпиад.
Тем более, что основного кода WTL, 10-й версии, – всего ничего, менее 1,5 мегабайт, в исходниках (не считая ATL и исходных кодов поддержки Windows). Пары лет на освоение хватит за глаза, при достаточном желании.
Однако «логика обстоятельств» сильнее «логики намерений», как говорил товарищ Сталин. Поэтому, пусть она и говорит нам, кто больше прав, а кто меньше.
Я, например, предвзято относился к Питону, пока не приспичило делать очередную обработку строковых данных. Раньше я для подобного использовал Visual FoxPro и С++. Получалось неплохо, но на Питоне это как бы и проще, гораздо, и красивее.
Кстати, на Питоне можно делать и оконный интерфейс. По сравнению с AIR / Flex как-то даже «кучерявее» выходит (тем более что «Адоба» прекратила недавно поддержку Flash и Flex). Но все равно, WTL он не заменит, хотя может помочь в чем-то, если горит.
Насчет «одиночки» вы угадали. Я программист любитель, поэтому корпоративными обязательствами и протоколами не связан. Могу позволить себе быть «вольным художником».
Текущий проект у меня связан с обучением французского языка с нуля, с помощью двуязычных субтитров накладываемых на оригинальное обучающее видео и использование моего метода «запоминания руками» ( scholium.webservis.ru ). Сами видео делаются с повторами фрагментов и паузами между ними. Примеры можно глянуть на my.mail.ru/mail/emmerald/video/_myvideo/4.html (формат 1х1, т.е. к каждому фрагменту добавляется одна пауза) и my.mail.ru/mail/emmerald/video/_myvideo/5.html (формат 3х3, по три одинаковых фрагмента с тремя паузами). Другой ролик (без пауз) можно посмотреть в my.mail.ru/mail/emmerald/video/_myvideo/3.html.
Данные для видео и пересборка самих (оригинальных) роликов делаются с помощью Питона (позже напишу статью здесь об этом). А желание обновить мою древнюю программу «Сколиум», под это дело, наткнулись на козни «Адобы». В декабре прошлого года я вспомнил как и перекомпилировал свой код на AS3 / Flex / AIR, а в январе этого года промежуточные swf-файлы создаваться напрочь отказываются, мол, Ява что-то чудит, без баяна (не помогает даже независимый Apache Flex).
Поэтому решил вместо древних инструментов задействовать WTL для написания той же программы. Пока все складывается удачно. Вот только некоторые шероховатости возникли с воспроизведением звуковых интервалов на С++.
Сама эта тема для меня не новая. Я уже делал проект на WTL с внедрением в него опенсорсного видеопроигрывателя FFPlay. Получилось здорово. Там и видео воспроизводилось, и аудио и даже картинки можно было смотреть. Сам проект был заточен на распознавание (с целью перевода и замены) встроенных субтитров как у роликов «Easy French» на Ютубе либо французского TV 7jours. Продвинулся там нормально, пока не столкнулся с хорошими внешними субтитрами, с которыми работать легче, чем с жестко «впаянными» в видео. Решил, что логичней довести их, до ума, сначала.
В текущем же проекте для поддержки звука использую SDL, который применяется и для видеопроигрывателя FFPlay. Все работает прекрасно, но с точным воспроизведением звукового интервала пока трудности. Как я смотрю, все лепят, что-то свое. В AIR / Flex звук поддерживался на автопилоте, а точность была до одного звукового сэмпла. В SDL готовых функций для этого почти нет, чем точнее, тем больше возни.
Далее WTL я собираюсь использовать для создания своего аналога программы 1С77, но 64-битной и заточенной на SQLite и MMF. Основная проблема – нужно создать общий, универсальный контрол, для списков, диалоговых и печатных форм. В Инете много подобного опенсорса, но подходящего для меня нет. Даже в Qt, не говоря уже про wxWidgets и прочее.
Как-то так. А каковы ваши технические интересы, раз уже речь пошла про них?
Заметка для слоупоков полиформизмв си:
(foo*) bar
Заметка для слоупока: наследование
struct foo{
bar __base__;
}
Заметка ну совсем для долеких 3:
(bar *) foo //теперь мы обращяемся к базе класса
А там уже и можно деструктор и виртуальный деструктор прикрутить и все че хочешь.
Хочу свободу выражать ограничения на то, что могут или не могут делать мои функции
ты тут вообще о чем говоришь?
Допустим вот сигнатура функции (может ты это имел под типом)
void Get();
иди определи что она пишет и куда и не говори мне что тут Си виноват
Вот я возьму и вызову strlen на аргумент инт. И где тут ограничения?
И ко второму аргументу функция не обратится, потому что у неё его нет.
ну тут вообще просто огонь. В Си все функции пытаются делать что ты с несуществующими аргументами.
Вот я возьму и вызову strlen на аргумент инт. И где тут ограничения?
так в этом смысл — ограничения должны быть, чтобы можно было писать математически верный и верифицируемый код. А использовать Си как "мощный" ассемблер… можно, но это слишком низкоуровнево )
Если тебе надо мета программирование то задайся вопросом как компилятор решает эту проблему. Если ты хочешь дженерик контейнеры посмотри как glib это организовал. Штука просто отличная и использовать раз в 100500 удобней не говоря уже про понятность кода.
Так что именно из этого тебе надобно? Все есть. все удобно и эффективно в отличии от массива библиотек вроде бустов и всякой дребедени.
Вопрос остаётся только в скорости разработке на Си. Да это дольше если ты нубас и не вникаешь в суть дела. Да это тяжелее если ты не вникал в саму суть проблемы. Но если ты подкован в теме то реализация функционала на Си очень проста и прямолинейна без лишних абстракций ради абстракций. В этом случае разработка течет очень быстро и без проблем.
Когда у людей проблемы с Си: когда новые программисты привыкли что есть куча библиотек с готовыми решениями и простыми интерфейсами. Но нам не платят за готовые решения. Да есть джава и си шарпы, да они удобны для написания бизнес логики но это маркетинг. Все тоже самое можно сделать на Си ну или на С++ без каких либо проблем (хотя с++ высший уровень мазохизма конечно)
Сортировки с типом чуть умнее, чем qsort. Списки-массивы те же. Ассоциативные контейнеры. Парсеры на комбинаторах.
так это не к языку предъява а к тебе как программисту.
Нулевая поддерживаемость — компилятор не ловит ошибки (ведь у него же нет информации о типах).
а ты там зачем нужен?
Можете привести пример парсера на комбинаторах на C? Не кодогенеренный lex/yacc/etc, а вот ну хотя бы как boost.spirit, я уж не говорю о вещах типа megaparsec/trifecta/etc?
я в парсерах не силен но могу с уверенностью сказать что опять таки если ты не можешь описать алгоритм действий на простом Си то лучше конечно пойти пасти коров.
Это как сказать хочу что бы в Си было встроено подключению к базе данных.
Поэтому Си останется языком программировании а не средой разработки как все ваши новомодные «Языки». Нужен парсер ищи на гите. Нужен драйвер для БД, Ищи на гите. а еще лучше сделай сам. тыж программист.
Нулевая поддерживаемость — компилятор не ловит ошибки (ведь у него же нет информации о типах).
а ты там зачем нужен?
А что это ты не на асме пишешь? Компилятор C за тебя переменные по регистрам пихает.
О возможности посмотреть на тип функции и сказать, что она точно не пишет в файлы, не читает глобальное состояние, и так далее.
Речь про const и pure функции? Они есть в gcc и Clang. Там, вообще, огромное количество атрибутов есть. Сейчас большинство нового C кода всё равно пишется на подмножестве расширений GCC и Clang.
Сука лямбды нету, тут реально обидно
лямбд нет, но есть указатели на функции — бери и вызывай )
Либо что-то через структуры и макросы можно изобразить...
Для чего идут изучать язык С?