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

Концепции программирования, которые были "автоматизированы" современными языками

Странный вопрос, но вот он. Каковы концепции программирования, которые были "автоматизированы" современными языками? Я имею в виду концепции, которые вам приходилось делать вручную. Вот пример: я только что прочитал, что в C вы вручную делаете сборку мусора; с "современными" языками, однако, сам компилятор/интерпретатор/язык позаботится об этом. Знаете ли вы о других, или их больше нет?

4b9b3361

Ответ 1

Оптимизации.

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

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

Ответ 2

Сбор данных

Хэш-таблицы, связанные списки, изменяемые размеры массивов и т.д.

Все это должно было быть сделано вручную раньше.

Ответ 3

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

Ответ 4

Итерация по коллекции:

foreach (string item in items)
{
    // Do item
}

Доступ к базе данных, посмотрите на шаблон ActiveRecord в Ruby.

Зло goto.

Ответ 5

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

Ответ 6

Система событий

Перед тем, как вам нужно было выполнить шаблон Observer все самостоятельно. Сегодня (по крайней мере, в .NET) вы можете просто использовать "делегаты" и "события"

Ответ 7

Номера строк

Нет более ОСНОВНЫХ, никаких карточных колод!

Ответ 8

  • Первый в списке метод расширения. Облегчает свободное программирование

  • Исключения, разделение того, что пытается сделать программа (попробуйте блокировать), и что он будет делать, если что-то не сработает (блок catch), делает для более простого программирования. Если раньше, вы всегда должны быть в состоянии предупреждать о взаимной обработке ошибок между вашими программами

  • Свойства, делает язык очень компонентным, очень современным. Но, к сожалению, это сделало бы Java не современной.

  • Lambda, функции, которые захватывают переменные. тогда как раньше мы имеем только указатель на функцию. Это также исключает необходимость вложенной функции (у Pascal есть вложенная функция)

  • Удобный цикл при сборке, т.е. foreach, тогда как перед созданием шаблона проектирования для obj- > MoveNext obj- > Eof

  • goto-less программирование с использованием современной конструкции, например break, continue, return. Если раньше я помню, что в Turbo Pascal 5 нет продолжения разрыва, VB6 имеет Exit Do/For (аналогичный break), но он не продолжит

  • С# -ly, мне нравится дифференциация out и ref, поэтому компилятор может раньше улавливать ошибки программирования

  • Отражение и атрибуты, позволяющие программам/компонентам открывать друг другу функциональные возможности и вызывать их во время выполнения. В то время как на языке C раньше (я не знаю в современном C, долгое время не использовал C), это немыслимо

  • Удаленные вызовы методов, такие как WebServices, Remoting, WCF, RMI. Gone - это дни низкоуровневой сантехники TCP/IP для связи между компьютерами.

Ответ 9

Объявления

В однопользовательских компиляторах, таких как C и С++, объявления должны были предшествовать использованию функции. Более современные языки используют многопроходные компиляторы и больше не нуждаются в объявлениях. К сожалению, C и С++ были определены таким плохим образом, что они не могут осуждать объявления теперь, когда многопроходные компиляторы возможны.

Ответ 10

Соответствие шаблону и выражения соответствия

В современных языках вы можете использовать pattern matching, который более мощный, чем оператор switch, выраженные if операторы ternary:

например. это выражение F # возвращает строку, зависящую от значения myList:

match myList with
| []       -> "empty list"
| 2::3::tl -> "list starts with elements 2 and 3"
| _        -> "other kind of list"

в С# вам нужно будет написать такое эквивалентное выражение, которое менее читаемо /maintanable:

(myList.Count == 0) ? "empty list" :
   (myList[0] == 2 && myList[1] == 3 ? "list starts with elements 2 and 3" :
      "other kind of list")

Ответ 11

Если вы вернетесь к сборке, вы сможете найти гораздо больше, например концепцию классов, которую вы могли бы подражать в определенной степени, было довольно сложно достичь... или даже иметь несколько операторов в одной строке, например, говоря: "int c = 5 + 10/20;" на самом деле много разных "инструкций", помещенных в одну строку.

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

Ответ 12

