IT в России и мире в реалиях мирового кризиса

1,401,270 8,469
 

Фильтр
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: vx от 22.12.2016 15:55:01А можно конкретный пример?

Можно. Вот Вам примерчик из курса по прививанию любви к фортрану. Напишите программу вычисления корней полинома произвольной степени > 5 с комплексными коэффициентами на си, крестах и фортране. Добейтесь, чтобы три варианта давали идентичный результат.
  • +0.00 / 0
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: vx от 22.12.2016 15:55:01
ЦитатаНу и фортран имеет кучу вкусностей  типа назначаемых переходов, множественности точек входа в процедуры и кучу бочек остального меда, который естественным образом ложится на архитектуру.  Некоторые удобные моменты работы с массивами, изначально существовавшие в фортране, в си появились только в С99.

Что из этого не делается средствами препроцессора C?

Препроцессор в результате генерирует си-код, который компилируется си-компилятором в полном соответсвии с синтаксисом си. Си в принципе не допускает передачи управления внутрь функции никаким образом. Все метки внутри любого блока локальны и снаружи не видны. Вы в си не можете перейти внутрь функции, минуя пролог, если Вы знаете, что это такое. В фортране можете. Это дает возможность просто переходить на общий кусок кода из разных функций и иметь для них одну точку выхода. Еще раз -- несколько функций имеют одну точку выхода. Вот у вас есть, скажем, пять функций. Все пять имеют точку входа, но четыре из них вместо возврата делают переход в тело пятой, выполняются там и выходят через return этой самой пятой. На ассемблере это одна их базовых практик и она доступна в фортране.
> Передавайте точку входа как параметр, и будет хватать.
Точку входа не нужно передавать, на нее нужно делать прямой jmp. Это статический адрес. В этом и его ценность -- jmp очень мало стоит, всего лишь одно чтение из памяти во время выборки команды, а передача параметра и возня со стеком в прологе и эпилоге -- много. Очень много. Вычислительные алгоритмы изобилуют такими кусками, когда есть несколько вариантов счета и начало у всех разное, а потом все одинаково и все это нужно крутить в цикле. Слишком накладно в циклах что-либо кому бы то ни было передавать.
Отредактировано: adolfus - 23 дек 2016 03:17:30
  • +0.01 / 1
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним..   с Диезом каким нибудь или Дельфями.

Ползете с татами? Начинали мы с вычислений, так давайте не будем расширять область полемики -- мы не на курсах ешибота.
  • +0.00 / 0
  • АУ
Valery
 
russia
St.Petersburg
55 лет
Слушатель
Карма: +2.32
Регистрация: 01.11.2008
Сообщений: 332
Читатели: 0
Цитата: adolfus от 22.12.2016 23:28:39Можно. Вот Вам примерчик из курса по прививанию любви к фортрану. Напишите программу вычисления корней полинома произвольной степени > 5 с комплексными коэффициентами на си, крестах и фортране. Добейтесь, чтобы три варианта давали идентичный результат.

Под OpenVMS - легко (кроме "крестов", их там нет). И даже программа, написанная одновременно (разные подпрограммы) кроме С и Вортрана еще и на Блиссе.  Бейсике и Аде (можно и Кобол прихреначить, и Макро, и PLI...) и слинкованная в один исполняемый модуль даст тот-же результат.
Там просто есть стандарт на передачу параметров в функции и процедуры. Реальные проблемы возникают только с жабой и плюсами. Впрочем, и их приручить можно (но не нужно). Остальное живет очень дружно. А чтобы прототипы функций и определения констант не набивать заново, даже язык придумали - Structure Definition Language. Проверено - работает.
  • +0.00 / 0
  • АУ
Valery
 
russia
St.Petersburg
55 лет
Слушатель
Карма: +2.32
Регистрация: 01.11.2008
Сообщений: 332
Читатели: 0
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним..   с Диезом каким нибудь или Дельфями.

Не вижу проблем великих. Разумеется, его придется именно писать, а не полагаться на то, как совершенно безупречный код будет иногда не глючить под диезом из-за ошибок в среде исполнения.
Давайте не путать "писать программы быстро" и "писать программы качественно". Для "качественно" необходимо четкое понимание программиста, что будет делать процессор и остальное его окружение порой до сигнала и инструкции процессора. Для "быстро" - а завтра патч выйдет...
  • +0.00 / 0
  • АУ
TAU
 
