Почему большинство языков программирования построено поверх фреймворков? - PullRequest
4 голосов
/ 18 декабря 2010

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

По вашему мнению, каковы наилучшие причины для создания языка поверх фреймворка?

Отказ от ответственности: я не пытаюсь что-то доказать, я подумал, что это хорошая тема для обсуждения

Ответы [ 7 ]

5 голосов
/ 18 декабря 2010

Если вы когда-нибудь программировали COM-объекты вручную (ATL еще хуже) или писали программы на C с Win32 API, вы легко поймете, что .NET - хорошая вещь. Это модернизация загадочно сложных техник с определенной неорганизованностью.

Я не могу с вами согласиться: за исключением C # и Java, языки не привязаны к какой-либо «среде». Фреймворки - это просто огромная коллекция библиотек, а также философия, как и любая огромная библиотека. Для меня это просто слово в маркетинговых целях. Например, .NET можно назвать «стандартной библиотекой Windows».

Является ли POSIX API каркасом? Является ли коллекция библиотек Python фреймворком? Стандартная библиотека C ++ или Boost - это фреймворк? Qt - это фреймворк? Является ли BLAS / LAPACK основой? Является ли Intel Threading Building блоки каркасом?

Мир не вращается вокруг .NET или Java.

5 голосов
/ 18 декабря 2010

Одним словом: повторное использование.

Каркасы - это большие коллекции классов, методов и т. Д., Например, библиотеки.В отличие от библиотек, они также обеспечивают, так сказать, правила , которые определяют стандарты программирования.

4 голосов
/ 18 декабря 2010

Лучше иметь один универсальный стандарт, который хорошо написан и хорошо протестирован, чем каждому программисту нужно изобретать одно и то же колесо снова и снова. Количество строковых классов, написанных по всему миру до подобных классам MFC CString и Java / .net String, было просто смешно.

1 голос
/ 18 декабря 2010

Возможно, я неправильно понял вопрос, но .NET не построен поверх фреймворка.На самом деле, все наоборот.Фреймворки часто расширяют языки, так как языки становятся более мощными, и они часто поставляются в одном пакете с языковыми компиляторами.Тем не менее, существуют также доменные языки , которые построены на основе существующего фреймворка и существующего языка.Технически это не языки, а скорее API сценариев.Спецификации языка C # .NET и VB.NET на самом деле не сильно изменились, за исключением необязательных параметров, именованных аргументов, дисперсии co / contra и некоторых других.Это среда вокруг них, которая недавно дала нам выражения, linq и т. Д.

РЕДАКТИРОВАТЬ 1: Если мы не считаем виртуальные машины, такие как JVM, фреймворком, то я не вижу, как это может быть правдой.* РЕДАКТИРОВАТЬ 2: Поняв вопрос, ответ прост.Это переносимость (с точки зрения компиляции на промежуточный язык, когда вы имеете дело со средами Java или .NET) и возможность использовать всю мощь инфраструктуры.

1 голос
/ 18 декабря 2010


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

Но, возвращаясь к вопросу ... Я вижу 2 основных недостатка рамочного подхода:

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

2) «Если вы не пользуетесь, вы против нас»
Дело в том, что невозможно обеспечить большую, зрелую структуру оптимальных / простых / адекватных решений для всех проблем, которые она пытается решить. Поэтому иногда вам нужно ввести внешний инструмент. Это может быть проблемой в ... Например, вызов сигналов Qt из потоков, не являющихся qt, не работает "из коробки" (не удалось заставить его работать вообще). В этом случае вы можете столкнуться с «рамками». Вместо того, чтобы облегчить себе жизнь, вы можете захотеть нанести серьезный вред себе / другим людям:)

Одна из причин двух предыдущих пунктов заключается в том, что действительно сложно не делать предположений. Каркасы часто делаются на многих предположениях, что программист будет делать / использовать A, B, C ... стандартный / каркасный компонент. После того, как введены жестко запрограммированные предположения, вероятность того, что каркас будет модульным, падает как пианино с 10-го этажа :)

С другой стороны, подход «правильный инструмент для решения проблем» позволяет программисту сосредоточиться на одной проблеме и хорошо ее реализовать. Говоря хорошо, я имею в виду:
1) Данные независимы Например (C ++), если вы работаете со строками, не предполагайте строковый тип. Разрешить пользователю работать с разными строками из разных сред: QString, wxString, std :: string ...
2) Независимость от политики / расширяемая
Программисту может понравиться общий способ реализации фреймворками чего-либо, но он может обнаружить, что один крошечный аспект делает фреймворк непригодным для него. Вот почему пользователь фреймворка должен иметь возможность вводить свою собственную политику в некоторых ключевых частях
Примером семейного совместного использования этого подхода являются внутренние / внешние реализации DSL (предметно-ориентированный язык). Конкретным примером (C ++) является библиотека Blitz ++.

Все, что я сказал ранее, также относится к языкам высокого уровня. Например, на виртуальной машине Java могут существовать языки (для начала Scalla).

Надеюсь, я сделал несколько хороших замечаний. С наилучшими пожеланиями,
Marcin

1 голос
/ 18 декабря 2010

Вероятно, потому что:

Если я видел дальше, то стою на плече гигантов.

Не говоря уже осуществующее процветающее сообщество, множество библиотек и т. д.: -)

0 голосов
/ 19 декабря 2010

Поскольку эти инфраструктуры предоставляют повторно используемые компоненты, которые необходимы для любой реализации языка высокого уровня: FFI, GC, JIT, компоновщик, отладчик и остальная часть цепочки инструментов.И совсем не весело заново реализовывать все эти компоненты с нуля.

...