Некоторые языки поддерживают Динамический ввод, например Python! Это одна из лучших вещей (для определенных областей приложений).

Ответ 13

Функции.

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

Ответ 14

Само программирование

С некоторыми современными IDE (например, Xcode/Interface Builder) текстовый редактор или адресная книга находятся всего в нескольких кликах.

Ответ 15

Также встроенные функции для сортировки (такие как сортировка пузырьков, быстрая сортировка,....). Особенно в "контейнерах" Python есть мощные структуры данных, которые также на других языках высокого и современного языков требуют реализации нескольких строк. В описании Python вы можете найти множество подобных примеров.

Ответ 16

Многопоточность

Встроенная поддержка многопоточности на языке (например, в java) делает ее более "естественной", чем добавление ее в качестве внешней библиотеки lib (например, слой posix на C). Это помогает понять концепцию, потому что доступно множество примеров, документации и инструментов.

Ответ 17

Вывод типа

В таких языках, как F # или Haskell, компилятор вводит типы, облегчая задачу программирования:

Java: float length = ComputeLength(new Vector3f(x,y,z));

F #: let length = ComputeLength(new Vector3f(x,y,z))

Обе программы эквивалентны и статичны. Но компилятор F # знает, например, что функция ComputeLength возвращает a float, поэтому она автоматически выводит тип length и т.д.

Ответ 18

Хорошие типы строк заставляют вас меньше беспокоиться о том, как испортить свой строковый код,

Большинство языков, отличных от c и иногда С++ (в зависимости от того, как они похожи), имеют гораздо более приятные строки, а затем c массивами стиля char с "\ 0" в конце (проще работать с намного меньшим количеством беспокоиться о переполнении буфера и т.д.). C струн сосать.

Я, вероятно, не работал с c-строками достаточно, чтобы дать такой суровый (хорошо не то, что суровое, но я хотел бы быть более жестким), но после чтения это (особенно части, относящиеся к более прозрачным строкам паскаль-строки, которые использовали нулевой элемент для обозначения длины строки) и кучу flamewars, над которыми лучше использовать strcpy/strcat (более ранняя strn * первая безопасность усилия по расширению, openbsd strl * или microsoft str * _s) Я просто очень им не нравился.

Ответ 19

Целая группа Шаблоны проектирования. Многие модели дизайна, такие как Observer (как упоминается KroaX), Command, Strategy и т.д. Существуют для моделирования первоклассных функций, и так много других языков начали их поддерживать. Некоторые из шаблонов, связанных с другими понятиями, такими как Lock и Iterator, также были встроены в языки.

Ответ 20

Динамическая библиотека

Динамические библиотеки

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

плагины

очень чистый и эффективный способ расширения функциональности.

Ответ 21

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

Ответ 22

OS-оболочка Сценарии, bash/sh/или даже худшие сценарии пакетной обработки могут в значительной степени быть заменены на python/perl/ruby ​​(особенно для длинных скриптов, по меньшей мере, по крайней мере в настоящее время для некоторых из основных вещей os).

У вас может быть такая же способность выкинуть несколько строк script, чтобы склеить вещи вместе, все еще работая на "реальном" языке программирования.

Ответ 23

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

Как пример (псевдокод):

volatile bool run = true;
void thread1()
{
   while(run)
   {
      doHeavyWork();
      yield();
   }
}
void thread2()
{
   run = false;
}

В кооперативной системе thread2 никогда не будет работать без yield() в цикле while.

Ответ 24

Переменный ввод

Ruby, Python и AS позволят вам объявлять переменные без типа, если это то, что вы хотите. Позвольте мне рассказать о том, является ли эта конкретная реализация объекта Print() правильной, это то, что я говорю.

Ответ 25

Как насчет встроенных отладчиков?

Сколько здесь помнят "Хорошие старые дни", когда ему приходилось добавлять печатные линии по всей программе, чтобы выяснить, что происходит?

Ответ 26

Глупость

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

Ответ 27

Преобразование автоматического типа.

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

Итак, на современных языках вы можете:

Dim Test as integer = "12"

и все должно работать нормально...

Попробуйте сделать что-то подобное в компиляторе C для встроенного программирования, например. Вы должны вручную конвертировать все типы конверсий!!! Это большая работа.