LINUX.ORG.RU
ФорумTalks

Безопасный язык для системного программирования


0

3

Есть успешные? Все знаем, хорошо работает assembler и C, возможно C++.

Есть еще достаточно безопасные и быстрые языки, которые пригодны для написания драйверов, ОС. Или библиотек user space в качестве замены С, тоесть чтобы библиотека не отличалась внешне от обычных библиотек С.

Go похоже не смог заменить, нету серьезного софта, в том числе от гугла на нем. С D непонятно, одни хвалят, но по факту все равно никому он не нужен. Так что, остается С?

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

какая сложная задача. просто-таки невыполнимая

а чего. Это реально сделать? Есть примеры?
//извините за ламерские вбросы

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

а чего. Это реально сделать?

Думаю, что да. В ядре будет немного кода на Си, который будет просто вызывать юзерспейсный код на Хаскеле. Была какая-то реализация ФС на жабке, использовала FUSE.

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

Да-да, я тоже считаю что драйвера девайсов васше на темлейтах надо писать...

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

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

использовала FUSE

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

В ядре будет немного кода на Си,

читерство! :)

Bad_ptr ★★★★★
()

Самый безопасный by design - это пожалуй ADA. Не зря боинг на нем прошивки к своим летающим стальным птицам делает, а в лондонском метро на АДА написана прошивка к полностью автоматическому поезду. Но язык в наше время не очень, мягко говоря популярный, хотя и развивается вполне. По мощности - можно сравнить с C++ предыдущего стандарта, разве что аналога буста под него нет, но дженерики аналогичные STL в базовой поставке есть. Язык (при всей своей дремучей древности) имеет встроенную поддержку много-поточности, имеет свои уникальные (нигде такого больше не видел) механизмы и примитивы синхронизации, так-же встроенные в язык. Единственный минус в плане удобства - для того, что-бы получить доступ к операторам вроде delete / free() нужно написать мини-эссе на тему «я знаю это не безопасно, но я буду следить и вообще беру ответственность на себя».

При всем прочем, существуют компиляторы ADA в Java байткод, так что написанный на ADA код можно запускать на большом количестве разных платформ.

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

читерство! :)

DNS в ядре так и работает - использует юзерспейсный glibc :)

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

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

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

В Си не устраивает убогая система типов.

Чуть не подавился!

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

А если не хватает — делай свой

Так и сделали - gobject.

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

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

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

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

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

я не понял, тебе не нравится конкретно что в системе типов Си?

Как минимум - отсуствие параметризованных типов и вывода типов.

рассматривать ситуацию в разрезе системного программирования,

Нерелевантно.

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

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

Отличный тип данных. Что там опасного?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от vasily_pupkin

Ясен пень. И гибкая система преобразования типов.

Eddy_Em ☆☆☆☆☆
()

Так что, остается С?

Можешь посмотреть на это, всяко ближе к реалиям:

http://compcert.inria.fr/

The CompCert project investigates the formal verification of realistic compilers usable for critical embedded software. Such verified compilers come with a mathematical, machine-checked proof that the generated executable code behaves exactly as prescribed by the semantics of the source program. By ruling out the possibility of compiler-introduced bugs, verified compilers strengthen the guarantees that can be obtained by applying formal methods to source programs.

The main result of the project is the CompCert C verified compiler, a high-assurance compiler for almost all of the ISO C90 / ANSI C language, generating efficient code for the PowerPC, ARM and x86 processors.

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

Он превращает C в php с его

if ("one plus two minus three" == 0)
    echo "yes"
if ("one plus two minus three" == true)
    echo "yes"
if ("19 millions" == "19")
    echo "yes"
Который 3 раза выведет yes. Вот только в случае C, программа ещё и сегфолтнется чуть что, а драйвер ещё и в юзерспейсе память повредит.

Впрочем всякие теоретики всегда были за void*.

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

Он превращает C в php

4.2

Вот только в случае C, программа ещё и сегфолтнется чуть что, а драйвер ещё и в юзерспейсе память повредит.

Все зависит от кривизны рук

Впрочем всякие теоретики всегда были за void*

Очень удобная штука для преобразования данных.

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

4.2

Это «void* - для преобразования данных» - 4.2, а он всё правильно написал.

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

