LINUX.ORG.RU

Лекция Юрга Гуткнехта «Проект Оберон: 30 лет» в Москве

 , , gutknecht,


2

5

24 октября в Университете Дмитрия Пожарского пройдёт лекция швейцарского профессора Юрга Гуткнехта, соавтора языков Pascal и Oberon, коллеги легендарного Никлауса Вирта.

В программе — совместная лекция и дискуссия «Проект Оберон: 30 лет» Лекторы: Президент Швейцарского общества информатики, профессор ETH Zurich, д-р Юрг Гуткнехт и Ведущий научный сотрудник отдела теоретической физики ИЯИ РАН, координатор проекта «Информатика-21», д.ф.-м.н. Фёдор Васильевич Ткачёв.

17:30, ЦЭМИ РАН (Нахимовский проспект, 47), аудитория 520. Регистрация и пропуск не требуется.

>>> Подробности



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

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

Приведи пример глючных фич.

Охотно.

Отсутствие системы модулей. C++ использует заголовочные файлы, которые полны недостатков: Вынуждает дважды писать одну и ту же функцию (определение в файле с исходным кодом и объявление в заголовочном файле). Увеличивает время компиляции. Можно оптимизировать, используя Предкомпилированные заголовки. Сложный синтаксис и сложная спецификация языка.

C++ заявляется как кроссплатформенный: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. На практике для написания портируемого кода на C++ требуется огромное мастерство и опыт, и «небрежные» коды на C++ с высокой вероятностью могут оказаться непортируемыми. Тонкое владение C++ в принципе может сделать код на C++ столь же портируемым, что и код на Си (хотя, по мнению Линуса Торвальдса, C++ при этом фактически сократится до своего подмножества Си). Однако, критики C++ утверждают, что изучение и использование одновременно всех языков, противопоставляемых C++ (не вызывающих серьёзных проблем при портировании), в сумме требует примерно тех же интеллекта, усилий и временных затрат, что и изучение и использование одного только C++ на высококлассном уровне — в связи с чем становится актуальной также оценка порога вхождения и результативности (производительности и качества труда программистов).

Рефлексивное метапрограммирование в C++ невозможно. Интроспекция предусмотрена, но реализована отдельно от основной системы типов, что делает её практически бесполезной. Наибольшее, что можно получить — параметризацию поведения на заранее известном диапазоне случаев. Это является препятствием против применения C++ в большинстве подходов к реализации AI (за исключением самых примитивных, реализующих статический алгоритм).

Порождающее метапрограммирование на основе шаблонов C++ трудоёмко и ограничено по возможностям. Оно осуществляется за счёт реализации статического (исполняемого на этапе компиляции) интерпретатора примитивного функционального языка программирования посредством шаблонов C++, а также примитивного препроцессора, унаследованного от Си. Сама по себе данная возможность весьма привлекательна, но, во-первых, код на шаблонах C++ имеет крайне низкие показатели понимаемости и тестируемости; во-вторых, при разворачивании шаблонов порождается неэффективный код, так как язык шаблонов не предоставляет никаких средств для оптимизации. При этом встраиваемые предметно-специфичные языки, реализуемые таким образом, всё равно требуют знания самого C++ для их использования, так как возводимые барьеры абстракции сохраняют все свойства нижележащей реализации, что не обеспечивает полноценное разделение труда. Таким образом, возможности C++ по расширению возможностей самого C++ весьма ограничены. Перечисленных недостатков лишены метаязыки, такие как диалекты Lisp и ML, их потомки и гибриды (Haskell, Nemerle), а также Рефал, и потому они являются оптимальным выбором для задачи разработки языков тем или иным способом. В Common Lisp, Nemerle и Template Haskell имеются подсистемы метапрограммирования, делающие доступным свободное определение синтаксиса операций; с их помощью становится возможным встраивание в код предметно-ориентированных языков, не требующих знания основного языка, что обеспечивает эффективное разделение труда разработчиков.

