LINUX.ORG.RU

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

 , ,


1

5

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

Из особенностей:

  • Проверки выхода за границы массива. В TrapC применяется фундаментально иной способ работы с указателями и специальный механизм перехвата ошибок на основе обработчиков исключений (trap).

  • Проверки use after free.

  • Наличие GC.

  • Выделение памяти через new. *alloc и free нет.

  • Явная инициализация нулями.

  • Строгая типизация.

Исходный код компилятора для TrapC планируют открыть в 2025 году.

>>> Подробности

★★★★★

Проверено: maxcom ()

Ответ на: комментарий от lbvf50txt

С самого первого поста алгоритмы и структуры данных обсуждались отдельно.

Вы начали говорить, что все пишут на Python/Go/JS. Я сказал, что они писать структуры данных не умеют. Вот и поворот, действительно не умеют, потому что мне на полном серьезе пытались рассказать, что «список» в питоне это список (как структура данных).

zx_gamer ★★★
()
Ответ на: комментарий от zx_gamer

Я сказал, что они писать структуры данных не умеют.

Вы сходили на Leetcode, посмотрели как там неумеют писать на Python?

что мне на полном серьезе пытались рассказать, что «список» в питоне это список (как структура данных).

Процитируйте где я это пишу.

lbvf50txt
()
Ответ на: комментарий от zx_gamer

ваши чайники рассела заведомо пишут на питоне хужее чем вы на чём угодно

зачем вы эту истину тут пастулируете?

qulinxao3 ★★
()
Ответ на: комментарий от lbvf50txt

Процитируйте где я это пишу.

Размазано по сообщениям. Вы утверждаете, что работать с памятью не надо. Как без работы с памятью написать банально список (как структуру данных)? Или вы говорите, что списки не нужны, и тогда вы точно не программист, или вы признаете, что работать с памятью необходимо (но тогда TrapC не нужен).

zx_gamer ★★★
()
Ответ на: комментарий от uin

Ничего не надо пересобирать. Есть newlib-nano, с ним можно использовать шаблоны, классы, и ещё много клёвых плюсовых штучек, причём совершенно без кучи.

Beewek ★★
()
Ответ на: комментарий от zx_gamer
class Solution:
    def canSortArray(self, a: List[int],c=0,p=0) -> bool: 
        q=((c:=c+((z:=bin(x).count('1'))!=p),x,p:=z)for x in a)
        return all(x==y for x,(_,y,_) in zip(sorted(a),sorted(q)))

кому не обходимо?

qulinxao3 ★★
()
Ответ на: комментарий от lbvf50txt

Чем же unique_ptr, shared_ptr не решает проблемы без выдумывания альтернативной семантики. Так может просто все UB в стандарте, взять и определить и они не будут «неопределёнными».

Интересные примеры. Записал в буфер больше байт чем есть - ничего страшного. При доступе за границей массива указатель просто превращается в 0. При переполнении знакового int ничего не происходит. А что происходит неизвестно что, некая обработка исключений.

fuggy
()
Ответ на: комментарий от fuggy

Ну по сути автор как раз «доопределил» UB.

Получилось хуже, чем было.

wandrien ★★
()

занимавшая руководящий пост в компании Disney

Это та компания которая недавно пыталась отмазаться от иска за убийство под предлогом «Вы Пользовательское Соглашение принимали? Принимали. Так вот, там есть пункт о том что вы не будете с нами судиться ни по каким причинам.»

Gentooshnik ★★★★★
()
Ответ на: комментарий от monk

Список питона является списком (как структура данных)

Список - это абстрактный тип данных. А в Python есть конструктор list(). 🤦

Но да. Массив, односвязный список, двусвязный список - это всё реализации абстрактного типа «список».

Gentooshnik ★★★★★
()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от Gentooshnik

Не надо смешивать список как АТД и список как структуру данных.

zx_gamer ★★★
()
Ответ на: комментарий от fuggy

Вся идея UB в том, что компилятор верит в то, что его не существует. Из-за чего он может сильно оптимизировать код. В Си вы не платите за, что не используете.

zx_gamer ★★★
()
Ответ на: комментарий от lbvf50txt

Вы тут клеветой занимаетесь?

все структуры данных надо реализовывать самостоятельно

Зачем тогда он написал библиотеку ScriptPP?

В итоге конвертер тестовых файлов из одного формата в другой пишется на чистом Си и выкладывается как доситжение. The drupal2fs program.

На С он написан только за тем, чтобы не тащить еще один язык в проект. И нет, это не достижение, это просто маленький конвертер.

Наш собеседник поддерижвает позицию А. В. Столярова в этом вопросе.

Может быть я лучше знаю, что я поддерживаю, а что нет?

Но не разделяет позицию А. В. Столярова по отношению к спортивному программированию, по Столярову спортивное программироание вредно, так как там без контейнеров никуда.

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

А это рушит картину мира «настоящих программистов».

Поэтому он написал ScriptPP?

zx_gamer ★★★
()
Ответ на: комментарий от zx_gamer

Из-за чего он может сильно оптимизировать код.

Извращения с UB не дадут сильно оптимизировать код. Если не считать мест, где оптимизировать не надо. Разработчики компиляторов не могут признать что оптимизировать уже некуда и ищут читерские пути, манипулируя UB и создавая ошибки в программах. Уже взрастили на этом токсичную культуру UB-фобов, на которой Раст и паразитирует. Я не говорю что UB не существует, я говорю о том, что разработчики компиляторов в погоне за красивыми цифрами сделали UB более опасными.

jpegqs
()
Ответ на: комментарий от Gentooshnik

Список - это абстрактный тип данных. А в Python есть конструктор list(). 🤦