Слушатель
Карма: +53.45
Регистрация: 24.07.2008
Сообщений: 4,228
Читатели: 0
Цитата: adolfus от 22.12.2016 22:24:19На самом деле все очень просто решается:
1) изучаем как система в лице malloc() или winAllocMem(или что там сегодня у них вместо нее) этой памятью рулит
2) не выдумываем велосипедов и используем только системные аллокаторы (malloc(), new), какими бы "неэффектвными" они не казались, решая вопросы эффективности алгоритмическими средствами.
3) все независимые компоненты, внутри которых есть запросы на выделение памяти, обвязываем тестами и прогоняем под валгриндом или что там у них в виндах.

На самом деле при разработке критически важных приложений еще проще решается:
1) Не использовать вообще динамическое распределение памяти, или
2) Не использовать языки с "опасным" распределением памяти
  • +0.00 / 0
  • АУ
sign
 
russia
Слушатель
Карма: +18.59
Регистрация: 23.01.2013
Сообщений: 3,603
Читатели: 0



Российская государственная компания "Почта России" объявила конкурс на поставку 15 000 смартфонов по цене до 13 000 рублей за штуку. Максимальная цена всей закупки — 195 млн рублей. Информация о конкурсе размещена на сайте госзакупок. Главное требование: смартфон должен работать на сертифицированной ФСБ России по классу АК1 отечественной ОС.

Как рассказали ТАСС в "Почте России", смартфоны планируют использовать в качестве мобильных кассовых терминалов, позволяющих принимать у клиентов на дому платежи за ЖКХ, услуги связи, по кредитам, страховым и другим услугам. Сейчас аналогичные терминалы, но не на российской ОС, есть у 10 000 почтальонов.

В документации по конкурсу содержатся технические требования к смартфонам помимо наличия у них соответствующим образом сертифицированной российской ОС. Так, устройство должно обладать экраном диагональю 5 — 5,5 дюйма с разрешением не ниже 1280 на 720 точек, "оперативкой" не менее 2 ГБ, встроенной памятью от 16 ГБ, камерой не менее 8 Мп и батареей на 2500 мА*ч или более. Требования есть и к процессору: 4 ядра, частота не ниже 1,2 ГГц. Устройство также должно работать в сетях 2G и 3G, поддержка LTE обязательной не является.

Министр связи и массовых коммуникаций РФ Николай Никифоров сообщил о конкурсе в своем твиттере и призвал всех производителей мобильных устройств принять в нем участие. Однако пока что под условия конкурса подходит лишь один известный аппарат — Jolla C, работающий на единственной включенной в реестр отечественного ПО мобильной ОС Sailfish. Ранее в этом году в СМИ появлялась информация об этом аппарате, включая его обзор и сведения о поступлении в продажу ограниченной партии устройств. Однако сейчас найти его в интернет-магазинах не удается.
  • +0.02 / 2
  • АУ
Superwad
 
belarus
Минск
51 год
Слушатель
Карма: +73.54
Регистрация: 27.02.2012
Сообщений: 2,641
Читатели: 0
Цитата: DarkRaider от 23.12.2016 10:28:46Это автоматически означает потерю эффективности работы приложения (но не разработки естественно).
Чем "опаснее" язык и ниже уровень его абстракции - тем ближе низкоуровневые системные ресурсы, тем выше скорость работы кода и ниже влияние промежуточных этапов (компиляции например), больше потенциальных возможностей оптимизации. Оборотная сторона медали - выше сложность написания, сложнее поддержка кода, большая длительность разработки и отладки, ну и естественно уровень программиста.

Любая абстракция вверх, это повышение "удобности" за счёт требуемых мощностей.

К слову, "критически важные" приложения, при работе на нетипизированных ("сука опасных"  как говаривали в Комеди) редко получаются хорошо... так как такое программирование очень быстро снижает уровень проработки кода.  Уже не надо думать о том, как что происходит. Знай себе лепи, а компилятор за тебя всё посчитает и приведёт. Да и необходимость таскать за собой "пол операционки" (дотнет например  или жабамашина) - тоже не всегда удобна.

Я не знаю, как насчет быстрой обработки скорости кода. Я как-то пробегал по исходникам библиотек Delphi (VCL) - там половина на чистом Асме написана.
Вот FPC на низком уровне не смотрел - как-то не было надобности. Как в FPC решили проблему кроссплатформенности - не знаю.
А вообще, выкинуть С++ как язык, в котором логика размазана по файлам на один более логически четкий, так как большая часть времени приходится на отладку и логика в плюсах - это вырви мозг. И не надо на меня наседать, что это не так. Да и хваленая "стандартизация" плюсов - это полная туфта. Лично столкнулся. Тот же FPC если надо уменьшить код из-за библиотек, то вместо LCL можно использовать KOL.
А для написания безопасных и критически важных программ нужно использовать специальные компиляторы и языки программирования, специально под это заточенные. И С++ и близко туда не подпускать!!! Пристрелить на подступах за горизонтом!!!
  • +0.00 / 0
  • АУ
