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 ★★★★★
()
Ответ на: комментарий от zx_gamer

Размазано по сообщениям. Вы утверждаете, что работать с памятью не надо.

Стоп. Такого я не утверждал, я говорил о том, что языки с GC активно используются лучшими пробграммистами. Вы передергиваете.

Как без работы с памятью написать банально список (как структуру данных)?

Банальное невежество с вашей стороны. Вы не знаете как работают с связными списками в Python (или любом другом языке с GC). Не идете смореть на Leetcode, а продолжаете спорить.

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

Угу. Ты идиот.

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

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

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

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

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

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

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

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

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

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
()
Ответ на: комментарий от lbvf50txt

Может вам не стоит участвовать в технических дискуссиях, если вы такой легко обидчивый и везде видите троллей? Он точно не идиот, и не тролль. У него есть своя логика, очень консервативная и негибкая (что еще ожидать от того, кто на C89 пишет).

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

Может вам не стоит участвовать в технических дискуссиях, если вы такой легко обидчивый и везде видите троллей?

Нет. Перед тем как назвать человека идиотом или троллем я выдеяю достаточно крупный кредит доверия. Рассказываю какое-то время 2*2=4, но когда кредит доверия расходуется через приписывание аргументов, игнорирование аргументов, перепрыгивание с темы на тему, резкое поглупение/поумнение когда выгодно. То я называю вещи своими именами. Это не идиот это тролль.

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

Может вам не стоит участвовать в технических дискуссиях, если вы такой легко обидчивый и везде видите троллей?

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

Придумывать аргументы, передергивать. Ставить вам смайлики с фейспалмом. Но я не буду. Так для пример показал.

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

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

Нет, мой милый, @jpegqs. У меня нет ни каких методичек, 100% чушь о ненужности GC и безграмотных Питонистах, я опроверг фактом. И с темы на тему не прыгал.

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
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.