Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Некоторые другие интересные, хотя более узкие варианты -

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

Ответ 2

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

Проверьте auto_ptr и shared_ptr - проверьте библиотеки Boost.

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

ditto Lisp,.. или схема

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

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

Ответ 7

С#, если вы находитесь в экосистеме Microsoft.

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

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

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

Ответ 8

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

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

Ответ 9

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

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

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

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

Ответ 11

попробуйте С# much:)

Ответ 12

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

Ответ 13

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

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

Ответ 14

Qt

Ответ 15

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

Ответ 16

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

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

Ответ 17

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

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

Ответ 18

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

  • Автоматическое управление памятью
  • Reflection/Самоанализ
  • Декларативные/функциональные конструкции (например, лямбда-функции)
  • Duck Typing

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

Ответ 19

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

Ответ 20

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

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

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

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

Ответ 21

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

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

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

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

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

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

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

Ответ 22

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

Ответ 23

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

Ответ 24

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

Ответ 25

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)