LINUX.ORG.RU

Си с классами

 , ,


0

7

Тупнячка принёс, извиняйте.

Начинаю проект (личный), выбираю на чём писать: C или C++.

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

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

Насколько такой суперсет C / сабсет C++ ака «Си с классами» может быть кошерен?

Объясните почему так делать не стоит, либо даже наоборот, предложите уже существующие сабсеты плюсов, которые можно перенять.

Ответ на: комментарий от anonymous

Может быть, ты все таки расскажешь про отсутствие пролблем у «Хаскель, диалектов ML, SBCL»

А что, проблемы есть? Проброс функций из/в язык у перечисленных языков имеют сравнимые с крестами сложности, но! Языки эти высокоуровневы, в отличие от крестов.

И как это поможет в показывании «того же эффекта»?
Упрощаю (в скобочках - усложняю) твою задачу: покажи «тот же эффект» с использованием строгих вычислений

«Тот же эффект» — это производительность скомпилированного кода уровня ассемблера. В конечном счете тот же Rust немало позаимствовал у ML. Да что там, даже в последних крестах добавили примитивный вывод типа (тип «auto»).

byko3y ★★★★
()
Ответ на: комментарий от byko3y

но! Языки эти высокоуровневы, в отличие от крестов.

В чем проявляется высокоуровневость, в частности, OCaml-а и SBCL по сравнению с C++?

«Тот же эффект» — это производительность скомпилированного кода уровня ассемблера.

Тут бы пруфов не помешало. Особенно не уровня микробенчмарков на 100 строк.

Да что там, даже в последних крестах добавили примитивный вывод типа (тип «auto»).

Добавление auto – это C++11. Если для вас это «последние кресты», то лучше бы вам подучить матчать прежде чем звиздеть на форуме.

Кроме того, вывод типов в шаблонах C++ был еще со времен C++98.

eao197 ★★★★★
()
Ответ на: комментарий от byko3y

Проброс функций из/в язык у перечисленных языков имеют сравнимые с крестами сложности

Показывай «сравнимую сложность». Хочу посмотреть, как передавать монады из/в хаскеля из/в лисп.

«Тот же эффект» — это производительность скомпилированного кода уровня ассемблера

Ну же ж, покажи же ж!

Rust немало позаимствовал у ML

Что позаимствовал? Синтаксис? И то нормально не смог.

Да что там, даже в последних крестах добавили примитивный вывод типа

Последний - это с++11? Руст успел появиться?

anonymous
()
Ответ на: комментарий от Sahas

во истину велик и невыговариваем могучий английский язык

Йо!

anonymous
()
Ответ на: комментарий от byko3y

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

anonymous
()
Ответ на: комментарий от xaizek

Может быть и не мешает, но что то не видно таких героев.

anonymous
()
Ответ на: комментарий от anonymous

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

Sahas ★★★★☆
()

Не тупи, братиш

Конечно, ты можешь написать на Си с классами. Но честно, для строк удобно использовать std::string, для даты-время std::chrono, контейнеры stl тоже удобны, используй их, пожалуйста. Сам себе ответь на вопрос, Си с классами - это в твоем случае Си++ без чего? А потом оцени затраты на самостоятельную имплементацию этих фич или последствия включения каких-нибудь нестандартных бибилиотек вместо стандартных. Попутно подумай о кроссплатформенности библиотек stl и boost.

anonymous
()
Ответ на: Не тупи, братиш от anonymous

с таким подходом можно и на D и на Go и на прости господи java/dotnet

anonymous
()
Ответ на: комментарий от eao197

В чем проявляется высокоуровневость, в частности, OCaml-а и SBCL по сравнению с C++?

Самая главная претензия к C++ — это явные описания типов. ML и лисп с разных сторон подходят к одному и тому же решению этой задачи: отсутствие явных описаний типов по умолчанию с их последующим уточнением только там, где тип неясен.

«Тот же эффект» — это производительность скомпилированного кода уровня ассемблера.

Тут бы пруфов не помешало. Особенно не уровня микробенчмарков на 100 строк

Выбирай: https://www.techempower.com/benchmarks/

Добавление auto – это C++11. Если для вас это «последние кресты», то лучше бы вам подучить матчать прежде чем звиздеть на форуме

