Здравствуйте, Курилка, Вы писали:
К>Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.
Здравствуйте, absolute, Вы писали:
A>Хочу безопасный ассемблер.
... безопасный секс, безопасный алкоголь, безопасный никотин, безопасную еду, безопасную работу, безопасных друзей и знакомых, безопасного чтива, безопасных мозгов, да и хммм... кровать тоже должна быть безопасной!
Уж возжелать, так королеву!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
ГВ>... безопасный секс, безопасный алкоголь, безопасный никотин, безопасную еду, безопасную работу, безопасных друзей и знакомых, безопасного чтива, безопасных мозгов, да и хммм... кровать тоже должна быть безопасной!
Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"
Здравствуйте, FDSC, Вы писали:
A>>>Хочу безопасный ассемблер.
K>>MSIL?
FDS>Предупреждать же надо: я чуть со стула не упал!
Никогда о нем так не думал? Меж тем это так и есть. Это ассемблер виртуальной машины. Правда он не безопасен, но есть отдельный верификатор гарантирующий безопасность кода.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Igor Trofimov, Вы писали:
ГВ>>... безопасный секс, безопасный алкоголь, безопасный никотин, безопасную еду, безопасную работу, безопасных друзей и знакомых, безопасного чтива, безопасных мозгов, да и хммм... кровать тоже должна быть безопасной!
iT>Забыли про концепцию гуманного оружия... нужно ее довести до идеи "безопасного оружия"
Точно-точно.
— Тра-та-та! Ты убит!
— А я в танке!
— Ну тогда — тыгыщ-тпуф-ф-ф! И все на десять метров вокруг ранены, а твой танк вообще провалился!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Курилка, Вы писали:
К>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 — что-то нет.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>... безопасный секс, безопасный алкоголь, безопасный никотин, безопасную еду, безопасную работу, безопасных друзей и знакомых, безопасного чтива, безопасных мозгов, да и хммм... кровать тоже должна быть безопасной!
ГВ>Уж возжелать, так королеву!
Сомневаюсь, что вожделение к королевам окажется безопасным...
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, apple-antonovka, Вы писали:
AA>В след раз перед тем как постить код для изобличения С в кривости попробуйте его для начала скомпилить. AA>А С++ сники даавно...
Я и так уже довольно много скомпилировал сишного кода.
А этот код не мой, он приведен на указанном Курилкой сайте: http://cyclone.thelanguage.org/wiki/Cyclone%20for%20C%20Programmers
Именно этому и посвящена ветка: безопасный Си.
Просто это вызывает вопрос — какой ценой и зачем?
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
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++ живуч своей неприхотивостью. Все остальные узкоспециализированные ниши в индустрии разработки давно забиты под завязку.
Здравствуйте, 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), похоже, идет другим путем — "снизу", пытаясь именно скорректировать сам "базовый" язык.
Чем и интересен.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Курилка,
К>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:
Trevor has just posted his experience generating a cross-compiler
for the Nokia 770 which is an Arm-based device.
Hope this helps,
-Greg
Мой вывод: здорово, хорошо, интересно, но! Если бы Циклон был просто типизированным препроцессором для Си, это было бы классно, а так оказалось, что малоприменимо на практике. А жаль.
Чет про регионы не понял. Там что-то написано, а поподробней.. Такое встречается например The page 'Memory Management Via Regions' does not exist, but you can create it if you like.
Ценно было бы к нормальному проверку пристроить. Допустим каждая порция памяти имеет последовательный индекс (новый аллок индекс +1) и два зеркала всей памяти. Одно содержит собственный индекс, а второе индекс куда поинтер показывает, если эта память содержит поинтер. Ноль естественно память не распределена и не содержит поинтера. Ну и список индексов нужно поддерживать.
Естественно это троирование памяти, но таким режимом на случай отладки я бы пользовался.
Здравствуйте, registered anonymous, Вы писали:
>>Безопасный C
RA>заранее извиняюсь, но у меня ассоциируется с безопасным сексом...
Наверное, Вы просто все время думаете о сексе...
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, AVC, Вы писали:
AVC>Наверное, Вы просто все время думаете о сексе...
Угу, Вы читаете мои мысли. И еще пример: у меня товарищ, он не программист, учится на юридическом, так сколько я ему не говорил про С++ и как нужно правильно произносить, все одно — СисиПлюс.
Здравствуйте, Курилка, Вы писали:
К>Java и C# задумывались и создавались как безопасный C++, а другие люди решили, что безопасным нужно сделать и Си, и сделали Cyclone.
Оба на... встрепенитесь, сторонники прогресса, виртуализированных сред исполнения. Безопасный C идет! .NET, Java — must die!