Подобные возможности иным способом предоставляют SML и OCaml. Причиной отставания мощности языка шаблонов C++ является то, что, в отличие от метаязыков, где в качестве подсистемы метапрограммирования используется сам основной язык, в C++ язык шаблонов представляет собой отдельный язык, не совпадающий и не пересекающийся с самим C++ (который к тому же не был задуман создателями языка, а был спонтанно обнаружен хакерами), из-за чего потенциал роста сложности абстракций оказывается ограниченным. В языке D также реализована подсистема шаблонного метапрограммирования, сравнимая по мощности с оной в C++, но более простая в применении.

Принцип C++ «не платишь за то, что не используешь» заявляется как средство обеспечения высокой скорости исполнения. На практике он лишь приводит к чрезмерному использованию ситуативного (ad hoc) полиморфизма — явного описания различного поведения даже для редких ситуаций под единым идентификатором — то есть перегрузки функций. В C++ предусмотрено сразу три формы перегрузки, что приводит к значительному дублированию кода. Перегрузка операторов призвана дать возможность введения в программу т. н. «синтаксического сахара», но в C++ может поощрять бесконтрольное изменение поведения элементарных операций, в том числе new/delete и new[]/delete[], для разных типов (что резко повышает риск разного рода ошибок). Это обусловлено, во-первых, тем, что вводить новый синтаксис нельзя (хотя синтаксис стандартных операторов C++ адекватен семантике далеко не всех типов, которые может потребоваться ввести в программу); а во-вторых, тем, что всякий учебник даже для низкого порога вхождения показывает, как перегружать те или иные операторы, включая и управление временем жизни объектов. (Обычно ввод специального синтаксиса для операций является совершенно безболезненным в аппликативных языках, где эта возможность существует независимо от полиморфной семантики системы типов и не предоставляет доступа к управлению памятью.) Некоторые интуитивно ожидаемые операции (подчистка динамических объектов в случае генерации исключений) в C++ не выполняются в соответствии с означенным принципом; в то же время, значительная часть перегруженных функций и операторов вызывается неявно (приведение типов, создание временных экземпляров классов и др.). Попутно идеология языка смешивает «контроль за поведением» с «контролем за эффективностью» — что представляет опасность, так как де-факто возможности явного контроля этих аспектов исполнения программы со стороны человека являются взаимоисключающими. В сочетании с изобилием побочных эффектов всё это приводит к тому, что по мере роста сложности системы код на C++ не абстрагируется, а, наоборот, усложняется, и значительно снижаются показатели понимаемости и тестируемости — возникает необходимость контролировать (как чтением, так и отладкой) слои реализации по разные стороны от текущего барьера абстракции, что считается плохой практикой в программировании. В результате трудоёмкость (а значит, и стоимость) разработки растёт от объёма реализованной функциональности по вогнутому закону (в языках с полиморфной семантикой системы типов этот рост характеризуется выпуклой кривой за счёт существенно более высокого показателя повторного использования кода).

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

