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

30
задан 3 revs, 2 users 100% 18 May 2010 в 12:36
поделиться

26 ответов

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

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

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

22
ответ дан 27 November 2019 в 22:58
поделиться

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

2
ответ дан 27 November 2019 в 22:58
поделиться
  • Первый в списке, метод расширения. Облегчает свободное программирование

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

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

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

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

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

  • . В случае C # мне нравится дифференциация out и ref , чтобы компилятор мог обнаруживать ошибки программирования раньше

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

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

8
ответ дан 27 November 2019 в 22:58
поделиться

Итерация над коллекцией:

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

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

Злой goto.

12
ответ дан 27 November 2019 в 22:58
поделиться

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

15
ответ дан 27 November 2019 в 22:58
поделиться

Номера строк

Нет больше BASIC, никаких карточных колод!

8
ответ дан 27 November 2019 в 22:58
поделиться

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

Раньше вам приходилось реализовывать шаблон наблюдателя самостоятельно. Сегодня (по крайней мере, в .NET) вы можете просто использовать «делегаты» и «события»

10
ответ дан 27 November 2019 в 22:58
поделиться

Коллекции данных

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

Все это раньше приходилось делать вручную.

15
ответ дан 27 November 2019 в 22:58
поделиться

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

0
ответ дан 27 November 2019 в 22:58
поделиться

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

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

1
ответ дан 27 November 2019 в 22:58
поделиться

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

1
ответ дан 27 November 2019 в 22:58
поделиться

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

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

2
ответ дан 27 November 2019 в 22:58
поделиться

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

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

плагины

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

0
ответ дан 27 November 2019 в 22:58
поделиться

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

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

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

1
ответ дан 27 November 2019 в 22:58
поделиться

Функции.

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

2
ответ дан 27 November 2019 в 22:58
поделиться

Глупость

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

-1
ответ дан 27 November 2019 в 22:58
поделиться

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

В качестве примера (псевдокод):

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

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

0
ответ дан 27 November 2019 в 22:58
поделиться

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

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

0
ответ дан 27 November 2019 в 22:58
поделиться

Вывод типов

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

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

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

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

1
ответ дан 27 November 2019 в 22:58
поделиться

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

1
ответ дан 27 November 2019 в 22:58
поделиться

Декларации

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

8
ответ дан 27 November 2019 в 22:58
поделиться

Сопоставление с образцом и выражения сопоставления

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

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

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

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

(myList.Count == 0) ? "empty list" :
   (myList[0] == 2 && myList[1] == 3 ? "list starts with elements 2 and 3" :
      "other kind of list")
4
ответ дан 27 November 2019 в 22:58
поделиться

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

11
ответ дан 27 November 2019 в 22:58
поделиться

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

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

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

Dim Test as integer = "12"

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

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

-2
ответ дан 27 November 2019 в 22:58
поделиться

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

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

2
ответ дан 27 November 2019 в 22:58
поделиться

Типизация переменных

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

0
ответ дан 27 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: