Цитата: vx от 22.12.2016 15:55:01А можно конкретный пример?
Цитата: vx от 22.12.2016 15:55:01ЦитатаНу и фортран имеет кучу вкусностей типа назначаемых переходов, множественности точек входа в процедуры и кучу бочек остального меда, который естественным образом ложится на архитектуру. Некоторые удобные моменты работы с массивами, изначально существовавшие в фортране, в си появились только в С99.
Что из этого не делается средствами препроцессора C?
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним.. с Диезом каким нибудь или Дельфями.
Цитата: adolfus от 22.12.2016 23:28:39Можно. Вот Вам примерчик из курса по прививанию любви к фортрану. Напишите программу вычисления корней полинома произвольной степени > 5 с комплексными коэффициентами на си, крестах и фортране. Добейтесь, чтобы три варианта давали идентичный результат.
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним.. с Диезом каким нибудь или Дельфями.
Цитата: adolfus от 22.12.2016 22:24:19На самом деле все очень просто решается:
1) изучаем как система в лице malloc() или winAllocMem(или что там сегодня у них вместо нее) этой памятью рулит
2) не выдумываем велосипедов и используем только системные аллокаторы (malloc(), new), какими бы "неэффектвными" они не казались, решая вопросы эффективности алгоритмическими средствами.
3) все независимые компоненты, внутри которых есть запросы на выделение памяти, обвязываем тестами и прогоняем под валгриндом или что там у них в виндах.
Цитата: DarkRaider от 23.12.2016 10:28:46Это автоматически означает потерю эффективности работы приложения (но не разработки естественно).
Чем "опаснее" язык и ниже уровень его абстракции - тем ближе низкоуровневые системные ресурсы, тем выше скорость работы кода и ниже влияние промежуточных этапов (компиляции например), больше потенциальных возможностей оптимизации. Оборотная сторона медали - выше сложность написания, сложнее поддержка кода, большая длительность разработки и отладки, ну и естественно уровень программиста.
Любая абстракция вверх, это повышение "удобности" за счёт требуемых мощностей.
К слову, "критически важные" приложения, при работе на нетипизированных ("сука опасных" как говаривали в Комеди) редко получаются хорошо... так как такое программирование очень быстро снижает уровень проработки кода. Уже не надо думать о том, как что происходит. Знай себе лепи, а компилятор за тебя всё посчитает и приведёт. Да и необходимость таскать за собой "пол операционки" (дотнет например или жабамашина) - тоже не всегда удобна.
Цитата: Superwad от 23.12.2016 12:28:35А для написания безопасных и критически важных программ нужно использовать специальные компиляторы и языки программирования, специально под это заточенные. И С++ и близко туда не подпускать!!! Пристрелить на подступах за горизонтом!!!
Цитата: adolfus от 22.12.2016 23:28:39Вот Вам примерчик из курса по прививанию любви к фортрану. Напишите программу вычисления корней полинома произвольной степени > 5 с комплексными коэффициентами на си, крестах и фортране. Добейтесь, чтобы три варианта давали идентичный результат.
Цитата: adolfus от 22.12.2016 23:09:21Именно компилятор и отличается. Синтаксическим анализатором. Именно генерация и отличается. Потому что промежуточный код совершенно разный и по разному оптимизируется. Фортрановский оптимизируется лучше.
Цитата: Цитата> Эльбрус ... из фортрана в си.
Есть такая програма f2c.
Написана для тех и по просьбе тех, кто не освоил линковки объектных модулей, полученных из разных исходных языков.
Цитата: ЦитатаТаки фортран -- не все можно прогнать через f2c.
Цитата: adolfus от 22.12.2016 23:53:28
> Что из этого не делается средствами препроцессора C?
Препроцессор в результате генерирует си-код, который компилируется си-компилятором в полном соответсвии с синтаксисом си. Си в принципе не допускает передачи управления внутрь функции никаким образом. Все метки внутри любого блока локальны и снаружи не видны.
Цитата: ЦитатаВы в си не можете перейти внутрь функции, минуя пролог ... В фортране можете.
Цитата: ЦитатаЭто дает возможность просто переходить на общий кусок кода из разных функций и иметь для них одну точку выхода. Еще раз -- несколько функций имеют одну точку выхода. Вот у вас есть, скажем, пять функций. Все пять имеют точку входа, но четыре из них вместо возврата делают переход в тело пятой, выполняются там и выходят через return этой самой пятой. На ассемблере это одна их базовых практик и она доступна в фортране.
> Передавайте точку входа как параметр, и будет хватать.
Точку входа не нужно передавать, на нее нужно делать прямой jmp. Это статический адрес. В этом и его ценность -- jmp очень мало стоит, всего лишь одно чтение из памяти во время выборки команды, а передача параметра и возня со стеком в прологе и эпилоге -- много. Очень много. Вычислительные алгоритмы изобилуют такими кусками, когда есть несколько вариантов счета и начало у всех разное, а потом все одинаково и все это нужно крутить в цикле. Слишком накладно в циклах что-либо кому бы то ни было передавать.
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним.. с Диезом каким нибудь или Дельфями.
Цитата: DarkRaider от 23.12.2016 02:45:32Отнюдь, просто я впервые вижу такое предложение в "пример".
Я бы понял и с интересом прочитал если бы Вы привели в пример КОД и показали бы, что аналогичный код на С или любом другом языке вышел бы в 5 раз больше/шуже/дольше. Я бы понял, если бы Вы привели только Код как пример и другие посетители форума привели бы Вам решения на других языках, после чего можно было бы совместно подивится красоте решений.
Но пример "напишите мне код" - это просто с запасом тянет на приз зрительских симпатий!
Цитата: DarkRaider от 23.12.2016 13:35:44***съедено на обед***
Глубота высот этой фразы ускользает в небытие непонятности через дыру в подсознании. Вы сами то поняли что сказали?
Да вот как бы нету их, сильно специализированных системных языков в пруду неспециализированных платформ исполнения. Ближайший представитель этой "специализированной" фауны встретится в программировании микроконтроллеров... а ну да... и они ВСЕ строго типизированные... не работает железяка иначе на низком уровне... нолики, единички понимаешь....
Так что увы, "системные универсальные" - это С(до диеза) и ассемблер. Ну а если мы берём "не системные" задачи - то список уже гораздо шире и гаже, так как сильно варьируется от решаемых задач. Да и полоумных много... в своё время работал в конторе, поставляющей зуботехническое оборудование. Очень дивился тому, что НЕМЕЦКИЙ 5-координатный фрезерный стоматологический(маленький для протезов) станок имел штатное виндовое ПО (там своя небольшая САПР напоминающая solidworks) на жабе.
Цитата: ЦитатаЦитата: DarkRaider от 23.12.2016 10:35:44
***съедено на обед***
Да вот как бы нету их, сильно специализированных системных языков в пруду неспециализированных платформ исполнения. Ближайший представитель этой "специализированной" фауны встретится в программировании микроконтроллеров... а ну да... и они ВСЕ строго типизированные... не работает железяка иначе на низком уровне... нолики, единички понимаешь....
Так что увы, "системные универсальные" - это С(до диеза) и ассемблер. Ну а если мы берём "не системные" задачи - то список уже гораздо шире и гаже, так как сильно варьируется от решаемых задач. Да и полоумных много... в своё время работал в конторе, поставляющей зуботехническое оборудование. Очень дивился тому, что НЕМЕЦКИЙ 5-координатный фрезерный стоматологический(маленький для протезов) станок имел штатное виндовое ПО (там своя небольшая САПР напоминающая solidworks) на жабе.
Цитата: adolfus от 22.12.2016 23:53:28
Препроцессор в результате генерирует си-код, который компилируется си-компилятором в полном соответсвии с синтаксисом си.
Цитата: Superwad от 26.12.2016 10:19:51Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов.
Цитата: Superwad от 26.12.2016 10:19:51Для осознания глубины этой мысли добавлю - С++ шаблоны, дженерики, перегружаемые функции и их вызов из не из С++ компилятора. Чтобы найти проблему в трех соснах - потратил месяц!!! Ну его нах... Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов. По другому не понимаю, для чего это сделано.
Цитата: Superwad от 26.12.2016 10:19:51Для осознания глубины этой мысли добавлю - С++ шаблоны, дженерики, перегружаемые функции и их вызов из не из С++ компилятора. Чтобы найти проблему в трех соснах - потратил месяц!!! Ну его нах... Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов. По другому не понимаю, для чего это сделано.
Цитата: adolfus от 27.12.2016 19:48:56С++ хороший в своей основе язык, но есть и маразмы на ровном месте. Например, симметричное ограничение доступа к закрытой части класса. Куда бы было лучше, если бы доступ по записи/чтению устанавливался независимо. Типа, писать не можешь, но читать -- пожалуйста. Или наоборот. Всего лишь что-то типа модификаторов "readable"/"writable" в закрытой части класса.
Цитата: adolfus от 27.12.2016 19:48:56Куда бы было лучше, если бы доступ по записи/чтению устанавливался независимо.