Какой язык низкого уровня следующего поколения лучше всего подойдет при переносе базы кода?[закрыто]

StackOverflow https://stackoverflow.com/questions/1815613

  •  07-07-2019
  •  | 
  •  

Вопрос

Допустим, у вас есть компания, использующая много C/C++, и вы хотите начать планировать переход на новые технологии, чтобы не стать такими, как компании COBOL 15 лет назад.

На данный момент C/C++ работает более чем хорошо, и на рынке имеется множество разработчиков для него.

Но вы хотите начать думать об этом сейчас, потому что, учитывая огромную базу текущего кода и конфиденциальность данных, вы чувствуете, что переход к следующему шагу без перегрузки бюджета и команд разработчиков может занять 5-10 лет.

Вы слышали о Д, начиная становиться вполне зрелым, и Идти, обещающий быть довольно популярным.

Какой был бы ваш выбор и почему?

Это было полезно?

Решение

D и Go, вероятно, станут такими же популярными, как Python и Ruby сегодня. Каждый из них занимает свою нишу, и хотя D должен был стать полноценной заменой C ++, он, вероятно, никогда не приобретет достаточно массы, чтобы оттолкнуть C ++. Не говоря уже о том, что они оба недостаточно стабильны, и неизвестно, будет ли у вас поддержка этих языков через 10-20 лет для нынешнего оборудования и операционных систем. Учитывая, что C / C ++ является в значительной степени скомпилированным языком и используется в подавляющем большинстве операционных систем и приложений с собственным кодом, маловероятно, что он исчезнет в обозримом будущем.

Другие советы

C и C ++ - довольно непобедимая комбинация, когда дело касается нативного / неуправляемого / " низкого уровня " языки.

Не потому, что это лучшие языки, а потому, что они есть, они делают свою работу, и они достаточно хороши . Нет сомнений, что D, например, лучше, чем C ++, во многих отношениях. Но это не в самом главном: совместимость со всем существующим кодом C ++. Без этого требования большая часть этого кода была бы написана на управляемом языке сегодня в любом случае. Единственная причина, по которой сегодня так много кодовых баз используют C ++, заключается в том, что они использовали его в прошлом году, и было бы слишком сложно переключиться на что-то другое. Но если и когда они переключаются, они обычно не переключаются на D. Они переключаются на C #, Java или Python.

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

Итак, C и C ++ здесь, чтобы остаться. C вряд ли будет развиваться намного дальше. Это так, как есть, и одна из ниш, которую он должен заполнить, - это «простота, даже для авторов компиляторов». Никакой другой язык не сможет превзойти его в этой нише, даже если они никогда не пересмотрят стандарт снова.

C ++ развивается гораздо более резко: C ++ 0x становится ближе, и у них уже есть огромный список функций, которые они хотят делать впоследствии . C ++ ни в коем случае не тупик.

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

В настоящее время я регулярно пользуюсь D. Я бы не рекомендовал это для людей, пишущих производственный код, потому что это слишком круто. Мне это сходит с рук, потому что большая часть моего кода - это исследовательские прототипы в биоинформатике. Тем не менее, язык начинает стабилизироваться. Андрей Александреску выпускает книгу под названием «Язык программирования D». в марте следующего года, и сейчас происходит попытка стабилизировать спецификацию для версии 2 языка к книге.

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