«C++ — кошмарный язык. Его делает ещё более кошмарным тот факт, что множество недостаточно грамотных программистов используют его, до такой степени, что оказывается намного проще выкинуть его как мусор. Откровенно говоря, даже если нет *никаких* причин для выбора Си, кроме того чтобы держать C++-программистов подальше — то одно это уже будет достаточно веским основанием для использования Си. …Я пришёл к выводу, что *действительно* предпочту выгнать любого, кто предпочтёт вести разработку проекта на C++, нежели на Си, чтобы этот человек не загубил проект, в который я вовлечён. C++ приводит к очень, очень плохим проектным решениям. Неизбежно начинают применяться «замечательные» библиотечные возможности вроде STL, и Boost, и прочего мусора, которые могут «помочь» программированию, но порождают: — невыносимую боль, когда они не работают (и всякий, кто утверждает, что STL и особенно Boost стабильны и портируемы, настолько погряз во лжи, что это даже не смешно) — неэффективно абстрагированные программные модели, когда спустя два года обнаруживается, что какая-то абстракция была недостаточно эффективна, но теперь весь код зависит ото всех окружающих её замечательных объектных моделей, и её нельзя исправить, не переписав всё приложение. Другими словами, единственный способ иметь хороший, эффективный, низкоуровневый и портируемый C++ сводится к тому, чтобы ограничиться всеми теми вещами, которые элементарно доступны в Си. А ограничение проекта рамками Си будет означать, что люди его не выкинут, и что будет доступно множество программистов, действительно хорошо понимающих низкоуровневые особенности и не отказывающихся от них из-за идиотской ерунды про «объектные модели». … когда эффективность является первостепенным требованием, «преимущества» C++ будут огромной ошибкой.»

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

какой бред. писал программу с qt которая прекрасно работает как на linux так и на windows. при этом она была написана на 100% в linux и была скомпилирована в windows уже после без единственного изменения в исходном коде. доказывать ничего никому не собираюсь время тратить а то тут некоторым только бы на личности перейти и обосрать оппонента типа он не программист. да пусть я не программист в вашем понимании но конкретно с C++ имел опыт описанный выше. не хотите не верьте и пишите на паскале на здоровье.

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

парадокс не идеальных инструментов (ака правильно делающих ~80% области определения- а на остальном инструменто_спецефичное) что посредством такого инструментария эффективно проводиться селекция случайных пользователей от мастеров_своего_дела.

т.е классическая специализация VS универсализм.

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

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

так что пусть расцветёт 100 цветов.

у «Айзек Азимов. Профессия» - это не фантастика это констатация в чёт отличия ремеслух от реальных университетов.

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

вы можете в логику?

вы можете в риторику!

вы ведь искренны?

С++ не мешает людям проявится в полной своей ипостаси

а так как 95% людей явно не по призванию С++программисты - то и получаем процитированное лонгливубунтом.

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

какой бред. писал программу с qt которая прекрасно работает как на linux так и на windows. при этом она была написана на 100% в linux и была скомпилирована в windows уже после без единственного изменения в исходном коде.

Запустил программу на кутях в маздайке? Молодец! А теперь запусти её на дистрибутиве линукса, в котором отсутствует совместимая с твоей программой версия кутей.

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

Предпочитаете подобное писать руками? Однако...

Предлагаете сделать отдельную тулзу, которая будет транслировать нормальные циклы в фарш из goto и for? Хорошая идея.

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

при разворачивании шаблонов порождается неэффективный код, так как язык шаблонов не предоставляет никаких средств для оптимизации.

У автора текста каша в голове.

Deleted
()

Видео али транскрипт егойной( Юрга Гуткнехта) лекции гиде?

зы. Грёсемуер(?!)(ну который из тройки изначальной Golang авторов- и ученик Вирт(уоза) Никалауоза) - в своих рассказах про историю Го упоминая Оберон и его Объектный указывает соавторов но ни разу! Гуткнехта(интересно пчм?))

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

легко. слинковать всё статически.

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

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

sed в нужном мне функционале переписал и норм, а на гимп нет столько времени и сил.

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

уважаемый, что вы желаете докаказать? что паскальную конструкцию for to нельзя в общем случае тупо сконвертировать в конструкцию for на C? цикл for обычно применяется для прохода по области памяти элементы которой нумеруются начиная с нуля так что элемент с 0xffff уже за пределами этой области, кроме того вместо индексов обычно используется адресная арифметика.

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

паскальную конструкцию for to нельзя в общем случае тупо сконвертировать в конструкцию for на C?

Смогли? Понравился результат?

цикл for обычно применяется для прохода по области памяти элементы которой нумеруются начиная с нуля так что элемент с 0xffff уже за пределами этой области