например, компиляторы, то их популярно писать на языках с pattern matching-ом, вроде ML или Haskell, которые сплошь безопасные.

«Основная область применения ML - это написание компиляторов ML» (ц)

tailgunner ★★★★★
()

Java. Создавался как язык для микроконтроллеров и пультов управления.

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

В Си не устраивает убогая система типов.

Неужели всё остальное устраивает? о_О Абстрактная машина, синтаксис, семантика, стандартная библиотека, сборка программ?

unsigned ★★★★
()

настоящие программисты не боятся опасностей

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

Неужели всё остальное устраивает? о_О Абстрактная машина, синтаксис, семантика, стандартная библиотека, сборка программ?

Ну как бы семантика зависит от системы типов. А всё остальное устраивает, да.

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

Удивительно. Я думал, невозможно долго писать на си и остаться довольным хоть чем-то в нём (Eddy_Em не в счёт )).

unsigned ★★★★
()

С D непонятно, одни хвалят, но по факту все равно никому он не нужен.

Думаю, когда стабилизируется - станет многим нужен. Я так только этого и жду.

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

Можно подумать, есть хоть один из ЯП (С не в счет), на котором можно долго писать и быть довольным…

Eddy_Em ☆☆☆☆☆
()

Ada.

  • Входит в состав GCC
  • Успешно развивается (см. Ada 2012)
  • Предельно безопасен

Есть проект ОС на основе Ada - MarteOS. Рекомендуется к ознакомлению.

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

Что, даже насчет синтаксиса удивительно?

Конечно. && вместо человеческого and, операции стараются возвратить то, что не только не нужно, но даже вредно (классическое if(x = 0)). static означает разные вещи, не обязательно относящиеся к статичности, inline - это внезапно не встраивание (и вообще почти игнорируется), auto и register просто лишние. CV-квалификаторы нельзя добавить к указателю под typedef.

Some of the operators have the wrong precedence; some parts of the syntax could be better.(c)K&R

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

Что, даже насчет синтаксиса удивительно?

Конечно.

Странно. Синтаксис Си кто только не слямзил. Может, ты, мил человек, скрытый паскалист?

А static, inline и typedef - это вообще не к синтаксису претензии.

Some of the operators have the wrong precedence; some parts of the syntax could be better.(c)K&R

K&R в бесконечной скромности своей забыли сказать, что лучше ни у кого не получилось %)

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

Я могу сопровождать и код на J.

код на J сопровождать куда проще кода на ATS: у J очень простая семантика и замечательные мнемоники для синтаксиса

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

Синтаксис Си кто только не слямзил.

У Бьерна выбора не было, а остальные просто использовали моду на си++ (а позже на java).

Может, ты, мил человек, скрытый паскалист?

Возможно, латентный. Ты уже не первый раз меня подозреваешь )

А static, inline и typedef - это вообще не к синтаксису претензии.

К лексике? Ну пускай (лексику-то я назвать забыл). Но typedef, афаик, появился только благодаря странныму синтаксису объявления переменных/функций (иначе хватило бы #define). И, кстати, java/c# этот синтаксис брать не стали, а сделали более естественно.

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

Синтаксис Си кто только не слямзил.

У Бьерна выбора не было, а остальные просто использовали моду на си++ (а позже на java).

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

А static, inline и typedef - это вообще не к синтаксису претензии.

К лексике?

static - можно и к лексике, inline (пришедший из Си++) - к изгибам эволюции, typedef - сознательное решение, я полагаю.

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

На самом деле идея темплейтов для дравйверов - отличная. Но только не в С++ реализации :)

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

Не, ну что ты :) не-не-не :) Однако байки о них везде ходят, так же как и о параноидальной секурности у АТИшников :)

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

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

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

PS: Всё равно С остаётся моим любимым инструментом, кто бы что ни говорил.

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

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

Ну тогда однозначно Java.

как ни странно, но так могут говорить только те, кто никогда на Java не писал.

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

Т.е. если какой либо возможности в языке нет, это устраивает?

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

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

А чего все ADA да ADA? Чем плох OBERON? Он покруче ады будет и ося на нем есть Голубая Бутыль прозывается.
Компактный
Быстрый
Немеряно безопасный (даже прицелиться в ногу не даст не то что прострелить)
С развитием правда не густо, но есть из чего выбрать

vada ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.