TAU
 
Слушатель
Карма: +53.45
Регистрация: 24.07.2008
Сообщений: 4,228
Читатели: 0
Цитата: Superwad от 23.12.2016 12:28:35А для написания безопасных и критически важных программ нужно использовать специальные компиляторы и языки программирования, специально под это заточенные. И С++ и близко туда не подпускать!!! Пристрелить на подступах за горизонтом!!!

По большому счету Вы, безусловно, правы. В АО "Информационные спутниковые системы" используется, например, Модула-2. Увы - весьма значительная часть именно критически важных пишется именно на Cи и С++.
  • +0.00 / 0
  • АУ
vx
 
Слушатель
Карма: +2.07
Регистрация: 12.07.2010
Сообщений: 202
Читатели: 1
Цитата: adolfus от 22.12.2016 23:28:39Вот Вам примерчик из курса по прививанию любви к фортрану. Напишите программу вычисления корней полинома произвольной степени > 5 с комплексными коэффициентами на си, крестах и фортране. Добейтесь, чтобы три варианта давали идентичный результат.

Здесь больше от самого алгоритма зависит, записать его на фортранe/C не проблема.
Навскидку, по-школьному находим корни полинома с комплексными коэффициентами на С:



/* участники ср^Wзабега могут вставить проверки на сходимость,  зацикливание, сделать правильное условие остановки, оценить ошибку, записать арифметику красиво */

Ну вы поняли (c) Язык здесь дело десятое.

// Прикрепил картинкой, движок ломает код.
Отредактировано: vx - 24 дек 2016 15:31:19
  • +0.06 / 5
  • АУ
vx
 
Слушатель
Карма: +2.07
Регистрация: 12.07.2010
Сообщений: 202
Читатели: 1
Цитата: adolfus от 22.12.2016 23:09:21Именно компилятор и отличается. Синтаксическим анализатором. Именно генерация и отличается. Потому что промежуточный код совершенно разный и по разному оптимизируется. Фортрановский оптимизируется лучше.

Это проверялось на конкретных примерах с одинаково плохим исходным кодом на фортране и C?
Цитата: Цитата> Эльбрус ... из фортрана в си.
Есть такая програма f2c.
Написана для тех и по просьбе тех, кто не освоил линковки объектных модулей, полученных из разных исходных языков.

Это для тех, у кого нет компилятора фортрана, потом уже все остальное.
Цитата: ЦитатаТаки фортран -- не все можно прогнать через f2c.

А не надо прогонять через f2c, сразу на C писать проще.

Цитата: adolfus от 22.12.2016 23:53:28

> Что из этого не делается средствами препроцессора C?

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

Не пишите блок как функцию, и перейдете.
Цитата: ЦитатаВы в си не можете перейти внутрь функции, минуя пролог ... В фортране можете.

Это через entry или как? Зависит от компилятора, например GNU Fortran так не делает.
Цитата: ЦитатаЭто дает возможность просто переходить на общий кусок кода из разных функций и иметь для них одну точку выхода. Еще раз -- несколько функций имеют одну точку выхода. Вот у вас есть, скажем, пять функций. Все пять имеют точку входа, но четыре из них вместо возврата делают переход в тело пятой, выполняются там и выходят через return этой самой пятой. На ассемблере это одна их базовых практик и она доступна в фортране.
> Передавайте точку входа как параметр, и будет хватать.
Точку входа не нужно передавать, на нее нужно делать прямой jmp. Это статический адрес. В этом и его ценность -- jmp очень мало стоит, всего лишь одно чтение из памяти во время выборки команды, а передача параметра и возня со стеком в прологе и эпилоге -- много. Очень много. Вычислительные алгоритмы изобилуют такими кусками, когда есть несколько вариантов счета и начало у всех разное, а потом все одинаково и все это нужно крутить в цикле. Слишком накладно в циклах что-либо кому бы то ни было передавать.

Это в каком-то конкретном компиляторе call sub / сall sub_entry сделаны как goto?  Например, в gfortran это не так. Чтобы не тратиться на вызов и возврат, пишем кусок кода как макрос и подставляем.
Отредактировано: vx - 24 дек 2016 16:53:36
  • +0.00 / 0
  • АУ
