Какие языки имеют более высокий уровень абстракции и требуют меньшего ручного управления памятью, чем C++?

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

Еще один из тех вопросов, на которые невозможно ответить. Вы увидите повсюду посты, и все это уже обсуждалось ранее.

Outlaw Programmer 14.09.2008 09:17

Ну и что? Это правильный вопрос, и то, что ответ не 42, не означает, что его не стоит обсуждать. Я думал, что идея SO заключалась в том, чтобы ставить вопросы по программированию в начало поиска Google. Это явно укладывается в эти рамки, и я думаю, что многие программисты захотят обсудить этот вопрос.

Alex 29.08.2009 21:13

Вы уже потратили на это 10 лет? Ссылка: norvig.com/21-days.html

me22 14.09.2009 19:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
3
4 370
25

Ответы 25

Если вы знакомы с синтаксисом и стилем C++, D может показаться вам интересным языком. Или, если вы хотите развиваться, любой из Python, C#, Java, Ruby будет отличным выбором.

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

BCS 14.09.2008 08:20

C#, если вы работаете в экосистеме Microsoft.

Python и Ruby, кажется, имеют наибольшую популярность в пространстве Linux / Unix / etc.

ObjectiveC доминирует на Macintosh и iPhone. Самая последняя версия MacOS реализует сборку мусора для подмножества фреймворков, но чтобы использовать остальное, вам придется самостоятельно управлять ресурсами.

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

Что ж, если вы ищете очень высокий уровень абстракции и управления памятью, я бы сказал, что lisp будет идеальным кандидатом. Я сейчас учусь, медленно, и это самое интересное, что у меня было с новым языком.

Сказав, что Python или Ruby могут быть лучшим компромиссом между выразительностью и популярностью. Фреймворк Python Django - один из лучших фреймворков RAD, если вы ищете материал для веб-приложений.

то же Лисп, .. или схема

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

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

Поскольку вы уже знакомы с C++, следующим шагом будет изучение .Net с помощью управляемый C++ или управляемых расширений для C++ .. это даст вам шаг в большой мир .Net framework .. Как только вы поймете структуру, она станет более удобной чтобы изучить другие языки .Net, такие как C#, VB.Net и т. д.

Одной из областей, в которой MC++ выделяется и является уникальной среди языков .NET, является возможность взять существующее неуправляемое (C++) приложение, перекомпилировать его с помощью переключателя / clr, заставить его сгенерировать MSIL, а затем запустить под CLR. Этот выдающийся подвиг удачно назван "Это просто работает (IJW)!" Есть некоторые ограничения, но по большей части приложение просто запускается. Код C++ может состоять из устаревших операторов printf, MFC, ATL или даже шаблонов!

Я не понимаю, как управляемый С ++ достигает более высокого уровня абстракции. Блаб с управляемой памятью по-прежнему остается Блабом.

Tom Martin 14.09.2008 08:41

Это не про C++. Речь идет об изучении .Net, а затем упрощает изучение других языков .Net, таких как C#, VB.Net и т. д.

Gulzar Nazim 14.09.2008 08:43

Устаревший - C++ / CLR - гораздо более чистая замена, но больше не является первоклассным языком программирования .Net, поскольку в нем отсутствует поддержка WPF или LINQ.

Andy Dent 27.01.2009 07:59

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

Я должен усилить это - Haskell предоставит вам функциональное программирование, / hard /. И это хорошее упражнение для вашего ума программирования в целом. Функциональное программирование постепенно включается во многие другие языки - все будет совсем несложно, если вы изучили Haskell. Кроме того, f'nal, вероятно, будет позади будущих языков параллельного программирования, и он уже стоит за Hadoop / Map-Reduce, очень большой инфраструктурой распределенного программирования в Google, Yahoo, Facebook и других местах. Вы не можете превзойти это как вложение.

JDonner 29.08.2009 21:45

