F# к IronPython/IronRuby, как C# на VB.NET?

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

7
задан Edward Tanguay 12 June 2009 в 12:21
поделиться

6 ответов

F # и IronPython / IronRuby находятся на расстоянии световых лет с точки зрения языка. F # - это функциональный компилируемый язык с высокой степенью типизации. IronRuby / IronPython - это динамически типизированные интерпретируемые языки.

Я считаю, что IronPython дополнительно поддерживает компиляцию, но я не уверен на 100%, и еще меньше насчет ruby.

Отношения между VB.Net и C # намного ближе.

15
ответ дан 6 December 2019 в 06:50
поделиться

Есть аспекты F #, похожие на динамические языки; однако ответ JaredPar действительно подводит итог. F # находится в отдельной категории функционального программирования, где IronRuby и IronPython являются динамическими языками, а языки C # / VB OO. Все они могут делать одно и то же, и это зависит от того, как вы хотите это делать. У каждого есть свои плюсы и минусы для конкретной проблемы.

0
ответ дан 6 December 2019 в 06:50
поделиться

Я бы сказал, что F # узнал намного больше от OCaml, чем от Ruby и Python вместе взятых. Единственное реальное сравнение состоит в том, что F # переносит ML в .NET так же, как IronPython / Ruby переносят Python / Ruby в .NET.

5
ответ дан 6 December 2019 в 06:50
поделиться

Во многих отношениях F # и Ruby / Python внешне похожи . Все три языка позволяют лаконично выражать идеи, не загромождая код множеством типов. Однако на самом деле F # сильно отличается от Ruby и Python, поскольку F # - это статически типизированный язык, а Ruby и Python - динамически типизированный. Идиоматический код F # редко упоминает типы, но компилятор определяет типы, и любые ошибки типов будут отмечены компилятором во время компиляции. Для Ruby и Python использование значения неправильного типа приведет к возникновению ошибок только во время выполнения. Динамизм Ruby и Python означает, что оба они более поддаются метапрограммированию, чем F # (например, типы могут быть изменены во время выполнения). С другой стороны, F # будет более производительным для большинства задач (сравнимо с C #) и предлагает множество хороших функциональных абстракций, таких как размеченные объединения с сопоставлением с образцом. Конечно, хорошее изучение любого из этих языков заставит вас думать о проблемах иначе, чем в C # или VB.NET, но ваш подход, вероятно, также будет сильно различаться между F # и Python / Ruby.

и предлагает множество хороших функциональных абстракций, таких как размеченные объединения с сопоставлением с образцом. Конечно, хорошее изучение любого из этих языков заставит вас думать о проблемах иначе, чем в C # или VB.NET, но ваш подход, вероятно, также будет сильно различаться между F # и Python / Ruby.

и предлагает множество хороших функциональных абстракций, таких как размеченные объединения с сопоставлением с образцом. Конечно, хорошее изучение любого из этих языков заставит вас думать о проблемах иначе, чем в C # или VB.NET, но ваш подход, вероятно, также будет сильно различаться между F # и Python / Ruby.

6
ответ дан 6 December 2019 в 06:50
поделиться

F # - это скорее "инструментальный" язык, в котором есть конкретные проблемы, которые лучше всего решать с помощью функционального подхода. F # по своей сути является потокобезопасным, что дает надежду на то, что он будет полезен при масштабировании приложения для использования нескольких процессоров. Я вижу, что F # используется для создания компонентов, которые будут использоваться в VB.NET или C # для решения конкретных проблем.

0
ответ дан 6 December 2019 в 06:50
поделиться

ПРИМЕЧАНИЕ. В основном это подборка моих мыслей и наблюдений по этому поводу. Я программист на C # днем ​​и Python ночью.

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

F # - это функциональный язык. Это означает, что вас действительно больше интересуют глаголы, так сказать. Он по-прежнему статически типизирован и работает в среде CLR, но вы по-другому структурируете свой код и по-другому решаете проблемы. Обычно люди думают, что функциональные языки более математичны по структуре и их легче доказать формально. Конечно, это обычно считается в основном академическим.

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

И, конечно же, F # имеет некоторые функции и идеи, заимствованные из объектно-ориентированных языков, в то время как C # имеет идеи и функции, заимствованные из Functional.

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

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

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

0
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

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