vx
 
Слушатель
Карма: +2.07
Регистрация: 12.07.2010
Сообщений: 202
Читатели: 1
Цитата: DarkRaider от 22.12.2016 23:48:23Если ЭТО приведено как пример - то сразу предложу встречный план, напишите, пожалуйста, веб-сервер на фортране. А потом сравним..   с Диезом каким нибудь или Дельфями.

nc -l -p 80 -e /super/duper/fortran.program?
  • +0.03 / 3
  • АУ
vx
 
Слушатель
Карма: +2.07
Регистрация: 12.07.2010
Сообщений: 202
Читатели: 1
Цитата: DarkRaider от 23.12.2016 02:45:32Отнюдь, просто я впервые вижу такое предложение в "пример".
Я бы понял и с интересом прочитал если бы Вы привели в пример КОД и показали бы, что аналогичный код на С или любом другом языке вышел бы в 5 раз больше/шуже/дольше.  Я бы понял, если бы Вы привели только Код как пример и другие посетители форума привели бы Вам решения на других языках, после чего можно было бы совместно подивится красоте решений.

Но пример "напишите мне код" - это просто с запасом тянет на приз зрительских симпатий!

Не, ну а чо (c) Вдруг кто поведется и напишет детсадовский код? Его можно разоблачить и удалиться, напевая мантры на фортране.
  • +0.06 / 5
  • АУ
Superwad
 
belarus
Минск
51 год
Слушатель
Карма: +73.54
Регистрация: 27.02.2012
Сообщений: 2,641
Читатели: 0
Цитата: DarkRaider от 23.12.2016 13:35:44***съедено на обед***

  Глубота высот этой фразы ускользает в небытие непонятности через дыру в подсознании. Вы сами то поняли что сказали?



    Да вот как бы нету их, сильно специализированных системных языков в пруду неспециализированных платформ исполнения.  Ближайший представитель этой "специализированной" фауны встретится в программировании микроконтроллеров...  а ну да...  и они ВСЕ строго типизированные...  не работает железяка иначе на низком уровне...  нолики, единички понимаешь....
    Так что увы, "системные универсальные" - это С(до диеза) и ассемблер.  Ну а если мы берём "не системные" задачи - то список уже гораздо шире и гаже, так как сильно варьируется от решаемых задач. Да и полоумных много... в своё время работал в конторе, поставляющей зуботехническое оборудование.  Очень дивился тому, что НЕМЕЦКИЙ 5-координатный фрезерный стоматологический(маленький для протезов) станок имел штатное виндовое ПО (там своя небольшая САПР напоминающая solidworks) на жабе.

Для осознания глубины этой мысли добавлю - С++ шаблоны, дженерики, перегружаемые функции и их вызов из не из С++ компилятора. Чтобы найти проблему в трех соснах - потратил месяц!!! Ну его нах... Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов. По другому не понимаю, для чего это сделано.


Цитата: ЦитатаЦитата: DarkRaider от 23.12.2016 10:35:44


***съедено на обед***
    Да вот как бы нету их, сильно специализированных системных языков в пруду неспециализированных платформ исполнения.  Ближайший представитель этой "специализированной" фауны встретится в программировании микроконтроллеров...  а ну да...  и они ВСЕ строго типизированные...  не работает железяка иначе на низком уровне...  нолики, единички понимаешь....
    Так что увы, "системные универсальные" - это С(до диеза) и ассемблер.  Ну а если мы берём "не системные" задачи - то список уже гораздо шире и гаже, так как сильно варьируется от решаемых задач. Да и полоумных много... в своё время работал в конторе, поставляющей зуботехническое оборудование.  Очень дивился тому, что НЕМЕЦКИЙ 5-координатный фрезерный стоматологический(маленький для протезов) станок имел штатное виндовое ПО (там своя небольшая САПР напоминающая solidworks) на жабе.

Так, про станки и системы реального времени бывают двух типов
а) двухсистемные (терминальная часть -ЛЮБАЯ ОС, исполнительная - RTOS (вы не поверите, но это DOS, WinCE, Linux и др. пром. RTOS)
б) односистемные - только специальные RTOS (у нас есть станки, которые работают на специальной версии Линукса, разработанного Сименс). Где исполнение и терминальная часть - в одном флаконе. Кстати, кроме WinCE? остальные Виновсы  - не системы реального времени. От слова совсем.
 То что вы видели - это тупо терминальная часть - может быть написана на чем угодно, но исполнительная - только на RTOS. Тут без вариантов.
  • +0.05 / 3
  • АУ