По меркам ИНДУСтрии 2011 год — это только-только появилось. По меркам школьников 2015 год — это что-то устаревшее. И ты оказываешься подозрительно близким к последней категории.

Кроме того, вывод типов в шаблонах C++ был еще со времен C++98

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

byko3y ★★★★
()
Ответ на: комментарий от anonymous

Показывай «сравнимую сложность». Хочу посмотреть, как передавать монады из/в хаскеля из/в лисп

Так же, как инстанциировать шаблоны кретсов для произвольных типов. То есть, никак.

«Тот же эффект» — это производительность скомпилированного кода уровня ассемблера

Ну же ж, покажи же ж

Что тебе показать? Пример бенчей, где хаскель выдает результат на уровне Си? Гуглится же. Ищется на форуме, в том числе я выкладывал примеры. Мне лень копаться сейчас.

Rust немало позаимствовал у ML

Что позаимствовал? Синтаксис? И то нормально не смог

И вывод типов же ж.

Последний - это с++11? Руст успел появиться?

Руст — 2010 год.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

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

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Так же, как инстанциировать шаблоны кретсов для произвольных типов. То есть, никак.

Тут проблема только в c++abi. Какой abi у haskell, scbl? Разве что у ML с этим попроще.

Что тебе показать?

Давай уже, показывай, не ломайся.

И вывод типов же ж.

Который уже был в реализациях с++.

А стабильной версии (1.0) раст еще лет 5 небыло, как и нормального вывода типов.

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

Руст — 2010 год.

Это даже не альфа-версия, товарищ эксперт по ИНДУСтрии.

anonymous
()
Ответ на: комментарий от anonymous

Пока только набросок движка. Игра не самоцель, хочется подтянуть сишку, а то я на ней уже года два не писал ничего кроме решений на codewars, и поработать с графикой.

WitcherGeralt ★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Внешний долг.

Гораздо опаснее внутренний враг долг.

anonymous
()
Ответ на: комментарий от byko3y

Самая главная претензия к C++ — это явные описания типов.

И это все? Может еще какие-нибудь «доказательства» есть?

Выбирай: https://www.techempower.com/benchmarks/

Там нечего выбирать. На первых местах C++/Rust/C. Иногда еще Java и C#. Ни Haskell, ни OCaml, ни SBCL в TOP-10 что-то не видно.

По меркам ИНДУСтрии 2011 год — это только-только появилось.

По меркам ИНДУСтрии ни Haskell, ни OCaml, ни SBCL в этой самой ИНДУСтрии не видать от слова совсем. Но вам это почему-то звиздеть не мешает.

Да и в той самой ИНДУСтрии, на которую вы ссылаетесь, стандарты C++ в последнее десятиление выходят каждые 3 года. И тот же C++20, даже еще не полностью поддерживаемый C++ными компиляторами, уже используется в крупных софтверных компаниях (Yandex как пример).

Ну и по поводу школоты вы вряд ли подходящий объект для насмешек выбрали. Если вам под 30, то с большой долей вероятности ваш собеседник написал свои первые программы еще до того, как вы на свет появились.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Там нечего выбирать. На первых местах C++/Rust/C. Иногда еще Java и C#. Ни Haskell, ни OCaml, ни SBCL в TOP-10 что-то не видно

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

И тот же C++20, даже еще не полностью поддерживаемый C++ными компиляторами, уже используется в крупных софтверных компаниях (Yandex как пример)

По статистике на 2019 год C++11 — это основная используемая версия:

https://www.jetbrains.com/lp/devecosystem-2019/cpp/

PS: и на 2020 тоже, к слову: https://www.jetbrains.com/lp/devecosystem-2020/cpp/

byko3y ★★★★
()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

По статистике на 2019 год C++11 — это основная используемая версия:

Не удивительно, это был действительно хороший урожайный год для крестьян, все что крестьяне наделали в следующие годы это заготовки и консервирование из урожая с++11. А теперь бухтят тут понимаешь, что 10 лет от заката до рассвета страда у них была, а как же, вон морда у каждого как совок от лопаты, фантазеры колхозные…

anonymous
()
Ответ на: комментарий от anonymous

