Безопасный C
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.10.06 10:43
Оценка: 13 (2) :))
Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.
Re: Хочу безопасный ассемблер.
От: absolute  
Дата: 01.10.06 14:26
Оценка: :)))
Здравствуйте, Курилка, Вы писали:

К>Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.


Хочу безопасный ассемблер.
Re[2]: Хочу безопасный ассемблер.
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 01.10.06 17:05
Оценка: :)
Здравствуйте, absolute, Вы писали:

A>Хочу безопасный ассемблер.


MSIL?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Хочу безопасный ассемблер.
От: FDSC Россия consp11.github.io блог
Дата: 01.10.06 17:14
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, absolute, Вы писали:


A>>Хочу безопасный ассемблер.


K>MSIL?


Предупреждать же надо: я чуть со стула не упал!
Re[2]: Хочу безопасный ассемблер.
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 01.10.06 18:12
Оценка:
Здравствуйте, absolute, Вы писали:

A>Хочу безопасный ассемблер.


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

Уж возжелать, так королеву!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Хочу безопасный ассемблер.
От: Igor Trofimov  
Дата: 01.10.06 18:36
Оценка: :)
ГВ>... безопасный секс, безопасный алкоголь, безопасный никотин, безопасную еду, безопасную работу, безопасных друзей и знакомых, безопасного чтива, безопасных мозгов, да и хммм... кровать тоже должна быть безопасной!

Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"
Re[4]: Хочу безопасный ассемблер.
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.06 18:45
Оценка:
Здравствуйте, FDSC, Вы писали:

A>>>Хочу безопасный ассемблер.


K>>MSIL?


FDS>Предупреждать же надо: я чуть со стула не упал!


Никогда о нем так не думал? Меж тем это так и есть. Это ассемблер виртуальной машины. Правда он не безопасен, но есть отдельный верификатор гарантирующий безопасность кода.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Хочу безопасный ассемблер.
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 01.10.06 19:16
Оценка: :))
Здравствуйте, Igor Trofimov, Вы писали:

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


iT>Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"


Точно-точно.

— Тра-та-та! Ты убит!
— А я в танке!
— Ну тогда — тыгыщ-тпуф-ф-ф! И все на десять метров вокруг ранены, а твой танк вообще провалился!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Безопасный C
От: AVC Россия  
Дата: 01.10.06 19:54
Оценка: +3
Здравствуйте, Курилка, Вы писали:

К>Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.


Похоже, фанаты Си твердо верят в то, что вначале можно вообще не думать, т.к. все можно переделать потом.
О том, как это у них получается можно судить по следующему образцу кода:
int sum(tag_t<`n> num,
        int *@notnull @numelts(valueof(`n)) p) {

Это, так сказать, элегантный способ передать в функцию массив и его размерность (в некоторых языках это называется дескриптором массива).
Любопытно, что когда я утверждал, что в Си на самом деле массивов нема, то большинство, скажем мягко, со мной не согласилось.
Ну что же, смотрите сами.
В других, не таких хороших, как Си, языках, то же самое делается примерно следующим образом:
PROCEDURE sum(VAR a: ARRAY OF INTEGER): INTEGER;
  VAR s, i: INTEGER;
BEGIN
  s := 0;
  FOR i := 0 TO LEN(a)-1 DO s := s + a[i] END;
  RETURN s
END sum;

Прошу прощения за паскалеподобный синтаксис (Оберон): боюсь напутать с синтаксисом Java или C#.

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

C programs can therefore be extremely efficient (at the price of programming effort).

Какие именно особенности языка делают Си "extremely efficient"?
До появления нормальных оптимизаторов на это могли претендовать register и адресная арифметика.
А теперь?
Короче, price of programming effort вижу, а вот extremely efficiency — что-то нет.

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

Хоар
Re[3]: Хочу безопасный ассемблер.
От: AVC Россия  
Дата: 01.10.06 20:56
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>Уж возжелать, так королеву!


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

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

Хоар
Re[2]: Безопасный C
От: apple-antonovka  
Дата: 02.10.06 00:17
Оценка: :)
В след раз перед тем как постить код для изобличения С в кривости попробуйте его для начала скомпилить.
А С++ сники даавно...

Те которые не прошаренные и не фанаты пишут так:
int sum_without_fun(const std::vector<int> &a)
{
int out=0;
 for(std::vector<int>::const_iterator i=a.begin();i!=a.end();++i)out+=*i;
return out;
}



Не прошаренные фанаты С++ъ обязательно напишут примерно так:
 
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>

template<class T> struct summator : public std::unary_function<T, void>
{
    T &_sum;
    summator(T &sum):_sum(sum){}
    void operator() (const T &x) { _sum+=x; }
};

