Jump to content

    
Sign in to follow this  
Максим Лапшин

Rust вместо C

Recommended Posts

4 часа назад, AlexandrY сказал:

Phyton просёк спрос на либы гораздо более мощные чем у C++,  и тож занял большую нишу у низкобюджетных  программеров  под PC. 

Вообще-то Питон (Python), а не Фитон (Phyton) :), но это типичная опечатка, к которой придираться не стоит. А вот о библиотеках функций действительно стоит поговорить.

 

Скажем, для C/C++ существует астрономическое количество библиотек, но ... их в стандарт не пускают. Тем самым достигается формальная "стабильность" языка за счет спартанского набора функций, замороженных еще в прошлом веке. Вот только что в конце прошлого гола вышла новая "Microsoft Visual Studio 2019", которая на платформе x86 задает моду по части языков. Число функций там пальцем не считала, но размер include-директория снова уменьшился - новых функций не появилось, а некоторые даже исчезли. А в области микроконтроллеров и вовсе абсурдная ситуация - люди на форумах всей гурьбой сочиняют функцию atoi(), для превращения бинарных чисел в текстовый вид. И всё только потому, что стандарт языка не оставляет иных возможностей совершить такое превращением, кроме как с помощью (s)printf(). Тогда как у большинства разработчиков компиляторов представление о стандарте таково, что "нестандартные" функции в языке недопустимы. Это сейчас эпопея с atoi() выглядит смешной на фоне расширения у МК памяти и увеличения их тактовой частоты. Но во времена, когда объем памяти МК был невелик, (s)printf() была неподъемной, как из-за большого размера библиотечного кода, так и из-за своей медлительности вследствие синтаксического разбора форматной строки в реальном времени. В итоге имеем ситуацию, когда разработчики языка и/или его стандарта переложили заботу о функциях на потребителя, уйдя от неблагодарной работы по стандартизации библиотек. Поэтому и, вводя новые стандарты (C++11, C++14 и т.п.), ковыряют синтаксис языка, но библиотеки не трогают.

 

Но это только одна сторона медали, но есть и другая. Стоит только позволить библиотечным функциям размножаться, как язык сразу же "поплывет", т.к. при отсутствии стандартизации библиотечных функций программа перестает быть переносимой, а то и даже читаемой из обилия функций неясного назначения. Эта проблема напрямую касается и составителей библиотек, т.к. при их написании почти всё приходится писать с нуля, чтобы обеспечить независимость от других библиотек, которые тоже могут неожиданно "поплыть". Короче говоря, палка здесь о двух концах: нос вытащишь - хвост увязнет. А компромисс здесь достигается в зависимости от эффективности языка (для процессора, а не для программиста!) - малоэффективные, тяготеющие к интепретаторам (и Питон в их числе) развиваются в сторону роста библиотек, стараясь компенсировать неэффективность исполняемого кода за счет библиотек готовых функций, ранее уже скомпилированных и, как правило, написанных на эффективных языках типа C, а то и ассемблере.

 

Что касается языка Rust, то "хилость" библиотек я бы ему в вину не ставила, поскольку Rust по своей природе относится к эффективным языкам. Кстати, рождающихся в наше время крайне редко,  т.к. ныне акценты сильно смещены в сторону "удобства программирования", тогда как эффективность кода приносится ему в жертву. А библиотеки - дело наживное. Несмотря на мое первое полемическое выступление, которое можно расценить, как антирустовское :), я успела отметить (но не высказать вслух) позитивные качества этого языка. В первую очередь,  понравился правильный (на мой взгляд) подход к безопасности, когда все проверки (аки верификация) приходятся на этап компиляции, а не выносятся в runtime. Ради этой цели и в самом деле можно пойти на еще большую подробность описания объектов с явным указанием того, что с этими объектами можно делать, а чего делать нельзя. Чтобы компилятор более детально мог следить за теми операциями, которые с ними производятся, выдавая в скользких случаях соответствующие варнинги. В силу своей эффективности, Rust вполне может быть использован в сфере создания программ для микроконтроллеров, поскольку не нагружает исполняемый код  параноидальными проверками типа "не изменила ли переменная цикла своего типа за время его последнего оборота, можно ее инкрементировать на единицу?" :).

 

Share this post


Link to post
Share on other sites

Критерии нормальности просты: человеческий синтаксис (пхытон этим не отличается, там логика зависит от того, как вы отступ сделаете! Вообще наркомания какая-то!), возможность собрать бинарник (а не запускать каждый раз интерпретатор), универсальность (хоть пхытон тоже пытаются на МК засунуть, но таки С пока везде впереди), наличие большого количества библиотек (на каком еще языке, кроме С, я смогу под ПК что угодно написать?).

Share this post


Link to post
Share on other sites
4 минуты назад, Eddy_Em сказал:

Критерии нормальности просты: человеческий синтаксис

Это вот это:

 

int *(*(*p)[])(double *p);

 

нормальный человеческий синтаксис?

Share this post


Link to post
Share on other sites
5 минут назад, Eddy_Em сказал:

возможность собрать бинарник (а не запускать каждый раз интерпретатор)

Запускать интерпретатор, не пересобирая каждый раз проект, - часто куда более удобная штука, экономит время, силы даже при отладке. 

 

Share this post


Link to post
Share on other sites
7 минут назад, Eddy_Em сказал:

на каком еще языке, кроме С, я смогу под ПК что угодно написать?

На любом, который вы знаете. Разница лишь в том, что на каком-то из них будет проще/быстрее/дешевле. Все определяется задачей.

Share this post


Link to post
Share on other sites
7 минут назад, Eddy_Em сказал:

универсальность (хоть пхытон тоже пытаются на МК засунуть, но таки С пока везде впереди)

Дадада, напишите на С что-нибудь для веба

Share this post


Link to post
Share on other sites
14 minutes ago, dxp said:

вот это: int *(*(*p)[])(double *p); нормальный человеческий синтаксис?

Да, потому что совершенно все прозрачно. Намного приятней, чем всякие ::->

13 minutes ago, Grizzly said:

чем bash настолько лучше Python?

Тем, что для баша не нужно 100500 библиотек и нет проблем с версионированием, как у питона. Баш-скрипт, написанный 20 лет назад, работает у меня и сейчас. А вот питон этим похвастать не может. С С, кстати, то же самое: старый код легко собрать современным компилятором.

14 minutes ago, dxp said:

Запускать интерпретатор, не пересобирая каждый раз проект

Вот поэтому когда я новый алгоритм оттачиваю, использую octave. Да, считает она супер долго, зато когда алгоритм уже проверен, я переношу исходники на С и радуюсь.

14 minutes ago, Grizzly said:

На любом, который вы знаете.

Нет. Т.к., скажем, на фортране я не смогу написать иксовое приложение. Все упирается в наличие библиотек. А подавляющее большинство библиотек - для С/С++!

15 minutes ago, dxp said:

напишите на С что-нибудь для веба

Уже почти 10 лет успешно пишу. Можете у меня на гитхабе посмотреть. В чем проблема-то написать для веба? Это намного проще, чем под микроконтроллеры!

Share this post


Link to post
Share on other sites
3 минуты назад, Eddy_Em сказал:

Да, потому что совершенно все прозрачно. Намного приятней, чем всякие ::->

О, похоже, наконец мы нашли живого ценителя языков стиля brainfuck.

 

Share this post


Link to post
Share on other sites
On 1/25/2020 at 11:20 PM, Максим Лапшин said:

Если интересно — могу поделиться опытом нашей разработки под stm32

 

Вас надо с Чёблином познакомить на easyelectronics.ru :) Он тоже ратует за Rust.  Если конечно же это не вы :) Вот одна из его тем: http://forum.easyelectronics.ru/viewtopic.php?f=32&t=41874

 

Что касается Rust'а, то моя точка зрения совпадает с т.з. Xenia

 

Нужен доступ в нижний уровень, нужны указатели, а с организацией данных, освобождением кучи мы как-нибудь сами разберёмся.  И stdlib нужен.  Хотя бы для sprintf всяких чтобы склеивать строки в памяти.

Share this post


Link to post
Share on other sites
1 час назад, dxp сказал:

О, похоже, наконец мы нашли живого ценителя языков стиля brainfuck.

Я тоже ценитель, если что:biggrin:

Но Вы хоть раз хоть в одном проекте видели такую конструкцию? Вот такую или еще сложнее? Я вот нет... Бывали у меня конструкции типа массива указателей на функции или указателей на массивы функций, но не более. Я читать это могу, но пишу только в безвыходной ситуации (то есть стараюсь избегать этих конструкций).

Share this post


Link to post
Share on other sites
4 минуты назад, Arlleex сказал:

Я тоже ценитель, если что:biggrin:

Но не будете же при этом утверждать, что это "нормальный человеческий синтаксис"? Особенно по сравнению с синтаксисом высокоуровненвых ЯП вроде питона. Не, я тоже достаточно легко читаю и пишу подобные выражения (хотя на практике предпочитаю разбивать на части с помощью псевдонимов, чтобы код был не только write-only), но за этим стоит приличная практика, и поначалу приходилось ломать мозги, чтобы подобное хотя бы читать. Посему подобные нагромождения скобок и звёздочек не могу признать ни человеческими, ни нормальными. 

 

Код на ЯП с нормальным человеческим синтаксисом читается с ходу, практически без подготовки - как, например, на питоне. Кстати, наш любитель си почему-то не брезгует пользоваться октавой, а ведь это язык по сути такой же как питон или матлабовский скрипт. Та же философия, те же способы достижения эффективности как по скриптованию, так и по скорости выполнения. Поэтому его нападки на тот же питон не логичны и объясняются только тем, что он не знаком с ЯП питон от слова совсем. И единственное, что во всём этом я пока не понимаю: он тролль или просто подросток-максималист в теле взрослого дяди. 

Share this post


Link to post
Share on other sites
2 hours ago, Xenia said:

А в области микроконтроллеров и вовсе абсурдная ситуация - люди на форумах всей гурьбой сочиняют функцию atoi(), для превращения бинарных чисел в текстовый вид

В MSP430 нет аппаратного деления. Поэтому и пришлось писать свой atoi :)

2 hours ago, Xenia said:

тогда как эффективность кода приносится ему в жертву

Больше похоже на "индусский стиль" программирования. Когда оплата идет за объем, ибо нет единого критерия монетизации эффективности.

Share this post


Link to post
Share on other sites
2 hours ago, Xenia said:

Но это только одна сторона медали, но есть и другая. Стоит только позволить библиотечным функциям размножаться, как язык сразу же "поплывет", т.к. при отсутствии стандартизации библиотечных функций программа перестает быть переносимой, а то и даже читаемой из обилия функций неясного назначения.

Rust  между тем оснащен новыми средствами "стабилизации" способными фиксировать снимок либ. 
В IDE для C-и до такого еще не додумались.  
Библиотечная лава будет только расти. От этого никому никуда не деться. 
Буквально сейчас я обновил либы фреймворка  для стабильнейшей RTOS ThreadX и у меня отвалился USB стек. 
Стабильность стала всеобщей проблемой. 
Багаж библиотек для C и С++ в основной массе морально устарел.
Смотрел недавно что может пригодится из Boost-а. Одна труха. 
Может что-то по мат.вычислениям сгодилось бы, но их теперь можно сгенерить в Matlab-е проще и быстрее.  

Rust надо не ругать или хвалить, а понять с какими вызовами он борется.
 

Share this post


Link to post
Share on other sites
51 minutes ago, dxp said:

Код на ЯП с нормальным человеческим синтаксисом читается с ходу, практически без подготовки - как, например, на питоне.

Чушь-то какая! Питон - это наркоманский синтаксис, без укурки никак не разберешься!

51 minutes ago, dxp said:

почему-то не брезгует пользоваться октавой, а ведь это язык по сути такой же как питон или матлабовский скрипт.

Разница очень большая. Синтаксис матлаба придуман людьми для людей, а синтаксис питона - наркоманами для хипстеров-наркоманов!

52 minutes ago, dxp said:

не знаком с ЯП питон от слова совсем

Писал на этом говне скрипты для генерации линз и кое-чего еще во фрикаде (к сожалению, там вместо с-подобного языка для скриптов этот выродок используется). Оплевался!

2 minutes ago, AlexandrY said:

Багаж библиотек для C и С++ в основной массе морально устарел.

бугогашеньки! Вы загляните между делом в /usr/lib и найдите там хотя бы полпроцента несишных библиотек! И кто все это будет под хипстерские недоязычки переписывать?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this