стандарт почитай, выжимка есть на с++17 от николя, есть выжимка на стл 17+ уж не помню от кого, но на самом деле нет, еще вроде ничего толкового не написали, так что просто смотри конфы и слайдики по тематическим ресурсам, сейчас тебе фбс накидает пажи, ну или кастани его.

anonymous
()
Ответ на: комментарий от byko3y

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

Можно увидеть список разработанных вами компиляторов?

компилятор, в которых вложено 20 млн долларов, при прочих равных будет генерировать более быстрый код, чем компилятор за 100 тыс долларов

Иными словами, кучи языков, которые были бы сравнимы с C++, по факту, нет. ЧТД

PS: и на 2020 тоже, к слову: https://www.jetbrains.com/lp/devecosystem-2020/cpp/

А это ничего, что сумма там оказывается больше 100%?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

А это ничего, что сумма там оказывается больше 100%?

Давно на выборах бывал? :D

anonymous
()
Ответ на: комментарий от eao197

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

Можно увидеть список разработанных вами компиляторов?

Нет, я только один интерпретатор делал. Писание компилятора — это весьма трудозатратная штука, и даже самый простой компилятор для простого языка нужно писать эдак месяц. Конечно, написание простейшего фронтенда к LLVM может занять чуть меньше времени.

Иными словами, кучи языков, которые были бы сравнимы с C++, по факту, нет. ЧТД

Ты рассуждаешь с позиции воши: мир огромен, и всё, что я могу делать — посасывать иногда соки из тела. Algol-60, C, Pascal, Python, C++ — это языки, которые делались одним-двум человеками. Если бы не эти люди, то писали бы вы на Аде или PL/I. Rust 10 назад был непригодным для продакшена языком, но сейчас он вышел на новый уровень, хотя язык почти не поменялся. Если завтра крупная фирма или сообщество захочет продвинуть диалект ML или лиспа, то эти языки начнут тягаться по производительности компилированного кода с самыми поддерживаемыми трансляторами. Это уже сугубо политические вопросы, к технологиям ЯП они отношения не имеют.

А это ничего, что сумма там оказывается больше 100%?

Опрос шел по вопросу «какими версиями C++ вы пользуетесь».

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Нет, я только один интерпретатор делал.

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

Ты рассуждаешь с позиции воши: мир огромен, и всё, что я могу делать — посасывать иногда соки из тела.

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

Какие-то примеры вашего влияния на этот процесс можно увидеть? Или же все пока что на уровне надувания щек на LOR-е?

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

В теории между теорией и практикой разницы нет, на практике же разница есть.

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

Опрос шел по вопросу «какими версиями C++ вы пользуетесь».

В таком случае характеристика «основная используемая версия» вряд ли уместна, т.к. C++20+C++17+C++14 суммарно используются в два раза чаще, чем C++11. Т.е. C++11 всего лишь самая используемая версия лишь там, где более свежие стандарты пока не применимы.

Ну и обратите внимание на уровень проникновения C++17. Если по вашему мнению 2011-ый год – это для индустрии буквально вчера, то 2017-й, надо погалать, это вот буквально пару часов назад.

Но при этом настолько широкое применение.

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от eao197

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

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

Надо полагать, что уж себя-то вы позиционируете как одного из тех, кто самолично определяет куда и как индустрия развивается.
Какие-то примеры вашего влияния на этот процесс можно увидеть? Или же все пока что на уровне надувания щек на LOR-е?

Во-первых, еще не вечер и мы скоро увидим, выстрелит ли мой проект. Во-вторых, с какой стати нужно помогать всей индустрии? Даже гугл или MS, которые кучу кода опенсорсят, все-таки большую часть кода зажимают и используют внутри. Даже команда на 5-10 человек имеет возможность немало сделать для внутренного пользования, не говоря уже про 20 и более человек. То, что даже при наличии ресурсов типовая контора предпочтет поддерживать захлебывающийся в тех долге проект вместо того, чтобы переосмыслить его разработку — вот такое нынче время, да. Особенно если за разработку платит заказчик аутсорсеру или посреднику, а последним решительно безразлично, как проект будет работать.

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

Давай начнем с определений. GCC, Clang — это не языки программирования, да? Если ты хочешь говорить про языки программирования — давай говорить про языки программирования. Если ты хочешь говорить про компиляторы — давай.

