Move blogs into pages directory.
This commit is contained in:
blog
posts
0000-hello-world.cfg0001-ethical-giving.cfg0003-the-television-is-cancer.cfg0004-small-talk.cfg0005-the-new-era-of-script-kiddies.cfg0006-resources-for-learning-x86_64-assembly.cfg0007-why-i-hate-the-web.cfg0008-game-website-app-creators.cfg0009-why-i-am-a-gpl-advocate.cfg0010-my-favorite-firefox-addons.cfg0011-new-website-design.cfg0012-my-favorite-vim-plugins.cfg0013-my-first-superficial-impressions-of-freebsd.cfg0014-strict-compilers.cfg0015-tox.cfg0016-my-loathing-of-apple.cfg0017-what-is-lacking-in-education?.cfg0018-the-https-hype.cfg0019-educational-software.cfg0020-adobe-flash-needs-to-die.cfg0021-why-i-use-cc-by-nd.cfg0022-avoiding-youtube-non-free-javascript.cfg0023-studying-for-my-c++-exam.cfg0024-for-tabs.cfg0025-the-importance-of-libre-games.cfg0026-non-free-firmware.cfg0027-why-i-use-cli.cfg0028-my-preference-for-c.cfg0029-we-i3-now.cfg0030-books.cfg0031-merry-grav-mass.cfg0032-getting-esperanto-diacritics-on-gnu-linux.cfg0033-parabola-gnu-linux-libre.cfg0034-the-onion-router.cfg0035-esperanto.cfg0036-developers-as-an-audience.cfg0037-parabola-with-lvm-on-luks.cfg0038-encrypted-backup-drive.cfg0039-change-of-heart-on-https.cfg0040-reasons-not-to-use-the-gpl.cfg0041-the-unused-potential-of-bitmessage.cfg0042-a-library-copyleft-license-combination.cfg0043-judgement.cfg0044-patch-files.cfg0045-from-parabola-to-arch.cfg0046-your-computer-your-computing.cfg0047-the-beauty-of-silence.cfg0048-summer-album.cfg0049-humour.cfg0050-technology-literacy.cfg0051-why-windows-sucks.cfg0052-the-google-memo.cfg0053-why-macos-sucks.cfg0054-slow-and-happy.cfg0055-restructuring-the-blog.cfg0056-software-used-in-summer.cfg0057-full-disk-encryption-with-grub2.cfg0058-disagreement-without-hate-disagreement-with-respect.cfg0059-user-friendliness-and-modern-tech.cfg0060-from-firefox-to-palemoon.cfg0061-my-recent-dislike-for-oop-languages.cfg0062-waterfox.cfg0063-ideas-for-improv-ii.cfg0064-i-hate-licensing-but-im-glad-its-there.cfg0065-hosting-my-own-git.cfg0066-the-farm.cfg0067-blog-upgrade.cfg0068-summer-update.cfg0069-getting-more-women-in-technology.cfg0070-arm-the-future-of-free-software.cfg0071-productivity-and-quality-of-life.cfg0072-blog-break-is-over.cfg0073-new-cooking-category.cfg0074-colloquial-measurement-systems.cfg0075-more-settings-less-locale.cfg0076-pybitmessage-sucks.cfg0077-mnt-reform-adopts-i.mx8.cfg0078-vegetarianism.cfg0079-the-cancer-which-is-pre-installed-applications.cfg0080-recipe:-mojopicón.cfg0081-the-honorable-sacrifice-of-ones-soul.cfg0082-build-libraries-not-apps.cfg0083-why-you-should-learn-esperanto.cfg0084-how-to-split-tech-monopolies.cfg0085-recent-website-unavailability.cfg0086-patches-and-suckless.cfg0087-what-makes-spanish-awesome.cfg0088-gentoo-and-how-its-useful.cfg0089-recipe:-potato-stir-fry.cfg0090-moving-away-from-cmake.cfg0091-dwm-and-sxhkd.cfg0092-recipe:-pollo-picantito.cfg0093-new-category-and-content.cfg0094-modesty.cfg0095-an-atheist-explains-the-problem-of-evil.cfg0096-the-lesson-we-could-learn-but-wont.cfg0097-tradition.cfg0098-arm-boards-and-user-control.cfg0099-technological-slave-mentality.cfg0100-the-advantages-of-e-mail.cfg0101-install-archarm-on-the-emmc-of-the-asus-c201.cfg0102-why-the-traditional-latin-mass.cfg0103-why-non-techies-should-use-free-software.cfg0104-the-authentic.cfg0105-be-radical.cfg0106-rss:-decentralized-subscriptions.cfg0107-less-forums-more-mailing-lists.cfg0108-modernism.cfg0109-pope-francis-on-same-sex-civil-unions.cfg0110-new-site-migration.cfg0111-do-away-with-parties.cfg0112-new-website-setup.cfg0113-new-onion-address.cfg0114-christ-was-not-a-revolutionary.cfg0115-reverence-for-authority.cfg0116-sin-and-hell.cfg0117-what-is-love.cfg0118-dumping-summer-album.cfg0119-five-technological-principles-to-live-by.cfg0120-be-less-internet-dependent.cfg0121-the-importance-of-mortification.cfg0122-an-analogy-for-purgatory.cfg0123-the-end-of-the-music-stores.cfg0124-culture-as-a-common-good.cfg0125-how-to-behave-at-the-mass.cfg0126-political-puritanism.cfg0127-book-review-the-lambs-supper-by-scott-hahn.cfg0128-editors-compilers-and-build-systems.cfg0129-los-siete-dolores-y-gozos-de-san-jose.cfg0130-first-impression-of-rust.cfg0131-new-media-usage.cfg0132-the-idolatry-of-technology.cfg0133-the-nature-of-the-state.cfg0134-return-to-reality.cfg0135-the-extraordinary-form-revisited.cfg0136-why-income-inequality-is-not-directly-important.cfg0137-the-beauty-of-the-sacrament-of-confession.cfg0138-to-love-everyone-means-everyone.cfg0139-traditionis-custodes.cfg0140-git-main-vs-master-branch.cfg0141-know-your-enemy-the-phone.cfg0142-taize:-experience-and-liturgy.cfg0143-cmake-externalproject-module.cfg0144-archarm-uefi-mcbin-install.cfg0145-linux-just-works.cfg0146-literal-interpretations-of-scripture.cfg0147-trent-horn-capitalism-and-socialism.cfg0148-vpns-and-internet-privacy.cfg0149-elevating-our-intellectual-discussion.cfg0150-account-proliferation.cfg0151-critique-of-functional-programming.cfg0152-cpp-optimizations-series.cfg0153-love-and-desire.cfg0154-adoration.cfg0155-beginners-guide-to-prayer.cfg0156-freedom-and-camping.cfg0157-in-out-parameters.cfg0158-la-la-land-review.cfg0159-religion-and-politics.cfg0160-introducing-pacundo.cfg0161-introducing-menu-helper.cfg0162-on-separation-of-church-and-state.cfg0163-a-defense-of-churches-as-sanctuaries.cfg0164-contextualizing-scripture.cfg
templates
pages/blog
2016-05-18-hello-world.cfg.php2016-05-18-hello-world.html.php2016-05-19-ethical-giving.cfg.php2016-05-19-ethical-giving.html.php2016-05-23-the-television-is-cancer.cfg.php2016-05-23-the-television-is-cancer.html.php2016-05-25-small-talk.cfg.php2016-05-25-small-talk.html.php2016-05-26-the-new-era-of-script-kiddies.cfg.php2016-05-26-the-new-era-of-script-kiddies.html.php2016-06-05-resources-for-learning-x86_64-assembly.cfg.php2016-06-05-resources-for-learning-x86_64-assembly.html.php2016-06-06-why-i-hate-the-web.cfg.php2016-06-06-why-i-hate-the-web.html.php2016-07-04-game-website-app-creators.cfg.php2016-07-04-game-website-app-creators.html.php2016-07-05-why-i-am-a-gpl-advocate.cfg.php2016-07-05-why-i-am-a-gpl-advocate.html.php2016-07-18-my-favorite-firefox-addons.cfg.php2016-07-18-my-favorite-firefox-addons.html.php2016-07-22-new-website-design.cfg.php2016-07-22-new-website-design.html.php2016-07-25-my-favorite-vim-plugins.cfg.php2016-07-25-my-favorite-vim-plugins.html.php2016-07-31-my-first-superficial-impressions-of-freebsd.cfg.php2016-07-31-my-first-superficial-impressions-of-freebsd.html.php2016-08-13-strict-compilers.cfg.php2016-08-13-strict-compilers.html.php2016-08-17-tox.cfg.php2016-08-17-tox.html.php2016-08-20-my-loathing-of-apple.cfg.php2016-08-20-my-loathing-of-apple.html.php2016-08-25-what-is-lacking-in-education?.cfg.php2016-08-25-what-is-lacking-in-education?.html.php2016-09-02-the-https-hype.cfg.php2016-09-02-the-https-hype.html.php2016-09-30-educational-software.cfg.php2016-09-30-educational-software.html.php2016-10-06-adobe-flash-needs-to-die.cfg.php2016-10-06-adobe-flash-needs-to-die.html.php2016-10-08-why-i-use-cc-by-nd.cfg.php2016-10-08-why-i-use-cc-by-nd.html.php2016-10-27-avoiding-youtube-non-free-javascript.cfg.php2016-10-27-avoiding-youtube-non-free-javascript.html.php2016-11-15-studying-for-my-c++-exam.cfg.php2016-11-15-studying-for-my-c++-exam.html.php2016-11-22-for-tabs.cfg.php2016-11-22-for-tabs.html.php2016-11-28-the-importance-of-libre-games.cfg.php2016-11-28-the-importance-of-libre-games.html.php2016-11-29-non-free-firmware.cfg.php2016-11-29-non-free-firmware.html.php2016-12-05-why-i-use-cli.cfg.php2016-12-05-why-i-use-cli.html.php2016-12-19-my-preference-for-c.cfg.php2016-12-19-my-preference-for-c.html.php2016-12-22-we-i3-now.cfg.php2016-12-22-we-i3-now.html.php2016-12-24-books.cfg.php2016-12-24-books.html.php2016-12-25-merry-grav-mass.cfg.php2016-12-25-merry-grav-mass.html.php2017-01-07-getting-esperanto-diacritics-on-gnu-linux.cfg.php2017-01-07-getting-esperanto-diacritics-on-gnu-linux.html.php2017-01-13-parabola-gnu-linux-libre.cfg.php2017-01-13-parabola-gnu-linux-libre.html.php2017-01-14-the-onion-router.cfg.php2017-01-14-the-onion-router.html.php2017-01-26-esperanto.cfg.php2017-01-26-esperanto.html.php2017-01-30-developers-as-an-audience.cfg.php2017-01-30-developers-as-an-audience.html.php2017-02-20-parabola-with-lvm-on-luks.cfg.php2017-02-20-parabola-with-lvm-on-luks.html.php2017-02-21-encrypted-backup-drive.cfg.php2017-02-21-encrypted-backup-drive.html.php2017-03-05-change-of-heart-on-https.cfg.php2017-03-05-change-of-heart-on-https.html.php2017-03-25-reasons-not-to-use-the-gpl.cfg.php2017-03-25-reasons-not-to-use-the-gpl.html.php2017-04-08-the-unused-potential-of-bitmessage.cfg.php2017-04-08-the-unused-potential-of-bitmessage.html.php2017-04-18-a-library-copyleft-license-combination.cfg.php2017-04-18-a-library-copyleft-license-combination.html.php2017-04-20-judgement.cfg.php2017-04-20-judgement.html.php2017-05-02-patch-files.cfg.php2017-05-02-patch-files.html.php2017-05-12-from-parabola-to-arch.cfg.php2017-05-12-from-parabola-to-arch.html.php2017-05-13-your-computer-your-computing.cfg.php2017-05-13-your-computer-your-computing.html.php2017-05-14-the-beauty-of-silence.cfg.php2017-05-14-the-beauty-of-silence.html.php2017-05-29-summer-album.cfg.php2017-05-29-summer-album.html.php2017-06-21-humour.cfg.php2017-06-21-humour.html.php2017-06-22-technology-literacy.cfg.php2017-06-22-technology-literacy.html.php2017-07-09-why-windows-sucks.cfg.php2017-07-09-why-windows-sucks.html.php2017-08-13-the-google-memo.cfg.php2017-08-13-the-google-memo.html.php2017-09-04-why-macos-sucks.cfg.php2017-09-04-why-macos-sucks.html.php2017-09-10-slow-and-happy.cfg.php2017-09-10-slow-and-happy.html.php2017-10-10-restructuring-the-blog.cfg.php2017-10-10-restructuring-the-blog.html.php2017-10-13-software-used-in-summer.cfg.php2017-10-13-software-used-in-summer.html.php2017-10-14-full-disk-encryption-with-grub2.cfg.php2017-10-14-full-disk-encryption-with-grub2.html.php2017-10-15-disagreement-without-hate-disagreement-with-respect.cfg.php2017-10-15-disagreement-without-hate-disagreement-with-respect.html.php2017-11-08-user-friendliness-and-modern-tech.cfg.php2017-11-08-user-friendliness-and-modern-tech.html.php2017-11-17-from-firefox-to-palemoon.cfg.php2017-11-17-from-firefox-to-palemoon.html.php2017-12-20-my-recent-dislike-for-oop-languages.cfg.php2017-12-20-my-recent-dislike-for-oop-languages.html.php2018-01-02-waterfox.cfg.php2018-01-02-waterfox.html.php2018-01-13-ideas-for-improv-ii.cfg.php2018-01-13-ideas-for-improv-ii.html.php2018-03-01-i-hate-licensing-but-im-glad-its-there.cfg.php2018-03-01-i-hate-licensing-but-im-glad-its-there.html.php2018-03-18-hosting-my-own-git.cfg.php2018-03-18-hosting-my-own-git.html.php2018-03-18-the-farm.cfg.php2018-03-18-the-farm.html.php2018-06-27-blog-upgrade.cfg.php2018-06-27-blog-upgrade.html.php2018-09-01-summer-update.cfg.php2018-09-01-summer-update.html.php2018-12-08-getting-more-women-in-technology.cfg.php2018-12-08-getting-more-women-in-technology.html.php2019-01-12-arm-the-future-of-free-software.cfg.php2019-01-12-arm-the-future-of-free-software.html.php2019-02-25-productivity-and-quality-of-life.cfg.php2019-02-25-productivity-and-quality-of-life.html.php2019-06-13-blog-break-is-over.cfg.php2019-06-13-blog-break-is-over.html.php2019-06-13-new-cooking-category.cfg.php2019-06-13-new-cooking-category.html.php2019-06-16-colloquial-measurement-systems.cfg.php2019-06-16-colloquial-measurement-systems.html.php2019-06-16-more-settings-less-locale.cfg.php2019-06-16-more-settings-less-locale.html.php2019-06-16-pybitmessage-sucks.cfg.php2019-06-16-pybitmessage-sucks.html.php2019-06-17-mnt-reform-adopts-i.mx8.cfg.php2019-06-17-mnt-reform-adopts-i.mx8.html.php2019-06-20-vegetarianism.cfg.php2019-06-20-vegetarianism.html.php2019-07-26-the-cancer-which-is-pre-installed-applications.cfg.php2019-07-26-the-cancer-which-is-pre-installed-applications.html.php2019-07-30-recipe:-mojopicón.cfg.php2019-07-30-recipe:-mojopicón.html.php2019-07-31-the-honorable-sacrifice-of-ones-soul.cfg.php2019-07-31-the-honorable-sacrifice-of-ones-soul.html.php2019-08-22-build-libraries-not-apps.cfg.php2019-08-22-build-libraries-not-apps.html.php2019-09-02-why-you-should-learn-esperanto.cfg.php2019-09-02-why-you-should-learn-esperanto.html.php2019-09-18-how-to-split-tech-monopolies.cfg.php2019-09-18-how-to-split-tech-monopolies.html.php2019-10-01-recent-website-unavailability.cfg.php2019-10-01-recent-website-unavailability.html.php2019-10-25-patches-and-suckless.cfg.php2019-10-25-patches-and-suckless.html.php2019-10-31-what-makes-spanish-awesome.cfg.php2019-10-31-what-makes-spanish-awesome.html.php2019-12-02-gentoo-and-how-its-useful.cfg.php2019-12-02-gentoo-and-how-its-useful.html.php2019-12-09-recipe:-potato-stir-fry.cfg.php2019-12-09-recipe:-potato-stir-fry.html.php2019-12-11-moving-away-from-cmake.cfg.php2019-12-11-moving-away-from-cmake.html.php2019-12-23-dwm-and-sxhkd.cfg.php2019-12-23-dwm-and-sxhkd.html.php2020-01-13-recipe:-pollo-picantito.cfg.php2020-01-13-recipe:-pollo-picantito.html.php2020-03-11-new-category-and-content.cfg.php2020-03-11-new-category-and-content.html.php2020-03-17-modesty.cfg.php2020-03-17-modesty.html.php2020-03-18-an-atheist-explains-the-problem-of-evil.cfg.php2020-03-18-an-atheist-explains-the-problem-of-evil.html.php2020-03-25-the-lesson-we-could-learn-but-wont.cfg.php2020-03-25-the-lesson-we-could-learn-but-wont.html.php2020-04-08-tradition.cfg.php2020-04-08-tradition.html.php2020-04-17-arm-boards-and-user-control.cfg.php2020-04-17-arm-boards-and-user-control.html.php2020-04-27-technological-slave-mentality.cfg.php2020-04-27-technological-slave-mentality.html.php2020-05-08-the-advantages-of-e-mail.cfg.php2020-05-08-the-advantages-of-e-mail.html.php2020-06-19-install-archarm-on-the-emmc-of-the-asus-c201.cfg.php2020-06-19-install-archarm-on-the-emmc-of-the-asus-c201.html.php2020-07-18-why-the-traditional-latin-mass.cfg.php2020-07-18-why-the-traditional-latin-mass.html.php2020-08-08-why-non-techies-should-use-free-software.cfg.php2020-08-08-why-non-techies-should-use-free-software.html.php2020-09-06-the-authentic.cfg.php2020-09-06-the-authentic.html.php2020-09-28-be-radical.cfg.php2020-09-28-be-radical.html.php2020-10-06-rss:-decentralized-subscriptions.cfg.php2020-10-06-rss:-decentralized-subscriptions.html.php2020-10-07-less-forums-more-mailing-lists.cfg.php2020-10-07-less-forums-more-mailing-lists.html.php2020-10-12-modernism.cfg.php2020-10-12-modernism.html.php2020-10-23-pope-francis-on-same-sex-civil-unions.cfg.php2020-10-23-pope-francis-on-same-sex-civil-unions.html.php2020-10-27-new-site-migration.cfg.php2020-10-27-new-site-migration.html.php2020-11-05-do-away-with-parties.cfg.php2020-11-05-do-away-with-parties.html.php2020-11-12-new-website-setup.cfg.php2020-11-12-new-website-setup.html.php2020-11-16-new-onion-address.cfg.php2020-11-16-new-onion-address.html.php2020-11-20-christ-was-not-a-revolutionary.cfg.php2020-11-20-christ-was-not-a-revolutionary.html.php2020-11-26-reverence-for-authority.cfg.php2020-11-26-reverence-for-authority.html.php2020-12-05-sin-and-hell.cfg.php2020-12-05-sin-and-hell.html.php2020-12-12-what-is-love.cfg.php2020-12-12-what-is-love.html.php2021-01-02-dumping-summer-album.cfg.php2021-01-02-dumping-summer-album.html.php2021-01-21-five-technological-principles-to-live-by.cfg.php2021-01-21-five-technological-principles-to-live-by.html.php2021-02-10-be-less-internet-dependent.cfg.php2021-02-10-be-less-internet-dependent.html.php2021-02-11-the-importance-of-mortification.cfg.php2021-02-11-the-importance-of-mortification.html.php2021-02-12-an-analogy-for-purgatory.cfg.php2021-02-12-an-analogy-for-purgatory.html.php2021-02-15-the-end-of-the-music-stores.cfg.php2021-02-15-the-end-of-the-music-stores.html.php2021-02-19-culture-as-a-common-good.cfg.php2021-02-19-culture-as-a-common-good.html.php2021-02-19-how-to-behave-at-the-mass.cfg.php2021-02-19-how-to-behave-at-the-mass.html.php2021-03-06-political-puritanism.cfg.php2021-03-06-political-puritanism.html.php2021-03-25-book-review-the-lambs-supper-by-scott-hahn.cfg.php2021-03-25-book-review-the-lambs-supper-by-scott-hahn.html.php2021-04-04-editors-compilers-and-build-systems.cfg.php2021-04-04-editors-compilers-and-build-systems.html.php2021-04-08-los-siete-dolores-y-gozos-de-san-jose.cfg.php2021-04-08-los-siete-dolores-y-gozos-de-san-jose.html.php2021-04-18-first-impression-of-rust.cfg.php2021-04-18-first-impression-of-rust.html.php2021-04-20-new-media-usage.cfg.php2021-04-20-new-media-usage.html.php2021-04-28-the-idolatry-of-technology.cfg.php2021-04-28-the-idolatry-of-technology.html.php2021-04-28-the-nature-of-the-state.cfg.php2021-04-28-the-nature-of-the-state.html.php2021-05-15-return-to-reality.cfg.php2021-05-15-return-to-reality.html.php2021-06-17-the-extraordinary-form-revisted.cfg.php2021-06-17-the-extraordinary-form-revisted.html.php2021-07-07-why-income-inequality-is-not-directly-important.cfg.php2021-07-07-why-income-inequality-is-not-directly-important.html.php2021-07-13-the-beauty-of-the-sacrament-of-confession.cfg.php2021-07-13-the-beauty-of-the-sacrament-of-confession.html.php2021-07-20-to-love-everyone-means-everyone.cfg.php2021-07-20-to-love-everyone-means-everyone.html.php2021-07-31-comment-on-traditionis-custodes.cfg.php2021-07-31-comment-on-traditionis-custodes.html.php2021-08-11-git-main-vs-master-branch.cfg.php2021-08-11-git-main-vs-master-branch.html.php2021-08-12-know-your-enemy-the-phone.cfg.php2021-08-12-know-your-enemy-the-phone.html.php2021-08-24-taize-experience-and-liturgy.cfg.php2021-08-24-taize-experience-and-liturgy.html.php2021-08-28-cmake-externalproject-module.cfg.php2021-08-28-cmake-externalproject-module.html.php2021-08-31-installing-archarm-with-uefi-on-the-mcbin.cfg.php2021-08-31-installing-archarm-with-uefi-on-the-mcbin.html.php2021-09-07-linux-just-works.cfg.php2021-09-07-linux-just-works.html.php2021-09-12-literal-interpretations-of-scripture.cfg.php2021-09-12-literal-interpretations-of-scripture.html.php2021-09-24-trent-horn-capitalism-and-socialism.cfg.php2021-09-24-trent-horn-capitalism-and-socialism.html.php2021-11-22-vns-and-internet-privacy.cfg.php2021-11-22-vns-and-internet-privacy.html.php2021-12-20-elevating-our-intellectual-discussion.cfg.php2021-12-20-elevating-our-intellectual-discussion.html.php2022-02-17-account-proliferation.cfg.php2022-02-17-account-proliferation.html.php2022-05-27-cpp-optimizations-series.cfg.php2022-05-27-cpp-optimizations-series.html.php2022-05-27-critique-of-functional-programming.cfg.php2022-05-27-critique-of-functional-programming.html.php2022-06-02-love-and-desire.cfg.php2022-06-02-love-and-desire.html.php2022-06-07-adoration.cfg.php2022-06-07-adoration.html.php2022-07-28-beginners-guide-to-prayer.cfg.php2022-07-28-beginners-guide-to-prayer.html.php2022-08-26-freedom-and-camping.cfg.php2022-08-26-freedom-and-camping.html.php2023-03-14-in-out-parameters.cfg.php2023-03-14-in-out-parameters.html.php2024-02-06-la-la-land-review.cfg.php2024-02-06-la-la-land-review.html.php2024-02-15-religion-and-politics.cfg.php2024-02-15-religion-and-politics.html.php2024-06-05-introducing-pacundo.cfg.php2024-06-05-introducing-pacundo.html.php2024-11-11-introducing-menu-helper.cfg.php2024-11-11-introducing-menu-helper.html.php2024-11-25-on-separation-of-church-and-state.cfg.php2024-11-25-on-separation-of-church-and-state.html.php2025-01-25-a-defense-of-churches-as-sanctuaries.cfg.php2025-01-25-a-defense-of-churches-as-sanctuaries.html.php2025-02-13-contextualizing-scripture.cfg.php2025-02-13-contextualizing-scripture.html.phpindex.html.php
@ -0,0 +1,128 @@
|
||||
<p>I've been using Rust for a while now, particularly on my pet project,
|
||||
Indivisible,<sup><a href="#r1" >[1]</a></sup> and one very key feature of Rust
|
||||
is that it's designed to be used primarily with the functional programming
|
||||
paradigm<sup><a href="#r2" >[2]</a></sup> (as opposed to the imperative
|
||||
paradigm<sup><a href="#r3" >[3]</a></sup>). I noticed this especially when I
|
||||
wanted to use a given library for parallelization in Rust, which was only
|
||||
available using this functional paradigm, therefore forcing me to adopt it. I've
|
||||
had a little exposure to this paradigm before, but I haven't had to use it
|
||||
extensively. After this I thought I would write about my experience on the
|
||||
matter.</p>
|
||||
|
||||
<p>I will admit I went into this quite critically. I've had bad experiences with
|
||||
this paradigm in the past, and I'm not fond of change. I'm a very classical
|
||||
person who is very used to C/C++ programming, and quite fond of assembly. Even
|
||||
so, I was willing to give Rust and functional programming a try. So I'm simply
|
||||
going to list off the pros and cons I've found with this paradigm.</p>
|
||||
|
||||
<h2>Pros</h2>
|
||||
|
||||
<h3>(Generally) More Optimal Code</h3>
|
||||
|
||||
<p>One of the benefits of using something like a library - which is basically
|
||||
what you do when you follow a functional paradigm - is that someone else way
|
||||
smarter than you has written the complicated bits, and probably in a more
|
||||
optimal manner. Instead of you typing down the first algorithm that comes to
|
||||
your head, someone has (hopefully) studied the different algorithms and their
|
||||
time complexity and chosen those which are most optimal for solving each
|
||||
different issue.</p>
|
||||
|
||||
<p>Now, although this can also apply to the imperative paradigm whenever one
|
||||
uses a library for any given task, it's true that the imperative paradigm is not
|
||||
characterized by passing the result of one function to another within the
|
||||
library, so there's less of a robust variety of functions to solve different
|
||||
(and often common) problems.</p>
|
||||
|
||||
<p>This being said, I have put down the caveat "generally", as this isn't always
|
||||
the case, mostly because you (the unintelligent developer) still have some part
|
||||
in the programming process, and if you don't know how to use these functions
|
||||
properly, you may even make something that's even less efficient than if you
|
||||
were to program it all manually.</p>
|
||||
|
||||
<h3>Less Code</h3>
|
||||
|
||||
<p>Less code doesn't necessarily mean better code, but it's still nice. Reason
|
||||
being that it typically makes it faster to read through, and faster to develop.
|
||||
Instead of having to manually type down all these different loops and filters,
|
||||
you simply call these preprogrammed functions. Take the two examples of Rust
|
||||
code that follow as an example:</p>
|
||||
|
||||
<figure>
|
||||
<code>
|
||||
// functional<br />
|
||||
let prime = !(start..end).step_by(2).any(|x| n % x == 0);<br />
|
||||
// imperative<br />
|
||||
let mut prime = true;<br />
|
||||
for i in (start..end).step_by(2)<br />
|
||||
{<br />
|
||||
if n % i == 0<br />
|
||||
{<br />
|
||||
prime = false;<br />
|
||||
}<br />
|
||||
}<br />
|
||||
</code>
|
||||
<br />
|
||||
<figcaption>
|
||||
Code block 1. Functional versus imperative code comparison.
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
<h2>Cons</h2>
|
||||
|
||||
<h3>Cryptic Code</h3>
|
||||
|
||||
<p>Perhaps my most pressing complaint about the functional paradigm is that it's
|
||||
extremely cryptic to read. You can often end up with these very long chains of
|
||||
functions with strange names doing very abstract tasks, all the while with a web
|
||||
browser open next to it with the documentation to make sure you're understanding
|
||||
what's going on correctly. You get these very strange syntactical structures
|
||||
that you're not quite sure how they're working, but you go along with it
|
||||
anyways.</p>
|
||||
|
||||
<p>The consequence of this is that, even though there may be less code to read,
|
||||
it's actually harder to understand what the code does exactly. Even when writing
|
||||
the code I've often found myself having to look over it several times to make
|
||||
sure it was going to do what I wanted it to.</p>
|
||||
|
||||
<h3>Extensive Familiarity Required</h3>
|
||||
|
||||
<p>When we work with any kind of library you generally have to familiarize
|
||||
yourself with it, and in using the functional paradigm this isn't any different.
|
||||
However, because functional programming <em>depends on</em> a library for its
|
||||
proper usage, you must familiarize yourself with all these very specific
|
||||
functions to make sure you're using the most optimal function for the task. If
|
||||
not, you can actually end up making very inefficient code.</p>
|
||||
|
||||
<h2>Conclusion</h2>
|
||||
|
||||
<p>Ultimately it's a question of what you're used to and what you care about. I
|
||||
fully understand that in most enterprise settings, where the objective is simply
|
||||
to get a product out to market as soon as possible, that many companies would
|
||||
prefer a functional paradigm language to get this done faster, and even get new
|
||||
employees up-to-speed as quickly as possible. But I'm not as convinced that it
|
||||
creates good code, as much as it creates lazy and inexperienced programmers. It
|
||||
also distances the developers more from the actual functionality of their code
|
||||
as well as the algorithms behind it.</p>
|
||||
|
||||
<p>Use whatever you're comfortable with, but I still prefer good ol' imperative
|
||||
programming.</p>
|
||||
|
||||
<h2>References</h2>
|
||||
|
||||
<ol class="refs">
|
||||
<li id="r1" >
|
||||
<a href="https://gitlab.com/naortega/indivisible" >
|
||||
Indivisible project on GitLab
|
||||
</a>
|
||||
</li>
|
||||
<li id="r2" >
|
||||
<a href="https://en.wikipedia.org/wiki/Functional_programming" >
|
||||
"Functional programming" on Wikipedia
|
||||
</a>
|
||||
</li>
|
||||
<li id="r3" >
|
||||
<a href="https://en.wikipedia.org/wiki/Imperative_programming" >
|
||||
"Imperative programming" on Wikipedia
|
||||
</a>
|
||||
</li>
|
||||
</ol>
|
Reference in New Issue
Block a user