abakr (OP)
|
|
November 29, 2019, 09:46:45 PM |
|
Привет. Недавно начал изучать java. Но есть сомнения, пригодится ли он когда я его досконально изучу в направлении создания криптовалют. Есть ли более перспективные в этом плане языки. Вроде немного монет на java: semux и больше не слыхал
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
November 30, 2019, 07:30:48 AM |
|
Низкоуровневые сетевые протоколы это жесткая ебля с байтами и битами в потоке данных. Выбирайте любой язык на котором удобно работать с памятью и со структурами байтов и битов. На мой взгляд лучше цпп пока в этом плане ничего не придумано да и не будет наверное придумано в виду крайней специфичности задачи.
|
|
|
|
A-Bolt
Legendary
Offline
Activity: 2334
Merit: 2374
|
|
November 30, 2019, 09:49:59 AM |
|
Привет. Недавно начал изучать java. Но есть сомнения, пригодится ли он когда я его досконально изучу в направлении создания криптовалют. Есть ли более перспективные в этом плане языки. Вроде немного монет на java: semux и больше не слыхал
Не существует каких-то особых языков программирования подходящих для разработки криптовалюты с нуля в большей степени, чем другие языки программирования. Любой мейнстримный универсальный ЯП в равной степени подходит для создания криптовалютной ноды. Bitcoin - C++ Next - Java Ethereum - Geth - Go, Parity - Rust
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
November 30, 2019, 10:13:44 AM |
|
Любой, хоть Javascript. Лишь бы голова была на месте.
|
|
|
|
abakr (OP)
|
|
November 30, 2019, 05:09:47 PM |
|
Низкоуровневые сетевые протоколы это жесткая ебля с байтами и битами в потоке данных. Выбирайте любой язык на котором удобно работать с памятью и со структурами байтов и битов. На мой взгляд лучше цпп пока в этом плане ничего не придумано да и не будет наверное придумано в виду крайней специфичности задачи.
Так понимаю цпп это C++? А криптография это походу не програмирование, а матанализ или чего то похожее?
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
November 30, 2019, 07:14:29 PM Merited by Symmetrick (1) |
|
Так понимаю цпп это C++? А криптография это походу не програмирование, а матанализ или чего то похожее?
Все верно. Про криптографию очень хорошая статья для начинающих: https://habr.com/ru/post/335906/
|
|
|
|
johhnyUA
Legendary
Offline
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
|
|
December 02, 2019, 06:52:05 PM |
|
Любой, хоть Javascript. Лишь бы голова была на месте.
Высокоуровневка сомневаюсь что подойдет. Она выступает уже надстройкой, на которой реализуется уже какой то доп функционал. Для блокчейна биткоина вообще по сути свой язык писался Сатоши, который более похож на старые языки 70х-80х годов. Секьюрность была нужна просто и надежность.
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
December 02, 2019, 11:17:54 PM Last edit: December 03, 2019, 04:01:58 AM by Balthazar |
|
Высокоуровневка сомневаюсь что подойдет. Она выступает уже надстройкой, на которой реализуется уже какой то доп функционал. Для блокчейна биткоина вообще по сути свой язык писался Сатоши, который более похож на старые языки 70х-80х годов. Секьюрность была нужна просто и надежность.
1) Есть языки, полные по тьюрингу, и есть неполные. Если язык полон по тьюрингу, то на нем можно сделать все, что можно сделать на другом полном по тьюрингу. А блокчейн это, или ядро ОС - не имеет никакого значения совсем. Ядра ОС и драйверы к ним сочиняют и на C#, и на Java, есть даже ОС на Haskell. Зачастую это вызывает взрыв мозга у учителей информатики, вбивающих людям в голову всякий "высокоуровневый" и "низкоуровневый" бред. Что же до блокчейна, то подойдёт абсолютно любой язык, на котором сравнительно просто можно реализовать односвязный список или дерево. Яваскрипт входит в их число, собственно. Простейший блокчейн на Javascript реализуется за 10-15 минут. А за 20 его можно научить сохраняться на диск и реорганизовываться. 2) Никакого особого языка в клиентах Сатоши нет и не было. Обычная мешанина из разных стандартов C++ и макросов буста. Большая часть увиденного мной кода из проектов на C++, реализованных господрядчиками, выглядела именно так. То есть, довольно херово, чистой воды write-only. Склонен считать, что это так было сделано специально, чтобы не выдать себя использованием "любимых" паттернов. Примерно так же, как некоторые намеренно пишут записки левой рукой, так и Сатоши старательно сочинял именно говно код, чтобы сравнением кода с уже опубликованными проектами нельзя было выйти на автора. Иначе просто невозможно объяснить откровенную глупость некоторых решений, несовместимую с иновационностью проекта в целом.
|
|
|
|
investgroup
|
|
December 03, 2019, 12:47:29 AM |
|
Высокоуровневка сомневаюсь что подойдет. Она выступает уже надстройкой, на которой реализуется уже какой то доп функционал. Для блокчейна биткоина вообще по сути свой язык писался Сатоши, который более похож на старые языки 70х-80х годов. Секьюрность была нужна просто и надежность.
1) Есть языки, полные по тьюрингу, и есть неполные. Если язык полон по тьюрингу, то на нем можно сделать все, что можно сделать на другом полном по тьюрингу. А блокчейн это, или ядро ОС - не имеет никакого значения совсем. Ядра ОС и драйверы к ним сочиняют и на C#, и на Java, есть даже ОС на Haskell. Зачастую, это вызывает взрыв мозга у учителей информатики, вбивающих людям в голову всякий "высокоуровневый" и "низкоуровневый" бред. чушь порешь как обычно - а ей уже и не больно, бо уже сдохла )) Для написания систем - нужен язык СИСТЕМНОГО программирования, коими до определенного момента совсем не являлись даже некоторые обычные для систем языки(теперь)... Альтернатива - только ассемблер и квази-ассемблер, то есть говно квази-языки программирования вроде Ц и его извращений... Жаба же даже квази-языком программирования не является - это квази-программирование )) довольно херово, чистой воды write-only. а вот тут умная мысль Еще усвой простую мысль - что например система, написанная и работающая на том-же паскале на самом деле не написана и не работает, бо функций паскаля _СИСТЕМНЫХ_ просто не существует! То есть системная часть может на этих недоязыках работать только лишь в виде ассемблерных вставок и тп костылей... Назовешь хоть пару языков СИСТЕМНОГО программирования?.. Склонен считать, что это так было сделано специально, чтобы не выдать себя использованием "любимых" паттернов. Примерно так же, как некоторые намеренно пишут записки левой рукой, так и Сатоши старательно сочинял именно говно код, чтобы сравнением кода с уже опубликованные проектами нельзя было выйти на автора. Иначе просто невозможно объяснить откровенную глупость некоторых решений, несовместимую с иновационностью проекта в целом.
из тебя аналитик еще хуже чем программист... Просто такие проекты обычно делаются командой под чудким руководством манагера - так что кодит один чел, а говорит что и как делать - другой... Кстати биткойн.pdf вполне возможно что вообще какая-нить секретарша писала - можете искать там паттерны сколько угодно, но когда поймаете она бит от байта не отличит, так что все равно никто не поверил бы даже подпишись она real name с десятком цифровых подписей...
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
December 03, 2019, 12:59:26 AM |
|
investgroupВаше оценочное суждение очень важно, оставайтесь на линии.
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 03, 2019, 07:03:57 AM |
|
Писать-то можно на чем угодно, но поверьте, скорость написания и количество багов - очень сильно зависит от правильного выбора инструментов.. То есть айфоном можно конечно забивать гвозди, но лучше не надо. Скриптовые языки с динамическими типами придуманы не для парсинга хекс дампов из стримов. Можно конечно и ими, не переплюетесь и переблюетесь по ходу коддинга.
|
|
|
|
investgroup
|
|
December 03, 2019, 07:53:44 AM Last edit: March 01, 2020, 07:03:37 PM by Xal0lex |
|
Главной вопрос: а кто использованные библиотеки поддерживает?.. И не появиться ли дырка, после того, как выйдет новая версия библиотек?.. PS вот потому и лучше системные языки, где есть все фишки, причем _стандартизированные и переносимые_... А так-то да - в принципе блокчейн может быть таким приметивным, что его можно написать на чем угодно - но поверьте, если ваша задача таким кривым инструментом решается, то вам лучше токен, а не блокчейн! А отдельный блокчейн(который имел бы в наше время смысл!) потребует такие редкие функции, что половину из них все равно придеться писать с нуля, да и с системой там интеграция будет скорее всего не слабая... привет, детка, че курил в этот раз? И случайно не умеешь ли писать на спарке?.. (спорю в гугель полезешь? а тебе б надо знать это как отче наш...) PS или назови(ну кроме кривого Ц, точнее Ц точно в топку, тогда уж конкретно ГЦЦ или кланг - стандартизация нужна знаешь ли бывает что на разных платформах и байты в другом порядке идут... ты может уже и не помнишь такое старье - но поверь у более новых девайсов сертификатов еще нету(и скорее всего не будет), а у этого старья есть!) PPS да кстати вот тебе вопрос как программеру на засыпку: что будет если ваш битховен откомпилить на интел и моторолу, где байты идут в другом порядке?.. Ну и написать исходник на чем-нить "системно-независимом"(это так-же как со странами - когда от программиста уже ничего не зависет )) ), чтобы не заморачиваться... Раз - и у всех int в структурах байты местами переставились, старшенький с младшеньким... но почему-то все работает, причем аж в 2х вариантах... Ну, понятно, что таким блоки с моторолы не пройдут на интеле и наоборот... Но фишка в чем? Возникнет 2 форка!!! Правильно?.. (Дальше сам?..) И вопрос - заметил бы ты раскол в сети или нет?.. Ну, потом-то конечно заметят лет через несколько - а вот чтобы сразу?..
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
December 03, 2019, 02:54:31 PM |
|
Писать-то можно на чем угодно, но поверьте, скорость написания и количество багов - очень сильно зависит от правильного выбора инструментов..
Верно. Вот только оценка инструментов при выборе не может быть объективной по определению, потому что её делает человек, исходя из своих опыта и знаний. Скриптовые языки с динамическими типами придуманы не для парсинга хекс дампов из стримов.
В "скриптовых" языках, вроде питона или того же JS, есть всё необходимое для работы с бинарными данными. А если кому-то лень собирать пакеты руками, то есть и куча библиотек с обертками. Ситуация особенно не отличается от таковой при написании аналогичного приложения на любом другом языке, включая "системные". Если человек криворукий и не знает, как работает TCP/IP, то ему не поможет ничего. Если же знает, то и на JS нормально напишет, да ещё и время сэкономит на этом. Можно конечно и ими, не переплюетесь и переблюетесь по ходу коддинга.
Это было бы интересным пассажем, если бы не... ./internals -rw-r--r-- 1 alexi staff 26237 Dec 1 18:25 Chain.js -rw-r--r-- 1 alexi staff 24267 Dec 1 18:27 Context.js -rw-r--r-- 1 alexi staff 78658 Dec 1 07:58 Node.js ./internals/database -rw-r--r-- 1 alexi staff 29296 Nov 28 02:07 ChainDB.js -rw-r--r-- 1 alexi staff 3816 Nov 16 10:00 NodeDB.js ./internals/primitives -rw-r--r-- 1 alexi staff 34093 Nov 29 07:50 BlockTemplate.js -rw-r--r-- 1 alexi staff 23793 Nov 29 06:26 Coinbase.js -rw-r--r-- 1 alexi staff 7462 Nov 24 01:42 Filter.js -rw-r--r-- 1 alexi staff 7478 Nov 22 15:11 Manifest.js -rw-r--r-- 1 alexi staff 3489 Nov 22 15:11 MerkleTree.js -rw-r--r-- 1 alexi staff 272 Nov 23 05:45 Recipients.js -rw-r--r-- 1 alexi staff 30216 Nov 29 08:00 Snapshot.js -rw-r--r-- 1 alexi staff 6442 Nov 22 15:11 SnapshotFactory.js -rw-r--r-- 1 alexi staff 14533 Nov 29 07:59 SnapshotUtils.js -rw-r--r-- 1 alexi staff 3936 Nov 10 06:38 Token.js
Ага, именно, я решил отойти от слов и провести такой эксперимент на самом себе. И больше скажу - никакой разницы с написанием аналогичного кода на C++ или C# я для себя не вижу от слова совсем. Да, для некоторых вещей приходится писать обертки. В то же время, для других не приходится. Так что плюс-минус всё то же самое, ибо главное при программировании - алгоритмы и постановка задачи, все остальное вторично. Программирование этим и отличается от "коддинга", когда некто бездумно пишет всякую херню, а потом смотрит в отладчик и удивляется. Единственный существенный вывих мозга при работе с JS - добровольно-принудительная асинхронность, но это даже хорошо.
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 03, 2019, 03:54:56 PM |
|
Если человек криворукий и не знает, как работает TCP/IP, то ему не поможет ничего. Если же знает, то и на JS нормально напишет, да ещё и время сэкономит на этом.
Точно сэкономит? Может проведем простейший эксперимент? Напишите программу на яваскрипте, которая на вход принимает строку "02010000", а на выходе дает число 258 ? Потом сравним с тем, как это можно сделать в с++?
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
December 03, 2019, 04:31:34 PM Merited by Symmetrick (1) |
|
Точно сэкономит? Может проведем простейший эксперимент? Напишите программу на яваскрипте, которая на вход принимает строку "02010000", а на выходе дает число 258 ? Потом сравним с тем, как это можно сделать в с++?
Да легко. Вариант 1: const [hexBytes] = process.argv.slice(2); console.log(Buffer.from(hexBytes, 'hex').readUInt32LE()); $ node test.js 02010000 258 $ Вариант 2: const fs = require('fs'); const data = fs.readFileSync(0, 'utf-8'); console.log(Buffer.from(data, 'hex').readUInt32LE()); $ echo 02010000 | node test.js 258 $ При желании еще можно запилить асинхронность, потоки, фабрику объектов... В общем, вопрос фантазии. Это я всё к чему? Первое. Для любого случая можно придумать хитрый болт. Я могу показать какой-нибудь трехстрочный промис на JS или C#, с последующим его резолвом. А потом ухмыльнуться и предложить написать аналогичный код GWBasic. Ну несерьезно же, подобные эксперименты ничего не значат от слова совсем. Второе. Вы исходите из предположения о том, что меньше написанного кода ведет к меньшей трате времени. Очевидно, что это предположение является в лучшем случае необоснованным. Оно верно только для случаев, когда время на реализацию некого решения ограничивается временем набора текста на клавиатуре, то есть самых тупых сценариев именно "кодинга", а не программирования.
|
|
|
|
investgroup
|
|
December 03, 2019, 04:33:53 PM |
|
ужоснах... может лучше в кодах?..
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 03, 2019, 04:45:10 PM |
|
Ну да, все никак не могу привыкнуть в этому Buffer в яваскрипте и к его методам (( В принципе с байтами нормально можно работать. А для работы с битами есть что-нибудь?
|
|
|
|
johhnyUA
Legendary
Offline
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
|
|
December 03, 2019, 04:47:04 PM |
|
2) Никакого особого языка в клиентах Сатоши нет и не было. Обычная мешанина из разных стандартов C++ и макросов буста. Большая часть увиденного мной кода из проектов на C++, реализованных господрядчиками, выглядела именно так. То есть, довольно херово, чистой воды write-only. Я о Script, если что, говорил. Сами клиенты понятное дело написаны на плюсах, Питоне и иногда на шарпе. Но при кодинге высоким уровнем для низкого, можно дойти до того, до чего дошли ребята с ДАО, когда не понимали как на низком уровне работает функция split А в принципе на любом языке что-то есть, но это не показатель для суждений "лучше/хуже". Есть языки на которых проще организовать определенный функционал, а на которых сложнее. В теме вопрос очевидно "лучше = проще"
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
December 03, 2019, 05:20:22 PM |
|
Я о Script, если что, говорил.
Так это же обычная машина состояний. Биток можно было реализовать и без неё, тот же монеро прекрасно обходится без стейт машин. Но тогда система будет менее расширяемой, и для введения новых типов адресов пришлось бы делать хард форки. Цель именно в расширяемости, а не потому что это как-то по-особенному безопасно. Напротив, почти всю более-менее продвинутую математику в Script отключили из-за того, что в ней были найдены баги, приводящие к неопределенному поведению. В принципе с байтами нормально можно работать. А для работы с битами есть что-нибудь?
Есть обычные битовые операторы, как в C/C++. Только с ними надо осторожнее, потому что обманчивая простота JS в сочетании с битовыми операторами - это термоядерная смесь. Некоторые деятели такое пишут, что потом получается полный ахтунг.
|
|
|
|
|
|