.. о да, и это GC'd и на настолько высоком уровне абстракции, насколько ваш мозг может выдержать. Причина, по которой Haskell отличается от других функционально-ориентированных языков, заключается в том, что Haskell является чистым окончательным, без каких-либо выходов. Но чтобы это не звучало пугающе, посмотрите: Learnyouahaskell.com

JDonner 29.08.2009 21:50

Java, C#, Ruby, Python и JavaScript, вероятно, станут перед вами большим выбором.

Ява и C# - не очень разные языки. Это большое отличие от C++ заключается в управлении памятью (т.е. объекты автоматически освобождаются, когда на них больше не ссылаются). Вы бы выбрали их, если вас интересуют приложения в стиле рабочего стола или статическая типизация (и вы, вероятно, выбираете между ними, исходя из того, как вы относитесь к Microsoft и платформе Windows). В обоих случаях вы найдете гораздо более богатые стандартные библиотеки, чем вы привыкли в C++.

Python и Рубин делают шаг в сторону от статической типизации в мир, где вы можете вызывать и использовать методы для любого объекта (и терпят неудачу во время выполнения, если его там нет). Это и благословение (намного меньше шаблонного кода), и проклятие (компилятор больше не может отлавливать эти ошибки за вас). И снова вы обнаружите, что они имеют более богатые стандартные библиотеки и снова более высокий уровень, чем Java / C#. Производительность - это главный недостаток, поскольку Python, насколько я понимаю, несколько быстрее, чем Ruby. Чтобы выбирать между ними, вы, вероятно, выберете Ruby, если вам интересна веб-разработка для сообщества фреймворков Ruby on Rails, или в противном случае выберете Python.

JavaScript еще больше отличается от C++ тем, что он полностью исключает классы. Объекты просто клонируются из других объектов и могут иметь методы и свойства, добавленные к ним во время выполнения. Очень гибкий, но также очень простой в использовании. JavaScript - единственный реальный выбор, если вы заинтересованы в запуске приложений в браузере, который действительно становится самостоятельной платформой. Вы обнаружите, что стандартные библиотеки довольно ограничены, если вы мало что делаете с браузером, но есть довольно много хороших фреймворков, которые заполняют некоторые из пробелов.

Еще несколько интересных, но более нишевых вариантов

  • Болтовня - более или менее в лагере Ruby и Python, и, насколько я понимаю, значительно быстрее. Однако будьте осторожны _ я видел, как много хороших инженеров изучают Smalltalk и никогда не возвращаются;)
  • Цель-C - Когда C стал объектно-ориентированным, C++ пошел одним путем (статическая типизация), а Objective-C пошел другим (динамическая типизация). Он вдохновлен Smalltalk и имеет хорошую стандартную библиотеку, если вы находитесь в стране Mac / iPhone. С точки зрения управления памятью, в отличие от всего остального, что я перечислил, он не сборщик мусора (хотя теперь это опция в Mac OS X 10.5), но у него есть схема подсчета ссылок, которая значительно упрощает жизнь, чем управление памятью вручную.
  • Лисп - Я сам никогда не изучал этого, кроме того, что мне нужно для незначительного взлома Emacs. Насколько я понимаю, библиотеки были хорошими в свое время, но, хотя язык остается в высшей степени элегантным, они немного отстали от времени.
  • Haskel - Если вы хотите полностью отказаться от объектов и классов, Haskel и его функциональный подход - интересный путь (или Lisp, как указано выше, или F#, если вы находитесь в стране .Net). По сути, вы отказываетесь от циклов и переменных в пользу выполнения всего рекурсивно. Требуется некоторое время, чтобы осознать, и, вероятно, это не практично для большинства реальных приложений, но это полезно для изучения.
  • Эйфель - Мне это нравится - Очень чистый синтаксис, разработанный для серьезных инженерных систем типов. Статические типы, такие как C# и Java, и с более слабой стандартной библиотекой, но это заставит вас серьезно задуматься о языке и дизайне библиотеки классов.
  • ActionScript и Flex - программный интерфейс для Flash, который основан на том, что кажется статически типизированной версией JavaScript. Я немного поигрался с ним, и он довольно хорош, если вы заинтересованы в разработке мультимедийных приложений. Вы также можете выйти за пределы браузера с помощью Flex и перейти на платформу Воздуха для создания настоящих настольных приложений.

Java МНОГОЕ используется для веб-разработки.

Dhaivat Pandya 27.05.2011 01:34

на Objective-C: но у него есть схема подсчета ссылок, которая значительно упрощает жизнь, чем управление памятью вручную., пока вы не коснетесь каких-либо потоков или вам не понадобится переносить код с Java.

bestsss 16.11.2011 22:33

попробуйте C# много :)

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

Ознакомьтесь с auto_ptr и shared_ptr - ознакомьтесь с библиотеками Boost.

Точно так же с абстракцией - на что вы конкретно жалуетесь? AFAIK, вы не можете сделать с C++ так много, что присутствует в других строго типизированные языки.

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

Точно. Лучшее в C++ - это то, что вы можете писать на любом уровне абстракции, который вам нравится, используя множество различных парадигм. Доступные уровни абстракции настолько высоки, насколько вы хотите!

Scott Langham 22.09.2008 15:44

Собирался ответить тем же :)

Diego Sevilla 11.02.2009 23:08

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

Но, как сказал Томи, в C++ есть что исследовать, и с помощью библиотек Boost разрабатывать его становится действительно легко.

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

Зачем изучать язык ассемблера?

  • Это не так сложно, как вы думаете. Язык ассемблера намного меньше по объему, чем многие современные языки, есть несколько приемов, которые вам нужно понять, чтобы он имел смысл, но это не так сложно.
  • Это расширяет вашу базу знаний. Знание основ почти всегда полезно, даже при работе на высоком уровне.
  • Это может быть чрезвычайно полезно при отладке. Знания, полученные от изучения ассемблера, особенно при отладке нативного кода без исходного кода, стремительно расширяют ваши возможности отладки в таких ситуациях.
  • Это дает вам больше возможностей. Когда возникает редкая ситуация, когда требуется ассемблерный код, вы не будете беспомощны.
  • Это хорошо для вашего резюме. Он показывает, что вы учитесь за пределами минимума, необходимого для сохранения вашей текущей работы, он показывает любопытство к основам и помещает вас в другой класс программистов, и этот класс имеет тенденцию быть более опытным и способным.
  • Это просто круто.

Некоторые ресурсы на ассемблере:

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

Graeme Perrow 14.09.2008 23:01

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

Wedge 15.09.2008 00:20

Конечно, но как это использовать более высокий уровень абстракции?

Matt Sheppard 15.09.2008 02:53

Я согласен с Мэттом Шеппардом. Единственный способ, чтобы ассемблер считался более высоким уровнем, чем C++, - это для разработчика код в перевернутом виде ... Более серьезно, даже если ваш пост интересен, он не отвечает на вопрос. Или я пропустил какую-то новую технологию, например, сборщик мусора для сборки?

paercebal 18.09.2008 00:00

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

Thomi 11.02.2009 23:24

Вместо того, чтобы предлагать конкретный язык, я бы порекомендовал вам выбрать любой язык или языки, которые предлагают следующие 4 функции:

  1. Автоматическое управление памятью
  2. Отражение / самоанализ
  3. Декларативные / функциональные конструкции (например, лямбда-функции)
  4. Утка печатает

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

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

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

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

Если вам нужен другой подход к программированию, изучите «функциональный» язык, такой как Lisp или Haskell.

А если вам нужно включить быстрый и небольшой язык сценариев в ваше приложение C++, попробуйте Lua.

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

Схема.

Маленький интриган и Структура и интерпретация компьютерной программы удивят ваш разум странными и чудесными способами.

DrScheme - хорошая IDE для новичков. Язык программирования схем - хорошая бесплатная ссылка.

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