template <class T> T sum(const std::vector<T> &a, const T &base_value)
{
    T out(base_value);
    std::for_each(a.begin(), a.end(), summator<T>(out));
    return out;
}

int main(int argc, char* argv[])
{
    std::vector<int> int_array;
    int_array.push_back(1);
    int_array.push_back(2);
    int_array.push_back(5);
    std::cout<<sum(int_array,0)<<"\n";

    std::vector<double> double_array;
    double_array.push_back(1.5);
    double_array.push_back(2.3);
    double_array.push_back(5.1);    
    std::cout<<sum(double_array,0.0)<<"\n";


    std::vector<std::string> string_array;
    string_array.push_back("vasya");
    string_array.push_back("+");
    string_array.push_back("sveta");
    string_array.push_back("=");
    string_array.push_back("sex");
    std::cout<<sum(string_array,std::string())<<"\n";

    return 0;
}


Прошаренные же и умудренные жизненным опытом сделают так:
 
#include <valarray>
#include <iostream>


int main(int argc, char* argv[])
{
    using namespace std;

    valarray<int> int_array(3);
    int_array[0]=1;
    int_array[1]=2;
    int_array[2]=5;
    cout<<int_array.sum()<<"\n";

    valarray<string> string_array(5);
    string_array[0]="vasya";
    string_array[1]="+";
    string_array[2]="sveta";
    string_array[3]="=";
    string_array[4]="kolya";
    cout<<string_array.sum().c_str()<<"\n";
}
Re[3]: Безопасный C
От: AVC Россия  
Дата: 02.10.06 01:15
Оценка:
Здравствуйте, apple-antonovka, Вы писали:

AA>В след раз перед тем как постить код для изобличения С в кривости попробуйте его для начала скомпилить.

AA>А С++ сники даавно...

Я и так уже довольно много скомпилировал сишного кода.
А этот код не мой, он приведен на указанном Курилкой сайте:
http://cyclone.thelanguage.org/wiki/Cyclone%20for%20C%20Programmers
Именно этому и посвящена ветка: безопасный Си.
Просто это вызывает вопрос — какой ценой и зачем?

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

Хоар
Re[4]: Безопасный C
От: apple-antonovka  
Дата: 02.10.06 01:50
Оценка: +1
AVC>Я и так уже довольно много скомпилировал сишного кода.
AVC>А этот код не мой, он приведен на указанном Курилкой сайте:
AVC>http://cyclone.thelanguage.org/wiki/Cyclone%20for%20C%20Programmers
AVC>Именно этому и посвящена ветка: безопасный Си.
AVC>Просто это вызывает вопрос — какой ценой и зачем?
а ой.. хм..
Но там ниже приведена "сокращенная" форма:
int sum(tag_t num, int p[num]);
что вполне нормально в стиле С без плюсов

что касается необходимости безопасностного С++ тут вопрос конечно большой.. Многие тут сетуют что в С++ указатели и изза этого баги... Чтож не используйте указатели, кто заставляет-то? У нас на проектах вообще указатели как таковые запрещены (только если сильно-сильно надо). smart_ptr'ы и самописные обертки-шаблоны вокруг всяческих файлмаппингов и никаких AV и memory-leak'ов . Но баги конечно всегда случаются, но уже более "высокоуровневые"
C++ живуч своей неприхотивостью. Все остальные узкоспециализированные ниши в индустрии разработки давно забиты под завязку.
Re[5]: Безопасный C
От: AVC Россия  
Дата: 02.10.06 02:36
Оценка:
Здравствуйте, apple-antonovka, Вы писали:

AVC>>Я и так уже довольно много скомпилировал сишного кода.

AVC>>А этот код не мой, он приведен на указанном Курилкой сайте:
AVC>>http://cyclone.thelanguage.org/wiki/Cyclone%20for%20C%20Programmers
AVC>>Именно этому и посвящена ветка: безопасный Си.
AVC>>Просто это вызывает вопрос — какой ценой и зачем?
AA>а ой.. хм..
AA>Но там ниже приведена "сокращенная" форма:
AA>int sum(tag_t num, int p[num]);
AA>что вполне нормально в стиле С без плюсов

Да, краткая запись смотрится намного "человечнее".
Признаю, я был в таком шоке от "некраткой" записи и обилия дополнительных резервированных слов, что краткую просмотрел , а пальцы сами потянулись к клавиатуре.
Мне надо еще раз подумать и получше "переварить" информацию, хотя первое впечатление таково, что попытка сделать Си надежнее приводит к заметному его усложнению.
Уже по одной этой причине Cyclone вряд ли станет популярным.

