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

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

Ответы [ 25 ]

47 голосов
/ 14 сентября 2008

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

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

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

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

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

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

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

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

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

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

18 голосов
/ 14 сентября 2008

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

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

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

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

5 голосов
/ 14 сентября 2008

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

4 голосов
/ 14 сентября 2008

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

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

Еще один пролог. это ставит вас в непоследовательное мышление.

3 голосов
/ 14 сентября 2008

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

3 голосов
/ 14 сентября 2008

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

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

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

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

2 голосов
/ 16 сентября 2008

Схема.

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

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

2 голосов
/ 16 сентября 2008

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

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

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

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

2 голосов
/ 14 сентября 2008

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

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

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