The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проект TrapC развивает Си-подобный язык, безопасно работающий с памятью

12.11.2024 22:17

Стартап Trasec развивает язык программирования TrapC, представляющий собой диалект языка Си, обеспечивающий безопасную работу с памятью. Для блокирования ошибок при работе с памятью, таких как выход за границы выделенного буфера и обращение к уже освобождённой памяти, в TrapC применяется фундаментально иной способ работы с указателями и специальный механизм перехвата ошибок на основе обработчиков исключений (trap). Исходный код компилятора для TrapC планируют открыть в 2025 году.

Заявлено, что особенности работы с указателями по возможности не будут нарушать привычный уклад и будут реализовываться силами компилятора. По задумке авторов языка компилятор будет гарантировать, что указатели ссылаются только на связанные с ними области памяти, а также проверять все границы буферов. Компилятор запоминает типы и не допускает небезопасное приведение типов. Все создаваемые переменные и буферы явно инициализируются или заполняются нулями компилятором.

Вместо malloc в TrapC используется похожий на C++ конструктор new. Вызовы free и delete отсутствуют, а за освобождение памяти отвечает компилятор, что защищает от ошибок, приводящих к утечке памяти. В куче применяется инкрементальное автоматическое управление памятью, но без сборщика мусора. На уровне ABI TrapC будет совместим с Си, что позволит комбинировать в одном приложении код на TrapC и чистом Си, но для кода Си не будет обеспечиваться безопасность работы с памятью.

Проект развивает Робин Роу (Robin Rowe), бывший профессор компьютерных наук, принимавший участие в комитетах по развитию стандартов С и С++, в своё время создавший графический редактор Cinepaint, использовавшийся при создании некоторых голливудских фильмов, и POSIX-библиотеку libunistd для Windows. Соучредителем компании Trasec выступает Габриэль Пантера (Gabrielle Pantera), занимавшая руководящий пост в компании Disney.

Подробности о проекте пока не приводятся, показано лишь несколько примеров с кодом, в котором, например, заявлено, что TrapC не даст переполнить буфер buff при выполнении "strcpy(buff,argv[1]);" или не даст увеличить указатель или индекс массива на значение, смещающее его за пределы выделенного буфера или конца массива. Как именно достигается подобная защита не поясняется.


   // darpa_tractor.c

   int main(int argc,char* argv[])
   {   
           char buff[8]; // TrapC implicitly zeros, no dirty memory    
           int success = 0;// In C, buffer overwrite corrupts success    
           strcpy(buff,argv[1]); // TrapC cannot overrun, strcpy safe    
           if(!strcmp(buff,"s3cr8tpw"))
           {       
                success = 1;    
           }    
           if(success) // TrapC blocked strcpy overwrite, success good    
           {       
                printf("Welcome!\n");    
           }      
           return !success;
   }

   // trapc_ptr.c

   int main()
   {   
           const char* ptr = "Hello World"; // 12 char wide    
           while(ptr) // No buffer overrun with TrapC 
           {       
                printf("%c",*ptr); // print one char at a time 
                ptr++;  // Steps off the end: TrapC nulls ptr!
           }  // Do NOT attempt this in C, will segfault!
           assert(ptr == 0);    
           return 0;
   }

   // trapc_array.c

   int score[10]; 
   printf("%i",score[-1]); // TrapC will not allow access
   for(int i = 0;i <= INT_MAX;i++) // C Undefined Behavior
   {  
        printf("%i",i);
   }
   // In C, above code is an infinite loop, will not stop.  
   // TrapC blocks i++ overflow wrap-around, stops.
   // TrapC will fail-safe, call error handler if defined.

Дополнение: Опубликована видеозапись презентации языка TrapC, анонсированного на проходящей в Бангкоке конференции W2140.





  1. Главная ссылка к новости (https://www.theregister.com/20...)
  2. OpenNews: DARPA развивает AI-транслятор для переписывания Си-кода на Rust
  3. OpenNews: 70% проблем с безопасностью в Chromium вызваны ошибками при работе с памятью
  4. OpenNews: АНБ рекомендует переходить на языки программирования, безопасно работающие с памятью
  5. OpenNews: Методы безопасной работы с памятью позволили существенно снизить число уязвимостей в Android
  6. OpenNews: C++ Alliance продвигает в C++ механизмы безопасной работы с памятью, опробованные в Rust
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62224-trapc
Ключевые слова: trapc, gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (120) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.53, solardiz (ok), 02:14, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Спросил автора Fil-C об отличиях проектов, вот его ответы:
    https://x.com/solardiz/status/1856433226849628551
    Filip Jerzy Pizło @filpizlo
    The presentation is light on hardcore details and only has super simple examples, while Fil-C can run real big stuff (CPython, OpenSSH, etc). So, it’s not clear how it compares. Worth noting Fil-C is freely available today rather than sometime in the future!
    The article says it’s a fork of the language and for example doesn’t allow unions at all. So, I think the biggest difference is that TrapC really is a different language. Fil-C, on the other hand, is just C (and unions are allowed, and they’re made safe).
     
     
  • 2.81, Аноним (-), 08:16, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А можете еще спросить 1 Не хочет ли он нормальные типы с конкретными битност... большой текст свёрнут, показать
     
     
  • 3.92, Жироватт (ok), 09:06, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тогда уж для всех платформ унифицировать примитивные типы по длине А не как в с... большой текст свёрнут, показать
     
     
  • 4.107, Аноним (-), 10:16, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так uint8_t из C99 и аналогичных плюсов - везде и должен быть 8 битов ак... большой текст свёрнут, показать
     
     
  • 5.116, Жироватт (ok), 11:02, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А, понял. Ты про статическую проверку выборки индекса поля в enum'е. Ну, попутал с union, бывает, давно не работал. Ну тогда да.
     
     
  • 6.121, Аноним (121), 11:41, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > А, понял. Ты про статическую проверку выборки индекса поля в enum'е. Ну,
    > попутал с union, бывает, давно не работал. Ну тогда да.

    Это как в том анекдоте - "и упаси тебя перепутать хиппи с толкиенистом". В случае сишника - ну я б еще понял struct и union перепутать (весьма чревато, как в анекдоте), но вот с enum - как?!

     
     
  • 7.132, Жироватт (ok), 14:57, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Это как в том анекдоте - "и упаси тебя перепутать хиппи с толкиенистом".

    Утро, кофе еще не до конца пошло по венам, разнося живительные молекулы по организму

     
  • 5.195, Аноним (195), 02:31, 18/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    У вас какие то придирки причём к основам Сей...

    трешу вроже "bool my_var2 = 255 + 1;" - мето на помойке и язык тут не причём,
    - пишите с    "bool my_var2 = (255 + 1)!=0;" и сразу видно что делает код.

    "enum" это константы для типа int, их (пусть не такой как вам бы хотелось)смысл - быть заменой #define'ам которые типчино именуются заглавными что не всегда наглядно хоть и терпимо, но как и те - знанения должны суммироваться для применения в качестве битмасок.
    Если этого не будет это уже будет не Си.
    Впрочем, раз выкинуты free в subj'е - всёравно лже-Си....


     
  • 3.100, Совершенно другой аноним (?), 09:34, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вроде с типом enum в C23 решили вопрос, можно задавать его базовый тип:

    enum E1 : short { m11, m12 };

    или Вы про другое?

     
     
  • 4.108, Аноним (-), 10:21, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Вроде с типом enum в C23 решили вопрос, можно задавать его базовый
    > тип:
    > enum E1 : short { m11, m12 };

    Это уже чуть лучше  чем было - но...

    > или Вы про другое?

    ... я таки про - несколько другое. См выше пример с функцией получающей на вход enum, но реально можно вызвать something(10) коего в enum нет.

    При том в сорце ЕСТЬ все аннотации намерений. И _можно_ определить в компилтайме что something(10) это нечто совершенно левое. Но нет. В лучшем случае это отловит какой-нибудь сильно отдельный статический анализатор.

     
     
  • 5.142, Совершенно другой аноним (?), 17:17, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > См выше пример с функцией получающей на вход enum, но реально можно вызвать something(10) коего в enum нет.

    Да, согласен с Вами этого сильно не хватает. В C++ попытались решить эту проблему введя enum class, но в C, пока, на эту тему подвижек нет.

     
     
  • 6.169, Аноним (-), 07:52, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Да, согласен с Вами этого сильно не хватает. В C++ попытались решить
    > эту проблему введя enum class, но в C, пока, на эту
    > тему подвижек нет.

    Ну я и не понимаю - в чем прикол сделать перечисляемый тип, но вообще совсем никаких проверок не сделать, никак и нигде как mandatory в стандарте? Ведь 90% фичи - как бы есть. Но без остальных 10% толку то с нее такой? Гряблями по морде получить лишний раз? :)

     
     
  • 7.175, Аноним (175), 13:57, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    enum это способ задать константу 100% без выделения памяти.
     
     
  • 8.176, Аноним (176), 16:40, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Так ее можно и define задать например И даже в случае const - ниоткуда не след... текст свёрнут, показать
     
     
  • 9.181, Аноним (-), 21:52, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это он сейчас может, а когда C разрабатывался, const переменная означала статиче... большой текст свёрнут, показать
     
     
  • 10.186, Аноним (-), 18:26, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это опять же нигде жестко не требуется в стандарте, насколько я понимаю И если ... большой текст свёрнут, показать
     
  • 7.182, Аноним (-), 22:03, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Та эта довольно просто Если ты задумаешься как можно сделать не 90 фичи, а 100... большой текст свёрнут, показать
     
     
  • 8.183, Аноним (-), 01:38, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Но это не значит что не нужно делать ничего Это как с дорогой - сделали ровный... большой текст свёрнут, показать
     
     
  • 9.187, Аноним (-), 18:36, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И это глупо Ибо на разные enum можно даже разные typedef навесить - но даже это... большой текст свёрнут, показать
     
     
  • 10.192, arisu (ok), 23:49, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    затем, что виртовские языки не защищают от идиота чтобы защитить от идиота 82... текст свёрнут, показать
     
     
  • 11.196, Аноним (195), 02:56, 18/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И тут какая то ахинея особой разницы между ними нет же в мышлении как скажем с... текст свёрнут, показать
     

     ....большая нить свёрнута, показать (20)

  • 1.2, nc (ok), 23:01, 12/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Самое главное непонятно - в чем именно заключается "фундаментально иной способ работы с указателями и специальный механизм обработки ошибок". Жирные указатели как в Cyclone?
     

     ....ответы скрыты (8)

  • 1.4, Аноним Анонимович Анонимов (?), 23:07, 12/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    На моей памяти это уже не первая попытка исправить, «оберткой», чужой, прямо скажем, говнокод.

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

     
     
  • 2.70, Bottle (?), 06:09, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Зная говноделов в комитете, этот стандарт будут внедрять ещё один десяток лет, а софт нужно писать уже сейчас.
    К тому же, обязательно напишут про implementation-defined behaviour. Т.е. стандарт опять окажется нерабочим дерьмом из разряда "А вот тут как хотите так и делайте. Кроссплатформенная арифметика? Нет, не слышали".
     
  • 2.133, Аноним (133), 15:09, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вроде всего третья попытка A, B+ и вот теперь C++
     

  • 1.6, Аноним (6), 23:12, 12/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Вместо malloc в TrapC используется похожий на C++ вызов new. Вызовы free и delete отсутствуют, так как за освобождение памяти отвечает компилятор, что защищает от ошибок, приводящих к утечке памяти.

    И каким образом? Линейными типами? Ну я бы посмотрел, как они в С их добавят. ГЦ? Даже произносить смешно. Автофри, а-ля как в Vlang? Ну так он и работает только для примитивных случаев. Что-то сложнее уже сделать не получится (я пытался), разве что уговаривать компилятор, что ты мамой клянёшься, что освободишь память в конце. Ну, то есть, как ансейф в расте. Собственно, вопрос: а зачем тогда, а главное, на кой?

     
     
  • 2.20, Аноним (20), 23:57, 12/11/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В свифте сделали же автоматическое управление памятью без гц. И никаких боровов чекать не надо.
     
     
  • 3.30, Аноним (30), 00:29, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сделали, ага Просто поменяли терминологию и громко, во всех форумах и теле-инс... большой текст свёрнут, показать
     
     
  • 4.49, Аноним (49), 01:48, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну так в C++ тоже есть shared_ptr который делает то же самое. И никто не говорит что это GC. В р@сте тот же самый подход есть, аналог плюсовых shared_ptr и unique_ptr.
     
     
  • 5.161, Аноним (30), 22:21, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну так в C++ тоже есть shared_ptr который делает то же самое.
    > И никто не говорит что это GC.

    Как же вы, неучи-фанаты-ябла с альтернативной терминологией, надоели:
    https://cplusplus.com/reference/memory/shared_ptr/
    > Manages the storage of a pointer, providing a limited garbage-collection facility, possibly sharing that management with other objects.
    >

     
  • 4.79, Пользователь (?), 07:59, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как выше указали, ARC это подобие shared_ptr от Apple, в целом никакой магии.

    Стоит отметить что в Swift активно агитируют использовать структуры везде где только можно

     
  • 4.88, Аноним (-), 08:59, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> В свифте сделали же автоматическое управление памятью без гц.
    > Сделали, ага. Просто поменяли терминологию и (громко, во всех форумах и теле-инстаграмчиках)
    > объявили "ARC - это не GC, вот!"

    Зашибись, а оверхед и непредсказуемость они под ковер как сныкали? :)

     
     
  • 5.162, Аноним (30), 22:26, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Зашибись, а оверхед и непредсказуемость они под ковер как сныкали? :)

    Оверхед - никак (у них там компилятор вставляет Inc_Ref(X)/Dec_Ref(X)), а вот с предсказуемостью у RC-сборщиков как раз все в полном порядке - вполне пригодны для RT-задач.

     
  • 3.156, Аноним (156), 21:11, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, с утечками памяти при циклических ссылках
     

  • 1.9, ijuij (?), 23:19, 12/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну и зачем это? Уже пилят Safe C++: https://safecpp.org/
     
     
  • 2.66, Аноним (66), 04:48, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +13 +/


    initializer_list([T; dyn]^/a data) noexcept safe

    using F4 = void/(a, b where a : b, b : a)(int^/a, int^/b) safe;

    struct Pair/(T0.0.0, T1.0.0)<string_view/T0.0.0, string_view/T1.0.0>

    П/ож/алуйст/а, не н/ад^о^

     
     
  • 3.89, Аноним (-), 09:01, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +10 +/
    >

    initializer_list([T; dyn]^/a data) noexcept safe

    > using F4 = void/(a, b where a : b, b : a)(int^/a,
    > int^/b) safe;
    > struct Pair/(T0.0.0, T1.0.0)<string_view/T0.0.0, string_view/T1.0.0>


    > П/ож/алуйст/а, не н/ад^о^

    Они, кажется, всерьез решили зарубиться с хрустиками на тему кто получит почетный титул брейнфак-2.0 :)

     
  • 2.194, nc (ok), 12:16, 17/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Горшочек не вари, я еще доки по Carbon и Circle до конца не дочитал а тут еще и это
     

  • 1.13, Аноним (13), 23:27, 12/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Rust на минималках.
     
     
  • 2.134, Аноним (133), 15:10, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Совместимый по памяти и рантайму без этих всяких жужжаний про safe не safe
     

  • 1.32, Аноним (32), 00:32, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    "Answers the call from NSA, white house, fbi..."

    Яснопонятно. Это кого надо инициатива, дед тут как Линус с Столманом - для ширмы

     
     
  • 2.48, нах. (?), 01:13, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А, знач - хорошие сапоги, надо брать!

     
     
  • 3.87, Аноним (84), 08:58, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Сапоги от NSA - лучше сапоги!

    PS А от отечественного тащ майора ещё лучше.

     
  • 2.135, VladSh (?), 15:13, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > // darpa_tractor.c

    DARPA...

     

  • 1.36, Аноним (36), 00:38, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Будет смешно, если из-за академичности и известности автора все эти zig и им подобные выставят на мороз и будут забыты.
     
     
  • 2.37, Вы забыли заполнить поле Name (?), 00:41, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > академичности

    Aкадемка обычно к успеху обычно не приходит. Из более-менее используемого ocaml. Всякие си, питоны и жс простите не из академки ни разу.

    >  и известности

    Настолько известный, что пришлось писать кто он и чем занимался.

     
     
  • 3.60, HyC (?), 03:16, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Aкадемка обычно к успеху обычно не приходит. Из более-менее используемого ocaml. Всякие си, питоны и жс простите не из академки ни разу.

    И все как на подбор кривые как турецкий ятаган.

     
     
  • 4.67, Вы забыли заполнить поле Name (?), 04:53, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Aкадемка обычно к успеху обычно не приходит. Из более-менее используемого ocaml. Всякие си, питоны и жс простите не из академки ни разу.
    > И все как на подбор кривые как турецкий ятаган.

    Чтож поделать. Взлетает почему-то именно такое.

     
     
  • 5.91, Аноним (-), 09:04, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Чтож поделать. Взлетает почему-то именно такое.

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

     
  • 5.95, Анониссимус (?), 09:13, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Во-первых, миллионы мух. А во-вторых, уж очень велик соблазн взять что-то из пары костылей, скреплённых дерьмом, но которое работает здесь и сейчас, вместо того чтобы доделывать более качественное решение.
     
  • 2.51, Вася Пупкин (?), 01:51, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В языке сейчас важно сообщество и экосистема, не считая корневой идеи где он может быть удобно применен. Синтаксис и имя автора лишь могут немного поспособсвовать их становлению.
     
     
  • 3.97, Анониссимус (?), 09:16, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Самое важое в любом языке -- это количество библиотек, которые можно использовать. Если там действительно можно использовать си-либы без всяких проблем, то пользоваться этим можно будет и с минимальным сообществом и экосистемой.
     
  • 2.73, Аноним (73), 07:17, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну если предположить, что Си не из академки, то впоследствии стал использоваться академкой и много чего академического на нем было написано. Так что можно считать, что Си - академка.
     
     
  • 3.82, Жироватт (ok), 08:26, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Удобно перехватил.
     
  • 3.124, Аноним (124), 12:20, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Так что можно считать, что Си - академка.

    Т.е. C взял академический отпуск... от академиков.

     
  • 2.118, Аноним (118), 11:15, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Известности ноль. И уже есть Carbon.
     
     
  • 3.136, Аноним (133), 15:13, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Carbon нихрена не собрать не затаoив половину Google к себе на домашний серверный шкаф из 40 серверов с дисковым массивом - шутка про Java и Gradle артефакты доставаемые гигабайтами какое-то невероятное зависимое говны.

    Пока они не освоят хотя бы CMake не о чем говорить

     
     
  • 4.143, Аноним (143), 17:30, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Релиз в 27-м году. Осталось только подождать, затяните пояса.
     

  • 1.52, htmldevelob (?), 01:51, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    а вообще по теме мне кто то может пояснить что за вечная проблема с памятью ? в си и си++ и наверно в ассемблере нету такой проблемы ? а если есть может кто то тогда ассемблер сделает получше?
     
     
  • 2.58, Йцукенг (?), 03:00, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Просто прочитайте, что такое переполнение буфера, висячие указатели, переполнени... большой текст свёрнут, показать
     
     
  • 3.78, Аноним (78), 07:39, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > В других языках такие проверки и работу с памятью обеспечивают компиляторы.

    Вы давно не программировали? Я пользуюсь g++. Он многие из таких ошибок отслеживает.
    >  Но тогда, обычно, эти языки ограничивают программиста в работе на низком уровне и плохо подходят для написания системных программ, в которых нужно работать напрямую с ячейками памяти.

    Это верно.

     
     
  • 4.158, Аноним (156), 21:16, 13/11/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.119, Аноним (-), 11:20, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Основная проблема с памятью, что тебе надо дёрнуть free delete на кусок памяти т... большой текст свёрнут, показать
     
  • 2.171, Анониматор (?), 08:02, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Никакой проблемы насамом деле нет. Сын учится в вышке, учат кондовый С на указателях и маллоках, причём всего за пару месяцев уже сильно далеко за пределами моего понимания. Любые утечки которые сдают студенты препод сразу видит. Дело в квалификации мне кажется.
     
     
  • 3.193, freecoder (ok), 11:20, 17/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    *Никакой проблемы при написании лаб на Си на самом деле нет
    Поправил.
     

  • 1.61, Аноним (61), 03:17, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > бывший профессор компьютерных наук

    что за ...?

     
     
  • 2.75, Аноним (78), 07:23, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Карабас-Барабас - профессор кукольных наук. Всё нормально.
     
  • 2.83, Жироватт (ok), 08:29, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Помнишь такого вот кривого доцента с кафедры АСУП, САПР или ВТ? Который в жизни не написал ничего реально применимого, но очень гордящегося своим алгоритмом подсчёта синуса от количества усов на морде среднестатистического кота? Такое же, только англоязычное.

     
     
  • 3.101, eugene_martein (ok), 09:36, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Типа, как Зуев, который один год писал синтаксическое AST-дерево для несостоявшегося отечественного компилятора C++ в 90-ых, но получил такую психотравму, что по сей день орёт, что отечественный компилятор есть.
     
     
  • 4.115, Жироватт (ok), 10:57, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Таких у нас вагон и полная тележка сверху.
    Не пониманию я этого наяривания на "академичность". Хотя зубров, вроде Кнута, стоит исключить, там где серьёзный стык высшей математики и алгоритмов - от них и от их изысканий есть реальная польза, но вот остальное...
     
     
  • 5.138, Аноним (138), 15:49, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Не пониманию я этого наяривания на "академичность".

    Она нужна тем кто хочет быть "услышен", а за других говорят их "дела".


    > Хотя зубров, вроде Кнута, стоит исключить

    Говорят, математика это язык природы, просто словарь этого языка переполнен "словами паразитами" ввиде имен всяких "профессоров".

     

  • 1.69, Аноним (69), 05:33, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вообще интересно, но пока ещё сыро и не опенсорс.
     
     
  • 2.80, КО (?), 08:11, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пока сыро - это всё состояние опенсорса, так что вполне подходит
     
     
  • 3.105, Аноним (78), 09:59, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Пока сыро - это всё состояние опенсорса, так что вполне подходит

    Неочевидно. GCC - опенсорс, но не сыро.

     
  • 2.140, Аноним (140), 16:11, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Как говорится, ничто не вечно, ничто не закончено и ничто не совершенно.
     
     
  • 3.145, Аноним (145), 17:37, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А я бы стал утверждать, что программа достигает совершенства к ... концу развития. После чего выбрасывается, и всё начинается сначала. Потребуются примеры? Ну, NC и NU под MS-DOS, да и сама MS-DOS.
     
     
  • 4.164, arisu (ok), 23:25, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    NC достиг совершенства в VC. ;-)

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

     
     
  • 5.172, Incorporated (?), 08:05, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    NC достиг совершенства в MC. ;-)
    Cтаричок до сих пор живее всех живых с далекой середины 90-x!
    И продолжает активно сопровождаться, в отличии от того же FAR
    есть еще TC - но это оффтопик
    Так что даже в деле классических файловых менеджеров семейства NC движуха идет и они показали свою востребованность сообществом
     
     
  • 6.173, arisu (ok), 08:35, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    а MC не надо сопровождать никуда. последнее хорошее, что с ним случилось — это mc^2. который, естественно, в апстрим не взяли, и продолжают там заниматься ерундой. я этот самый mc^2 спокойно использую, и за восемь лет отсутствия очень необходимых сопровождений и обновлений весьма доволен.

    была ещё, кстати, очень крутая штука — x northen captain. уже иксовая, но ещё приличная. жаль, что померла. я как-то думал её оживить, но традиционно заленился.

     

  • 1.99, Аноним (-), 09:32, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Ой не верится, что это возможно Например Чтобы это работало бы, компилятор дол... большой текст свёрнут, показать
     
  • 1.102, Данные в так называемом поле Name (?), 09:39, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я когда был маленький, мне казалось что мир информационных технологий огромен. Казалось, что на каждую, даже самую бредовую репу найдётся орда энтузиастов. Сейчас мнение поменял на прямо противоположное. Индустрия едет по рельсам, которые прокладывают некоторые сверх богатые компании. Смотрю как Oracle пыхтит пытаясь жабу тащить и как ему не хватает силёнок, чего уж говорить об энтузиастах? Короче, не знаю на что рассчитывает "бывший профессор", но безумству храбрых поём мы славу!
     
     
  • 2.111, Аноним55 (?), 10:26, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Увидел иронию в словах "бывший профессор". Но с другой стороны, когда в новом сезоне шоу под названием "университет", видимо для экономии средств, мне предложили из доцентов перейти в старшие преподаватели, наши пути в науке разошлись. Кто его знает, что там произошло.
     
     
  • 3.170, Аноним (-), 07:55, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Увидел иронию в словах "бывший профессор". Но с другой стороны, когда в
    > новом сезоне шоу под названием "университет", видимо для экономии средств, мне
    > предложили из доцентов перейти в старшие преподаватели, наши пути в науке
    > разошлись. Кто его знает, что там произошло.

    В смысле - что? По сторонам посмотри, прфоессор. Увидишь куда идут ломовые выплаты.

     
  • 2.157, Аноним (156), 21:13, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Смотрю как Oracle пыхтит пытаясь жабу тащить и как ему не хватает силёнок, чего уж говорить об энтузиастах?

    Можно подробнее?

     

  • 1.103, Аноним (103), 09:53, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А зачем тогда вообще Си? Открою секрет. Си изобрели, чтобы на ассемблере не писать. Еще тогда если вы хотели не скорости и компактности, а надежности и безопасности - могли писать на басике или паскале.
     
     
  • 2.141, Аноним (141), 16:28, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Си изобрели, чтобы на ассемблере не писать

    Your computer is not a fast PDP-11

     
     
  • 3.155, нах. (?), 20:28, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Си изобрели, чтобы на ассемблере не писать
    > Your computer is not a fast PDP-11

    А гораздо, гораздо хуже. На 11й можно не то что на ассемблере, а прямо в машинных кодах писать (и да, они специально сделаны удобочитаемыми)

    На современной интеловской архитектуре - это рожать ежа против шерсти. Получится мало того что с нечеловеческими усилиями, так запросто еще и медленнее чем у компилятора (потому что тот умеет в execution reordering а ты парные команды подбирал-подбирал, а потом при отладке пришлось вставить еще одну и все пошло по п-де).

     

  • 1.106, Додо (ok), 10:13, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Глядя на примеры использования кажется, что их писал человек, который не понимает принципы работы с памятью вообще - но вместо того, чтобы учиться, он надеется на "безопасный" компилятор. На крайняк можно использовать любой статический анализатор - он подсветит нужные места и даст советы по исправлению.

    // darpa_tractor.c

       int main(int argc,char* argv[])
       {  
               const size_t buff_size = 8; // Зададим размер буфера тут, чисто чтобы не пользоваться sizeof(buff) везде.
               char buff[buff_size];
               int success = 0;
               strncpy(buff, argv[1], buff_size); // Тут используем strncpy вместо strcpy.
               // Тут проверим последний элемент буфера.
               // Если при вызове strncpy исходная строка поместилась в буфер целиком,
               // то буфер будет заполнен нулями до конца. Если нет - то последний элемент будет не 0.
               // А вообще тут strcmp никогда не вернёт 0, потому что размер сравниваемой строки
               // больше размера буфера (если учитывать нулевой байт на конце).
               if(buff[buff_size - 1] == 0 && !strcmp(buff,"s3cr8tpw"))
               {      
                    success = 1;    
               }    
               if(success) // TrapC blocked strcpy overwrite, success good    
               {      
                    printf("Welcome!\n");    
               }      
               return !success;
       }

       // trapc_ptr.c

       int main()
       {  
               const char* ptr = "Hello World";
               // Тут просто меняем while на for (хотя лучше завести отдельную переменную для итерирования).
               for(; *ptr; ptr++)
               {      
                    printf("%c",*ptr);
               }
               return 0;
       }

       // trapc_array.c

       int score[10];
       for (int i = 0; ; i++) {
            printf("%d", i);
            if (i == INT_MAX) break; // Переписываем цикл, вынося условие сюда.
       }

     
     
  • 2.168, Ivan_83 (ok), 02:31, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > const size_t buff_size = 8; // Зададим размер буфера тут, чисто чтобы не пользоваться sizeof(buff) везде.

    По мне sizeof(buff) удобнее константы.
    Хотя вероятно машинный код будет идентичный.


    > strncpy(buff, argv[1], buff_size);

    А кто будет проверять что argc >= 1?)

     
     
  • 3.188, Аноним (-), 18:42, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > По мне sizeof(buff) удобнее константы.
    > Хотя вероятно машинный код будет идентичный.

    sizeof(buff) лучше приучиться просто не юзать - грабельная конструкция, и если там не char был, на этом можно налететь при случае. Даже если вот конкретно тут оно и катит.

    >> strncpy(buff, argv[1], buff_size);
    > А кто будет проверять что argc >= 1?)

    Да, дорогой Додо, если вам такой втык делает Ivan_83 известный своим пофигизмом на все, вы таки - конкретно облажались.

     
     
  • 4.190, Ivan_83 (ok), 23:37, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Мой пофигизм обычно кончается после того как PoC начал работать :)
    И на самом деле в моём коде скорее наоборот избыточно много проверок входных аргументов.
    В этом плане я не согласен с теми же гномерами которые предпочитают падать по раньше на ошибках.


    Насчёт sizeof() - с ней всё нормально пока в объявлении переменной не добавят * или не уберут.
    Я в целом считаю что это не проблема, потому что заменяя тип переменной пограмит должен убедится что оно не только собирается но и что переменная везде корректно используется.
    И на самом деле я просто не люблю объявлять константы в функциях, у меня как правильно и без этого там куча переменных.

     
     
  • 5.191, arisu (ok), 23:40, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > И на самом деле я просто не люблю объявлять константы в функциях,
    > у меня как правильно и без этого там куча переменных.

    ой вэй!

     

  • 1.110, YetAnotherOnanym (ok), 10:25, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Вызовы free и delete отсутствуют

    Ну и зря.

     
     
  • 2.184, LinupsCrashGitz (ok), 11:23, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет памяти - нет проблем
     

  • 1.120, X86 (ok), 11:26, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Это все пустое. Еще пара лет и нейронки смогут сделать простой и более безопасный язык программирования, взяв лучшее из Питонов и Си, разработать к нему понятную документацию и т.д.
    Возможно, даже готовые бинари сразу из чатгпт можно будет скачивать)
     
     
  • 2.126, Аноним (124), 12:36, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Возможно, даже готовые бинари сразу из чатгпт можно будет скачивать)

    Да, такие бинари, что всякие NSA курят в сторонке.

     
  • 2.131, Аноним (131), 13:23, 13/11/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.125, Аноним (-), 12:25, 13/11/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     
  • 1.127, Алексей (??), 12:40, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Проект конечно странный. Какие цели он проследует не понятно. По итогу это новый язык программирования с максимально похожим синтаксисом к C. И созданием данного языка они якобы решают проблему с памятью. Но в таком случае почему бы не пойти дальше улучшить в C еще что нибудь (и получить новый Zig, GO, V lang и тд и тп)?! Ведь по сути я не смогу взять TrapC и скомпилировать (без пердолинга) на нем кучу кода C получив при этом безопасные программы (а вот Fil-C вполне себе позволить это сделать хоть и в ущерб скорости)! Отсюда возникает вопрос: какая аудитория будет пользовался данным языком?! Трушные C/C++?! Так они не боятся утечек памяти и переполнения буфера и не будут переходить на TrapC. Всякие кому нравится C подобный синтаксис?! Так есть же 100500 C подобных языков без проблем с памятью (всякие Zig, Swift и тд и тп). Получается что они создают язык для себя чисто по фану. Ну, может конечно еще кто обзарится! Можно только пожелать им удачи в их трудном но интересном занятии.
     
     
  • 2.129, Аноним (129), 13:03, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зиг улучшил так улучшил, даже многострочные комменты вырезали
     
  • 2.146, anonimous (?), 17:54, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Цель понятная и они не не скрывают - найти инвесторов. Спрос есть? Будет и предложение!
     

  • 1.128, Аноним (129), 13:02, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Стыдно признаваться будет, что используешь язык с таким названием
     
     
  • 2.137, Аноним (133), 15:16, 13/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вы свои проблемы из Java не тащите.
    Всем давно известно корреляция обратная.
     

  • 1.147, Аноним (147), 18:00, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Кстати, интересная видеопрезентация, посмотрите кто не смотрел.
     
  • 1.151, Аноним (-), 18:22, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Есть безопасный диалект чистого Си, называется Cyclone. Последний стабильный релиз вышел в 2006 году. Диалект разрабатывали в стенах AT&T labs.

    Разработчики TrapC велосипедят? Если уж на то пошло, взяли бы готовые наработки "Циклона".

     
  • 1.159, Аноним (156), 21:18, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Как именно достигается подобная защита не поясняется.

    Можно расходится, чуда не будет

     
  • 1.160, Аноним (156), 21:19, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сколько уже языков изобретено, например тот же ATS? Осталось дело за малым - убедить погромистов на них писать.
     
  • 1.163, Аноним (163), 22:55, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем его РуСи Терехова не устроил?
     
  • 1.166, _kp (ok), 23:42, 13/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >>Вместо malloc .. new.. за освобождение памяти отвечает компилятор

    Не понял шутку, типа еще на этапе компиляции виднее когда объект не будет нужен.

    Тут, или не будет работать, или не освобождается память.
    Более иого,даже со сборщиком мусора, ну не верится что оно будет предвидеть возникающие события, при которых надо освободить объект ;)

    В остальном все хорошо.
    Да, понятно, что рантайм должен быть напичкан проверками, ибо на этапе компиляции все не проверить.
    Но ведь и не обязательно всё писать на этом.

    И изюминка на торте...
    А зачем Си, почему не С++?
    Что то низкоуровневое или высокопроизводительное все равно писать на обычных C и С++, а для более высокоуровнего кода С++ удобней.

     
     
  • 2.178, Аноним (-), 17:57, 14/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >А зачем Си, почему не С++?

    Ну так ты сам пиши на плюсах! Зачем других агитируешь-то?

     

  • 1.167, Ivan_83 (ok), 02:28, 14/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Все создаваемые переменные и буферы явно инициализируются или заполняются нулями компилятором.

    Уже минус производительности.
    Дебажные сборки С такое же делают, и кажется флаг для этого есть отдельный компелятору.


    > Вызовы free и delete отсутствуют, а за освобождение памяти отвечает компилятор, что защищает от ошибок, приводящих к утечке памяти.

    И откуда компелятору знать нужна мне эта память или уже нет?
    Типа ссылки по указателям посчитать? - так а мне потом бегать всё занулять чтобы он память освободил?


    Странное в общем оно.

     
     
  • 2.189, Аноним (-), 18:46, 15/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > И откуда компелятору знать нужна мне эта память или уже нет?

    А посмотри как боров-чекер например работает. Некоторые плюсеры смогли посмотрев на это все и довольно сравнимую логику и на плюсах местами захреначить.

    > Странное в общем оно.

    В этом мире есть много странного. Это не значит что оно непременно плохое.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру