LINUX.ORG.RU

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

В аналогах std::tuple во всех известных языках просто применяется хеш для ВСЕХ типов

Да, а еще там кортежи только для чтения. Если тебе надо смирительная рубашка и неэффективная реализация по умолчанию - действительно есть «все другие языки». А в С++ надо понимать, что и где вычисляется и на что влияет.

но tuple/pair - очень очевидные кандидаты.

А еще можно все методы виртуальными сделать. Хуже не будет. Наоборот, ошибок меньше станет. Но почему-то не делают.

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

Строки тоже не только для чтения, почему для них определен hash?

А еще можно все методы виртуальными сделать. Хуже не будет. Наоборот, ошибок меньше станет. Но почему-то не делают.

Остапа понесло, возвращаемся к теме

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

Давай еще вспомним когда появился with-open-file в общелиспе)

Это не так важно. with-open-file тебе придется расставлять руками. RAII же гарантирует закрытие ресурса после разрушение владельца.

anonymous ()

Programming languages have a lot in common with religions. You can spend your life searching for the «one true» way, and either find enlightenment, or discover you were worshipping false idols.

осёл какой-то

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

осёл какой-то

Это вы, наверное, всерьез с Eiffel-ем не сталкивались...

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

Ну он прав если добавить «Programming languages have a lot in common with religions for many people

Смотря на ЛОР - нельзя на согласиться. На меня в этом треде напали в контексте моей критики С++ сделаной в контекста „хаха, вот тут небольшой недостаток“, который восприняли за нападение на святую мудрость великих творцов С++, которые если что-то делают, то это догма, остальное - ересь.

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

with-open-file тебе придется расставлять руками. RAII же гарантирует закрытие ресурса после разрушение владельца.

Считай его конструктором. Консторукторы вызывать тебе и в RAII надо руками.

loz ★★★★★ ()

Главное чтобы Торвальдс не выпустил статью с таким названием и не запихнул властной волосатой рукой Boost в ядро

makoven ★★★★★ ()

Пф. Еще один все понял. Наверно из веба пришел. 2500 строк он на C++ написал. Вот пришел бы в проект с хотябы 25000 строками на плюсах, на следующий день написал бы подобную статью про java.

unt1tled ★★★★ ()

Лучше бы C# выбрал, честное слово. C++11 хорош, но там где он реально нужен.

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

Ой, как же так, ты проект на плюсах на 25000 строк не осилил разобрать?

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

А потом еще побегает по разным сферам, dev ops, анализ данных, фронтенд, gamedev, AI, embedded. И вот тогда однажды утром он таки познает дзен и не будет писать зашкварных статей «я наконец-то нашел лучший язык программирования в мире»

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

Строки тоже не только для чтения, почему для них определен hash?

Потому-что это специализированный тип, где все явно и однозначно. А когда ты задаешь tuple, ты создаешь новый тип. И там только ты можешь знать, что там надо хешировать, что не надо, и если надо то как. Попытка сделать универсальную реализацию и приводит к костылям вроде R/O кортежей, чтоб у пользователи мозги не закипели от необходимости понимания реализации базовых контейнеров.

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

Гг. Потому что будет юзать исключительно spring/hibernate/ansamble/puppet/apache/etc, а код писать это для велосипедистов.

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

Лучше бы C# выбрал

Представил, как чувак расширяет питон (а еще лучше jython) сишарпом.

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

первая из статьи, вторая как показатель, что первая — хеловорлд

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

Что бы ты был проклят и писал автоматизацию DevOps или анализировал данные на Java

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

что первая — хеловорлд

2.5K строк на современном C++ — это нифига не хеловорлд. А если он там еще и какую-нибудь стороннюю либу заюзал по полной программе, то сильно далеко не хеловорлд.

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

писал автоматизацию DevOps

а что такого? этим многие админы занимаются

или анализировал данные на Java

а на чем их еще анализировать?

unt1tled ★★★★ ()

переведите, пожалуйста, для лентяев

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

«Я писал на С. Попробовал на С++ и ошибок было меньше. Еще попробовал Rust, Go, Swift, как-то не пошло. Если вы еще не попробовали С++ с фишками новых С++11, то рекомендую. Всем хорошего дня»

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

Считай его конструктором. Консторукторы вызывать тебе и в RAII надо руками.

Нет, это разные вещи, ты не обязан конструировать объект в той же области видимости. К примеру:

~$ g++ -std=c++11 ./test.cpp
~$ ./a.out 
#include <fstream>
#include <iostream>
using namespace std;

ifstream open_self( void ) {
    return ifstream( "test.cpp" );
}