Далее, имя одного из диалектов ML — F#. Который, несмотря на малую популярность, очень даже поддерживается и достаточно быстро бегает, поскольку дотнет никуда не уходит, как и его стандартная библиотека.

А в реальном мире как было у C++ три-четыре реальных альтернативы, так и остается. Ну и еще два-три языка, на которых можно получать хорошие результаты, если сильно постараться и отказаться от высокоуровности чтобы выжать максимум

В «реальном мире» индустрия забывает про C++, потому что скорость разработки и надежность работы решения значит намного больше, чем производительность. Потому что железо стоит намного дешевле разработчиков:

https://insights.stackoverflow.com/survey/2020#technology-programming-scripti...

Странно, что на этом фоне ты еще не пытаешься закопать кресты.

C++11 всего лишь самая используемая версия лишь там, где более свежие стандарты пока не применимы

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

Если по вашему мнению 2011-ый год – это для индустрии буквально вчера, то 2017-й, надо погалать, это вот буквально пару часов назад

Да. Долгосрочные проекты так и остаются на C++11. Конкретно гугл форсит C++17:

https://google.github.io/styleguide/cppguide.html#C _Version

Потому, можно говорить, что C++17 — это сегодняшний стандарт, а C++11 — прошлый.

byko3y ★★★★
()
Ответ на: комментарий от aeralahthu

Я ни разу не плюсовик, просто мимо проходил. Но по ключевым словам сразу вспоминается Столяров, у него в четвёртом томе есть ровно такая глава «О выборе подмножества Си++». Ну и отдельная книжка по плюсам

Тут всем безразличен твой столяров. Конкретно что-то можешь сказать? По тезисам хотя бы.

byko3y ★★★★
()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

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

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

При этом вы даже не можете хоть как-то подтвердить собственный опыт в той теме, о которой заикаетесь.

Т.е. тупо звиздите.

Во-первых, еще не вечер и мы скоро увидим, выстрелит ли мой проект.

Так у нас здесь вьюноша бледный со взором горящим. Что за проект хоть, анонимный переделыватель мира вы наш?

Если ты хочешь говорить про языки программирования — давай говорить про языки программирования.

Вы предлагаете поговорить про сферических коней в вакууме? Нет уж. Язык программирования для меня – это инструмент, который можно взять здесь и сейчас и сделать (опять же здесь и сейчас) то, что заказчику нужно было еще вчера.

В ряде областей вместо C++ здесь и сейчас можно взять разве что C, Fortran, Ada и, с недавних пор, Rust. Может быть еще и Java/C#, если найдете грамотных специалистов, которые представляют себе, что такое boxing/unboxing, value types и понимают, как работает GC. Ну и, возможно, какой-то из диалектов Object Pascal.

Все.

Но вы же говорите про кучу, даже еще и сильно более высокоуровневых. И где эта ваша куча?

Далее, имя одного из диалектов ML — F#.

Прекрасно. Где и как F# сильно выше уровнем C++?

Странно, что на этом фоне ты еще не пытаешься закопать кресты.

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

Что, собственно, в последние 10-15 лет и наблюдается.

Но, при этом всем, C++ все еще в разы (если не на порядок) более востребован, чем упомянутые вами Haskell, диалекты ML и SBCL вместе взятые.

Потому, можно говорить, что C++17 — это сегодняшний стандарт, а C++11 — прошлый.

Т.е. имеем документальное подтверждение того, что «в последних крестах добавили примитивный вывод типа (тип «auto»).» – это наглый звиздеж.

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от byko3y

Если ты хочешь говорить про языки программирования — давай говорить про языки программирования. Если ты хочешь говорить про компиляторы — давай.

Далее, имя одного из диалектов ML — F#.

Это про язык или про компилятор?

anonymous
()
Ответ на: комментарий от eao197

Где и как F# сильно выше уровнем C++?

Сильно нигде, но вот некоторые фичи которые помогают писать чуть короче чем на С++.

// нет точки с запятой, скобочек обычных и фигурных
// вот так выглядит объявление функции square которая принимает
// один параметр и возвращает x*x
let square x = x * x