Подумайте еще.

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

Wrap указателя невозможен? Как это мило. А про «обычно» — это вы зря.

Спасибо. Браво, бис, если будете выступать, прошу пригласить.

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

что вы желаете докаказать?

Только то, что на самом деле не все есть так, как кажется поначалу. Повторюсь, любая задача имеет простое и красивое неправильное решение. Если язык провоцирует на написание таких решений, то это в целом не очень здорово. Когда однотипное решение разное в зависимости от нюансов вне логики алгоритма, это порождает повышенную вероятность ошибок. Это затратно. Это требует необоснованно высокой квалификации. А иначе — условно рабочий результат, с высокой вероятностью ломающийся на граничных случаях.

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

так C не для престарелых училок по информатике со старческим слабоумием а кто не в состоянии продумать не лучше ли ему пойти в уборщики и писать на паскале учебные задачки как хобби после работы, в выходной

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

так C не для престарелых училок по информатике со старческим слабоумием

Как раз для них — оченно способствует молодежь, бьющуюся в приступе юношеского максимализма, в какашки мордой тыкать ;-) Попадаются среди них такие любители, а иногда и профессионалы ;-) Да и мифическому «программисту на фортране» Си не помеха, а развернуться есть где ;-)

Шутки-шутками, но проблемы у Си объективно есть, давно перечислены и пережеваны, с этим очевидным фактом никто не спорит. Избавляться от них тоже никто особенно не собирается, ибо они же и часть его достоинств. Вот такие аверс-реверс...

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

проблемы есть везде. да только если и брать что то другое то точно не паскаль потому что в этом унылом говнище проблем ещё больше.

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

если и брать что то другое то точно не паскаль потому что в этом унылом говнище проблем ещё больше

Ничего, не стоит так переживать, с возрастом говнища в голове обычно становится меньше. Но это не точно...

Не напомните, как там называется логическая ошибка/демагогический прием принижения окружающего для поднятия ЧСВ?

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

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

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

Не показывайте на себе, говорят примета плохая ^)

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

А учебные задачки, они тем и хороши, что на якобы ровном ровном месте позволяют вляпаться и ляпы увидеть. Они-то позволяют, вот только не все видят в силу разных субъективных причин. И это позволяет о субъекте делать достаточно взвешенное суждение, в том числе и самаму этому субъекту. Пользуйтесь.

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

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

Судя по теме, заметили почти все, кроме вас.

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

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

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

Повторюсь, любая задача имеет простое и красивое неправильное решение

Ну если только любая задача представляет собой ту, которую тебе задают на уроках информатики.

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

Не напомните, как там называется логическая ошибка/демагогический прием принижения окружающего для поднятия ЧСВ?

Инфантилизм это называется :)

Deleted
()

Илюха, у которого 16 наколок, а также Бормант и Девзеро залезли в дебри и спорят об отвлечённых вещах.

На самом деле ненависть к Паскалю проистекает из-того факта, что выпускник выучивший Дельфи или ТурбоПаскаль тупо не нашёл работу. Вот и мечет яд в в сторону Оберона. Ога, специализд по 1С нужен, а паскальщик нинужен. Вчерашнему студенту остаётся только вытереть задницу своим дипломом о высшем образовании?

ВУЗам пофик на проблемы своих выпускников, ибо Паскаль же академичен и структурирован. А бывшему студенту нужна нормальная работа чтобы оплачивать аренду жилья и содержать беременную жену. И все академические достоинства Оберонов, Модул и Паскалей перед житейскими проблемами просто поблекнут.

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

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

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

кого имеет? выключи музыку, постарайся сконцентрироваться, внимательно перечитай свой вопрос и постарайся сформулировать его правильно.

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

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

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

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

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

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

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

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

что характерно когда обсуждалась эта тема все кто самостоятельно изучал программирование говорили в один голос что паскаль говно

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

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

