Олдскул… все-таки откуда это чувство чего-то теплого, лампового? Я начинал программировать на обычных PC-шках, под DOS. С такими машинами дела не имел никогда. И все равно, когда смотришь на старую компьютерную технику, возникает какая-то ностальгия… возможно потому что раньше к IT в целом, к компьютерам и интернету были причастны не все подряд, а только «избранные», т.е. профессионалы, те кому это действительно нужно и кто в этом действительно понимает? До какого-то момента ведь так и было. Где-то до начала 2000-х. А потом пошла попса какая-то, интернет из серьезной сети превратился в пестрящую баннерами развлекалочку, смартфоны и ноутбуки есть абсолютно у всех…
Давно хочу заняться программингом под Андроид, и все никак руки не доходят. Я так и не смог определиться, есть ли у Гугла что-то типа «Android Developing Pack Ultimate Edition», чтобы в ОДНОМ оффлайновом инсталляторе было все что нужно для работы — и SDK, и NDK, и среда разработки, настроенная для Андроида, и справка, и примеры…
В который раз убеждаюсь что все гениальное просто. Что может быть проще двух длинных чисел, представляющих широту и долготу? Оказывается, короткая символьная строка в 36-ричной системе:)
Бессмысленные ограничения… Разве для какого-нибудь Андроида проблема написать софтверную реализацию шифрования? Дополнительное преимущество — можно применять именно те механизмы шифрования, которые ты хочешь и которым доверяешь, а не то что зашито производителем.
Я бы так не сказал. В D и Rust присутствуют разные не менее интересные фичи, но конкретно структурная типизация и встраивание вместо наследования, насколько я помню, только в Go.
Я имел в виду всего лишь «нескриптовое» программирование. Не знаю есть ли правильный адекватный термин. То есть все то, что обычно делают на C/С++, включая и классическое «системное» программирование, и «встраиваемое» (для микроконтроллеров, в том числе самостоятельные прошивки без ОС), и достаточно большую часть «прикладного», включая и софт с GUI, и геймдев, и серверное ПО.
Идеальный язык системного программирования пока не сделан, увы. И Go конечно даже и не претендует на это звание:) Но в Go есть некоторые идеи, которые лично мне понравились (и которые ИМХО вполне могли бы войти в «идеальный язык» в качестве фич):
1. Структурная типизация. Как дополнение к классической номинативной она была бы очень интересна.
2. Встраивание вместо наследования. Удивительно простая и очевидная вещь, которую следовало бы ввести еще в Си. Можно сказать что это более низкоуровневая реализация наследования. А возможность «встраивать» указатели вообще дает крайне интересые эффекты.
3. Ну и оператор вывода типов := сам по себе весьма милый… знаете, мелочь — а приятно, что именно так сделали. Правда недоделали до конца, и внутри выражений объявлять таким образом новые переменные нельзя.
Из того что я знаю — язык Nemerle, на rsdn.ru есть отличные статьи по этому поводу. Думаю, еще где-нибудь есть.
Хотя можно обобщить и сказать, что основная идея нормального метапрограммирования — написание «плагинов к компилятору» с использованием классической императивной (процедурной и объектно-ориентированной) парадигмы, причем неважно на том же языке что и основная программа, или на каком-то другом (возможно на упрощенном подмножестве основного языка, или на популярном скриптовом языке). Это не генерация текста программы, а именно работа с синтаксическими деревьями, поэтому компилятор должен предоставлять какое-то API для доступа к себе, а синтаксис основного языка обеспечивать прозрачное встраивание макросов и «квазицитирование» кода.
В данном случае часовщик делает не часы, а корпуса для часов. Необычные, но всего лишь корпуса. А сам механизм — обычный (возможно даже от дешевых китайских часов), что можно видеть на фотографиях.
Ну шахматы-то, в отличие от реального мира, конечны. 64 клетки и ограниченное количество фигур, так что начиная с определенного момента — таки не проблема.
ИМХО этот «интеллектуальный бастион» скорее первый, а никак не последний:) К тому же, для шахмат все-же есть теоретическое решение, которое сводится к построению дерева всех возможных комбинаций полным перебором и выбора оптимальной комбинации. Да, нужно огромное количество памяти. Но разве для современных компьютеров это проблема?
Наказывать нужно террористов, а не простых людей. Даже если в Иране есть хотя-бы один(!) человек, который против терроризма, отключать нельзя.
А способов наказать конкретных людей много, было бы желание.
Они там совсем без мозгов. Интернет — это одна из немногих вещей, которая реально сближает людей со всего мира, реально объединяет Человечество.
А закрытие интернета (пусть даже в Иране) — это отличный повод всяким духовным скрепителям сказать «Воот! Видите — наша национальная безопасность под угрозой! Давайте-ка сделаем свой, национальный интернет». И все.
Тем более прецедент уже есть — Севераная Корея.
Макросы и шаблоны реально оперируют не типами и не значениями, а фрагментами AST. То что традиционно шаблоны в С++ в качестве аргументов получают исключительно типы и значения (почему-то только целочисленные) — это ИМХО недоразумение. У меня при работе с низкоуровневым программингом для микроконтроллеров не раз возникала необходимость сделать шаблон, в который можно было бы передать просто фрагмент кода (даже не функцию, а просто код в фигурных скобках). Приходилось делать костыли с сишными лексическими макросами, которые как вы понимаете, далеко не лучшее решение в программировании.
Поэтому все эти alias и enum в D воспринимаются как унаследованные от С++ костыли. Конечно, должен быть некий механизм ограничения того, что мы передаем в шаблон — если там предусмотре тип, то это должен быть только тип а не что угодно. Но на самом верхнем уровне это именно нода синтаксического дерева.
1. Структурная типизация. Как дополнение к классической номинативной она была бы очень интересна.
2. Встраивание вместо наследования. Удивительно простая и очевидная вещь, которую следовало бы ввести еще в Си. Можно сказать что это более низкоуровневая реализация наследования. А возможность «встраивать» указатели вообще дает крайне интересые эффекты.
3. Ну и оператор вывода типов := сам по себе весьма милый… знаете, мелочь — а приятно, что именно так сделали. Правда недоделали до конца, и внутри выражений объявлять таким образом новые переменные нельзя.
Хотя можно обобщить и сказать, что основная идея нормального метапрограммирования — написание «плагинов к компилятору» с использованием классической императивной (процедурной и объектно-ориентированной) парадигмы, причем неважно на том же языке что и основная программа, или на каком-то другом (возможно на упрощенном подмножестве основного языка, или на популярном скриптовом языке). Это не генерация текста программы, а именно работа с синтаксическими деревьями, поэтому компилятор должен предоставлять какое-то API для доступа к себе, а синтаксис основного языка обеспечивать прозрачное встраивание макросов и «квазицитирование» кода.
А способов наказать конкретных людей много, было бы желание.
А закрытие интернета (пусть даже в Иране) — это отличный повод всяким духовным скрепителям сказать «Воот! Видите — наша национальная безопасность под угрозой! Давайте-ка сделаем свой, национальный интернет». И все.
Тем более прецедент уже есть — Севераная Корея.
Поэтому все эти alias и enum в D воспринимаются как унаследованные от С++ костыли. Конечно, должен быть некий механизм ограничения того, что мы передаем в шаблон — если там предусмотре тип, то это должен быть только тип а не что угодно. Но на самом верхнем уровне это именно нода синтаксического дерева.