// вот так выглядит объявление структуру
// кроме структуры тут так же генерируется операторы сравнения и равенства 
//(в С++20 со spaceship оператором теперь тоже всё хорошо)
type Person = {First:string; Last:string}

// есть композиция функций, которая тоже сокращает запись
let add2times3 = (+) 2 >> (*) 3

// строгая проверка типов, тут будет ошибка компиляции, так как вместо строки передали int
printfn "print string %s" 123 

// из-за строгости типов нет null, используй option если нужно отсутствие значений
let doSomethingWithString str = 
  // str это точно str, а не null
  ...

// есть async и просто параллелизм, но в С++20 есть корутины, 
// может вместе с cppcoro там не будет сильно отличаться, 
// у меня нет опыта с С++ корутинами
Async.Parallel [ for i in 0..40 -> 
      async { return fib(i) } ]

// можно писать Extension методы, даже для базовых типов.
type System.Int32 with
    member this.IsEven = this % 2 = 0

// дальше где-то в коде можно написать
20.IsEven
fsb4000 ★★★★★
()
Ответ на: комментарий от eao197

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

Да, это более высокроуровневые языки со сравнимой производительностью. Но под под них нет компиляторов. Всё наше текущее препирание базируется на этом самом различном использовании определений. Я ни секунды не буду спорить о том, что под C/C++ нынче разработаны самые оптимизирующие компиляторы — более того, я даже сам неявно это подтвердил. Давай сейчас возьмем код, скомпилированный каким-нибудь TCC, и скажем, что C/C++ — говно, потому что скомпилированный код работает медленно.

Так у нас здесь вьюноша бледный со взором горящим. Что за проект хоть, анонимный переделыватель мира вы наш?

Даже в этом треде отвечал уже:

Си с классами (комментарий)

Язык программирования для меня – это инструмент, который можно взять здесь и сейчас и сделать (опять же здесь и сейчас) то, что заказчику нужно было уже вчера

Да, я уже понял, что язык программирования для тебя — это то, что начальник скажет использовать. Ну а «сделать уже вчера» — это не похоже на ТЗ для крестового кодописания, скорее для питонового.

Где и как F# сильно выше уровнем C++?

Посмотри сюда:

https://gist.github.com/odytrice/667bc1d8d7c872fe8c5b1baa58898c32

Если не считать объявления классов, неидеоматичных для ML, то мы имеем чистейший код, который сравнится с питоном по простоте и ясности. Если бы такой язык был в 1990 году, то питон никогда бы не взлетел. Но, к сожалению, сложные структуры данных появились с OCaml только в 1996, когда уже были и питон, и жава, а миллиардов долларов на маркетинг как Sun разрабы OCaml не могли потратить. Особенно учитывая. что синтаксис не си-подобный, а в то время несишный синтаксис трактовался как «работает медленно».

Но, при этом всем, C++ все еще в разы (если не на порядок) более востребован, чем упомянутые вами Haskell, диалекты ML и SBCL вместе взятые

Я тоже так могу: грузчики более востребованы, чем художники.

Т.е. имеем документальное подтверждение того, что «в последних крестах добавили примитивный вывод типа (тип «auto»).» – это наглый звиздеж

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

byko3y ★★★★
()
Ответ на: комментарий от anonymous

Далее, имя одного из диалектов ML — F#.

Это про язык или про компилятор?

F# — это реализация ML под .NET. С единственным компилятором, потому можно говорить и про язык F#, и про компилятор F#.

byko3y ★★★★
()
Ответ на: комментарий от fsb4000

Сильно нигде

В том-то и дело.

По приведенным примерам могу отметить, что проверка типов в форматных строках уже есть в fmtlib, а null/non-null актуально в языках с GC, где практически все, за редким исключением, является reference types.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

актуально в языках с GC

Ну да, это в F# против C# обычно упоминают, так же как и в Kotlin с Java про null safety…

fsb4000 ★★★★★
()
Ответ на: комментарий от byko3y

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

Да, мы все про тоже самое: в ваших влажных мечтах есть все, у нас в обыденной реальности есть лишь то, что есть.

Даже в этом треде отвечал уже:

Не пойми что для непойми чего. Ну удачи, чего уж.