так для математики есть хорошие либы на C++. operator overloading в C++ делает возможным использование типов данных с семантикой мат объектов таким же простым как и использование встроенных типов данных. таким образом можно реализовать что угодно: матрицы, векторы, математические не переполняющиеся числа (а не двоичные переполняемые которые тоже имеют своё применение, используются для эффективного подсчёта checksum к примеру в IP заголовке), геометрические фигуры, множества да много чего. тебя препод должен обучать рисованию гуя что ли? так сегодня одно завтра другое, сам должен уметь разбираться по любому, препод нужен в первую очередь что бы можно было спросить совета когда зашёл в тупик и не знаешь почему не работает как надо и можешь просидеть весь день в дебагере так и не узнав что не учитываешь какую нибудь мелочь.

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

есть задачи в которых много подсчётов и когда нет желания разбираться некоторые делали таким образом: код который считает неправильно, после него много \n что бы не было видно и writeln(правильный ответ). с дурой паскалисткой у всех прокатывало так делать. из чего можно зделать вывод что она сама ничерта не понимала, повторяла только по методичке заученное наизусть, от любых вопросов уклонялась аккуратно, однажды проболталась что C++ она не знает. разве может такая дура чему то научить. остаётся только догадываться через постель какого профессора эта дура попала в преподши. по C++ препод толковый мужик не старый и как то аккуратно намекал без говнометания конечно что паскаль это так для начинающих.

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

Похоже, намек был усвоен неверно, причина и следствие попутаны: чтобы грамотно использовать сей инструмент нужно вырасти и перестать быть начинающим; однако само по себе использование C++ не делает из начинающего мастера. Что, собственно, и было продемонстрировано прилюдно.

Учитесь, совершенствуйтесь, а то так и будете всю жизнь ключи подавать. (q) ^)

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

тебя препод должен обучать рисованию гуя что ли?

Именно. Нужно дать пример полноценного его применения, научить творить полезное, а не «слепим что попало и 100 уроков будем через это выводить выхлопы формул». По таким учебным пособиям многому программисткому не научишься.

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

Хотя бы в одном нужно научить разбираться.

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

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

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

некоторые делали таким образом: код который считает неправильно, после него много \n что бы не было видно и writeln(правильный ответ).

Дело в том, что программа на паскале заканчивается «end.», именно вот так с точкой, остаток файла компилятору неинтересен. «Читатель», не видя окончания программы в виде «end.», пролистает до конца и легко «спалит» фальшивый вывод.

Если б про длинные строки написали и WriteLn «на полях» за экраном — выглядело бы правдоподобнее ;)

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

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

Раз методичка не требует обучения написанию нормальных программ, то атас, халява. Попробовали бы вы подставлять цифру в выводе, если бы программа например выводила картинки на экран.

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

согласен на 100%. однако изучение паскаля также не делает из начинающего мастера.

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

видимо тётя была тупее чем ты думаешь, такое ощущение что она вообще боялась панически на код смотреть

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

картинку нарисовать поверь нашлись бы художники

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

нормальных программ

выводила картинки на экран

думаю гуй и картинки на экране это наипростейшее потому что всё наглядно. гораздо сложнее программа которая делает что то за кулисами особенно когда дело касается условий которые затруднительно протестировать, к примеру TCP конкурентный сервер с shared memory и возможными race condition в зависимости от последовательности конкурентных запросов.

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

к примеру TCP конкурентный сервер с shared memory и возможными race condition в зависимости от последовательности конкурентных запросов.

Отличная задача для реализации с нуля совсем зелёными новичками!

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

гуй выводить вобще никакого препода не надо, достаточно книжки по QT. это тебе не диффуры.

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

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

это какой то высер в сторону Qt? я даже не знаю честно говоря как на паскалях пишут гуй. просвети. гуй писать который собирает ввод в формах и выводит результат вычислений дело плёвое на чём угодно.

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