Вопрос

Я знаю, что это очень абстрактно, однако я верю, что это очень сосредоточено.

Существует много языков высокого уровня сегодня: C #, Джава, Ворота, Питон, и т. д. и т. Д., Все созданы для абстрагированного самого низкого уровня сложности и обеспечивают более удобное пользователенное программирование. На высоком уровне языки могут уменьшить, и большую часть времени полностью удаляет, необходимость выполнения низкоуровневых, обрабатываемых специфических операций (таких как указывающая манипуляция и управление памятью). Многие также удаляют детали платформы (например, манипулирование файлами, генерация пользовательского интерфейса и т. Д.)

Мои два вопроса:

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

Решение

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

Java, например, даже не тот высокий уровень языка, но он предназначен для безопасного (в том смысле, что абстракции не утечка) в первую очередь и прежде всего. Поэтому некоторые вещи просто невозможно сделать в Java. Например, вы не можете написать сборщик мусора Java в Java или бросить свою собственную систему объекта, используя указку литой полиморфизма или написать операционную систему (по крайней мере, не традиционную).

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

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

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

На самом деле, хотя ... линия полностью произвольна.

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

Определенные конкретные языки домена могут быть чрезвычайно «высоким уровнем». Хороший пример этого Поставить в известность (Используется для записи текста приключений), где язык программирования не сильно отличается от простого английского. Вот выдержка из Пример проекта:

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

Это фактический исходный код. :)

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

По сути, логический язык со смешными оптимизациями по сравнению с Brute заставляют ответ.

Несмотря на то, что код подтверждения может быть дольше, чем код реализации, он действует как можно более лучшую документацию и ближе к тому, как выглядит спецификация. Вы торгуете больше времени ввода кода для меньшего количества документов / Spec / Code Desyncing.

Например:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

Результаты в:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}

HRM, я думаю, что несколько языков пытаются погладить некоторые дополнительные абстракции: Clojure с его STM и Erlang с моделью актера.

  1. О том, что я вижу, что я не вижу, что я не вижу, как это будет сделано, это язык с проверками параллелизма сродни статически напечатанной проверкой. Я говорю это, потому что проблема остановки существует.
  2. Когда оно устает моим газоном, заставляет меня кофе утром, проверяет мою электронную почту и рассказывает мне, что произошло в новостях.

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

  • В настоящее время некоторые «языки» предназначены для Uat. (что близко к тому, что можно назвать целью и с Цель требует тестов потому что это единственный способ, которым это можно объяснить, например Соответствовать для тестовой части); Это могут быть объединены с языками программирования.
  • В значительной степени каждый язык получает доступ к все больше и больше Интерфейсы высокого уровня (т.е. абстракция) Требуется меньше и меньше кода от вас и абстрагировано из ОС (см. Насколько легко сделать приложение GUI сейчас в C #, по сравнению с C ++ MFC, по сравнению с API C ++ Win32).
  • Что касается языков программирования, они могут получить больше лучших функций других методов разработки: я думаю о Аспектно-ориентированное программирование Что может помочь решить много вопросов OO и уже частично реализовано в какой-то форме в C # и Java (например, проблемы, касающиеся регистрации, транзакций ...).
  • Ума конечная цель (было?) разрешить UML VIESW вместе с деталями диаграмм, которые должны быть достаточными для кодирования системы; UML также является языком (в большем смысле).
  • Ide. Следует также быть включен: теперь вы можете установить, как диалог должен изменить размер от IDE, пока вам часто приходилось кодировать его раньше. Позже вы можете стиль Все ваше приложение или веб-сайт из списка каплей темы, как и любое приложение для удаления кожи. И намного больше мог прийти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top