Тут тролль развлекается. Когда касается его текста он резко прозревает про прямые и косвенные цитаты. А когда касается текста других разигрывается дурачёк который случайно не понял и приписал вам то, чего вы не говорили.

lbvf50txt
()
Ответ на: комментарий от zx_gamer

А структуры данных такой (с именем «список») нет.

Списками являются вектора, односвязные списки, двусвязные списки, стеки, двоичное дерево…

monk ★★★★★
()
Ответ на: комментарий от jpegqs

Извращения с UB не дадут сильно оптимизировать код. Если не считать мест, где оптимизировать не надо.

Если весь код писать вручную, то может быть. Если код формируется из шаблонов/макросов/подставленных функций, то удаление лишних проверок производит только за счёт «извращений с UB».

monk ★★★★★
()
Ответ на: комментарий от zx_gamer

Вот именно. А тут предлагают обёртку или новый компилятор, который будет знать про UB и не оптимизировать используя предположение о том что программист достаточно умный и не будет допускать UB. Вместо это предлагается действия, вроде заполнение нулями неинициализированной памяти.

fuggy
()
Ответ на: комментарий от monk

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

zx_gamer ★★★
()
Ответ на: комментарий от fuggy

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

zx_gamer ★★★
()
Ответ на: комментарий от gns

Так они там нужны были чисто для того, чтобы давить авторитетом на неокрепшие умы студентов. Де как сишечка, только еще лучше.

Minoru ★★★
()
Последнее исправление: Minoru (всего исправлений: 1)
Ответ на: комментарий от Minoru

Только «Hello, world!» полтора мега занимает, если не больше. :) Не, я все понимаю, тред пул, диспетчер горутин, GC, прочие плюшки... Но к хелловорлду это все какое отношение имеет?

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 2)

Сначала обрадовался а потом увидел

Наличие GC.

Видно Го форкнули.

urxvt ★★★★★
()
Ответ на: комментарий от Beewek

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

Newlib is a C library intended for use on embedded systems.

uin ★★★
()
Ответ на: комментарий от uin

Я написал свой простенький аллокатор, printf, и т.д. Только что мне нужно, с теми фичами, что я использую.

jpegqs
()

И сколько тактов эти проверки будут стоить? И на сколько хеллоуворлд распухнет? На расте, например, 400KB весит. На Go ~2MB. А на C++… 16KB… Скоро, наверное, узнаем

Наличие GC.

Это не заметил, значит, от 2 до 50MB. Но зачем этот трап, когда есть go?

rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 4)

Если засунуть в Си что-то отдаляющее его от железа – тогда он становится ненужным.

thegoldone ★★
()
Ответ на: комментарий от uin

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

Не понял. Чего из этого без операционной системы не сделаешь?

Совсем разрабы обленились =)

wandrien ★★
()
Ответ на: комментарий от uin

Как ты выделишь память без операционной системы?

Вот уж проблема так проблема, взять любой готовый аллокатор памяти.

Как фаил прочитаешь запишешь?

Не везде это нужно. Более того, не везде это вообще возможно.

wandrien ★★
()
Ответ на: комментарий от uin

Вы совсем что ли, я на работу пришел, чтобы деньги получать, а не чтобы работать.

Понятно =)

wandrien ★★
()
Ответ на: комментарий от uin

Как ты выделишь память без операционной системы?

Пишу драйвер для инициализаци памяти. Настраиваю MMU, выделяю кусок памяти под аллокации, выделяю в этом куске память.

Как фаил прочитаешь запишешь?

Пишу драйвер для работы с устройством. Пишу драйвер для файловой системы. Читаю/записываю через него.

Но сделать это могут не только лишь все.

jpegqs
()
Ответ на: комментарий от Gentooshnik

Плюс к чему?

К размеру и времени работы hello world.

jpegqs
()
Ответ на: комментарий от lbvf50txt

Да, важный поинт. Вызванная наличием его зелёных тредов неимоверная цена FFI-вызовов – реально ахиллесова пята Golang’а, ставящая крест на применении его во многих областях. Например игровые движки те же. (Это при том что с его ultra low latency GC он мог бы быть даже более предпочтителен для геймдева чем C#). Так что подобные «голанги без горутинов» вполне себе и могли бы заинтересовать сообщество.

p.s. Но безрантаймовый подход Ziglang’а всё равно краше ;)

iXuta
()
Последнее исправление: iXuta (всего исправлений: 5)

Ну и нах.. кому нужны эти ваши пляжи! (c)

KernelPanic
()
Ответ на: комментарий от BceM_IIpuBeT

Если вкратце, то в указателе есть информация о длине массива, которую нельзя изменить программно (получить такой указатель можно специальной ассемблерной командой).

Если подробно, то https://www.researchgate.net/publication/331232880_Secure_execution_environment_for_critical_applications_in_embedded_systems_based_on_Elbrus_family_computing_facilities

monk ★★★★★
()
Ответ на: комментарий от bender

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

Тогда они и сишечку перестанут понимать, патамуштасложна!!!, и будут на бейсиках программировать.

tiinn ★★★★★
()
Ответ на: комментарий от monk

Эта команда работает в user-mode и не защищена от вызова. А значит все ограничения программа накладывает на себя добровольно. На ассемблере должно обходиться, но специально я это не проверял.

Защищённость там создаётся разными путями, и это лишь один из многих. Вы не сможете добиться RCE в коде, что уязвим на других архитектурах. Так что свой код можно выполнить только имея доступ к shell. Поэтому, даже если ограничения указателей обходятся - это всё равно ничего не даст, из-за всяких других ограничений.

jpegqs
()
Последнее исправление: jpegqs (всего исправлений: 2)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.