{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Function arities of different Scala projects\n", "\n", "I was curious what is a distribution of function arities in different Scala projects.\n", "Scala is a functional programming language, so I assumed the average number of arguments would be more than 2.\n", "\n", "So I did a small research. I created a Scala compiler plugin that gathered defined functions arities.\n", "In this notebook I visualize collected data for the following projects:\n", "- Scala 2.12.4 compiler and standard library\n", "- Dotty 0.5.0-RC1 compiler\n", "- Akka 2.4\n", "- Spark 2.2\n", "- Cats 1.0\n", "- Scalaz 7.2.9" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt \n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I don't count constructors, and do _not_ count `this` as implicit argument" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def readStats(filename):\n", " x = []\n", " with open(filename, \"r\") as file: \n", " for l in file:\n", " name, num, implicits = l.strip().split()\n", " n = int(num)\n", " if name == \"\":\n", " continue \n", " x.append(n)\n", " return np.asarray(x)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "scalaz = readStats(\"data/scalaz8.txt\")\n", "akka = readStats(\"data/akka2.4.txt\")\n", "scala = readStats(\"data/scala2.12.txt\")\n", "dotty = readStats(\"data/dotty.txt\")\n", "spark = readStats(\"data/spark2.2.txt\")\n", "cats = readStats(\"data/cats1.0.txt\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAFSCAYAAAAAfELwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcFfXi//H3gQOiAik3rLxWomnlgl4kTUOvpol906uW\nGxotmqYipF1XRJAgLPXihrv5qzSXXCrv7ba6RLig15uplJZWlvuGyiLrmd8fPjw3BgQl9Rzx9Xw8\nejw4M5+Zec/BhjfDzBmLYRiGAAAAANi5ODoAAAAA4GwoyQAAAIAJJRkAAAAwoSQDAAAAJpRkAAAA\nwISSDAAAAJhQkgFcFw8++KC6dOmirl272v8bP378dd/O7t27FR0dLUnas2ePIiIirvs2yrJ+/XrF\nx8dLkjZt2qQZM2YUm/5HzZgxQx9++OE1LXPy5EkNHz5cXbp0UZcuXdSzZ099+eWX5c6wdu1avfzy\ny+VevryWL1+uBQsWlHv5qKgo7d279zomAnA7sjo6AICK45133pGPj88N3caBAwd04sQJSVLjxo01\nc+bMG7q9krRv317t27eXdKmonz9/vtj0P+qVV1655mWioqLUqlUrTZ8+XdKl9yokJER+fn6qW7fu\ndcl1M4SEhPyh5bds2aLevXtfpzQAbleUZAA33IMPPqitW7faC/Tl1z/++KOmTZume++9Vz/++KPy\n8vIUHR2tRx99VFlZWYqPj9d///tfubq6qkOHDgoJCdHMmTOVkZGhcePGqVu3boqLi9O//vUvZWRk\nKDY2Vvv27ZPFYlHr1q316quvymq1qnHjxho0aJA2b96skydP6rnnntMLL7xQLOfq1au1cuVK5efn\n6/z58xo4cKD69u2rtWvXavXq1bp48aI8PT3VvXt3ffbZZxo6dKhWrFihwsJCeXl56f7779dnn32m\n+fPnKyMjQ6+//rp++OEH5efnq2XLlho9erSsVqtmzpypL774Qm5ubqpevbomTZqkGjVqFMkyduxY\n1atXTwMGDLjq/KdOnVJOTo5sNptcXFz0wAMPaO7cufL29pYkffvtt4qPj9fFixfl5uam0aNHq2XL\nllfc79/btWuXpkyZory8PJ06dUqtWrVSQkJCsQyhoaGqW7eu9u7dq/T0dHXt2lURERE6fPiw+vXr\np7p16+rIkSNasmSJdu/eraSkJBUWFsrT01Pjxo2Tv7+/Zs2apfT0dEVHR+vEiRN67bXXdOzYMeXn\n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\naufOncXWv3r1avXs2VPdunVTu3bttGzZsmJj8vLyFBYWplatWkmS7r77blWvXl3Hjx8vNjYlJUUX\nL15UQkJCkenu7u6Kj49XjRo1JEmNGjXS6dOnlZeXV/43BwBuoj//+c+KiIjQW2+9JUnKyMjQyJEj\n1blzZ3Xp0kWTJ09WQUGB3nvvPe3du1eTJ0/Whx9+qJkzZ+o///mPxo0bp6ioKCUmJtrXuW7dOoWF\nhRXZTkFBgTZt2qRevXpJkh5++GHVrl1bX3/9dbFM33zzjQ4ePKgePXqoR48e+vzzz0vM/uWXX6pn\nz56SpJo1ayooKEiffPLJVe23YRg6fPiw7rjjDknSjh079NNPP2ncuHGqVKmSJKl69eqaPHmyHnnk\nEUnSd999p/3792vmzJlXtQ3cmjiTDIe64447NGrUKL300ku68847FRAQoBYtWuipp56Su7u79u3b\np6lTp+qDDz7QPffco7fffltz585V9+7ddfLkSa1cuVIuLi5asGCBFi5cqGbNmtnXnZWVpVWrVmnB\nggWqXr26du3apRdffFF9+/YtkqFSpUr2g6skrVy5UtnZ2WratGmxvB06dFCHDh2UmppaZHqtWrVU\nq1YtSZcOuJMmTdLjjz8ud3f36/l2AcAN9dBDD+mHH36QJMXHx6tatWr65z//qfz8fA0ZMkSLFy/W\noEGD9Omnn6pfv37q1KmTbDabPvvsM02aNEnff/+9Bg4cqIiICFmtVq1cuVKDBw8uso309HTZbDb5\n+PjYp911110lnpioXLmyOnfurL59++rgwYMKDQ1VzZo11ahRoyLjjh07pnvuuafM9V02cuRIeXh4\n2C/zCwoK0rx58yRJe/fulb+/f7G/ZNauXdv+10V/f3/5+/vr8OHDV/Gu4lZFSYbDvfjii+rZs6d2\n7NihHTt2aOHChVq4cKFWr16trVu3KigoyH7we+GFF+zL3XHHHVqxYoV+++03paamqmrVqkXWW7Vq\nVc2bN09fffWVfvnlF+3bt6/IGeuSLFiwQO+++64WLVokDw+Pa96X7OxsjR07VsePH9eiRYuueXkA\ncCSLxWI/9iUnJ2v58uWyWCxyd3dXnz599M4772jQoEFXXP7hhx9WrVq1tGnTJvn5+enkyZMKCgoq\nMsZms5W4bEmX102cONH+dd26dfXkk09qw4YNxUqyYRjFlnVxufIfyy9fbvHbb7/pxRdfVN26dXXv\nvffalytpfbj9cLkFHGrnzp1atGiRPD091a5dO40ePVoff/yxXFxctHnzZrm6uha5SSInJ0cHDx7U\npk2b9PLLL0uS2rdvr5CQkGLrPn78uLp166YjR46oWbNmGj58+BVz5OXl6dVXX9W//vUvrVixQg89\n9NA178vRo0fVp08fubq66t1335W3t/c1rwMAHGnPnj1Fbub7PZvNpoKCgjLX0a9fP61Zs0arV69W\nr169ihzDJelPf/qTJOn8+fP2aSdOnNBdd91VZFxhYaHmzp2rzMxM+zTDMGS1Fj+/d8899+jUqVP2\n1ydPntTdd9+t5cuXq2vXruratavGjx9fbLl7771XkydPVmJior799ltJUpMmTbRnzx77JX+X7d69\nW6NGjSpz/1FxUJLhUD4+Ppo7d67+85//2KedOnVKFy9eVP369dWiRQtt3bpVJ0+elCStWLFCU6ZM\n0ebNm9WuXTv17dtXjRs31pdfflnsgLZ37175+Pho6NChat26tTZu3ChJxcZJUkREhDIzM7VixQr7\nZRPX4ty5c3r22WfVsWNHTZs2rVxnoQHAkX7++WfNmTNH/fv3lyQFBQXpvffek2EYysvL0/vvv2+/\nd8PV1dVemH//tSQFBwfr+++/1+eff65nnnmm2HasVqvatm2rlStXSrr0CREHDx5UixYtioxzdXXV\nhg0b9P7770u6dGPh559/XuJNhe3bt7ev7/jx4/r666/Vrl07hYSE6KOPPtJHH32k119/vcT9DggI\nUPfu3RUbGyubzaa//OUvqlOnjiZNmqTc3FxJ0unTpxUfH1+unw+4dXG5BRzKz89Ps2fP1rRp03T8\n+HFVqlRJXl5eeu211+wf8XP5mmVJ8vX1VUJCgjIzMzVy5Eh16dJFrq6uCgwM1Oeff17kzMdjjz2m\n1atXq1OnTqpcubL8/f3l4+OjQ4cOFfn4oJ07d2rjxo2qXbt2kTPSI0eOVOvWrTVw4ED16dNH7du3\nv+J+LF++XMeOHdMXX3yhL774wj797bffVvXq1a/b+wUA10tOTo79oy5dXFxUqVIlvfrqq2rbtq0k\nKSoqSvHx8erSpYvy8/PVunVr+/XF7dq105tvvqn8/Hw1a9ZM06dPV1hYmGbPni13d3cFBwfr9OnT\nRa47/r2YmBhFRUWpc+fOslgsmjx5sry8vCSpyDF36tSpiomJ0QcffKDCwkJFRkaqbt26kqTx48er\nUaNGCgkJUXh4uCZOnKinnnpKhYWFGjVqVJGPjSvLq6++qieffFIrV65USEiIZs6cqWnTpunpp5+W\nq6urbDabunXrdk0fLYpbn8XgwhsAAHCdZGdn69lnn1VMTIyaNGni6DhAuXG5BQAAuC6+/vprtW3b\nVi1atKAg45bHmWQAAADAhDPJAAAAgAklGQAAADChJAMAAAAmTvcRcKdOZZRruerVqyg9vfSnqTmS\nM+dz5mySc+dz5mySc+dz5mxS+fP5+nrdgDTOrTzH7Yr6/b8ZnDmbRL4/wpmzSc6d70YcsyvMmWSr\ntfjjLJ2JM+dz5mySc+dz5mySc+dz5myS8+e71Tn7++vM+Zw5m0S+P8KZs0nOne9GZKswJRkAAAC4\nXijJAAAAgAklGQAAADChJAMAAAAmlGQAAADAhJIMAAAAmFCSAQAAABNKMgAAAGBCSQYAAABMKMkA\nAACACSUZAAAAMLE6OsDtImnVLuXk5Ds6RolGhj7i6AgA4FQ4ZgPgTDIAAABgQkkGAAAATCjJAAAA\ngAklGQAAADChJAMAAAAmlGQAAADAhI+AA4AKpLCwUFFRUfr5559lsVgUGxurSpUqaezYsbJYLKpX\nr55iYmLk4uKipKQkbdq0SVarVZGRkfL399ehQ4dKHAsAtxuOfABQgWzcuFGStGLFCg0fPlzTpk3T\npEmTNHz4cC1btkyGYWj9+vVKS0vT9u3btWrVKiUmJio2NlaSShwLALcjSjIAVCAdOnRQXFycJOno\n0aPy9vZWWlqamjdvLklq06aNtmzZop07dyooKEgWi0U1a9ZUYWGhzp49W+JYALgdcbkFAFQwVqtV\nY8aM0RdffKGZM2dq8+bNslgskqSqVasqIyNDmZmZqlatmn2Zy9MNwyg2tizVq1eR1ep6zTl9fb2u\neZmbycPDzdERrsjZ3zvylZ8zZ5OcO9/1zkZJBoAK6M0339TIkSPVq1cv5ebm2qdnZWXJ29tbnp6e\nysrKKjLdy8uryPXHl8eWJT09+5rz+fp66dSpsgu4IznrY6klOfV75+zfW2fO58zZJOfOV95spRVr\nLrcAgArkww8/1Pz58yVJlStXlsViUaNGjZSamipJSk5OVmBgoAICApSSkiKbzaajR4/KZrPJx8dH\nDRo0KDYWAG5HnEkGgAqkY8eOGjdunPr166eCggJFRkaqbt26mjBhghITE1WnTh0FBwfL1dVVgYGB\n6t27t2w2m6KjoyVJY8aMKTYWAG5HFaYkJ63a5dR/GnPma9sAVBxVqlTRjBkzik1funRpsWnh4eEK\nDw8vMs3Pz6/EsQBwu+FyCwAAAMCEkgwAAACYUJIBAAAAE0oyAAAAYEJJBgAAAEwoyQAAAIAJJRkA\nAAAwoSQDAAAAJpRkAAAAwISSDAAAAJhUmMdSA7ebw4d/0+uvT5TFYlGdOnX16qtj5OLyv997L1w4\nr8jIV5Wefl533HGHxoyJks1mU0xMpH3MgQM/aPDgYerWrcdVb3fXrv/K09NLDzxQr8j0mJhx6tr1\nGQUEBF5x2cLCQsXEjFPnzt3UpUtwkXmZmZl67bUJys7OUn5+vsLDR6hRI399++03SkqaLovFoqZN\nAzR0aMRVZwUAoLwoycAtatasRA0cOEQBAYGaMiVBX3/9lf7613b2+e+++//UrFkzPfNMP+3Ykar5\n82dr7NgJSkpaIEnau3e3FiyYoy5dul/Tdj/+eJ3at+9YrCSX5ciRw4qPj9bJkyfVuXO3YvNXrnxP\ngYGPqFevvvr11180ceJ4LV78nmbM+Ifi499UzZp/Vnj4y/rhh32qX/+ha9o2nE/Sql3Kycl3dIwr\n8vBwc3QEAA5GSQb+gLVr1+rTTz9Xbm6uzpw5rZ49Q/T111/p558PKizsFbVu3VYbNnyplSvfk4uL\ni/z9m2rIkHCdPHlCU6e+oby8S8sNHDhUbdq01fPP91HTpgE6ePCAJOmNNxLl6empESPCNHnydLm5\n/e8H9/79+/SXvzSTJD36aCtt355apCT/8stP6t37GUmSv38TTZs22T7PMAxNmzZFMTFxcnV1veL+\nJSTE6vDh35Sbm6uePfuodu06Sk3dqh9+2Kfateto8+Zk/etfH+pPf7pT6enpki6dwX7jjXglJEwp\nsq7s7GyNGTNB7733Tonb6tWrr9zdL+1fQUGh3N0rSZIWLHhbVqtV2dnZysrKVOXKVa7umwMAwB9A\nSQb+oOzsbE2bNltffvmZVq5cpgUL3tY33+zUqlXL1aTJX7R48XwtWrREHh4eiouboB07tkmyqE+f\nfgoICNSePd/qrbfmq02btsrKylKHDsEaMWK0YmOjtG3bZnXoEKxp02YX265hGLJYLJKkKlWqKisr\ns8j8evUe1IYNG9S79/NKSUlWTk6Ofd7mzcny86uj++6rXcp+ZWnXrv9q/vy3ZbFYtH37Nj300MNq\n0aKl2rfvKHd3N61atULvvrtCLi4uGjDgWUmSt/cdxQrypTz1S30fvby8JElnzpxWXNwERUT8XZJk\ntVq1d+8eTZwYqdq1/VSjRo1S1wMAwPVQZknOz8/X2LFjdeTIEbm4uCguLk5Wq1Vjx46VxWJRvXr1\nFBMTIxcXFyUlJWnTpk2yWq2KjIyUv7+/Dh06VOJYoKKoV+9BSZKnp5dq1/aTxWKRl5eXcnPzdPjw\nbzp3Ll0jR166jjY7O1tHjhyWv/9f9M47b+njjz+SZFFBQYF9ffXrX1pfjRp3KS8v74rb/f3/R9nZ\nWfL09CwyPzT0Bc2bN0NhYQPVsuVjuuuuu+zzPvvsE/Xs2afU/apSpaoiIv6uyZNfV3Z2ljp2fLLI\n/CNHDsvPr47c3d0lSQ8/3LDU9V2NgwcPKCYmUmFhr9jPkktSo0aNtXr1P7VgwRwtXfqOBgx4+Q9v\nCwCA0pTZVr/66isVFBRoxYoVCgsL0/Tp0zVp0iQNHz5cy5Ytk2EYWr9+vdLS0rR9+3atWrVKiYmJ\nio2NlaQSxwIVyeWzuSW5554/q0aNuzR9+hwlJS1Qjx691bBhYy1aNE+dOj2lCRPiSrjR7crr+716\n9R7Uf//7H0nStm1b1KTJX4rM37XrG/Xs2VOzZy9UrVr3qnHjJvZ5+/Z9X+R1SU6fPq39+7/XpElT\nNXnydM2dO1MFBQWyWCwyDJtq1bpPP//8k3Jzc1RYWKgffth/Vbmv5Oeff9KECWMUExOvli0fk3Tp\nbPnQoS/pwoULkqQqVaqU+n4DAHC9lFmS/fz8VFhYKJvNpszMTFmtVqWlpal58+aSpDZt2mjLli3a\nuXOngoKCZLFYVLNmTRUWFurs2bMljgVuF9WrV1fv3v00bNggDRz4vLZt26J7771f7dq11+zZl87y\n7tiRqnPnzpW6nhEjwpSfX/Qmp2HDhmvx4gV6+eUXlZ+fr7Zt2xcZe99992vy5MkaPLi/vvzycz3/\n/ABJUnp6uqpWrVpm2fzTn/6ks2fPaPDg/hoxIkx9+jwrq9WqBg0aad68JJ0/f07PPvu8Bg/ur5Ej\nI1S5cmVJlz9VY9RVv0eX886fn6S8vDzNmDFVw4YN0tixr8pisSgk5FmNHBmhYcMG6ccf96tPn2ev\net0AAJSXxTAMo7QBx44d09ChQ5Wdna309HTNmzdPERERSklJkSRt3bpVa9asUZ06dVStWjX17dtX\n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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.style.use('seaborn')\n", "fig = plt.figure(figsize=(12, 5))\n", "fig.suptitle(\"Function arities in Scala projects\")\n", "plt.subplot(121)\n", "plt.title(\"Scala 2.12\")\n", "plt.text(4, 8000, \"mean: %.2f std: %.2f\" % (np.mean(scala), np.std(scala)))\n", "n, bins, patches = plt.hist(scala, bins=range(8), alpha=0.6, histtype='bar')\n", "plt.subplot(122)\n", "plt.title(\"Dotty 0.5.0-RC1\")\n", "plt.text(4, 2500, \"mean: %.2f std: %.2f\" % (np.mean(dotty), np.std(dotty)))\n", "n, bins, patches = plt.hist(dotty, bins=range(8), alpha=0.6, histtype='bar')\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nav1aAwDFGYAtlJaWVnrs5+fn/n+HwyFjjCTJ6XTK4XC41x04cKDS7P/lcrmqPC4vL3c/PlEyTzzn\nif2ccPDgQcXExOiee+5Ru3bt1KNHD3300Ufu9Y0aNbL0+n67/9mzZ7uvLf7111/lcDjk5eWl9PR0\nff755/rkk080bdo0XXfddZowYcJJn6+2/EeOHNGcOXOUlJSkyMhIRUZGasiQIRo/frzeeust3XPP\nPZW+npL09ddfKygo6KSv+4QBAwboiiuuUNeuXXXrrbdqx44dVTKc4HT+958cY4y8vI6/P93X19e9\nrrptjTGVvmcul0vGGC1fvlwNGzaUJOXm5qpBgwbasmVLpddjjNFXX32lK664otJzjho1Sv369dOm\nTZu0Zs0aLVy4UGvWrHFnAoDqcIQAUGdCQkL0+eefS5Lef/99S9t06tRJb775plwul0pLSzVixAht\n27ZN3t7elcrVCV26dNHrr78uY4xKS0u1cuVKde7c2XLGXbt2KSQkRI888oi6du3qLo8VFRUn3e5k\neV555RV3nqFDhyo9PV1ffvmlevXqpUsvvVQPP/yw7r//fn311VeWc9bkggsuUGZmpl577TV3KT12\n7JgOHDigNm3aKCwsTA6HQ5s3b5Yk5eTk6L777tOnn35a6+s+evSodu3apdGjR+uWW27RTz/9pB9+\n+KHKDysnrFu3Ti6XS0ePHtU//vEP3XTTTVVmOnbsqM2bN+vHH3+UJH3yySc6cOCArr76avdMQECA\nrrnmGv3tb3+TdPyHj9jYWK1fv15XX321du/erW+++UbS8U80eeKJJyT993tSXl6um266SUVFRYqN\njdXEiRO1e/fuar9fAPBbnHEGUGcmTJigp59+WkFBQercubNCQ0Nr3Wb48OGaOnWq7rjjDlVUVOi2\n227TLbfcoh9++EGzZs3SsGHDdO+991bax5QpU9S7d2+VlZWpa9eu7jeRWXH99dfrjTfeUI8ePdSw\nYUOFh4crJCREe/bsOel2nTp1UkJCgnx8fHTllVe6l48fP15Tp0515+ncubMeeugh+fj46NZbb9Vd\nd92lRo0ayc/Pr9azzVY4nU69/PLLmjlzptLS0tSoUSM5HA716dNH/fr1kyTNmTNH06ZN07PPPisf\nHx/NmTNHV155pdatW3fS133BBRdo8ODB6tOnj4KDg9W4cWNFRERoz5491V5mUlxcrH79+qmwsFBx\ncXHq1KmT9u7dW2nmsssu08SJEzV8+HBVVFTIz89P8+fPV2BgYKW55557TpMnT1bv3r1VWlqqXr16\n6fbbb3evS0xMdL+58IUXXpAk3XzzzRo1apSmTJmicePGafTo0e7fYEybNk2+vr6/++sNoH5zmJp+\npwYAwGkSHx+vAQMGqEePHh4/x/Tp0+V0Ot1nkAHgbONSDQCA7T3xxBN69913f1fxBoDfizPOAAAA\ngAWccQYAAAAsoDgDAAAAFlCcAQAAAAsozgAAAIAFFGcAAADAAoozAAAAYAHFGQAAALCA4gwAAABY\nQHEGAAAALKA4AwAAABZQnAEAAAALKM44J5WVlalLly4aOHCge1lWVpZ69epVZbam5adi7dq1uv32\n23XHHXeof//++vzzz086v3PnTrVt21a5ubm/a78AcC7avn274uPj1bt3b/Xq1UsPPfSQvvnmm9O6\nj8svv7zWY2xxcbGefPJJ9e7dWz179tSTTz6p4uLiKnMul0vPPvusevbsqd69e2v48OEcv1EtijPO\nSe+//74uv/xy5eTkaPfu3Wd0X999951mzpypxYsXa+3atRo6dKgSEhJqnM/NzdVTTz2lsrKyM5oL\nAOyotLRUDz/8sMaOHau3335bf//739W7d28NGjRIFRUVZzXLvHnzVFFRobVr12rdunUqKSnRggUL\nqsytXr1aOTk5evPNN/X222+refPmmjFjxlnNinMDxRnnpGXLlunmm2/WbbfdpldffbXK+n/961/q\n1q2bPv300xqXu1wuTZkyRXfffbduu+023XrrrcrOzq7yXL6+vpoyZYqaNGkiSWrbtq0OHz6s0tLS\nKrMul0tPPPGERo0adZpeKQCcW44dO6b8/HwVFRW5l91+++1KSkpSRUWFsrKydNddd+mRRx5R7969\ndffdd7tPgHz//fd64IEHFBMTo27dumno0KEqKSmRdPzY++ijjyo6OrrSb/0OHTqkXr16KT09vUqW\n9u3ba+jQofLy8pK3t7dat26t/fv3V5m77LLLNGbMGPn6+rr3Vd0cIAOcY7755hvTtm1bk5eXZ3bs\n2GHCw8NNbm6u2bJli+nZs6f55JNPzM0332y++OILY4ypcfmnn35qEhISTEVFhTHGmAULFpiHH374\npPt2uVzm8ccfNwkJCdWuT0lJMbNmzTLGGNOqVStz5MiR0/WyAeCcsWTJEhMeHm5uuukmM3r0aLNq\n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\nCxYs0IcffqiysjLFxsbq7rvvrutIkqQ1a9bozTfflCSVlJToiy++0ObNmxUUFFTHyeqPc+G4bcdj\ntmTv4zbH7N+HY7ZnzuQxu14W59/eGnb79u2aMWOG5s2bV9exKlm0aJHWrVunhg0b1nWUStatW6fg\n4GDNnDlTv/zyi+68807bHIAl6aOPPpIkLV++XFlZWXrhhRds9b0tKytTcnKy/Pz86jpKFSUlJTLG\n2O4f/ROysrL02WefadmyZTp27JiWLFlS15Hc+vbtq759+0qSJk2apLvuuovSfJrZ/bht12O2ZO/j\nNsdsz3HM9tyZPGbXy0s1zoVbwzZv3lxz5syp6xhV9OjRQ48++qgkyRij/9/e3bukGgZgGL/eU/RB\niwQ1tdgQNLcUFBT0MVXLGxmRgxEUQrSEGNQSRK4Noq3VVtFoNPaxuAQNNQQ2iCFFgUQugWc4IITn\nHDyK53mQ+/cX3IRdPL718jQ0NBhe9N3o6Cjb29sAZDIZ6w4vkUgEn89HZ2en6SklHh4eyOfzBAIB\n/H4/t7e3pid9c3V1RU9PD8FgkOXlZYaHh01PKnF3d8fj4yOzs7Omp9Qd27tta7PB7m6r2ZVTs6tX\ni2bX5RPnP10N+7dbrv63iYkJ0um06Rkl2tragF8/w9XVVdbW1gwvKtXY2EgoFOLi4oK9vT3Tc4pO\nT09pb29naGiI/f1903NKtLS0sLi4yMzMDE9PTywtLZFIJKz5vXh/fyeTyRCLxUin06ysrJBIJHAc\nx/S0ong8TjAYND2jLtnebVubDfZ3W82ujJpdvVo0uy6fOP/r1bDy3fPzM36/n+npaSYnJ03P+a1I\nJML5+Tmbm5t8fn6angPAyckJNzc3LCwscH9/TygU4uXlxfSsIq/Xy9TUFI7j4PV68Xg8Vu3zeDwM\nDg7S1NREd3c3zc3NvL29mZ5VlMvlSKVS9Pf3m55Sl9Tt6tjebTX736nZ1alVs+vy4KyrYSv3+vpK\nIBBgfX0d13VNzylxdnZGPB4HoLW1Fcdx+PHDjo/x0dERh4eHHBwc0NvbSyQSoaOjw/SsouPjY3Z3\ndwHIZrN8fHxYta+vr4/Ly0sKhQLZbJZ8Po/H4zE9qyiZTDIwMGB6Rt1Stytnc7fV7Mqp2dWpVbPr\n8uv82NgY19fX+Hy+4tWwUp5YLEYulyMajRKNRoFfL8XY8uLE+Pg44XCY+fl5vr6+2NjYsGab7VzX\nJRwOMzc3h+M47OzsWPVEb2RkhGQyieu6FAoFtra2rPpfzVQqRVdXl+kZdUvdrpzN3VazK6dmV6dW\nzcPQ4PEAAABVSURBVNaV2yIiIiIiZbDj7yUiIiIiIpbTwVlEREREpAw6OIuIiIiIlEEHZxERERGR\nMujgLCIiIiJSBh2cRURERETKoIOziIiIiEgZdHAWERERESnDT6saMEyT2IHEAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(12, 5))\n", "fig.suptitle(\"Function arities in Scala projects\")\n", "plt.subplot(121)\n", "plt.title(\"Akka 2.4\")\n", "plt.text(4, 10000, \"mean: %.2f std: %.2f\" % (np.mean(akka), np.std(akka)))\n", "n, bins, patches = plt.hist(akka, bins=range(8), alpha=0.6, histtype='bar')\n", "plt.subplot(122)\n", "plt.title(\"Spark 2.2\")\n", "plt.text(4, 8000, \"mean: %.2f std: %.2f\" % (np.mean(spark), np.std(spark)))\n", "n, bins, patches = plt.hist(spark, bins=range(8), alpha=0.6, histtype='bar')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(12, 5))\n", "fig.suptitle(\"Function arities in Scala projects\")\n", "plt.subplot(121)\n", "plt.title(\"Cats 1.0\")\n", "plt.text(4, 800, \"mean: %.2f std: %.2f\" % (np.mean(cats), np.std(cats)))\n", "n, bins, patches = plt.hist(cats, bins=range(8), alpha=0.6, histtype='bar')\n", "plt.subplot(122)\n", "plt.title(\"ScalaZ 8\")\n", "plt.text(4, 250, \"mean: %.2f std: %.2f\" % (np.mean(scalaz), np.std(scalaz)))\n", "n, bins, patches = plt.hist(scalaz, bins=range(8), alpha=0.6, histtype='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusions\n", "\n", "There are no conclusions. Just a general 'Aha, that's how it is'. I was surprised by the number of zero argument functions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Future work\n", "\n", "I'd like to gather similar statistics for Haskell projects.\n", "\n", "Please, contribute!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.14" } }, "nbformat": 4, "nbformat_minor": 1 }