barracuda1
 
russia
Южный Урал
Слушатель
Карма: +0.58
Регистрация: 16.01.2009
Сообщений: 3,770
Читатели: 0
Цитата: adolfus от 22.12.2016 23:53:28
Препроцессор в результате генерирует си-код, который компилируется си-компилятором в полном соответсвии с синтаксисом си.


Вся прелесть Си в том что любой может подстроить стиль написания под себя

Вот этот код прекрасно компилируется у меня


Ну а для прямых ссылок - пишите конкретные функции или вообще весь алгоритм закрутите в одной майне, оперирую все теми же goto...
  • +0.01 / 1
  • АУ
barracuda1
 
russia
Южный Урал
Слушатель
Карма: +0.58
Регистрация: 16.01.2009
Сообщений: 3,770
Читатели: 0
Цитата: Superwad от 26.12.2016 10:19:51Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов.

Подозреваю перл заставит вас застрелиться

А регулярные выражения заставят предварительно выпить яду, для надежности
  • +0.02 / 2
  • АУ
Hadan
 
russia
Казань
55 лет
Слушатель
Карма: +1.36
Регистрация: 31.10.2011
Сообщений: 166
Читатели: 0
Цитата: Superwad от 26.12.2016 10:19:51Для осознания глубины этой мысли добавлю - С++ шаблоны, дженерики, перегружаемые функции и их вызов из не из С++ компилятора. Чтобы найти проблему в трех соснах - потратил месяц!!! Ну его нах... Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов. По другому не понимаю, для чего это сделано.

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

На самом деле плюсы, замечательно ложатся на «железо». Темплеты, статики и инлайны заворачивают аппаратные особенности, так как не завернешь ни какими дефайнами.
  • +0.02 / 2
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: Superwad от 26.12.2016 10:19:51Для осознания глубины этой мысли добавлю - С++ шаблоны, дженерики, перегружаемые функции и их вызов из не из С++ компилятора. Чтобы найти проблему в трех соснах - потратил месяц!!! Ну его нах... Чес слово, ненавижу С++ - это взрыв мозга у того, кто отлаживает программы - ТАКОЙ системы еще надо поискать. Сделано специально для диверсантов. По другому не понимаю, для чего это сделано.

Хорошие шаблоны -- это клад для прикладника. Шаблоны не нужно отлаживать -- ими нужно пользоваться. Чем Вам не угодил STL, например? 
Перегружаемые функциии? И как это может затруднить отладку? Может просто нужно использовать вменяемые имена и взять нормальный отладчик? Тогда и трех сосен не будет.
С++ хороший в своей основе язык, но есть и маразмы на ровном месте. Например, симметричное ограничение доступа к закрытой части класса. Куда бы было лучше, если бы доступ по записи/чтению устанавливался независимо. Типа, писать не можешь, но читать -- пожалуйста. Или наоборот. Всего лишь что-то типа модификаторов "readable"/"writable" в закрытой части класса.
  • +0.00 / 0
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: adolfus от 27.12.2016 19:48:56С++ хороший в своей основе язык, но есть и маразмы на ровном месте. Например, симметричное ограничение доступа к закрытой части класса. Куда бы было лучше, если бы доступ по записи/чтению устанавливался независимо. Типа, писать не можешь, но читать -- пожалуйста. Или наоборот. Всего лишь что-то типа модификаторов "readable"/"writable" в закрытой части класса.

Это тривиально реализуется заданием private модификатором соответствующего свойства плюс public/protected  модификаторами соответствующего getter/setter метода(-ов). Если только readable - отсутствие открытого сеттера.

Самые основы правильного кодирования на языках ООП.

Модификаторы readable/writable - ненужная перегрузка лексики.
Отредактировано: Lapsha - 28 дек 2016 08:41:33
  • +0.02 / 2
  • АУ
barracuda1
 
russia
Южный Урал
Слушатель
Карма: +0.58
Регистрация: 16.01.2009
Сообщений: 3,770
Читатели: 0
Цитата: adolfus от 27.12.2016 19:48:56Куда бы было лучше, если бы доступ по записи/чтению устанавливался независимо.

А что вам мешает сменить приват на паблик? (да и другие методы доступа есть)
Отредактировано: barracuda1 - 28 дек 2016 10:11:22
  • +0.00 / 0
  • АУ
Сейчас на ветке: 5, Модераторов: 0, Пользователей: 0, Гостей: 1, Ботов: 4