AA>что касается необходимости безопасностного С++ тут вопрос конечно большой.. Многие тут сетуют что в С++ указатели и изза этого баги... Чтож не используйте указатели, кто заставляет-то? У нас на проектах вообще указатели как таковые запрещены (только если сильно-сильно надо). smart_ptr'ы и самописные обертки-шаблоны вокруг всяческих файлмаппингов и никаких AV и memory-leak'ов . Но баги конечно всегда случаются, но уже более "высокоуровневые"

AA>C++ живуч своей неприхотивостью. Все остальные узкоспециализированные ниши в индустрии разработки давно забиты под завязку.

Согласен, дисциплина очень важна и может снизить вероятность ошибки.
Кроме того, Си++ действительно позволяет понизить число явно используемых и небезопасных указателей за счет использования классов и специальных идиом.
По свидетельству очевидцев, программистская команда Дойче Банка при писании на Си++ также старательно (и, видимо, успешно) обходила "скользкие" места в языке.
Любопытно, что Си++, будучи первоначально надстройкой над Си, пытался исправить его дефекты "сверху" — с помощью классов и дисциплины.
Безопасный Си (Cyclone), похоже, идет другим путем — "снизу", пытаясь именно скорректировать сам "базовый" язык.
Чем и интересен.

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

Хоар
Re[4]: Хочу безопасный ассемблер.
От: Дарней Россия  
Дата: 02.10.06 02:48
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"


Уже придумали. Бактерии, которые делают топливо непригодным к применению. Бомбы-вонючки, чтобы уничтожать боевой дух вражеских солдат. И так далее
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re: Безопасный C
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 02.10.06 04:42
Оценка: 13 (2)
Курилка,

К>Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.


Когда у меня была реальная свобода для выбора технологий, я попытался попробовать использовать Cyclone:

Newbie questions

Good day.

I've read "Cyclone-safety" paper, and have found that Cyclone is very
intresting. But actually what I need is very specific task and I want to
know if Cyclone can help me in it. I want the following things:
1. Make win32 dynamic linked library with needed exported functions.
2. Make programs that use other win32 API, dlls and libs.
3. Effectively debug the Cyclone programs.
4. Cross-compile to ARM architecture.

Could Cyclone help me in the area?

Best regards,
Linker Nick.
==================================================================

Hi Nick,

In principle, this should be doable, though I have no experience
with Win32. If you're using Cygwin, then there's a port of the
Win32 interface to GCC. You can probably use the buildlib tool
to build Cyclone-compatible interfaces. If you want to use Mingw
instead of Cygwin, I suspect that this will work as well. Note,
however, that compiling the output of Cyclone with VC++ will not
work.

In terms of debugging, you can use gdb. Note that Cyclone mangles
names of global variables and functions according to namespaces
(e.g., Foo::Bar::baz() turns into Cyc_Foo_Bar_baz().) I sometimes
find it useful to look directly at the generated C code from the
Cyclone compiler instead of debugging relative to the Cyclone
code. To do this, compile with the -save-c and -pp flags.

Finally, regarding cross-compiling for the Arm, you should check
out the blog at the Cyclone web site:

http://cyclone.thelanguage.org/blog

Trevor has just posted his experience generating a cross-compiler
for the Nokia 770 which is an Arm-based device.

Hope this helps,

-Greg


Мой вывод: здорово, хорошо, интересно, но! Если бы Циклон был просто типизированным препроцессором для Си, это было бы классно, а так оказалось, что малоприменимо на практике. А жаль.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[4]: Хочу безопасный ассемблер.
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 22:43
Оценка: :)
Здравствуйте, Igor Trofimov, Вы писали:

iT>Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"


Оно давно изобретено. Называется вентиль на трубе.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Безопасный C
От: Programador  
Дата: 06.10.06 20:01
Оценка:
Чет про регионы не понял. Там что-то написано, а поподробней.. Такое встречается например The page 'Memory Management Via Regions' does not exist, but you can create it if you like.

Ценно было бы к нормальному проверку пристроить. Допустим каждая порция памяти имеет последовательный индекс (новый аллок индекс +1) и два зеркала всей памяти. Одно содержит собственный индекс, а второе индекс куда поинтер показывает, если эта память содержит поинтер. Ноль естественно память не распределена и не содержит поинтера. Ну и список индексов нужно поддерживать.

Естественно это троирование памяти, но таким режимом на случай отладки я бы пользовался.
Re: Безопасный C
От: registered anonymous  
Дата: 06.10.06 23:11
Оценка:
Здравствуйте, Курилка, Вы писали:

>Безопасный C


заранее извиняюсь, но у меня ассоциируется с безопасным сексом...
Re[2]: Безопасный C
От: AVC Россия  
Дата: 07.10.06 12:27
Оценка:
Здравствуйте, registered anonymous, Вы писали:

>>Безопасный C


RA>заранее извиняюсь, но у меня ассоциируется с безопасным сексом...


Наверное, Вы просто все время думаете о сексе...

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

Хоар
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.