Вы можете начать с настольного инструмента, такого как Microsoft Access, или использовать бесплатный SQL Server Express, Postgre или MySQL.

Я бы сказал, начнем с Python. Он имеет более высокий уровень абстракции и учит вас важности отступов и создания «красивого» кода. Не то чтобы "красивый" очень важен, но он сделает будущего сопровождающего ваш код намного счастливее :)

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

С другой стороны, было бы неплохо погрузиться в аспекты C, игнорировать объектно-ориентированные материалы и изучить функциональное программирование. Если вы пойдете по этой дороге, я также предлагаю начать с базового языка ассемблера, как предлагалось в одном из верхних постов. Возможно, HLA (High-Level Assembly by Randall Hyde, он написал отличную книгу под названием Art of Assembly Language Programming) станет хорошим началом. Вы либо научитесь любить управление памятью, либо ненавидите его всю оставшуюся жизнь. Полезно знать, если вы хотите начать карьеру в программировании :)

Однако, если вы хотите заработать себе на жизнь программированием, Java и J2EE - это легкие деньги, если вы знаете, что делаете. ИМХО это очень быстро надоедает.

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

Если вы чувствуете себя комфортно в C++, вы можете спуститься и изучить некоторую сборку. Это мрачное искусство, но вы будете рады, если столкнетесь с тяжелым сеансом отладки.

С точки зрения большей абстракции, Smalltalk чрезвычайно увлекателен, чист от ООП и на 100% динамичен (отладка - это приятное занятие, чего нет в языках со статической типизацией). Dolphin Smalltalk - хорошая реализация для Windows, даже бесплатная версия сообщества дает достаточно, чтобы с ней можно было поиграть. В многоплатформенных виртуальных машинах Smalltalk выберите Visualworks или Squeak. Visualworks чрезвычайно стабилен и поставляется с большим количеством документации.

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

Ява это, ну ява. Интересно, что Java никогда меня не привлекала. Вы можете заинтересоваться Java, хотя. Спросите здесь о преимуществах его использования по сравнению с C++ или другими языками ООП.

Для веб-разработки используйте Javascript, особенно учитывая волну AJAX. В те дни становится интересно. Мы говорили о Smalltalk, хорошо, Seaside - это потрясающая среда для веб-разработки. Работает (по крайней мере, пробовал) Squeak / Visualworks ... Красиво.

Что ж, есть еще много чего: Scheme, LISP, Ruby, Lua, Bash (!), Perl (тьфу), Haskell ... Попробуйте их все и получайте удовольствие!

Почему бы не изучить Qt? Это отличная среда разработки приложений, доступная на всех платформах и даже на мобильных устройствах!

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

Berschi 29.08.2009 21:11

Лично я программировал на Java, Python, C / ++, и мне больше всего нравится Python. Хотя C++ может делать все, что умеет Python, и даже больше, я написал программу Python примерно с 10 строками, что на C++ заняло бы около 50. Итак, мораль истории - используйте python.

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

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

Clojure стоит изучить, поскольку он соответствует обоим вашим критериям:

  • Он уделяет большое внимание программированию с абстракциями более высокого уровня. см. например это видео: Clojure: искусство абстракции
  • Он имеет автоматическое управление памятью / сборку мусора (через JVM, которая имеет одни из лучших в мире реализаций GC).

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

;; treat a vector as a sequence and reverse it
(reverse [1 2 3 4 5])
=> (5 4 3 2 1)

;; Take 10 items from a infinite sequence
(take 10 (range))
=> (0 1 2 3 4 5 6 7 8 9)

;; Treat a String as a sequence of characters, calculate the frequencies
(frequencies "abracadabra")
=> {\a 5, \b 2, \r 2, \c 1, \d 1}

;; Define an infinite lazy sequence of fibonacci numbers, take the first 10
(def fibs (concat [0 1] (lazy-seq (map + fibs (rest fibs)))))
(take 10 fibs)
=> (0 1 1 2 3 5 8 13 21 34)

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