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

Хэш-таблицы тоже нет в машине Фон-Неймана. Что теперь, выкидывать хэш-таблицы и везде писать ad-hoc работу с хэшами и массивами?

Вы будете смеятся, но именно так. Эта позиция преподавателя А. В. Столярова: любые «контейнеры» вредны, все структуры данных надо реализовывать самостоятельно. И уже как следствие Питон-пихон, веб макаки, настоящие программисты и далее по списку.

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

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

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

Периодические зависания везде хуже. Но пропихивать gc везде при этом продолжают

mittorn ★★★★★
()
Трап - парень выдающий себя за девушку. На английском - trap, ловушка. Означает, что вас пытаются заманить в негетеросексуальную связь, путем обмана.
olelookoe ★★★
()
Ответ на: комментарий от olelookoe

стопе!

а если КВАС-девушка купилась и попала в гетеро не ожидая по буферам -

так что

душить трапа не всегда негетеро

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

педагогика и есть наивность

Да. В плане понятных, не заумных объяснений.
Нет. В плане отсутствия критического мышления.

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

Спасибо, но уже есть: Zig, Odin, V, C3… etc etc

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

Зато у студента будет работать курсовая. Добрее надо быть.

BceM_IIpuBeT ★★☆☆☆
()

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

уже есть в zig

Наличие GC.

уже есть в D

Стартап Trasec развивает язык программирования TrapC, представляющий собой диалект языка Си, обеспечивающий безопасную работу с памятью
Исходный код компилятора для TrapC планируют открыть в 2025 году.

Ясно.

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

Стандартная, libstdc++ или как она там.
В контроллеры там всякие, например какая нибудь плата управления лифтом.

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

А где там сборщик мусора?

Есть сторонние решения, тот же boehm gc.

А динамические типы?

На уровне синтаксиса нету.

Пост у меня, конечно, полушуточный был. Но именно «полу-». Пока что C++ это самая успешная попытка в комбайн «всё в одном», от эмбедда до геймдева.

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

Разговор был про библиотеку вроде https://uclibc-ng.org чтоб разрабатывать по человечески а не атомики лонгджампы использовать.
То что ты принес это вообще для ядер операционных систем или прошивок.

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

Очевидно, что libstdc++ не годится для МК. Под МК вообще решения общего назначения не годятся.

Поэтому придирка изначально странная. glibc вы тоже в МК не втащите.

Тем не менее, оба ЯП — и Си, и Си++ — дают возможность использовать выразительные возможности языка (то есть пользоваться языком как языком) без жесткой привязки к какому-либо значимому куску runtime library кода. И в этом их сила.

Можно взять хоть ту же uClibc-ng, на которую ты сослался, и писать с её использованием код на крестах. Пользуясь возможностями продвинутого тайпчекера, по сравнению с Си. И языком шаблонов.

wandrien ★★
()

Си-подобный язык

Не нашёл на форуме C∀ (C-for-all):

is an open-source project extending ISO C with modern safety and productivity features, while still ensuring backwards compatibility with C and its programmers. C∀ is designed to have an orthogonal feature-set based closely on the C programming paradigm (non-object-oriented) and these features can be added incrementally to an existing C code-base allowing programmers to learn C∀ on an as-needed basis. In many ways, C∀ is to C as Scala is to Java, providing a vehicle for new typing and control-flow capabilities on top of a highly popular programming language allowing immediate dissemination.

The result of this project is a language that is largely backwards compatible with C, but fixes many of the well known C problems while adding modern language-features. To achieve these goals requires a significant engineering exercise thinking inside the C box. Without extensions to C, it is unable to cope with the needs of modern programming problems and programmers, putting it in jeopardy. Considering the large body of existing C code and programmers, there is significant impetus to ensure C is transformed into a modern programming-language.

https://github.com/cforall/cforall – cfa-cc: Cforall to C Trans-compiler.

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

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

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

вектор stl C++ ~== list Python

Условно да, только хранятся не сами значения, а указатели на значения.

Остальное, извините, не понял.

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

Некоторые даже пытаются пересобирать стандартную библиотеку под себя

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

но как никрути универсальный язык для всего из них не получается

Это же издержка универсального решения. Как говорил герой одного фильма, «я многое умею, но плохо».

Просто о чем мы говорим, это две разные вещи:

  1. «Язык» в широком смысле как сумма технологий вокруг языка.
  2. И собственно в узком смысле сам язык как выразительное средство.

Си++ в качестве выразительного средства придерживался и придерживается принципа «вы не платите накладными расходами за то, чем не пользуетесь».

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

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

Хэш-таблицы тоже нет в машине Фон-Неймана. Что теперь, выкидывать хэш-таблицы и везде писать ad-hoc работу с хэшами и массивами?

Представьте себе, в Pascal, в Си и Си++ это библиотеки. И да, они написаны с использованием массивов, списков и остатка от деления хэша на размер массива.

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

По-моему это вы пытаетесь обвините меня в том, что я тролль, после того, как вам, ссылаясь на исходники интерпретатора Python, доказали, что вы не знаете, что такое «список» в Python. И никакой подмены тут нет, вы не знаете структуры данных. Вы не знаете как в приведенном вами же языке написать список (как структуру данных).

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

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

Вы не знаете как в приведенном вами же языке написать список (как структуру данных).

Конечно, разицу между list и linked list ваш собеседник не понимает. Вы ему сейчас открыли Америку, оказывается в Python массив называется list. Вот это да. И естественно он не знает как решать задачки уровня 3 или 4 лабороторной работы 1 семестра 1 курса интститута.

Ваша полная и без оговорочная победа в споре. Python/Go/JS разработчики ничего не умеют. Ура!

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

Вы не знаете как в приведенном вами же языке написать список (как структуру данных).

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

Список питона является списком (как структура данных), так как определённо хранит упорядоченный набор значений.

В целом, вариантов написать список достаточно много и зависит от того, какие базовые типы присутствуют в языке. В SQL, например, списком будет таблица с первичным ключом, а в J матрица с рангом 1.

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

а чем «обычные» массивы особенней асоциативных?

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

так что и обычный и асоциативный из библиотек рутин

как то у вас синдром утёнка во все поля

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

Borrow checker в компайл тайме работает. С ним управление памятью происходит без GC.

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

Т.е. если в процессоре нету сейфти массивов, то и в «языке» им неоткуда взяться.

В Эльбрусе есть. И в Си для Эльбруса, соответственно, тоже.

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

Тогда кому нужен это новый Go с синтаксисом C? А так выходит просто в C добавили рантайм проверки и встроили GC, то есть можно сказать изобрели Java 0.1 с теми же идеями. Все пункты из новости соответствуют Java есть и GC, нет проблем с указателями, проверки границ массива, нет alloc/free, явная инициализация, строгая типизация.

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

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

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

такой код просто молча продолжит работать

Чего? Если это правда, тогда это язык Шрёдингера какой-то. Или язык с троичной логикой. Например, такой код:

if (a[10] == 42) {
  halt();
}

То что это будет undefined как во всеми любимом JavaScript? Так может и проблему останова они решат.

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

Даже там, где не было инструкций вычисления адреса, доступ к нужному элементу массива можно было вычислив за 2 ассемблерные инструкции (сложение и загрузка).

Реализация хэш-таблицы может сильно различаться. Есть разные способы решения коллизий. Есть разные алгоритмы и способы хэширования ключа.

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

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

Там нет GC это выяснилось в процессе обсуждения

Это газлайтинг реальности.

В языке нет ручного управления памятью, но и автоматического тоже нет. А какое есть? Магическое?

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

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

В языке нет ручного управления памятью, но и автоматического тоже нет. А какое есть? Магическое?

Да. В слайде написано быстрый GC на основе Heap, а не как в Java. GC - есть.

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

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

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

То что это будет undefined как во всеми любимом JavaScript?

Самому интересно. Автор не раскрыл подробностей.

Так может и проблему останова они решат.

Может быть)) Как говорится, нет ничего невозможного для п***ла. =)

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

Не надо тут. С самого первого поста речь шла о структуре данных, а не об АТД.

Зачем вы тогда переключили разговор на тип list из Python? Когда по контексту было ясно, что беседа идет о алгоритмических задачах на связные списки.

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

Теперь уже вы пытаетесь ввести меня и других в заблуждение.

Мда… это уже серьездно.

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