Это круто, спасибо. Хотя конечно нужно знать устройство компиляторов, чтобы понимать о чем речь в статье. Было бы идеально дополнить иллюстрациями и примерами «псевдокода» на Си (как «лингва франка») некоторых структур данных, используемых в дженериках с упаковкой. Т.е. просто нарисовать как оно устроено в памяти.
Я имею в виду не автокомплит, а особый режим «отладки метапрограмм». То есть программист спокойно пишет программу, затем что-то нажимает и происходит частичная компиляция — метапрограмма компилируется в какую-то промежуточную форму, и если эта частичная компиляция прошла успешно, то можно выполнять следующую часть — смотреть как она работает на образцах кода. Все это — отдельный режим, не имеющий отношения ни к вводу кода, ни к основной компиляции.
Так и без «мета» то же самое. Я лишен возможности воспроизвести условия многочисленных пользователей моей программы. Но я могу подать на вход некоторые тестовые данные, интересные для меня — и увидеть результат, в том числе и пройти алгоритм по шагам в визуальном отладчике. Чем метапрограммирование хуже?
Да если бы сделали нормальную объектную модель кода и прикрутили бы хоть javascript, это было бы уж всяко лучше чем многоэтажные шаблоны С++ с многоэтажными же сообщениями об ошибках компиляции.
Смотря какая среда разработки. Если как сейчас — то да.
А если прямо в IDE можно выделить какой-то метакод мышью и запустить на исполнение, и он тут же выполнится в отдельном окне, и по нему можно походить метаотладчиком, а с помощью REPL-подобного инструмента подать на него входные данные и тут же посмотреть результаты кодогенарации, и добавить проверку результатов метакомпиляции в автоматические тесты…
Но таких сред, насколько я знаю, пока не сушествует.
Метапрограммирование как в С++ — да. А если его сделать грамотно, с полной поддержкой со стороны среды разработки — то нет. Грамотно ИМХО пока никто не сделал.
Вообще же любое программирование это в каком-то смысле «мета», если только это не программирование в машинных кодах:)
Тут многое можно написать… на целую статью)
Но если кратко, то Rust кажется очень сложным и с кривоватым синтаксисом (как-то вот тяжело воспринимается код, не знаю почему). Go — простой, красивый, но кажется что слишком мало языковых концепций (нет метапрограмминга, исключений...). D создавался как замена С++, сам язык интересный, но кажется что под конец начались те же проблемы что и у С++.
Что меня неприятно удивило в D, так это то что там нет namespace. Модульность, основанная на файловой системе, мне очень не нравится.
С++ Builder моя первая IDE, если не считать текстовый Bornald C++.
Была кстати неплохая IDE, все работало, не припомню каких-то глюков или падений.
Затем перешел на Visual C++ и как-то перестал отслеживать борландовские продукты. Но иногда смотрел что же там выходило…
Не знаю как это правильно сформулировать, но вот такое бывает когда у власти не инженеры и программисты, а всякие маркетологи или как их там правильно называют. Они стали пихать в среду ВСЁ. Какие-то суперпурер-решения для «бизнеса» (в основном это касалось баз данных), которые якобы призваны решить все проблемы, баззвордные названия, стали метаться между технологиями, прикручивать все что можно… все это выливалось в экспоненциальный рост дистрибутива и трудности с пониманием «а зачем-же это все нужно».
Затем в какой-то момент они вроде как перестали справляться со своим компилятором и перешли на LLVM (или может только для С++ перешли а для Delphi остались?). Вот это жалко — хоть бы код открыли. Ведь именно они первыми реализовали в С++ свойства, очень полезная фича; вроде так никто и не попытался повторить, даже в расширениях gcc не сделали.
В общем вывод — надо им открыть код, выкинуть 90% маркетоидного мусора, провести тотальный рефакторинг (по сути чистку). Сама среда разработки была таки неплохой. Но это коммерческая до мозга костей компания, да еще и не сильно богатая, судя по конским ценам на продукты, они никогда на такое не пойдут:(
Тогда GUI разрабатывался специально для нормальных десктопов с управлением мышью — поэтому он и хороший. А потом, когда стали пытаться скрестить интерфейсы для десктопа и планшета, да еще и писать gui на вебе (хотя WUI и GUI это таки разные вещи для разных предназначений), стало то что стало…
Такие люди как Обри ди Грей тоже нужны. Вполне может быть что он не сидит в лабораториях и не обладает сверхглубокими знаниями в биологии. Но он организатор и «евангелист» этой идеи, его задачи — и мотивировать ученых в лабораториях, и донести нужную информацию до потенциальных спонсоров, и подготовить общественное мнение.
Кстати, это полностью аналогично IT. Вполне может быть, что у IT-евангелистов нет глубоких познаний в многоэтажных шаблонах C++. Но они — организаторы, ораторы, посредники и толкачи, и такие люди тоже нужны.
Лучше сначала освоить бессмертие (точнее технологию периодического омоложения организма — настоящего «бессмертия однократного действия» вероятно еще ОЧЕНЬ долго не достичь, если такое вообще возможно), а затем спокойно колонизировать другие планеты.
Опять:) Ну откуда, откуда берется эта странная идея делать из эволюции священную корову???
Подумайте. Если мы достигнем бессмертия, то очевидно мы будем обладать чрезвычайно развитой биотехнологией. А это значит, что эволюционировать нам будет просто не нужно, вместо этого мы искусственно изменим геном под конкретные задачи (например наилучшим образом адаптируем его для жизни на другой планете). И не нужно будет ждать миллионы лет и надеяться на слепую удачу, мы просто спроектируем то что нужно… за пару месяцев например:)
Мне кажется, что есть некая комплексная проблема, видимая сторона которой заключается в том, что все эти исследования происходят слишком медленно. А это в свою очередь — следствие высокой сложности биотехнологий. Человеческий мозг в силу эволюционных причин слабо приспособлен для таких задач…
Нужно не просто увеличивать финансирование биостартапов. Нам нужно в разы больше специалистов-биологов; нам нужны совершенные методы поиска и структурирования информации; нужен искусственный интеллект, заточенный на решение сложных биологических задач; все это тянет за собой очень много чего еще. Одна надежда — что кто-то из немногих исследователей случайно наткнется на что-то реально результативное. Чтобы был вау-эффект, который можно наблюдать… Вот такая зацепка могла бы сдвинуть все с мертвой точки.
На планете 7 с половиной миллиардов человек, и 99.9% живут совершенно по инерции. Даже наши отечественные врачи, которые вместо того чтобы находиться на переднем крае биотехнологий, приходят на работу чтобы отсидеть день и занимаются тупой бумажной работой, выписывая рецепты пенсионерам и больничные работающим:( Вот как с этим можно что-то сделать, ума не приложу. Но как-то надо…
На уровне редактора оно разумеется работать не будет — указатель может быть много раз переприсвоен в другие переменные, и передавать во free() будем совсем не то что получили из malloc().
Что же касается дишных библиотек и их привязки к сборке мусора — тут интересный вопрос: можно ли сделать библиотеки универсальными, такими которые бы содержали код, независимый от наличия или отсутствия сборки мусора в проекте.
Кстати подумалось вот такое философское: получается, что возможна далеко не вообще любая Вселенная? То есть с одной стороны, помимо нашей Вселенной, возможно бесконечное множество других с другими физическими законами; но одновременно с этим существуют и некие ограничения в виде законов математики, которые не дают существовать вообще чему угодно? Чем же тогда являются законы математики и возможна ли «другая математика»?
Так там не должно быть «будущего» в нашем единственном смысле — там целое многомерное поле времени. Вполне логично что уравнения так просто не решаются.
В том-то и прикол, что хочется вселенную без ограничителей. Одномерность — и самое главное однонаправленность времени (кстати интересно следует ли второе из первого) накладывает серьезное ограничение на наш мир и также вероятно является причиной некоторых физических законов. А вот что будет если это все убрать?
Да если бы сделали нормальную объектную модель кода и прикрутили бы хоть javascript, это было бы уж всяко лучше чем многоэтажные шаблоны С++ с многоэтажными же сообщениями об ошибках компиляции.
А если прямо в IDE можно выделить какой-то метакод мышью и запустить на исполнение, и он тут же выполнится в отдельном окне, и по нему можно походить метаотладчиком, а с помощью REPL-подобного инструмента подать на него входные данные и тут же посмотреть результаты кодогенарации, и добавить проверку результатов метакомпиляции в автоматические тесты…
Но таких сред, насколько я знаю, пока не сушествует.
Вообще же любое программирование это в каком-то смысле «мета», если только это не программирование в машинных кодах:)
Но если кратко, то Rust кажется очень сложным и с кривоватым синтаксисом (как-то вот тяжело воспринимается код, не знаю почему). Go — простой, красивый, но кажется что слишком мало языковых концепций (нет метапрограмминга, исключений...). D создавался как замена С++, сам язык интересный, но кажется что под конец начались те же проблемы что и у С++.
Что меня неприятно удивило в D, так это то что там нет namespace. Модульность, основанная на файловой системе, мне очень не нравится.
Была кстати неплохая IDE, все работало, не припомню каких-то глюков или падений.
Затем перешел на Visual C++ и как-то перестал отслеживать борландовские продукты. Но иногда смотрел что же там выходило…
Не знаю как это правильно сформулировать, но вот такое бывает когда у власти не инженеры и программисты, а всякие маркетологи или как их там правильно называют. Они стали пихать в среду ВСЁ. Какие-то суперпурер-решения для «бизнеса» (в основном это касалось баз данных), которые якобы призваны решить все проблемы, баззвордные названия, стали метаться между технологиями, прикручивать все что можно… все это выливалось в экспоненциальный рост дистрибутива и трудности с пониманием «а зачем-же это все нужно».
Затем в какой-то момент они вроде как перестали справляться со своим компилятором и перешли на LLVM (или может только для С++ перешли а для Delphi остались?). Вот это жалко — хоть бы код открыли. Ведь именно они первыми реализовали в С++ свойства, очень полезная фича; вроде так никто и не попытался повторить, даже в расширениях gcc не сделали.
В общем вывод — надо им открыть код, выкинуть 90% маркетоидного мусора, провести тотальный рефакторинг (по сути чистку). Сама среда разработки была таки неплохой. Но это коммерческая до мозга костей компания, да еще и не сильно богатая, судя по конским ценам на продукты, они никогда на такое не пойдут:(
Кстати, это полностью аналогично IT. Вполне может быть, что у IT-евангелистов нет глубоких познаний в многоэтажных шаблонах C++. Но они — организаторы, ораторы, посредники и толкачи, и такие люди тоже нужны.
Подумайте. Если мы достигнем бессмертия, то очевидно мы будем обладать чрезвычайно развитой биотехнологией. А это значит, что эволюционировать нам будет просто не нужно, вместо этого мы искусственно изменим геном под конкретные задачи (например наилучшим образом адаптируем его для жизни на другой планете). И не нужно будет ждать миллионы лет и надеяться на слепую удачу, мы просто спроектируем то что нужно… за пару месяцев например:)
Нужно не просто увеличивать финансирование биостартапов. Нам нужно в разы больше специалистов-биологов; нам нужны совершенные методы поиска и структурирования информации; нужен искусственный интеллект, заточенный на решение сложных биологических задач; все это тянет за собой очень много чего еще. Одна надежда — что кто-то из немногих исследователей случайно наткнется на что-то реально результативное. Чтобы был вау-эффект, который можно наблюдать… Вот такая зацепка могла бы сдвинуть все с мертвой точки.
На планете 7 с половиной миллиардов человек, и 99.9% живут совершенно по инерции. Даже наши отечественные врачи, которые вместо того чтобы находиться на переднем крае биотехнологий, приходят на работу чтобы отсидеть день и занимаются тупой бумажной работой, выписывая рецепты пенсионерам и больничные работающим:( Вот как с этим можно что-то сделать, ума не приложу. Но как-то надо…
Что же касается дишных библиотек и их привязки к сборке мусора — тут интересный вопрос: можно ли сделать библиотеки универсальными, такими которые бы содержали код, независимый от наличия или отсутствия сборки мусора в проекте.