Кроме того, несмотря на то, что у D нет библиотек, потому что это все еще передовой язык, это мечта автора библиотеки из-за его возможностей метапрограммирования. Если он взлетит, у него, вероятно, будут довольно внушительные конечности. Для предварительного просмотра этого см. Std.range или std.algorithm в стандартной библиотеке D2 (Фобос). В качестве другого примера я реализовал OpenMP-подобную модель параллелизма (параллельный foreach, параллельное отображение, параллельное сокращение, фьючерсы) в виде чистой библиотеки в D без какой-либо специальной поддержки компилятора. (См. http://cis.jhu.edu/~dsimcha/parallelFuture.html . )

Учитывая, что вы в основном заинтересованы в долгосрочной перспективе, я бы сказал, что дайте D 6 месяцев для стабилизации (учитывая книгу Андрея и текущий толчок к стабилизации языка, версия 2 должна быть стабильной к тому времени), а затем возьмите тяжело на это смотреть.

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

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

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

Придерживайтесь C и C ++. Я не думаю, что он идет по пути COBOL, он работает так же, как и все остальное, и у вас не будет проблем с поиском людей, которые будут писать код на C и C ++.

C ++ - он относительно молодой и обновленный ... Он имеет большое количество поставщиков компиляторов и получил все время улучшается.

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

D - это многообещающие, но все еще очень новые и нестабильные спецификации и библиотеки.

Go родился несколько недель назад ... Никогда не используйте ничего из версии 0 для больших важных проектов. Также он значительно более ограничен C ++ или D .

Обновление 2019 года: C ++ останется без изменений в течение следующих 10 лет ... (если нет, я исправлю этот ответ, когда он больше не будет актуален ....)

причина, по которой компании сегодня работают с COBOL, заключается в том, что они уже написали миллионы кодов на COBOL. если они могут это сделать - они сделают это сразу, с другой стороны - компании работают с C / C ++ как часть своих потребностей, и новые проекты, использующие этот язык, не могут / не хотят использовать Java / c # любой другой язык, основанный на фреймворке - поэтому COBOL здесь не аналогия.

Как сказал dsimcha, путь D в настоящее время рискован. Тем не менее, у языка огромный потенциал, он низкоуровневый, и я ощутил значительно лучшую производительность с D (вместо C ++). Возможно, что люди чувствуют с динамическими языками.

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

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

Я бы не стал концентрироваться на языке, а больше на библиотеках, его окружающих. C ++ в сочетании с библиотеками boost - отличный выбор. Люди, которые разрабатывают на C ++, как правило, лучше разбираются в вычислениях, я сам начал с Java, который сделал мою жизнь проще, скрыв много фундаментальных вещей, и это хорошо, однако я действительно начал понимать программирование, только когда я изучил C / C ++ (указатели и т. Д.).

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

Существует бесчисленное количество машин, на которых запущено программное обеспечение C ++, и я не вижу, чтобы они выключались одновременно. Если C ++ пойдет по пути COBOL, появится огромный рынок для миграции приложений. Будут разработаны специализированные инструменты для перевода приложений C ++ на популярный язык того времени (Z ++ ???).

Думаю, лучший совет - пересечь этот мост, когда вы к нему придете.

Ознакомьтесь с Intel & # 174; Cilk ++ Software Development Kit , если вы хотите заинтересовать вас разработкой C ++ / Multi-Core. Я не вижу, чтобы C или C ++ уходили в ближайшее время.

Сравнение C* с Cobol сомнительно.

Сравнение C* с Cobol может привести к неправильному выводу.C был идеален для своего времени, это был огромный шаг вперед с момента его появления, и он до сих пор выполняет свою работу.

Я бы подвел итог Коболу в мой самый благотворительный день словами:хорошая попытка".

C и C++ будут существовать еще долгое время, поскольку они хорошо отвечают всем требованиям как языки реализации.Это никогда не изменится.

Также учтите, что основной негативной проблемой C/C++ является отсутствие безопасности памяти.По мере развития кодов это становится все меньшей и меньшей проблемой.Это значит, что серьезных оснований для замены старых кодов не будет.

Я ожидаю, что программные системы вырастут из C.Посмотрите на иерархию сегодня:

  • приложение, написанное в такой среде, как Rails
  • серверная часть приложения, написанная на Ruby, PHP, Python, C#, на любом другом языке
  • Реализация времени выполнения Ruby, PHP, Python или C# (написанная на C*)
  • Ядро ОС (написано на C89)

Я не думаю, что старые уровни исчезнут, и я думаю, что устаревшие более высокие уровни, написанные на C и C++, будут просто поддерживаться таким образом в течение неопределенного периода времени, а в конечном итоге будут постепенно заменены их заменами, написанными на Ruby, Python, C#, или будущее развитие.

Мы понятия не имеем, найдет ли Go признание.Просто быть рядом с Google, вероятно, будет недостаточно.

Д?Что ж, о нем говорят кое-что хорошее, но успеха он тоже не получит.Нет пользовательской базы, о которой можно говорить.D занимает 20-е место по популярности на Индекс ТИОБЕ, и быстро падает.

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

Джава находится на вершине, и я был бы удивлен, если бы он ушел далеко в ближайшие 20 лет.Он не считается языком системного программирования, но работает достаточно хорошо, поэтому на C++ можно выполнить лишь несколько задач, которые не удалось бы выполнить на Java.Конечно, в наши дни никто не желает поручать программистам-людям работу, выполняемую (безупречно и часто более эффективно) сборщиком мусора.Я, например, считал Java значительным шагом вперед по сравнению с C++ с точки зрения эффективности программирования.

Я очень впечатлен Рубин.Это элегантный, выразительный язык:Вы можете добиться многого, используя не слишком много кода, но этот код по-прежнему в основном читается.Один из основных принципов Ruby — быть последовательным и не преподносить разработчику сюрпризов.ИМХО, это очень хорошая идея, она повышает производительность.Во времена большого ажиотажа вокруг Rails (который, возможно, продолжается до сих пор), я сторонился Ruby, потому что его эталонная реализация ужасно медленна.Однако ДжРубин Ребята из Sun сделали это невероятно быстро на JVM, так что теперь об этом определенно стоит задуматься.Ruby предоставляет замыкания и множество возможностей функционального программирования (почему это важно, см. ниже), хотя на самом деле он не считается языком FP.Индекс ТИОБЕ:10 и растет.

На будущее следует учитывать тот факт, что производители процессоров столкнулись с ограничением производительности, налагаемым физикой.Каждое Рождество больше не доступен процессор, работающий на 30% быстрее, как это было в прошлом.Итак, теперь, чтобы получить больше производительности, вам нужно больше ядер.Разработке программного обеспечения потребуется вся возможная помощь в поддержке многоядерного параллельного программирования.C++ оставляет вас по большей части наедине с этим, а решения Java ужасны по современным стандартам.

Ввиду этого существует определенная тенденция к функциональному программированию (которое устраняет большую часть проблем, связанных с параллелизмом), а также к языкам с лучшей поддержкой параллелизма. Эрланг был написан специально для этого и для возможности замены кода в работающей программе (Эрикссон хотел невероятного времени безотказной работы). Скала похож на Java, но с гораздо более сильной поддержкой функционального программирования и параллелизма. Кложур, То же самое, но это Лисп, и он даже не входит в топ-50 (пока!!).

Scala была разработана академиками, и это показывает:Он утончен и совершенно педантичен в отношении типов данных;он пытается стать швейцарским армейским ножом среди языков программирования.Я считаю, что многим программистам среднего уровня будет сложно освоить Scala.Ruby менее FP и не так уж много внимания уделяет параллелизму, но он прагматичен, интересен и прост в выполнении задач.Кроме того, при работе на JVM в библиотеках Java доступен огромный объем кода, с которым Ruby может взаимодействовать.Так:

Я бы сделал ставку на Ruby с небольшим шансом на Scala.Но есть много альтернатив!

Джава.В наши дни Java подходит для большинства задач низкого уровня.Зачем использовать частичное решение на C/C++, такое как D или Go, если можно иметь что-то столь же безопасное и простое в разработке, как Java?Если вы ищете решение в режиме реального времени, D и Go определенно вам подойдут. нет это, не говоря уже о том, что они, вероятно, поддерживаются даже меньше, чем Java.


Java теперь является языком системного программирования.Я не понимаю, как можно рассматривать что-либо с помощью небезопасных конструкций, таких как указатели «следующего поколения».Единственная причина, по которой когда-либо существовали эти небезопасные конструкции, заключается в том, что это был прагматический подход к созданию полного по Тьюрингу языка.Не было никакой заботы о представлении памяти в виде дискретных объектов, потому что они просто хотели построить что-то, что работал.Уже существуют приложения аппаратного и программного реального времени на языке Java, различные аппаратные процессоры байт-кода и более 2 миллиардов мобильных устройств, работающих на Java.В лучшем случае все, что вам нужно будет сделать, это добавить некоторые конструкции для взаимодействия с устройствами, что не составит большого количества кода;даже в C/C++ вам все равно придется добавлять эти конструкции...

Что вы программируете?8-битные микроконтроллеры с 1 КБ оперативной памяти?В этом случае было бы бессмысленно использовать для этой платформы что-либо кроме ассемблера...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top