Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет chistyakov ([info]chistyakov)
@ 2004-12-08 02:32:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Непросвещённым любителям языка "Си". Для чтения (тем, кто умеет).
Читатель может прикинуть, сколько весила бы машина, если бы ее ПО создавалось на основе таких популярных языков как Java или C++ — и когда был бы закончен проект. В качестве масштабного множителя можно предложить отношение объемов описаний языков — 16 стр. для Оберона, 200 для Java и больше 1000 для C++. ;-))

Почти полувековой личный опыт Н.Вирта в разработке пионерского программного обеспечения — компиляторы, операционные системы, прикладные программы (офисное ПО для факультета информатики ETH для рабочих станций Lilith и Ceres с конца 70-х по 1990 г.), управляющие системы реального времени, а также преподавание — такой уникальный опыт придает колоссальный вес его критике широко распространенных языков и практики программирования.



{+}


(Читать комментарии) - (Добавить комментарий)


[info]volodymir_k@lj
2004-12-09 08:38 (ссылка)
Вирт в свои языки принципиально не вводит шаблоны, считая их не нужным усложнением. Если это так, то это просто глупо. Отказ от повторного использования! Приведение типов спасает(ло) Яву, но вообще-то, если вдуматься, это жуткий ужасный кошмар. Ява туда принципиально не подходит, хотя-бы из-за сборки мусора.
Ну-ну-ну. 8-)))
Есть и "Real-time Java" проект. Для ЖЁСТКОГО, КРИТИЧНОГО. А уж для некритичного сам Бог велел.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]potan@lj
2004-12-09 21:31 (ссылка)
Смотрел я на описание "Real-time Java". Пулы памяти, которая не управляется сборзиком муссора, да еще проверка runtime на обращение реалтаймовой нити к нереалтаймовым данным.
Не жизнеспособная штука.
Здесь интереснее подход языка Cyclone - у него проверка пула статическая. Наверно его не очень сложно допилить до поддержки real-time не теряя возможности собирать мусор в вспомогательных нитях. Но это уж больно экзотический проект.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]volodymir_k@lj
2004-12-10 08:39 (ссылка)
Не жизнеспособная штука.
8-)
Категорично Вы штатовцев разделали!

Честно говоря, я не спец по системам реального времени, но три общих соображения:
1. Никто не запрещает программе на Яве сначала выделить все структуры данных и потом прекратить динамическое распределение.

Например, в нашем проекте меговые XMLи для каждого пользователя веб-приложения (а их может быть миллион) надо превращать в объекты. Народ тыкнулся -- SAX sucks (миллион строк создаётся), написали свой парсер по "голому" массиву букв. Запрос 50 мс, разбор 80 мс. Лепота!

2. Если задача требует динамического распределения памяти, то какая разница между Java аллокатором и C++ аллокатором. Всё равно объекты надо освобождать, а для C++ аллокаторов надо доказать устойчивость алгоритма по времени. Но и для Явки в таком случае можно написать свой хороший аллокатор (есть API для подключения).

3. Современные Явы уже с 1.4 позволяют контролировать время задержки на сбор. То есть для Явы тоже можно доказать устойчивость по времени. А тем более что один из режимов сбора мусора сейчас не останавливает "вселенную" (параллельное выполнение).

(Ответить) (Уровень выше)

Ах да, забыл потравить
[info]volodymir_k@lj
2004-12-10 14:08 (ссылка)
8-)

Вот Вы называете Яву "нежизнеспособной" из-за задержки при сборке мусора (проблемы начальных версий).

А вот я давно не глядел на новости С/С++, не подскажете, были ли решены такие проблемы:
1. Результат каждого выделения памяти может быть NULL, и это надо каждый раз проверять?
2. Если такую ссылку не проверить, то обращение к ней приводит к завершению программы? Или обычный способ -- try/catch ловит эту ситуацию?
3. Повторное освобождение памяти по освобождённой ссылке приводит к зацикливанию аллокатора или к разрушению арены?
4. Сочетание стековых буферов с отсутствием проверки выхода за граница массива даёт возможность перейти в произвольное место программы -- всё ещё не решено?

Если нет, то по-моему, С/С++ просто безумно опасный и ошибочный язык.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: Ах да, забыл потравить
[info]potan@lj
2004-12-13 21:32 (ссылка)
Да, конечно. Я же говорил что C++ годится только для пофессионалов очень высокого класса. А таковых мало. К сожалению есть еще одна особенность плюсов - когда на них начинает писать дилетант, ему начинает казаться что он становится профессионалом.
Интересная альтернатива в этом плане - Cyclone.

Кстати, проверку границ массива в C++ можно организовать статически (с помощью шаблонов) в большенстве случаев. Но программировать с помощью того, что получилось будет очень тяжело :-).

Спасибо за новости о Java. Я мало интересуюсь как RT, так и Java, так что отстал от жизни :-).

(Ответить) (Уровень выше)

Re: Ах да, забыл потравить
[info]bofhland@lj
2005-01-25 00:25 (ссылка)
По ANSI C++ невыделение затребованной памяти должно приводить к окончанию работы программы. Обычно это не реализуется.

(Ответить) (Уровень выше)


(Читать комментарии) -