int main() {
    cout << open_self().rdbuf() << endl;
}

~$ 

И где ты здесь вставишь with-open-file?

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

Не читал вашу дискуссию, но если речь о том, как сделать все грамотно с закрытием, то open_self может быть шаблонным и возвращать R и принимать на вход лямбду ()->R

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

Чем отличается проект на 2.5 тысяч строк от проекта на 25 тысяч строк принципиально, кроме времени компиляции?

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

open_self может быть шаблонным и возвращать R и принимать на вход лямбду ()->R

Это ты про реализацию аналога на Common Lisp? Если да - то, да, там можно сделать так, но это извращение.

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

Консторукторы вызывать тебе и в RAII надо руками.

Что?!

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

Я о потенциальном варианте реализации на С++. Ну «извращение» - это лишь слова. Я бы волновался невозможностью move по нормальному внутрь лямбды. Это кажись прокол стандарта.

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

Ну да, в 14-ке есть, но мы пока по старинке живем в C++11

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

Я о потенциальном варианте реализации на С++.

Что, извините? Я привел простое и безопасное решение на С++, это не мне нужен костыль with-open-file. И не мне надо изобретать способ заставить его работать аналогично показанному мной примеру.

Я бы волновался невозможностью move по нормальному внутрь лямбды. Это кажись прокол стандарта.

Вот так можно переместить внутрь:

return [lf=move(f)]{ ... };

Или даже сразу создать нужное значение:

return [f=fstream(...)]{ ... };

Чем это ненормально?

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

Считай его конструктором.

Зачем мне считать конструктором то, что не является конструктором?

Консторукторы вызывать тебе и в RAII надо руками.

Конструкторы мне надо вызывать, чтобы создавать объекты.

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

Надо включить С++14, проблема в С++11

Не вопрос, тогда можно не включать и С++11, и проблемы не станет, ведь в С++03 лямбд и семантики перемещения не было. А если вопрос в поддержке компиляторами, то как минимум gcc, clang, msvc уже реализовали данную возможность из С++14.

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

Я хочу чтобы мне было достаточно знать один язык, и расширять его настолько, насколько мне нужно

Так создайте такой язык. А пока его нет, подобные разговоры лишены всякого смысла.

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

у вас ошибка в тесте по первой ссылке: вы myvector.reserve(9999999) забыли написать

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

Если был std::cow_vector рядом где-то, то он бы никому не мешал.

Да, но стандартная библиотека не может вместить всё на свете. Конкретно эта штука мне кажется далеко не самой необходимой вещью. Опять же, что мешает использовать сторонние библиотеки? В общем, это явно не проблема языка.

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

господи, какие только костыли не изобретут в питоне, лишь бы не использовать деструкторы

anonymous ()

As a language, C is close to perfect. It is portable assembly, no more, no less. The grammar is consistent, easy to understand, and generally unsurprising.

Это же тролль :| 4.2 по всем пунктам.

I currently work at Google. I have no idea what I'm doing.

Ясн.

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

господи, какие только костыли не изобретут в питоне, лишь бы не использовать деструкторы

В питоне есть метод __del__, но во-первых из него во всю торчат уши реализации, а во-вторых он вызывается «когда-нибудь потом, а может и никогда». Собс-но это проблема всех языков с GC - Java, C#, CL, Python и т.д.

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

Ок, убедил. Похоже что ни в питоне, ни, даже в CLOS нет деструкторов, хотя во втором некоторые реализации запилили так называемые finalizers.

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

Это же тролль

Ну почему сразу тролль. Может быть он в это искренне верит.

if you're like me and you've been ignoring C++ due to distrations from all kinds of shinier things such as Go, Rust, and Swift, I encourage you to take another look

Это называется «у хипсторов появился новый идол».

Ну или как описал Кэрролл такую ситуацию:

«– Мне нужна чистая чашка, – перебил ее Болванщик. – Давайте подвинемся»

Ну чо, пора. Где-то с периодом в 2-3 года это происходит.

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

А теперь запусти свой тест с нормальным malloc из tcmalloc, jemalloc, TBB malloc или чуть более экзотичных.

Другой вариант, использовать deque, если тебе не нужно, чтобы данные лежали непрерывным куском, как в сишном массиве. Там сразу потребность в realloc отпадет (и копирований никаких не будет).

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

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

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

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

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

Я рекомендую посмотреть в сторону Scala. Там есть фреймфорк для метапрограммирования LMS, Lightweight Modular Staging. https://scala-lms.github.io/ Знаю, что на нем реализовывали генерацию ядер FFT, сравнимого по быстродействию с FFTW (Spiral).

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