https://gist.github.com/odytrice/667bc1d8d7c872fe8c5b1baa58898c32

Ну и на что там смотреть, за исключением pattern-matchin-а? Да еще с учетом, что предложения по добавлению pattern-matching-а в C++ уже подвезли.

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

С понималкой у вас еще хуже, чем с доказательствами ваших же утверждений. У меня нет начальников.

Ну а «сделать уже вчера» — это не похоже на ТЗ для крестового кодописания, скорее для питонового.

Еще одно подтверждение того, что вы живете в мире каких-то своих розовых соплей.

Я тоже так могу: грузчики более востребованы, чем художники.

Не получилось.

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

Я лишь указываю вам на места, в которых вы конкретно и публично накладываете себе в штаны. Пример с тем, что auto добавили в «последних крестах» здесь очень показателен. Последние кресты в данный момент – это С++20. Полгода назад такими были C++17. И auto появился сильно задолго до C++17.

Вот такой вот фактаж.

eao197 ★★★★★
()
Ответ на: комментарий от fsb4000

let square x = x * x

let square x = x * x
let f = square 2.2
let i = square 2
anonymous
()
Ответ на: комментарий от eao197

Ну и на что там смотреть, за исключением pattern-matchin-а? Да еще с учетом, что предложения по добавлению pattern-matching-а в C++ уже подвезли

То есть, тебя не смущает, что в коде нет описания типов, и при этом он статически типизирован? С такими раскладами тут есть люди. готовые писать на Си, потому что это «тот же самый C++». Безопасность работы с памятью, читаемость кода — что это? Не, не слышал. Я вот анализатор запущу — он мне ошибки работы с памятью найдет... наверное.

С понималкой у вас еще хуже, чем с доказательствами ваших же утверждений. У меня нет начальников

Ну да, одинокий удаленщик против всего мира.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

То есть, тебя не смущает, что в коде нет описания типов, и при этом он статически типизирован?

Т.е. для вас высокий уровень – это когда нет аннотаций типов? Получается, что между:

let func1 x = x*x + 3

и

template<typename T> auto func1(T x) { return x*x + 3; }

в вашей голове лежит прямо таки пропасть? Имеем один и тот же результат, только описанный разным количеством лексем, значит есть разница в уровнях?

Афигеть. Что у вас в башке вообще творится.

Позвольте вам показать разницу в уровне на пальцах.

Вот возьмем чистый Си и попытаемся изобразить в нем ООП.

Мы можем это сделать. Путем ручного приседания с указателями на функции. И имитацией наследования через композицию.

А потом мы возьмем C++ и все тоже самое у нас будет из коробки.

Что и позволяет сказать, что C++ уровнем выше, чем Си.

Так что при сравнении F# (или OCaml) с С++ будет выясняться, что многие вещи из F# в C++ реализуются штатными, уже встроенными в язык (или stdlib) методами. Просто чуть многословнее за счет особенностей синтаксиса.

Безопасность работы с памятью, читаемость кода — что это?

Вы сейчас арбузы с помидорами в одну корзину собираете.

Кстати говоря, безопасность – это как раз то, что вступает в прямое противоречие со скоростью исполнения.

Ну да, одинокий удаленщик против всего мира.

Вы это, порядок в своей башке наведите то. А то ведь и знать не будете, что «удаленщик» – это обычный наемный работник.

Ну и как бы это вы тут против реальности протестуете. У меня пока что все с реальностью согласуется. В отличии от.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

let func1 x = x*x + 3

template<typename T> auto func1(T x) { return x*x + 3; }

Хочу внести ясность в дискуссию. Это не одно и то же.

Первая функция после первого же применения станет строго типизирован на конкретный тип. Это не обощенная (generic) функция.

Хиндли-Милнер он такой.

let func1 x = x*x + 3
let i = func1 1
// после func1 - это функция принимающая только целый тип
// эта строка не скомпилируется, так как передается float
let f = func1 1.1 // error
anonymous
()
Ответ на: комментарий от eao197

Так что при сравнении F# (или OCaml) с С++ будет выясняться, что многие вещи из F# в C++ реализуются штатными, уже встроенными в язык (или stdlib) методами. Просто чуть многословнее за счет особенностей синтаксиса

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

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.